Ошибка при выполнении файловой операции e1cib tempstorage

Сохранение pdf файла на диск

Я
   andryscha1c

07.10.22 — 12:38

При сохранении pdf файла на диск периодически получаем ошибку, в чем могут быть причины, явных причин нет, так как это происходит не со всеми файлами. Кто сталкивался?

Ошибка получения файлов

по причине:

Ошибка при выполнении файловой операции  ‘/e1cib/tempstorage/a6ecfa55-14fa-452b-8859-84f9e7b555fe?seanceId=1ce7618b-b2f9-48e9-8617-097488327ef4’. Значение данного типа невозможно преобразовать для передачи как файл. (Неопределено)

   SiAl-chel

1 — 07.10.22 — 12:57

(0) В ХранилищеЗначений — неопределено.

В коде надо перед сохранением файла проверять что сохраняется.

   Garykom

2 — 07.10.22 — 15:34

(0) кэш почистился

или у вас там кластер и поток на другой рабочий сервер улетел ))

   andryscha1c

3 — 07.10.22 — 18:20

(1) если в отладке смотреть все верно там Неопределено.

Решение помогло это https://forum.infostart.ru/forum9/topic222349/

   Garykom

4 — 07.10.22 — 19:24

(3) дык писал же что кэш почистился

временное хранилище оно чистится после окончания (не сразу да, еще какое то время доступно) если не указать идентификатор формы, тогда когда ее закрыть чистится

   Garykom

5 — 07.10.22 — 19:25

(4) *после окончания вызова сервера

   andryscha1c

6 — 07.10.22 — 23:36

(4) подумал про кэш тот что у пользователя, чистил не помогло.

   andryscha1c

7 — 07.10.22 — 23:36

(1) (5)

всем спасибо! вопрос закрыт.

  

andryscha1c

8 — 07.10.22 — 23:40

(5) да, там на моменте вопроса, когда путь сохранения файла указываешь, хранилище переходило в Неопределено. (4) это же вы имели ввиду?

    ПараметрыДиалога = Новый ПараметрыДиалогаПолученияФайлов;

    ПараметрыДиалога.Заголовок = НСтр(«ru = ‘Выберите путь для сохранения файла’; en = ‘Select the path to save the file'»);

    НачатьПолучениеФайлаССервера(ДанныеФайла.АдресВоВременномХранилище, СтруктураИмениФайла.Имя, ПараметрыДиалога);

Закон Брукера: Даже маленькая практика стоит большой теории.

ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку «Обновить» в браузере.

НачатьПолучениеФайловССервера

Автор Александр Мун, 24 фев 2021, 13:22

0 Пользователей и 1 гость просматривают эту тему.

Добрый день!
Помогите разобраться с НачатьПолучениеФайловССервера


&НаКлиенте
Процедура СкачатьФайл(Команда)
    ВыбранныеСтроки = Элементы.ТаблицаФайлы.ВыделенныеСтроки;
    Если ВыбранныеСтроки.Количество() = 0 Тогда
Возврат;
    КонецЕсли;
    ИмяФайловДляСкачивания = Новый Массив();
    Для Каждого Строка Из ВыбранныеСтроки Цикл
        ТекСтрока = ТабЧастьФалы.НайтиПоИдентификатору(Строка);
        ИмяФайла = ТекСтрока.Наименование + ТекСтрока.Формат;
        Адрес = ПодготовитьФайлНаСервере(ИмяФайла);
        ИмяФайловДляСкачивания.Добавить(Новый ОписаниеПередаваемогоФайла(ИмяФайла, Адрес));
    КонецЦикла;

    ПараметрыДиалога = Новый ПараметрыДиалогаПолученияФайлов;
    ПараметрыДиалога.Заголовок = "Сохранение фалов";
    ПараметрыДиалога.ВыборКаталога = Истина;
    НачатьПолучениеФайловССервера(ИмяФайловДляСкачивания, ПараметрыДиалога);
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПодготовитьФайлНаСервере(ИмяФайла)
    Путь = "D:IISDataBasescan" + ИмяФайла;
    Адрес = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(Путь));
    Возврат Адрес;
КонецФункции

В итоге если выбрать один файл, то все работает отлично, но если выбрать более одного, то получаю ошибку:

ЦитироватьОшибка при выполнении файловой операции  ‘/e1cib/tempstorage/4507f143-d20a-4ebb-88f7-e173739b45ea?seanceId=4c20eb1b-4703-4608-96be-addef04c2e46’. Значение данного типа невозможно преобразовать для передачи как файл. (Неопределено)

В тоже время переменные ИмяФайла и Адрес заполняются корректно, и пустых в массиве нет.


