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

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

См. также

SALE! 15%

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

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

28500 руб.

15.11.2022    20903    20    49    

38

Поиск данных Внешние источники данных Системный администратор Программист Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Если вам нужно автоматически генерировать представления (view) к вашей базе данных 1С (есть две версии - для СУБД MS SQL Server и для PostgreSQL) по структуре метаданных 1С, то вам необходима данная обработка. Наш "Генератор View", другими словами - это коннектор к данным 1С для Power BI - незаменимый помощник для бизнес-аналитиков, работающих с базами 1С из Yandex Datalens/Power BI и т.д. Работает для обычных и управляемых форм под 1С 8.3

230000 руб.

31.07.2020    13814    13    48    

25

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

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

48000 руб.

24.04.2017    51197    101    165    

89

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

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

60000 руб.

05.10.2022    10872    13    8    

15

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

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

84000 руб.

19.08.2020    25172    22    1    

25

Внешние источники данных Облачные сервисы, хостинг Программист Бизнес-аналитик Пользователь Руководитель проекта Платформа 1С v8.3 8.3.14 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Бытовые услуги, сервис Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Гостиничный бизнес Рестораны, кафе и фаст-фуд Реклама, PR и маркетинг Легкая промышленность, мода и одежда Управленческий учет Платные (руб)

Расширение позволяет автоматизировать управление картами лояльности и взаимодействие с покупателями при помощи интеграции корпоративной системы 1С и специализированного облачного сервиса "CARDPR". Автоматическая онлайн синхронизация сведений о владельце электронной карты лояльности и баланса бонусных баллов на карте между корпоративной системой 1С и мобильным устройством покупателя. Оповещение покупателя об изменении баланса его электронной карты лояльности и проведении каких-либо маркетинговых акций в компании при помощи рассылки push-сообщений на его мобильное устройство.

36000 руб.

20.07.2023    3247    1    2    

11

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

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

10200 руб.

24.06.2021    20775    57    53    

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

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

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

просто у меня при запихивании её в json убираются Символы.ПС
2. starik-2005 3090 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 9 26.11.23 17:23 Сейчас в теме
Запись в поток не работает на 8.3.13.1644 для xlsx, для pdf работает. Но pdf корежит.
9. Поручик 4692 02.07.24 00:39 Сейчас в теме
В нашей конфигурации используется в нескольких местах.
Оставьте свое сообщение