Отправка документа без сохранения в файл (ПотокВПамяти)

21.08.23

Интеграция - Внешние источники данных

Бывали задачи, когда необходимо печатную форму из 1С отправить по http во внешний сервис. Желательно в формате pdf.

Но зачастую я вижу вот такую реализацию этого процесса "пруф"

ТабДок = Новый ТабличныйДокумент;
// какое-то заполнение табличного документа
ИмяФайла = ПолучитьИмяВременногоФайла("pdf");
ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.PDF);
ДанныеФайла = Новый ДвоичныеДанные(ИмяФайла);
// формирование http запроса или сервис ответа
ЗапросИлиОтвет.УстановитьТелоИзДвоичныхДанных(ДанныеФайла);

Потом начинаются обвязки по удалению временных файлов, или хранение файлов какой-то специальной директории. Мне все это казалось неким костылем. И я решил посмотреть в сторону непопулярного объекта, который очень редко можно встретить в коде, а именно ПотокВПамяти

Но для начала, посмотрим в синтакс-помощник по методу Записать объекта ТабличныйДокумент. Мы увидим что метод перегружен и имеет 2 варианта синтаксиса: В файл и В Поток. Разница будет в 1 параметре, либо мы передаем строку с указанием пути до файла, либо передадим объект поток. Как это выглядит в коде?

Поток = Новый ПотокВПамяти;
ТабДок.Записать(Поток, ТипФайлаТабличногоДокумента.PDF);

Ну вот, ничего сложного, записали, и что делать дальше? Дальше мы обращаемся к синтакс-помощнику и ищем там ПотокВПамяти. В графе "методы" последним методом будет указан "ЗакрытьИПолучитьДвоичныеДанные". Читаем описание метода:

Возвращает экземпляр объекта ДвоичныеДанные, содержащего данные, записанный в поток

Запись в поток есть? Есть. Пробуем получить данные

ДанныеФайла = Поток.ЗакрытьИПолучитьДвоичныеДанные();

Далее нам остается только положить двоичные данные по месту назначения. 

ТабДок = Новый ТабличныйДокумент;
// какое-то заполнение табличного документа
Поток = Новый ПотокВПамяти;
ТабДок.Записать(Поток, ТипФайлаТабличногоДокумента.PDF);
ДанныеФайла = Поток.ЗакрытьИПолучитьДвоичныеДанные();
// формирование http запроса или сервис ответа
ЗапросИлиОтвет.УстановитьТелоИзДвоичныхДанных(ДанныеФайла);
// а еще я хочу чтобы браузер понимал что я отправляю ему именно pdf файл
ЗапросИлиОтвет.Заголовки.Вставить("Content-Type", "application/pdf");

Магия сработала. Мы сформировали документ в формате Табличного Документа (любой отчет или печ. форма), преобразовали его в pdf, оттуда в двоичные данные и сделали все это в оперативной памяти, не засоряя дисковое пространство.  

ВНИМАТЕЛЬНО ЧИТАЙТЕ СИНТАКС-ПОМОЩНИК! В нем вы можете увидеть, что через поток вы можете записывать данные только при использовании форматов txt, pdf, ods, mxl7, mxl, xlsx, docx, ansitxt. Также недоступна запись табличного документа в поток при использовании веб клиента. 

См. также

Перенос данных из Парус 8 в ЗГУ 3

Зарплата Внешние источники данных Бюджетный учет Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 8 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

84000 руб.

19.08.2020    22679    19    1    

22

Экстрактор данных 1С в BI - выгрузка данных из 1С в BI-аналитику

Внешние источники данных Платформа 1С v8.3 Управляемые формы Анализ и прогнозирование Конфигурации 1cv8 Узбекистан Беларусь Кыргызстан Молдова Россия Казахстан Платные (руб)

Готовое решение для автоматической выгрузки данных из 1С 8.3 в базу данных ClickHouse, PostgreSQL или Microsoft SQL для работы с данными 1С в BI-системах. «Экстрактор данных 1С в BI» работает со всеми типовыми и нестандартными конфигурациями 1С 8.3 и упрощает работу бизнес-аналитиков. Благодаря этому решению, специалистам не требуется быть программистами, чтобы легко получать данные из 1С в вашей BI-системе.