Рабочий код в общем, такой:


&НаКлиенте
Процедура СкачатьФайл(Команда)
ВыбранныеСтроки = Элементы.ТаблицаФайлы.ВыделенныеСтроки;
Если ВыбранныеСтроки.Количество() = 0 Тогда
Возврат;
КонецЕсли;
ИмяФайлов = Новый Массив();
Для Каждого Строка Из ВыбранныеСтроки Цикл
ТекСтрока = ТабЧастьФалы.НайтиПоИдентификатору(Строка);
ИмяФайла = ТекСтрока.Наименование + ТекСтрока.Формат;
ИмяФайлов.Добавить(ИмяФайла);
КонецЦикла;
       
ИмяФайловДляСкачивания = ПодготовитьФайлыНаСервере(ИмяФайлов);

ПараметрыДиалога = Новый ПараметрыДиалогаПолученияФайлов("Выберите каталог для сохранения файлов", Истина);
//ПараметрыАрхива = Новый ПараметрыПолученияАрхиваФайлов("files.zip", РежимПолученияАрхиваФайлов.ПолучатьАрхивВсегда);
НачатьПолучениеФайловССервера(ИмяФайловДляСкачивания, ПараметрыДиалога);

КонецПроцедуры

&НаСервереБезКонтекста
Функция ПодготовитьФайлыНаСервере(ИмяФайлов)

ИмяФайловДляСкачивания = Новый Массив();

Для Каждого ИмяФайла Из ИмяФайлов Цикл
Путь = "D:IISDataBasescan" + ИмяФайла;
Адрес = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(Путь));
ИмяФайловДляСкачивания.Добавить(Новый ОписаниеПередаваемогоФайла(ИмяФайла, Адрес));
КонецЦикла;

Возврат ИмяФайловДляСкачивания;

КонецФункции


Теги:

  • Форум 1С

  • Форум 1С — ПРЕДПРИЯТИЕ 8.0 8.1 8.2 8.3 8.4

  • Конфигурирование, программирование в 1С Предприятие 8

  • НачатьПолучениеФайловССервера

Рейтинг@Mail.ru

Rambler's Top100

Поиск

Обновлено 15.10.2020

1с логотип

Добрый день! Уважаемые читатели и гости одного из крупнейших IT блогов Рунета Pyatilistnik.org. В прошлый раз мы с вами разобрали, что из себя  представляет файловая система raw, и как ее исправить, чтобы восстановить свои данные. Двигаемся дальше и поговорим сегодня на тему  капризности 1С, точнее на капризную работу в рамках Windows Server 2016. Я рассмотрю причину и устранение периодически повторяющейся ошибки на сервере 1С 8.3 «Ошибка при выполнении файловой операции«. Ее я стал встречать после обновления с Windows Server 2012 R2 д 2016. Думаю мой опыт сэкономит вам часик серфинга по интернету.

Описание проблемы

В моей компании заканчивается обновление операционных систем у виртуальных серверов, с Windows Server 2012 R2 на Windows Server 2016, я понимаю, что поддержка первых еще будет несколько лет, но хочется уже не делать это в последний момент, а слегка опережать, да и уже давно пора стремиться к Windows Server 2019. Сервера 1С не были исключением, обновление происходило по быстрому варианты. Тут подразумевается накатывание более новой версии ОС по верх старой, тут мы убивали двух зайцев:

  1. Получали свежую версию ОС
  2. Оставляли весь софт на сервере, и не требовалась его переустановка

В случае чего всегда можно было откатиться из снапшота на момент проведения работ, благо ESXI 6.5 это помогает делать в два клика. Все прекрасно обновилось и сервер зажил новой жизнью. В какой-то момент при запуске клиента 1С 8.3 на RDS ферме, стала появляться ошибка:

Ошибка при выполнении файловой операции

Ошибка при выполнении файловой операции в 1С 8.3

Устранение проблемы

Начав изучать данный вопрос мы не стали откатываться к бэкапу, так как данная проблема возникала не постоянно, а через некоторые промежутки и была вызвана явно не переходом на более новую версию операционной системы. Подняв исторические данные в системе заявок, я нашел похожую, где решением ошибки был перенос базы данных 1С на другой диск. Меня это заинтересовало и я стал прикидывать, что же могло быть в той ситуации. Через минут 20 я нашел одну закономерность, что на всех проблемных хостах был установлен компонент Windows дедупликации, как раз на тех дисках, где располагались базы данных 1С.

Я для тестирования отключил дедупликацию и вернул все в исходное состояние, и о чудо ошибка при выполнении файловой операции больше не появлялась. Все те же действия я произвел и на остальных серверах.

