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

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. Также недоступна запись табличного документа в поток при использовании веб клиента. 

См. также

Автоматическая многопоточная выгрузка данных 1С 8.3 в БД Clickhouse (для работы с данными 1С в BI-системах)

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

Готовое решение для автоматизированной выгрузки данных из 1С 8.3, а также MS Excel в базу данных ClickHouse для работы с данными 1С в Yandex Datalens, Visiology, Apache Superset (и не только) - "Экстрактор данных 1С в BI". Решение отлично работает со всеми типовыми (и не только) конфигурациями 1С 8.3 для управляемых форм. Gозволяет автоматизировать работу бизнес-аналитика по ежедневной выгрузке данных из 1С в БД ClickHouse для последующей работы с этой БД в Yandex Datalens/ Система полностью автоматизирует работу с хранилищем данных в БД Clickhouse. Не надо быть программистом, чтобы одной кнопкой получать любые данные из 1С в Yandex Datalens

160000 руб.

15.11.2022    11317    10    47    

23

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

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

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

84000 руб.

19.08.2020    21151    16    0    

18

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

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

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

84000 руб.

07.06.2021    12354    1    0    

2

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

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

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

24000 руб.

24.04.2017    47496    92    153    

84

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

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

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

60000 руб.

05.10.2022    8649    5    8    

8

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

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

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

24000 руб.

16.11.2018    29539    18    31    

19

Перенос начальных остатков из Парус 7.71 в БГУ

Внешние источники данных Взаиморасчеты Учет ОС и НМА Логистика, склад и ТМЦ Бюджетный учет Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия государственного учреждения Государственные, бюджетные структуры Россия Бюджетный учет Платные (руб)

Перенос словарей и начальных остатков из ПП Парус-Бухгалтерия Бюджет 7.71 в 1Сv8 БГУ2. Заполнение словарей и документов по вводу начальных остатков. Не требуется установка ПП Парус7. Возможна дозагрузка. Внешняя обработка с открытым кодом.

9000 руб.

08.12.2011    80558    123    123    

143

Загрузка данных из F3 TAIL 3 (еФарма 2) в 1С: Бухгалтерия 3.0 (базовая, ПРОФ, КОРП)

Розничная торговля Внешние источники данных Файловый обмен (TXT, XML, DBF), FTP Бухгалтерский учет 1С:Бухгалтерия 3.0 Фармацевтика, аптеки Россия Бухгалтерский учет Платные (руб)

Внешняя обработка загрузки данных из файла-выгрузки, сформированного в программе F3 TAIL версии 3.4 (и выше) или еФарма версии 2.1, в базу конфигурации 1С: Бухгалтерия предприятия 8, ред. 3.0 (базовая, ПРОФ, КОРП).

13200 руб.

19.12.2016    44382    81    101    

66
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Andreyyy 72 22.08.23 06:41 Сейчас в теме
По опыту была проблема (а может ограничения) на более ранних версиях - в PDF через поток не сохранялся табличный документ.
5. mikl79 117 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 117 19.09.23 20:37 Сейчас в теме
(5), неверно сделал вывод, оказывается

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

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

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