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