запуск сборки мусора на томе

Вывод: Windows Дедупликация и 1С просто не совместимы друг с другом, это нужно запомнить

Из дополнительных методов я могу вам посоветовать еще очистку кэша 1С. Еще в на умных сайтах советуют на серверах, где используется 1С отключать протокол IPv6 на сетевых интерфейсах, но лично я не понимаю этого прикола, так как сама Microsoft советует по возможности этого не делать, в виду того, что очень многие ее сервисы и компоненты Windows в приоритете используют именно его, меньше будет проблем с DNS и Active Directory.

Вообще если у вас виртуальные сервера лежат на системе хранения данных, то у нее должна быть своя функция дедупликации и использовать лучше и правильнее ее. Если у вас есть другие варианты решения данной проблемы, то пишите их в комментариях. С вами был Иван Семин, автор и создатель IT портала Pyatilistnik.org.

Содержание:

1.       Об ошибке при выполнении файловой операции

2.       Устранение «Ошибки при выполнении файловой операции» в 1С 8.3   

1.    Об ошибке при выполнении файловой операции

Приветствую, коллеги! В данной статье будет описана ошибка «Ошибка при выполнении файловой операции», и подробно рассмотрены способы ее устранения.

Когда происходит обновление конфигураций в 1С 8, по завершении обновления, часто появляется ошибка, которая гласит «Ошибка при выполнении файловой операции – файл не содержит доступных обновлений».  

2.    Устранение «Ошибки при выполнении файловой операции» в 1С 8.3

Рассмотрим методы, при помощи которых, можно устранить ошибку при выполнении файловой операции в 1С.

Итак, первый способ – это попробовать сделать обновление при помощи файлов по обновлению вида «релиз 1с*.cfu». Если это не помогло, то можно попробовать обновить систему при помощи общего файла вида «полный релиз 1С*.cf».

Вторым способом будет проверка на соответствие общей версии системы 1С с минимальными требованиями версии конфигурации 1С, которую обновляем.

Третий способ устранения ошибки при выполнении файловой операции в 1С – более сложный, но действенный. Необходимо открыть в конфигурацию от поставщика в режиме Конфигуратора. Если ошибка всё так же появляется, то необходимо удалить конфигурацию поставщика, а затем опять установить. По сути, в данном варианте «вытягивается» последняя, рабочая версия данной конфигурации и обновление будет завершено без ошибок.

Рассмотрим подробнее третий способ. Пусть у нас уже есть некоторая конфигурация 1С KORG 1-ой версии, которая работает, но нужно поставить 2-ю версию, то есть обновить версию конфигурации 1С 8.3. Когда происходит обновление, всплывает ошибка «Ошибка при выполнении файловой конфигурации». Порядок действий в этом случае:

1.     скачать релиз 1С KORG с версией 1*.cf;

2.     копируем нашу базу данных;

3.     в конфигураторе, который соответствует обновляемой базе, переходим по пути: «Конфигурация → Поддержка → Настройки поддержки → Снять с поддержки». В случае, если кнопка для снятия с поддержки недоступна, необходимо сперва включить возможные изменения. После этого нужно дать согласие, если система 1С будет уточнять что-либо или подтверждать действия;

4.     Далее переходим по следующему пути: «Конфигурация → Сравнить и объединить с конфигурацией из файла…». Здесь необходимо выбрать файл «полный релиз 1С KORG версии 1*.cf»;

5.     Далее перед нами появится окно, в котором система 1С будет запрашивать постановление на учёт для поддержки, на это уведомление обязательно отвечаем согласием;

6.     В случае, если наша конфигурация является типовой, откроется окно по сравнению конфигураций. В нем обязательно убираем все «галочки». Далее последует объединение конфигураций;

7.     В новом окне кликаем на «Сохранить изменения»;

8.     Ещё раз сохраняем базу данных;

9.     Обновляем конфигурацию 1С стандартным способом.

Если всё сделать, согласно инструкции выше, то в вашей конфигурации 1С 8.3 «Ошибка при выполнении файловой операции» больше не возникнет. Спасибо за внимание!

Специалист компании «Кодерлайн»

Айдар Фархутдинов

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
&НаКлиенте
Процедура Печать(ИдентификаторКоманды, МассивОбъектов) Экспорт
    АдресВременногоХранилища="";    
    ПечатьНаСервере(ИдентификаторКоманды,МассивОбъектов,АдресВременногоХранилища);    
    НачатьПолучениеФайлаССервера(АдресВременногоХранилища);     
КонецПроцедуры
 
