Имя: Пароль:
1C
1С v8
Изменить файл в функции НачатьПомещениеФайлаНаСервер()
0 АЛьФ
 
15.01.25
11:43
Есть вывод и перемещение файла на сервер с помощью метода НачатьПомещениеФайлаНаСервер(). Код такой:

    ПараметрыДиалога = Новый ПараметрыДиалогаПомещенияФайлов;
    ПараметрыДиалога.МножественныйВыбор = Ложь;
    ПараметрыДиалога.Заголовок = "Выберите файл со сканом счета";
    ПараметрыДиалога.Фильтр = "Файл PDF (*.pdf)|*.pdf|Файл EXCEL (*.xls)|*.xls|";
    
    ЗавершениеОбратныйВызов = Новый ОписаниеОповещения("ЗавершениеОбратныйВызов", ЭтотОбъект);
    ПрогрессОбратныйВызов = Новый ОписаниеОповещения("ПрогрессОбратныйВызов", ЭтотОбъект);
    ПередНачаломОбратныйВызов = Новый ОписаниеОповещения("ПередНачаломОбратныйВызов", ЭтотОбъект);
    НачатьПомещениеФайлаНаСервер(ЗавершениеОбратныйВызов, ПрогрессОбратныйВызов, ПередНачаломОбратныйВызов,, ПараметрыДиалога, ЭтаФорма.УникальныйИдентификатор);

Хотелось бы при выборе файла в формате xls конфертировать его в pdf. Примерно понятно как это сделать: загрузить в табличный документ и сохранить во временный файл в нужном формате. Сунулся в оповещение ПередНачаломОбратныйВызов(), туда приходит первым параметром выбранный файл, но в типе СсылкаНаФайл с кучей параметров. Можно как-то в этом событии подменить перемещаемый файл или надо городить свой выбор файла и в функцию НачатьПомещениеФайлаНаСервер() передавать уже сконвертированный временный файл?
1 Волшебник
 
15.01.25
12:05
конфертируйте в фоновом задании уже после помещения файла в базу
2 АЛьФ
 
15.01.25
12:13
2(1) Т.е. ты предлагаешь переместить файл на сервер, поместить его в хранилище, прописать адрес в справочник, сохранить. Потом фоновым заданием перебрать все элементы справочника, извлечь файл из хранилища, проверить формат, в случае необходимости переконвертировать его в нужный формат, поместить новый файл в хранилище, записать в справочник новый адрес.
Я правильно понял?
3 Волшебник
 
15.01.25
12:16
(2) да
4 Fedor-1971
 
15.01.25
12:32
(2) Можно и сразу сконвертировать, если нужно
Процедура ЗавершениеОбратныйВызов(Описание, допПараметры) экспорт
  Если НЕ Описание = Неопределено тогда
    рез = СохранитьфайлНаСервере(Описание.Адрес, Описание.СсылкаНаФайл.Расширение);
  КонецЕсли;
КонецПроцедуры

И в
Процедура СохранитьфайлНаСервере(парАдрес, парРасширение)
    ИмяФайла = ПолучитьИмяВременногоФайла(парРасширение);
    Файл = ИмяФайла;
    
    ДвоичныеДанные = ПолучитьИзВременногоХранилища(парАдрес);
    ДвоичныеДанные.Записать(ИмяФайла);
    
    ТаблДок = Новый ТабличныйДокумент;
    ТаблДок.Прочитать(Файл, СпособЧтенияЗначенийТабличногоДокумента.Значение);

дальше сохрани в PDF
5 АЛьФ
 
15.01.25
12:31
2(4) И получается, что у меня на сервер отправляется один файл, помещается в хранилище, потом я его извлекаю, конвертирую, сохраняю в хранилище и уже этот адрес в хранилище записываю себе в справочник? И в хранилище у меня двойные не нужные данные?
Так вопрос и был в том, чтобы этого избежать и на сервер не тащить лишние данные. Тем более не тащить их в хранилище.
6 Волшебник
 
15.01.25
12:34
(5) удалите лишние после конвертации
7 Fedor-1971
 
15.01.25
12:35
(5) Помещаешь в хранилище формы (у тебя в коде ЭтаФорма.УникальныйИдентификатор), после конвертации пишешь в хранилище справочника
В твоём раскладе файл будет жить в хранилище до закрытия формы если не сохранишь его куда нужно
8 АЛьФ
 
15.01.25
12:46
2(7) Спасибо. Пришлось пойти именно этим путем.
AdBlock убивает бесплатный контент. 1Сергей