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