Разработка внешних печатных форм в конфигурациях на базе Библиотеки стандартных подсистем (БСП), таких как 1С:Комплексная автоматизация 2, требует строгого соблюдения регламента регистрации. Часто разработчики сталкиваются с тем, что кнопка «Печать» не появляется в документе, даже если код самой процедуры вывода табличного документа написан верно. Давайте разберем эту задачу по шагам.
Основой любой внешней печатной формы является функция СведенияОВнешнейОбработке. Чтобы форма была доступна в разных видах документов, необходимо корректно заполнить массив назначений в структуре ПараметрыРегистрации. Обратите внимание, что каждый тип документа должен быть добавлен отдельной строкой.
Рассмотрим пример правильного заполнения:
Функция СведенияОВнешнейОбработке Экспорт
ПараметрыРегистрации = Новый Структура;
ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма");
МассивНазначений = Новый Массив;
МассивНазначений.Добавить("Документ.ЗаказПереработчику2_5");
МассивНазначений.Добавить("Документ.ВозвратТоваровПоставщику");
ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
// ... остальная часть регистрации
Возврат ПараметрыРегистрации;
КонецФункции
После того как вы изменили код модуля объекта, необходимо переподключить обработку в справочнике «Дополнительные отчеты и обработки». Если форма не появляется:
Когда стоит задача собрать информацию из разных документов в одну таблицу, важно понимать, как работает параметр МассивОбъектов в процедуре Печать. Система 1С передает в этот параметр ссылки на все объекты, выделенные пользователем. Чтобы реализовать сложную логику, мы должны анализировать типы этих объектов с помощью функции ТипЗнч().
Разберем, как правильно организовать формирование данных:
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
// Проверяем тип объекта перед выполнением запроса
Для Каждого СсылкаНаОбъект Из МассивОбъектов Цикл
Если ТипЗнч(СсылкаНаОбъект) = Тип("ДокументСсылка.ЗаказПереработчику2_5") Тогда
// Вызываем процедуру формирования для конкретного типа
СформироватьПечатнуюФормуЗаказ(СсылкаНаОбъект, КоллекцияПечатныхФорм, ОбъектыПечати);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
В коде, который вы приводите, часто встречается ошибка выполнения запросов внутри цикла Пока Выборка.Следующий. Это критически снижает производительность системы. Проанализируем, как это исправить:
ЛЕВОЕ СОЕДИНЕНИЕ для связки табличных частей документа.Запрос.УстановитьПараметр("МассивСсылок", МассивОбъектов) и в тексте запроса конструкцию ГДЕ Ссылка В (&МассивСсылок).СсылкаНаОбъект, передаваемая в функцию, является ссылкой на существующий документ. Ошибки вида «1.01.0001» возникают, когда программа пытается обратиться к пустому или неверно инициализированному объекту. Всегда проверяйте ЗначениеЗаполнено(СсылкаНаОбъект) перед началом формирования табличного документа.Следуя этим правилам, вы сможете успешно зарегистрировать внешнюю печатную форму и корректно вывести данные из нескольких документов в один отчетный документ ТабличныйДокумент.