&НаСервере
Процедура ПечатьНаСервере(ИдентификаторКоманды,МассивОбъектов,АдресВременногоХранилища)
        
        Для Каждого ДокОбъект Из МассивОбъектов Цикл
        Данные = ПолучитьДанные(ДокОбъект);
        
        Если данные <> Неопределено Тогда
            Word = Новый COMОбъект("Word.Application");
            Макет = ПолучитьМакетСервер(ИдентификаторКоманды);
            временныйПуть = КаталогВременныхФайлов();
            имяВременногоФайла = временныйПуть + "gph.docx";
            имяВременногоФайлаPDF = временныйПуть + "gph.pdf";
            Макет.Записать(имяВременногоФайла);
            ТекДок = Word.Documents.ADD(имяВременногоФайла);
            
            ЗначениеВЗакладку(ТекДок,"НомерДоговора", Данные.НомерДоговора);
            ЗначениеВЗакладку(ТекДок,"НомерДоговора2", Данные.НомерДоговора);
            ЗначениеВЗакладку(ТекДок,"НомерДоговора3", Данные.НомерДоговора);
            ЗначениеВЗакладку(ТекДок,"ДатаДокумента", Формат(Данные.Дата, "ДЛФ=ДД"));
            ЗначениеВЗакладку(ТекДок,"ДатаДокумента2", Формат(Данные.Дата, "ДЛФ=ДД"));
            ЗначениеВЗакладку(ТекДок,"ДатаДокумента3 ", Формат(Данные.Дата, "ДЛФ=ДД"));
            ЗначениеВЗакладку(ТекДок,"ДатаДокумента4", Формат(Данные.Дата, "ДЛФ=ДД"));
            ЗначениеВЗакладку(ТекДок,"ПолноеНаименованиеОрганизации", Данные.НаименованиеПолное);
            ЗначениеВЗакладку(ТекДок,"ПолноеНаименованиеОрганизации2", Данные.НаименованиеПолное);
            ЗначениеВЗакладку(ТекДок,"КраткоеНаименованиеОрганизации", Данные.НаименованиеСокращенное);
            КраткоеФИОФизЛица = ФамилияИнициалы(Строка(Данные.ФизическоеЛицо));
            ЗначениеВЗакладку(ТекДок,"КраткоеФИОФизЛица", КраткоеФИОФизЛица);
            ЗначениеВЗакладку(ТекДок,"КраткоеНаименованиеОрганизации2", Данные.НаименованиеСокращенное);            
            ЗначениеВЗакладку(ТекДок,"АдресОрганизации", Данные.ЮрАдрес);
            ЗначениеВЗакладку(ТекДок,"ИНН", Данные.ИНН);
            ЗначениеВЗакладку(ТекДок,"КПП", Данные.КПП);
            ЗначениеВЗакладку(ТекДок,"КраткоеФИОФизЛица2", КраткоеФИОФизЛица);
            ЗначениеВЗакладку(ТекДок,"КратФИОФизЛица", КраткоеФИОФизЛица);
            ЗначениеВЗакладку(ТекДок,"ФИОФизЛица", Данные.ФизическоеЛицо);
            ЗначениеВЗакладку(ТекДок,"АдресФизЛица", Данные.АдресФизЛица);  
            ЗначениеВЗакладку(ТекДок,"ИННФЛ", Данные.ИННФЛ);            
            ЗначениеВЗакладку(ТекДок,"ДанныеПаспортаФизЛица", Данные.Паспорт);
                    
            
            ТекДок.Tables(2).Select();
            СписокПодарков = СтруктураПодарки(ДокОбъект);
            I = 1;
            Для Каждого Подарок Из СписокПодарков Цикл
                word.selection.InsertRowsBelow(1);
                word.selection.rows(1).cells(1).Range.Text = I;
                word.selection.rows(1).cells(2).Range.Text = Строка(Подарок.Значение.Название);
                word.selection.rows(1).cells(3).Range.Text = Строка(Подарок.Значение.Количество);
                word.selection.rows(1).cells(4).Range.Text = Строка(Подарок.Значение.ИмуществоЦенаПоступления);
                word.selection.rows(1).cells(5).Range.Text = Строка(Подарок.Значение.Сумма);
                I = I + 1;
            КонецЦикла;
            
            Range = ТекДок.Range();
            Table = Range.Tables(5);
            СтрокаОбразец = Table.Rows(1);
            Для Каждого Подарок из СписокПодарков Цикл
                НоваяСтрока = Table.Rows.Add(СтрокаОбразец);
                НоваяСтрока.Cells(1).Range.Text = Строка(Подарок.Значение.Название);                
            КонецЦикла;            
            СтрокаОбразец.Delete();    
            
            ТекДок.Fields.Update();
            //ТекДок.ExportAsFixedFormat(имяВременногоФайлаPDF , 17);
            
            //Word.ActiveWindow.View.ShowFieldCodes = False;
            //Word.Visible=Истина;
            ТекДок.SaveAs2(имяВременногоФайлаPDF,17);
            ТекДок.Close(Ложь);
                        
            Word.Application.Quit(0);
            
            
            ДвоичныеДанные = Новый ДвоичныеДанные(имяВременногоФайлаPDF);
            АдресВременногоХранилища = ПоместитьВоВременноеХранилище(ДвоичныеДанные,КаталогВременныхФайлов()+"gph.pdf");
 
        КонецЕсли;
    КонецЦикла;    
 
    
        
 
