Как найти контрагента по ссылке на партнера в 1С:Управление торговлей 11?

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

В процессе разработки на конфигурации Управление торговлей 11 часто возникает задача определения Контрагента, связанного с конкретным Партнером. Ввиду того, что архитектура системы подразумевает наличие иерархии партнеров и возможность связи «один ко многим», стандартный поиск не всегда бывает очевиден. Давайте разберем, как правильно реализовать эту задачу, учитывая как простые, так и сложные структуры справочников. Для интерактивного поиска данных контрагента непосредственно из формы партнеров можно использовать расширение для поиска по ИНН и наименованию контрагента в справочнике «Партнеры».

Использование прямого запроса для простых структур

Если ваша бизнес-логика подразумевает простую (линейную) связь, где Контрагент напрямую закреплен за Партнером через соответствующий реквизит, самым быстрым и эффективным решением будет использование встроенного языка запросов платформы 1С:Предприятие 8.3. Проанализируем алгоритм:

Для реализации поиска выполним следующие действия:

  1. Создадим объект Запрос.
  2. Передадим ссылку на партнера в параметр запроса.
  3. Выберем реквизит Контрагент из справочника Контрагенты, выполнив отбор по полю Партнер.

Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	Контрагенты.Ссылка КАК Контрагент
    |ИЗ
    |	Справочник.Контрагенты КАК Контрагенты
    |ГДЕ
    |	Контрагенты.Партнер = &Партнер";

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

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

Реализация поиска с учетом иерархии партнеров

Ситуация значительно усложняется, если структура партнеров нелинейная. Например, когда Партнер1 (родитель) имеет привязанного Контрагента, а Партнер3 (потомок) не имеет собственного контрагента и должен «наследовать» логику родителя. В этом случае обычный прямой запрос к реквизиту Партнер не вернет ожидаемого результата.

Для решения этой задачи в Управлении торговлей 11 предусмотрен специализированный программный интерфейс, позволяющий извлечь в том числе данные, которые содержит контактная информация контрагентов (ERP 2, КА 2, УТ 11). Разберем его использование по шагам:

  1. Обратимся к общему модулю ПартнерыИКонтрагенты. В этом модуле разработчики конфигурации вынесли логику работы со связками партнеров в отдельные функции. Это позволяет не переписывать сложную логику проверки иерархии самостоятельно, а использовать готовые инструменты.
  2. Используем функцию ПолучитьВсехКонтрагентовПартнера. Эта функция позволяет получить список контрагентов, учитывая все настройки иерархии, заложенные в конфигурации.
  3. Применим функцию ПолучитьКонтрагентаПартнераПоУмолчанию. Если вам необходимо получить основную ссылку для оформления документа, данный метод является наиболее предпочтительным, так как он скрывает всю сложность поиска внутри себя.

Рассмотрим пример обращения к такому интерфейсу:


// Получение контрагента по умолчанию для партнера с учетом иерархии
КонтрагентПоУмолчанию = ПартнерыИКонтрагенты.ПолучитьКонтрагентаПартнераПоУмолчанию(СсылкаНаПартнера);

Если ЗначениеЗаполнено(КонтрагентПоУмолчанию) Тогда
    // Работаем с найденным контрагентом
КонецЕсли;

Работа с регистром сведений «ИерархияПартнеров»

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

Преимущества работы с регистром:

Помните, что в типовых конфигурациях 1С партнер — это, прежде всего, бизнес-сущность. Не каждый партнер обязан иметь привязанного контрагента. Поэтому всегда проверяйте результат выполнения функций на ПустаяСсылка, чтобы избежать ошибок при формировании документов или отчетов.

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

← На главную