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