КонецПроцедуры

Программирование 1С 8.х для начинающих

Общие вопросы

Временное хранилище в 1С 8.2

  •  Печать 
  • E-mail

Передача файла с клиента на сервер и обратно.

В связи с новым подходом в программировании на платформе 8.2 возникла необходимость передачи данных между клиентом и сервером при этом прямая передача в виде параметров имеет ряд ограничений. И тогда был введен объект «Временное хранилище».

Чем полезно временное хранилище:

  • Не надо создавать объекты в конфигурации
  • Доступно и с сервера и с клиента
  • Можно записать любой объект

Временное хранилище это не объект конфигурации, а объект платформы поэтому для разработчика он выглядит как черный ящик. Можно туда положить что-то получив псевдоним(адрес) и получить из него что-то указав псевдоним(адрес). Но узнать что находится во временном хранилище и сколько нельзя. В ниже рассмотренных примерах помещение в хранилище происходит на клиенте, а чтение на сервере. Хотя можно передавать данные и в обратном направлении.

Синтаксис работы с хранилищем простой:

Передав параметром, данные которые хотим поместить(Посылка) и УникальныйИдентификатор получаем Адрес, по которому потом можно будет обратиться. Причем передаваемый идентификатор не является получаемым в последствии адресом. Вместо идентификатора можно передать строку Адреса, по которому и будет помещено наше значение, но это не любая строка! Строка Адреса выглядит примерно вот так «e1cib/tempstorage/ae5c5472-0266-4892-9073-20392dd5a6a6» .

УникальныйИдентификатор может быть как новый так и существующей формы, в последнем случае значение в хранилище будет храниться пока существует форма. Если не передать уникальный идентификатор, то при следующем серверном вызове значение уже будет удалено.

Чтобы получить из хранилища нужно только указать адрес:

Также можно удалить помещенный объект, используя адрес

Если помещаемые данные не являются объектами конфигурации, то для того чтобы их поместить нужно перевести в доступный тип — «ДвоичныеДанные»

Помещение в хранилище

Здесь мы сначала преобразуем файл в формат двоичных данных и только потом помещаем их в хранилище

Чтение из хранилища

В интернете есть множество примеров как на сервере записать полученные данные в базу, поэтому ниже приводится другой пример, когда файл полученный на сервере открывается для работы. В качестве такого файла используется XML.

Если мы имеем дело с файлами, то может оказаться удобным метод ПоместитьФайл. Он преобразует файл в двоичные данные и записывает их во ВременноеХранилище. При этом параметром можно настроить открытие диалогового окна для выбора файла. Сделаю оговорку, этот метод нельзя использовать на сервере.

В параметре Адрес, можно указать Адрес в который нужно записать файл, если нужен новый адрес, то нужно передать пустую строку.

Истина – открывает окно для выбора папки и имени файла, при значении Истина есть возможность открыть файл.»КопияФайла.xml» – Имя файла под которым будет сохранен файл.Адрес – это адрес в хранилище,ПолучитьФайл(Адрес,»Копияфайла.xml» , Истина);Чтобы сохранить файл из временного хранилища на Клиенте можно использовать метод

« Как стать программистом 1С » Язык 1С » ПодключитьРасширениеРаботыСФайлами 1С, УстановитьРасширениеРаботыСФайлами 1С, ПолучитьФайл 1С, ПоместитьФайл 1С, ПолучитьФайлы 1С, ПоместитьФайлы 1С, ПолучитьИзВременногоХранилища 1С, ПоместитьВоВременноеХранилище 1С

ПодключитьРасширениеРаботыСФайлами 1С, УстановитьРасширениеРаботыСФайлами 1С, ПолучитьФайл 1С, ПоместитьФайл 1С, ПолучитьФайлы 1С, ПоместитьФайлы 1С, ПолучитьИзВременногоХранилища 1С, ПоместитьВоВременноеХранилище 1С

