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