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