15.11.2022    14043    12    SQV0    47    

30

Перенос данных из Парус 10 в ЗГУ ред.3

Внешние источники данных Кадровый учет Файловый обмен (TXT, XML, DBF), FTP Перенос данных 1C Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 10 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

60000 руб.

05.10.2022    9354    9    8    

11

Перенос данных из Парус 7.хх в ЗГУ ред.3

Внешние источники данных Зарплата Бюджетный учет Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 7.хх учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

24000 руб.

24.04.2017    48958    97    163    

86

Перенос данных из Парус 10 (Торнадо) в ЗГУ ред.3 через Excel

Внешние источники данных Загрузка и выгрузка в Excel Зарплата Бюджетный учет Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате из Парус 10(Торнадо) учреждений через файлы Excel в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ). В принципе, обработка может быть использована для загрузки из файлов Excel, полученных из любых информационных систем.

24000 руб.

16.11.2018    30154    20    31    

21

Загрузка в БГУ из УРМ "Криста"

Внешние источники данных Банковские операции Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия государственного учреждения Россия Бухгалтерский учет Платные (руб)

Обработки для загрузки данных из УРМ "Криста" в бухгалтерию государственного учреждения редакция 2.0. Есть Демо доступ на вкладке Бесплатные файлы на 1 месяц со дня получения демонстрационного ключа регистрации. Поддерживает ПО "Web-исполнение" от НПО "Криста".

4800 руб.

19.06.2013    38696    136    90    

30

Загрузка спецификаций в УНФ из системы Базис-мебельщик

Производство готовой продукции (работ, услуг) Внешние источники данных Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 Лесное и деревообрабатывающее хозяйство Россия Управленческий учет Платные (руб)

Обработка предназначена для загрузки файлов, выгруженных из системы Базис-мебельщик, в справочник "Спецификации" для последующих процессов учета и диспетчирования полуфабрикатов и изделий.

7200 руб.

24.06.2021    19307    51    50    

28
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Andreyyy 75 22.08.23 06:41 Сейчас в теме
По опыту была проблема (а может ограничения) на более ранних версиях - в PDF через поток не сохранялся табличный документ.
5. mikl79 118 19.09.23 20:01 Сейчас в теме
(1), потверждаю платформа 8.3.23.1739, обычные формы УПП
ТабДок.Записать(Поток, ТипФайлаТабличногоДокумента.PDF);
в этот момент получается файл урезанный, например,
нормальный файл весит 242 кб, а урезанный 218 кб.
поэтому файл битый

причем, перепробовал разные форматы PDF, PDF_A_1, PDF_A_2, PDF_A_3

причем, например, ТабДок.Записать(Поток, ТипФайлаТабличногоДокумента.DOCX);
отрабатывает нормально
6. mikl79 118 19.09.23 20:37 Сейчас в теме
(5), неверно сделал вывод, оказывается

ДанныеФайла = Поток.ЗакрытьИПолучитьДвоичныеДанные();

вот здесь двоичные данные получаются урезанные
7. mikl79 118 20.09.23 12:46 Сейчас в теме
(6), опять неправильно сделал вывод, извините )))
строка Base64 получается нормальная!

просто у меня при запихивании её в json убираются Символы.ПС
2. starik-2005 3040 22.08.23 10:44 Сейчас в теме
(1) Про не сохранялся - не помню, а вот загрузить из потока в табличный документ эксель я не мог раньше - валилось с обшибками. Потом не пробовал уже )))
ЗЫ: Вообще написал в свое время загрузку нового экселя из архива через XDTO - там все работало, но нужно было разархивировать файл...
3. GenAcid 22.08.23 12:50 Сейчас в теме
(2) Проблема есть до сих пор и описана в синтакс-помощнике "При чтении из потока допускается использование только следующих форматов: MXL, MXL7, ODS."
Andreyyy; cleaner_it; +2 Ответить
4. Andreyyy 75 30.08.23 04:23 Сейчас в теме
(2) Да, скорее эта проблема. Помню что не хватало функциональности Потока.
8. FReIM 8 26.11.23 17:23 Сейчас в теме
Запись в поток не работает на 8.3.13.1644 для xlsx, для pdf работает. Но pdf корежит.
Оставьте свое сообщение