В веб-клиенте работа с файлами (чтение/запись) производится только на сервере.

Функция ПодключитьРасширениеРаботыСФайлами() используется в веб-клиенте для включения разрешения работы с файлами (поддерживают не все браузеры), если неудачно – возвращает Ложь. Перед первым использованием функции в этом браузере на этом комьютере требуется установить расширение работы с файлами с помощью функции УстановитьРасширениеРаботыСФайлами()

Функции
• ПоместитьФайл(АдресКудаПомещен, ИмяФайла)
• ПолучитьФайл(АдресОткуда)
• ПоместитьФайлы(МассивИменФайлов, МассивАдресовКудаПомещены)
• ПолучитьФайлы(МассивАдресовОткуда)
позволяют передвать файлы между клиентом и сервером.

Функции ПолучитьИзВременногоХранилища() и ПоместитьВоВременноеХранилище() позволяют получить данные файла из временного хранилища сервера, куда они были помещены с помощью ПолучитьФайл() и ПоместитьФайл().

На клиенте файлы располагаются где требуется в файловой системе. На сервере файлы помещаются в «хранилище» — временный каталог файлов сервера 1С. Напрямую с хранилищем работать нельзя – требуется получить значение из хранилища с помощью функции ПолучитьИзВременногоХранилища() и сохранить во временный файл на сервере с помощью функции ПолучитьИмяВременногоФайла()

Данные функции можно использовать не только в веб-клиенте, но и в остальных клиентах для оптимизации работы с файлами.

При использовании данных функций в веб-клиенте необходимо заранее выполнить функцию ПодключитьРасширениеРаботыСФайлами()

Обратите внимание на различные варианты поведения системы при выполнения данных функций. В некоторых браузерах выполнение кода программы прерывается до закачки файлов на сервер (например, пользователю выводится окно с процентами закачки файла), а в некоторых – выполнение программы продолжается, а загрузка производится фоново.

Для примеров использован текстовый файл на локальной «клиентской» машине по адресу «D:Текстовый файл.txt» со следующим содержимым:
Привет, мир!
Конец файла

Пример 1. Чтение текстового файла на сервере. Имя файла выбирает пользователь/указывает программист

//если подключить не удалось — требуется установить его (в первый раз)
Если не Результат Тогда
//устанавливаем
УстановитьРасширениеРаботыСФайлами();
//если не удалось установить — то повторный вызов подключения будет неудачный
Если не ПодключитьРасширениеРаботыСФайлами() Тогда
//сообщаем об ошибке и прерываем работу программы
ВызватьИсключение «Ошибка. Ваш браузер не поддерживает работу с файлами.»;
КонецЕсли;
КонецЕсли;
#КонецЕсли

//перемещаем файл на сервер во «внутреннее хранилище сервера»
ВнутреннийАдресСервера = «»;

//если имя файла выбирает пользователь в стандартном диалоговом окне Windows
Результат = ПоместитьФайл(ВнутреннийАдресСервера);

//если имя файла указывает программист напрямую
//Результат = ПоместитьФайл(ВнутреннийАдресСервера, «D:Текстовый файл.txt»,, Ложь);

Если не Результат Тогда
ВызватьИсключение «Ошибка. Не удалось передать файл на сервер. Операция прервана.»;
КонецЕсли;
Сообщить(ВнутреннийАдресСервера);

//переводим выполнение на сервер вызовом серверной процедуры
ЧтениеФайла(ВнутреннийАдресСервера);
КонецПроцедуры

//начинаем работать с файлом

//узнаем размер файла в байтах (и переведем размер в мегабайты)
Файл = Новый Файл(ИмяВременногоФайла);
Сообщить(Строка(Окр(Файл.Размер() /1024 /1024, 2)) + «Мб»);

//прочитаем первую строку файла
ТекстовыйФайл = Новый ЧтениеТекста(ИмяВременногоФайла);
ТекстПервойСтрокиФайла = ТекстовыйФайл.ПрочитатьСтроку();
Сообщить(ТекстПервойСтрокиФайла);

1с возвращает:
e1cib/tempstorage/ad728cdf-fce4-4c50-b348-87d5265a57a6
C:UsersИмяПользователяWindowsAppDataLocalTempv8_BE51_59.tmp
0Мб
Привет, мир!

Пример 2. Передача на сервер нескольких файлов. Имена файлов выбирает пользователь/указывает программист

&НаКлиенте
Процедура КнопкаЧтениеФайла(Команда)

//для веб-клиента требуется дополнительно подключение расширения работы с файлами
#Если ВебКлиент Тогда
Результат = ПодключитьРасширениеРаботыСФайлами();

