Как связаны Партнеры и Контрагенты в 1С:Управление торговлей 11 в конфигураторе и коде?

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

При переходе на современные конфигурации семейства 1С (Управление торговлей 11, ERP 2, Комплексная автоматизация 2) многие разработчики и аналитики сталкиваются с новой концепцией разделения единой ранее сущности на два отдельных справочника: Партнеры и Контрагенты. На первый взгляд это усложняет систему, но на практике такое разделение предоставляет колоссальную гибкость для ведения управленческого и регламентированного учета.

В рамках этой статьи мы подробно разберем, как именно связаны эти справочники на концептуальном уровне, как эта связь реализована в базе данных на уровне СУБД, а также по шагам изучим технический механизм вывода связанных данных в интерфейсе (панели навигации формы) с помощью конфигуратора.

Концептуальное различие: Партнеры против Контрагентов

Для начала кратко проанализируем бизнес-логику разделения. Это поможет понять, почему разработчики фирмы «1С» не использовали стандартный механизм подчинения (свойство «Владелец») в метаданных.

Выясним, как распределяются связанные с ними подчиненные объекты в системе:

Влияние функциональной опции «Независимо вести партнеров и контрагентов»

Поведение системы и логика работы справочников напрямую зависят от настройки программы (раздел НСИ и администрирование -> CRM и маркетинг):

Если опция ВКЛЮЧЕНА: Пользователь видит оба справочника. Становится доступной связь «один ко многим» или «многие ко многим». Например, один партнер «Холдинг Восток» может объединять трех контрагентов: ООО «Восток-Опт», ООО «Восток-Розница» и ИП Иванов. Или наоборот: один контрагент (юридическое лицо) обслуживает доставку на 10 разных партнеров (фактических магазинов).

Если опция ВЫКЛЮЧЕНА: Для упрощения работы пользователя справочник Контрагенты полностью скрывается из интерфейса. Вся работа ведется в единой карточке справочника Партнеры. Однако на уровне базы данных разделение все равно сохраняется! При создании партнера система в фоновом режиме автоматически создает скрытого связанного контрагента с отношением 1-к-1. Это необходимо, чтобы не нарушать целостность архитектуры документов, где реквизиты партнера и контрагента строго разнесены.

Связь в базе данных: как это устроено в Конфигураторе

Многие начинающие разработчики ищут связь через свойство метаданных Владельцы у справочника Контрагенты. Однако контрагенты не являются подчиненными партнерам в классическом понимании платформы «1С:Предприятие».

Связь реализована через обычный реквизит. У справочника Контрагенты создан реквизит Партнер с типом ссылки СправочникСсылка.Партнеры. Это обеспечивает связь «многие контрагенты к одному партнеру».

Рассмотрим, как выглядит типичный запрос для получения всех контрагентов конкретного партнера:


ВЫБРАТЬ
	Контрагенты.Ссылка КАК Контрагент,
	Контрагенты.ИНН КАК ИНН,
	Контрагенты.КПП КАК КПП,
	Контрагенты.ЮридическоеФизическоеЛицо КАК ЮрФизЛицо
ИЗ
	Справочник.Контрагенты КАК Контрагенты
ГДЕ
	Контрагенты.Партнер = &ПараметрПартнер
	И НЕ Контрагенты.ПометкаУдаления

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

Как настраивается панель навигации формы (Параметризуемые команды)

Теперь разберем технический вопрос: как при открытии карточки Партнера в режиме «1С:Предприятие» мы видим вверху (в панели навигации) ссылку на Контрагентов, Договоры и другие объекты, и как настроить это программно или в конфигураторе?

Для решения этой задачи платформа использует механизм параметризуемых команд. Связь строится не за счет жесткого внедрения списков на форму, а динамически, на основе метаданных команд.

Разберем этот процесс по шагам в Конфигураторе:

Шаг 1. Создание или анализ команды перехода

У справочника Контрагенты существует стандартная или добавленная разработчиком команда. Например, команда перехода к списку контрагентов с отбором. Нам важны свойства этой команды:

  1. Тип параметра команды: Устанавливается значение СправочникСсылка.Партнеры. Это ключевой момент! Данный тип указывает платформе, что команда должна автоматически отображаться в контексте работы с Партнером (то есть на формах элементов справочника Партнеры).
  2. Группа: Задается значение Панель навигации формы.Перейти (или аналогичная навигационная группа). Это указывает платформе, где именно на форме Партнера нужно нарисовать гиперссылку для вызова команды.
  3. Режим использования параметра: Обычно устанавливается в значение Одиночный, так как мы переходим к контрагентам из карточки одного конкретного партнера.

Шаг 2. Код обработчика параметризуемой команды

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


&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
	
	// ПараметрКоманды содержит ссылку на элемент справочника Партнеры,
	// из формы которого был совершен клик.
	
	ПараметрыОтбора = Новый Структура;
	ПараметрыОтбора.Вставить("Партнер", ПараметрКоманды);
	
	ПараметрыФормы = Новый Структура;
	ПараметрыФормы.Вставить("Отбор", ПараметрыОтбора);
	
	// Открываем форму списка контрагентов с предустановленным отбором
	ОткрытьФорму(
		"Справочник.Контрагенты.ФормаСписка",
		ПараметрыФормы,
		ПараметрыВыполненияКоманды.Источник,
		ПараметрыВыполненияКоманды.Уникальность,
		ПараметрыВыполненияКоманды.Окно,
		ПараметрыВыполненияКоманды.НавигационнаяСсылка
	);
	
КонецПроцедуры

Благодаря этому несложному коду платформа открывает список контрагентов, где пользователь видит только те организации, которые привязаны к текущему управленческому партнеру.

Шаг 3. Настройка видимости команды в форме Партнера

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

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

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

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

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

Таким образом, разделение на Партнеров и Контрагентов в «1С:Управление торговлей 11» представляет собой элегантное архитектурное решение. На уровне данных они связаны через реквизит ссылки, а на уровне интерфейса — посредством гибкого механизма параметризуемых команд платформы «1С:Предприятие 8.3».

← На главную