Как в 1С:УТ 11 указать директора контрагента и получить его данные программно?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет IT и автоматизация бизнеса
← На главную

В конфигурации «1С:Управление торговлей», редакция 11 (УТ 11), архитектура хранения данных о представителях сторонних организаций отличается от старых версий программ 1С. Это часто вызывает вопросы у разработчиков и пользователей: где именно хранить информацию о руководителе и как корректно извлечь её для печатных форм или автоматических рассылок. В этой статье мы подробно разберем механизмы работы с контактными лицами и программные способы доступа к ним.

Архитектурная связь: Партнеры и Контрагенты

Прежде всего, нам необходимо понять базовую логику УТ 11. В системе разделены понятия Партнер (управленческая сущность, холдинг) и Контрагент (юридическое лицо). Справочник КонтактныеЛицаПартнеров подчинен именно Партнеру. Это означает, что если у одного партнера есть несколько юридических лиц, список контактных лиц у них будет общим.

При работе программным кодом, если у нас есть ссылка на Контрагента, мы сначала должны получить его владельца-партнера, чтобы найти директора. Рассмотрим, как это выглядит в коде:


// Получаем партнера из контрагента
СсылкаНаПартнера = СсылкаНаКонтрагента.Партнер;

Где вводить данные о директоре в интерфейсе

Для корректного ввода данных выполните следующие шаги:

  1. Откройте карточку Контрагента или Партнера.
  2. Перейдите по гиперссылке Контактные лица.
  3. Нажмите «Создать». В поле «ФИО» введите имя директора, а в поле «Должность по визитке» укажите «Генеральный директор» или «Директор».
  4. Важный совет: Как отмечалось в обсуждении, поиск по строке «Должность» не является надежным, так как пользователи могут допустить опечатку (например, «дирктор»). Для стабильной работы рекомендуется использовать справочник Роли контактных лиц, указав там предопределенную роль «Руководитель».

Способ 1: Простой поиск по реквизиту (не рекомендуется для продакшена)

Если мы уверены, что должность заполнена строго определенным образом, можно использовать метод НайтиПоРеквизиту. Рассмотрим пример поиска директора для конкретного партнера:


ДиректорСсылка = Справочники.КонтактныеЛицаПартнеров.НайтиПоРеквизиту("ДолжностьПоВизитке", "Директор", , СсылкаНаПартнера);

Если Не ДиректорСсылка.Пустая() Тогда
    // Мы нашли контактное лицо
    Сообщить("Директор: " + ДиректорСсылка.Наименование);
КонецЕсли;

Минусы этого подхода: он чувствителен к регистру и точному написанию строки. Если в базе написано «Ген. директор», поиск не даст результатов.

Способ 2: Получение данных через запрос (оптимальный вариант)

Использование запроса позволяет гибко искать директора, учитывая возможные вариации наименования должности или использование связей по ролям. Проанализируем пример запроса, который ищет контактное лицо по вхождению слова «Директор» в должность:


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ РАЗРЕШЕННЫЕ
    |	КонтактныеЛицаПартнеров.Ссылка КАК Ссылка,
    |	КонтактныеЛицаПартнеров.Наименование КАК ФИО
    |ИЗ
    |	Справочник.КонтактныеЛицаПартнеров КАК КонтактныеЛицаПартнеров
    |ГДЕ
    |	КонтактныеЛицаПартнеров.Владелец = &Партнер
    |	И КонтактныеЛицаПартнеров.ДолжностьПоВизитке ПОДОБНО %Директор%";

Запрос.УстановитьПараметр("Партнер", СсылкаНаПартнера);
РезультатЗапроса = Запрос.Выполнить();

Если Не РезультатЗапроса.Пустой() Тогда
    Выборка = РезультатЗапроса.Выбрать();
    Выборка.Следующий();
    // Возвращаем найденную ссылку
    Возврат Выборка.Ссылка;
КонецЕсли;

Способ 3: Использование ролей контактных лиц

Проанализируем более продвинутый метод, предложенный опытными разработчиками. В УТ 11 у контактного лица есть табличная часть (или связь через регистры в зависимости от версии БСП) с ролями. Если мы заведем роль Руководитель, наш код станет независимым от того, что написано в поле «Должность».

Для реализации такого поиска необходимо обращаться к таблице КонтактныеЛицаПартнеров и фильтровать по владельцу и наличию соответствующей роли в связях объекта. Это исключает ошибки человеческого фактора при вводе текстовых данных.

Как получить контактную информацию директора

Мало найти саму ссылку на контактное лицо, часто требуется вытащить его телефон или email. В современных конфигурациях на базе БСП (Библиотеки стандартных подсистем) для этого нельзя просто обратиться к реквизитам. Разберем, как использовать встроенные механизмы:


// Используем общий модуль УправлениеКонтактнойИнформацией
СтруктураПараметров = Новый Структура("КонтактнаяИнформация");
ДанныеКИ = УправлениеКонтактнойИнформацией.ДанныеОбъекта(СсылкаНаДиректора, СтруктураПараметров);

// Получаем представление телефона или адреса
Для Каждого СтрокаКИ Из ДанныеКИ.КонтактнаяИнформация Цикл
    Если СтрокаКИ.Вид = Справочники.ВидыКонтактнойИнформации.ТелефонКонтактногоЛица Тогда
        Сообщить("Телефон: " + СтрокаКИ.Представление);
    КонецЕсли;
КонецЦикла;

Дополнительные возможности: Право подписи

В последних версиях УТ 11/ERP реализован механизм Полномочия ответственных лиц. Это крайне важно, если вам нужно вытащить подписанта для печатной формы договора или УПД. Зачастую директор — это лишь формальный руководитель, а документы подписывает исполнительный директор или лицо по доверенности.

Проанализируем ситуацию: если ваша задача — заполнить ФИО подписанта в печатной форме, рекомендуется проверять настройки в договоре с контрагентом. Там может быть указано конкретное доверенное лицо, которое и должно фигурировать в документах вместо генерального директора. Для быстрой подстановки данных нужной доверенности в документы отгрузки можно использовать расширение для выбора доверенности контрагента в реализациях.

Итог: Для разовых задач подойдет поиск по строке должности в справочнике КонтактныеЛицаПартнеров. Для серьезных внедрений лучше использовать механизм ролей или дополнительные реквизиты, привязанные к договору, что обеспечит 100% точность выбора нужного лица.

← На главную