//если подключить не удалось — требуется установить его (в первый раз)
Если не Результат Тогда
//устанавливаем
УстановитьРасширениеРаботыСФайлами();
//если не удалось установить — то повторный вызов подключения будет неудачный
Если не ПодключитьРасширениеРаботыСФайлами() Тогда
//сообщаем об ошибке и прерываем работу программы
ВызватьИсключение «Ошибка. Ваш браузер не поддерживает работу с файлами.»;
КонецЕсли;
КонецЕсли;
#КонецЕсли

//перемещаем файл на сервер во «внутреннее хранилище сервера»
МассивВнутреннихАдресовСервера = Новый Массив;

//если список имен файлов выбирает пользователь
Результат = ПоместитьФайлы(,МассивВнутреннихАдресовСервера);

//если список имен файлов указывает программист напрямую
//МассивВнутреннихАдресовСервера = Новый Массив;
//МассивИменФайлов = Новый Массив;
//МассивИменФайлов.Добавить(Новый ОписаниеПередаваемогоФайла(«D:Текстовый файл.txt», «»));
//Результат = ПоместитьФайлы(МассивИменФайлов, МассивВнутреннихАдресовСервера,, Ложь);

Если не Результат или МассивВнутреннихАдресовСервера.Количество() = 0 Тогда
ВызватьИсключение «Ошибка. Не удалось передать файл на сервер. Операция прервана.»;
КонецЕсли;

Для каждого ИмяФайла из МассивВнутреннихАдресовСервера Цикл
Сообщить(ИмяФайла.Хранение);

//переводим выполнение на сервер вызовом серверной процедуры
//реализацию этой функции см. в примере 1
ЧтениеФайла(ИмяФайла.Хранение);
КонецЦикла;

Пример 3. Запись нового файла на сервере с последующей передачей на клиент. Имя файла выбирает пользователь/формирует программист

&НаКлиенте
Процедура КнопкаЧтениеФайла(Команда)

//для веб-клиента требуется дополнительно подключение расширения работы с файлами
#Если ВебКлиент Тогда
Результат = ПодключитьРасширениеРаботыСФайлами();

//если подключить не удалось — требуется установить его (в первый раз)
Если не Результат Тогда
//устанавливаем
УстановитьРасширениеРаботыСФайлами();
//если не удалось установить — то повторный вызов подключения будет неудачный
Если не ПодключитьРасширениеРаботыСФайлами() Тогда
//сообщаем об ошибке и прерываем работу программы
ВызватьИсключение «Ошибка. Ваш браузер не поддерживает работу с файлами.»;
КонецЕсли;
КонецЕсли;
#КонецЕсли

//вызов серверной процедуры формирования файла, она возвращает «внутренний адрес», передаем его параметром
//куда сохранил пользователь файл и сохранил ли — мы не знаем
//пользователь всегда подтверждает разрешение на получение файла
ПолучитьФайл(ФормированиеФайла());

//вариант с сохранением файла без подтверждения пользователя, имя файла указываем сразу, в веб-клиенте работать не будет
//ПолучитьФайл(ФормированиеФайла(), «D:Текстовый файл.txt», Ложь);

&НаСервере
Функция ФормированиеФайла()

//получаем файл из «временного хранилища сервера» и сохраняем во временный файл на сервере
ИмяВременногоФайла = ПолучитьИмяВременногоФайла();

//начинаем работать с файлом

//записываем текст в файл
ТекстовыйФайл = Новый ЗаписьТекста(ИмяВременногоФайла);
ТекстовыйФайл.ЗаписатьСтроку(«Привет, мир!»);
ТекстовыйФайл.ЗаписатьСтроку(«Конец файла»);
ТекстовыйФайл.Закрыть();

//помещаем во «временное хранилище сервера», система вернет «внутренний адрес»
Возврат ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ИмяВременногоФайла));

v8: Получение данных из ХралищаЗначений

Данные в хранилще есть. В элемент они попадают, но при открытии элемента картикнка не видна, что сделал не так.

ДанныеАдрес (Строка) Реквизит элемента спр.

&НаСервереПроцедура ОбработкаВыбораПодборНаСервере(ВыбранноеЗначение) ТаблицаФайлов = ПолучитьИзВременногоХранилища(ВыбранноеЗначение.АдресХЗ); Для Каждого СтрокаФайл Из ТаблицаФайлов Цикл Файл = Новый Файл(СтрокаФайл.Значение.Имя); ХранимыйФайл = Справочники.ХранилищеДанныхСправочники.СоздатьЭлемент(); ХранимыйФайл.СсылкаНаОбъект = СсылкаНаОбъект; ХранимыйФайл.Наименование = Файл.Имя; ХранимыйФайл.ДанныеПуть = Файл.Путь; ХранимыйФайл.ДанныеТекущаяДата = ТекущаяДата();

