Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
14 дек 2024, 04:53

Создание внешней обработки "Комплект документов"

Автор frommm330, 10 янв 2022, 11:29

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

frommm330

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

МассивТабдоков = Новый Массив;
СсылкаВнешнейПФ    = Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию("Акт1", Истина);
ОбработкаВнешнейПФ = ДополнительныеОтчетыИОбработки.ОбъектВнешнейОбработки(СсылкаВнешнейПФ);
МассивТабдоков.Добавить(ОбработкаВнешнейПФ.СформироватьПечатнуюФормуМХ1(МассивОбъектов, ОбъектыПечати));

СсылкаВнешнейПФ    = Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию("Акт2", Истина);
ОбработкаВнешнейПФ = ДополнительныеОтчетыИОбработки.ОбъектВнешнейОбработки(СсылкаВнешнейПФ);
МассивТабдоков.Добавить(ОбработкаВнешнейПФ.СформироватьПечатнуюФормуМХ1(МассивОбъектов, ОбъектыПечати));

СсылкаВнешнейПФ    = Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию("Акт3", Истина);
ОбработкаВнешнейПФ = ДополнительныеОтчетыИОбработки.ОбъектВнешнейОбработки(СсылкаВнешнейПФ);
МассивТабдоков.Добавить(ОбработкаВнешнейПФ.СформироватьПечатнуюФормуМХ1(МассивОбъектов, ОбъектыПечати));



ТекущийИндекс = МассивТабдоков.ВГраница();

Пока ТекущийИндекс >= 0 Цикл
Для каждого СтрокаТаблицы из Объект.ТЧ_ПечатнойФормы Цикл

Если СтрокаТаблицы.Вкл = Ложь тогда
МассивТабдоков.Удалить(ТекущийИндекс);
КонецЕсли;

ТекущийИндекс = ТекущийИндекс - 1;
КонецЦикла;
КонецЦикла;

Возврат МассивТабдоков

После исполнения кода, возвращаю 3 Табличных документа которые хранятся в массиве [1].PNG .
Получаю их в процедуре и пытаюсь вывести на печать:
ТЕСТ = ТабличныеЧастиВнешнихОбратоток(МассивТабдоков, МассивОбъектов, ОбъектыПечати);
Пакет = Новый ПакетОтображаемыхДокументов;

Для каждого СтрокаТаблицы из Объект.ТЧ_ПечатнойФормы Цикл

Если СтрокаТаблицы.Вкл = Истина тогда

Пакет.КоличествоЭкземпляров = СтрокаТаблицы.КоличествоПечати;
ЭлементПакета1 = Пакет.Состав.Добавить();
ЭлементПакета1.Данные = ПоместитьВоВременноеХранилище(ТЕСТ);
КонецЕсли;                          
КонецЦикла;
Пакет.Напечатать();
Пакет.ЗаписатьФайлДляПечати("C:\Users\***\Desktop\Тест.pdf");

Но тут загвоздка, ничего не происходит, хотя в пакеты есть ссылки на временные файлы [2].PNG. Хотел проверить и написал ЗаписатьФайлДляПечати, но при открытии pdf ругается и говорит "Возникла проблема с форматом файла".
Пробовал через индексы
ТЕСТ = ТабличныеЧастиВнешнихОбратоток(МассивТабдоков, МассивОбъектов, ОбъектыПечати);
Пакет = Новый ПакетОтображаемыхДокументов;

Для каждого СтрокаТаблицы из Объект.ТЧ_ПечатнойФормы Цикл

Если СтрокаТаблицы.Вкл = Истина тогда

Если СтрокаТаблицы.Вкл = Истина тогда

Если СтрокаТаблицы.НомерСтроки = 1 Тогда

Пакет.КоличествоЭкземпляров = Объект.ТЧ_ПечатнойФормы[0].КоличествоПечати;
ЭлементПакета1 = Пакет.Состав.Добавить();
ЭлементПакета1.Данные = ПоместитьВоВременноеХранилище(ТЕСТ[0]);

ИначеЕсли СтрокаТаблицы.НомерСтроки = 2 Тогда 

Пакет.КоличествоЭкземпляров = Объект.ТЧ_ПечатнойФормы[1].КоличествоПечати;
ЭлементПакета2 = Пакет.Состав.Добавить();
ЭлементПакета2.Данные = ПоместитьВоВременноеХранилище(ТЕСТ[1]);

ИначеЕсли СтрокаТаблицы.НомерСтроки = 3 Тогда

Пакет.КоличествоЭкземпляров = Объект.ТЧ_ПечатнойФормы[2].КоличествоПечати;
ЭлементПакета3 = Пакет.Состав.Добавить();
ЭлементПакета3.Данные = ПоместитьВоВременноеХранилище(ТЕСТ[2]);

КонецЕсли;
КонецЕсли;

КонецЕсли;                          
КонецЦикла;
Пакет.Напечатать();
Пакет.ЗаписатьФайлДляПечати("C:\Users\***\Desktop\Тест.pdf");
Тут тоже завал, ошибка встаёт наПакет.Напечатать(); и ругается на то что "Нет информации для вывода на печать", хотя передаю Табличный документ [3].PNG понимаю что ошибка скорее всего глупая, но не могу додумать, помогите пожалуйста

LexaK

frommm330, наличие ТабличногоДокумента не значит что в нем есть данные!
в приложенном снимке, смотрите параметр Высота таблицы = 0 !!! (ноль строк в табличном документе) т.е. пустой, не сформирован...  :fdbsdfbsd:
если помогло нажмите: Спасибо!

frommm330

LexaK, а не подскажите как его сформировать! Я думал обращаясь к экспортной Функции Внешней Обработки которая возвращает ТабДок я получу его заполненным

LexaK

frommm330, наверно от кода зависит,
где-то для печати с ВПФ я использовать такой код, там все данные в структурах и ТЗ передаются, посмотрите может подойдет
&НаСервере
Функция ВнешняяПечатнаяФорма(ИмяПФ, лкОбъекты, ПараметрыПечати, ОбъектыПечати, ПараметрыВывода)

Идентификатор = СтрЗаменить(ИмяПФ,"ВнешняяПечатнаяФорма.","");

ИсточникДанных = ПолучитьДопОбработку(Идентификатор);//найти ссылку ДопВПФ
Если ИсточникДанных = Неопределено Тогда
Сообщить("Не найдена обработчик ВПФ: " + Идентификатор);
КоллекцияПечатныхФорм = УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм(Идентификатор);
Возврат КоллекцияПечатныхФорм; //пустая таблица
КонецЕсли;

ПараметрыИсточника = Новый Структура;
ПараметрыИсточника.Вставить("ИдентификаторКоманды", Идентификатор);
ПараметрыИсточника.Вставить("ОбъектыНазначения",лкОбъекты);
Результат = Неопределено;

УправлениеПечатью.ПечатьПоВнешнемуИсточнику(
ИсточникДанных,
ПараметрыИсточника,
Результат,
ОбъектыПечати,
ПараметрыВывода);

Возврат Результат

КонецФункции
если помогло нажмите: Спасибо!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск