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