// . ХранимыйФайл.ДанныеХЗ = Новый ХранилищеЗначения(СтрокаФайл.Значение.Хранение, Новый СжатиеДанных()); ХранимыйФайл.Записать(); КонецЦикла; Элементы.Список.Обновить(); КонецПроцедуры

Как-то у тебя сложно или я чего-то не понял, вообщем так:

Действия по установке (загрузке) картинки и ее отображения на форме нашего справочника Сотрудника необходимо выполнять на стороне сервера. Это особенность работы системы с файлами. Именно для этого в тексте процедуры ДобавитьКартинку осуществляется вызов другой процедуры УстановитьКартинку(), которая будет выполняться на сервере.

В программном модуле, ниже процедуры ДобавитьКартинку(Команда) пишем следующий программный код:

Чтобы при открытии картинка отобразилась:

1) я в ообщей форме помещаю данные в ХранилищеЗначений. (данные заполнены)

2) При нажатии кпонки на общей форме создаются элементы справочника. Все данные из хранилища заполняются в элементе спр, а вот с картикой проблема. Я сейчас еще разок книгу читану. Где то рядом брожу.(Процедура ОбработкаВыбора)

&НаСервереПроцедура ОбработкаВыбораПодборНаСервере(ВыбранноеЗначение) ТаблицаФайлов = ПолучитьИзВременногоХранилища(ВыбранноеЗначение.АдресХЗ); Для Каждого СтрокаФайл Из ТаблицаФайлов Цикл Файл = Новый Файл(СтрокаФайл.Значение.Имя); ХранимыйФайл = Справочники.ХранилищеДанныхСправочники.СоздатьЭлемент();

.ХранимыйФайл.ДанныеХЗ = Новый ХранилищеЗначения(СтрокаФайл.Значение.Хранение, Новый СжатиеДанных());

Если написать (выбараю 2 картинки)

Этот алгоритм не отрабатывает..

ХранимыйФайл.ДанныеХЗ = Новый ХранилищеЗначения(СтрокаФайл.Значение.Хранение, Новый СжатиеДанных());

Да нет управляемая.

Для того что бы избавиться от модальности я решил передавать данные через хранилище.

Вот алгорит выгрузки из общей формы

блин. да что с синтаксисом ;( капец какой-то

E_Migachev, объясни как нужно вставлять наверно с видео

(12) да, напишу вечерком

для bell:

в управляемых формах принцип следующий:

Простой пример справочника с картинкой

Отображения картинки текущего элемента списка

В новой версии платформы 1С 8.2 работа с картинками производится отличным от предыдущих платформ методом, разобраться с которым без примеров сложно. Подробно можно прочитать в книге Разработка управляемого интерфейса глава 3.18. Работа с файлами и картинками. Примеры данной статья являются переработанными и дополненными примерами книги.

Картинка как и раньше (8.1) хранится в базе в реквизите (реквизите ТЧ) с типом ХранилищеЗначения, но записать данные в реквизит с этим типом обычном способом нельзя, запись производится в предопределенной процедуре «ПередЗаписьюНаСервере».

Для отображения картинки создается элемент формы поле картинки, данными для которого, является реквизит формы (с типом Строка(0)), содержащий навигационную ссылку на картинку (можно получить функцией «ПолучитьНавигационнуюСсылку») или адрес во временном хранилище (пол.ф. «ПоместитьФайл»)

Ниже приведен код части примера:

В книге Разработка управляемого интерфейса используется дополнительно поле для сохранения имени файла оно необходимо если нужно чтобы программа запомнила из какой папки пользователь предпочитает добавлять или выгружать файлы.

В процедуре ПриЗаписиНаСервере на первый взгляд можно убрать код удаление из временного хранилища т.к. ф. ПоместитьФайл вызывается с параметром УникальныйИдентификатор формы т.е. объект хранилища будет существовать до закрытия формы, но рекумендуется освобождать ресурсы сразу (если пользователь загрузит картинку и нажмет записать, форма не закрыта и объект будет существовать до закрытия).

Понравилась статья? Поделить с друзьями:
  • Ошибка при выполнении файловой операции config
  • Ошибка при выполнении запроса post к ресурсу e1cib login файл не является файлом базы данных
  • Ошибка при выполнении файловой операции 1с при открытии файла
  • Ошибка при выполнении файловой операции 1с неверное имя пользователя или пароль
  • Ошибка при выполнении запроса post к ресурсу e1cib login файл базы данных поврежден