При программной загрузке или создании элементов справочника Партнеры разработчики часто сталкиваются с ситуацией, когда в форме списка поле Вид контрагента остается незаполненным, либо созданный партнер вовсе не отображается в типовых списках (например, в списке «Поставщики» или «Клиенты»). Разберем архитектурные особенности связки управленческого и регламентированного учета в типовых конфигурациях (1С:ERP, 1С:Комплексная автоматизация, 1С:Управление торговлей) и выясним, как правильно создавать эти объекты через программный код.
Проанализируем структуру хранения данных. В современных типовых конфигурациях учет разделен на два уровня:
Клиент, Поставщик, Конкурент).Посмотрим, почему возникает путаница с реквизитами. В справочнике Партнеры есть реквизит ЮрФизЛицо, который принимает значения перечисления КомпанияЧастноеЛицо (только Компания или ЧастноеЛицо). В то же время у справочника Контрагенты также есть реквизит ЮрФизЛицо, но он имеет тип ПеречислениеСсылка.ЮрФизЛицо (значения: ЮрЛицо, ФизЛицо, ИндивидуальныйПредприниматель, ЮрЛицоНеРезидент, ОбособленноеПодразделение).
Когда мы открываем типовой объединенный список, колонка Вид контрагента отображает данные не из партнера, а из связанной таблицы справочника Контрагенты. Если контрагент не создан, колонка закономерно остается пустой.
Рассмотрим правильный порядок создания объектов. Если в конфигурации включено раздельное ведение партнеров и контрагентов, при программной записи партнера связанный контрагент автоматически не создается. Нам необходимо создать оба объекта последовательно и связать их между собой.
Разберем по шагам создание партнера и контрагента:
Партнеры, выставляя управленческие признаки (роли).Контрагенты и указываем в реквизите Партнер полученную ссылку.Контрагент.ЮрФизЛицо нужным значением перечисления.Посмотрим на пример программного кода:
// Шаг 1. Создаем партнера
НовыйПартнер = Справочники.Партнеры.СоздатьЭлемент();
НовыйПартнер.Наименование = "ООО Поставщик";
НовыйПартнер.НаименованиеПолное = "Общество с ограниченной ответственностью Поставщик";
НовыйПартнер.ЮрФизЛицо = Перечисления.КомпанияЧастноеЛицо.Компания;
НовыйПартнер.Поставщик = Истина;
НовыйПартнер.Клиент = Ложь;
НовыйПартнер.Записать();
// Шаг 2. Создаем подчиненного контрагента
НовыйКонтрагент = Справочники.Контрагенты.СоздатьЭлемент();
НовыйКонтрагент.Партнер = НовыйПартнер.Ссылка;
НовыйКонтрагент.Наименование = "ООО Поставщик";
НовыйКонтрагент.НаименованиеПолное = "Общество с ограниченной ответственностью Поставщик";
НовыйКонтрагент.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ЮрЛицо;
НовыйКонтрагент.ИНН = "7701234567";
НовыйКонтрагент.КПП = "770101001";
НовыйКонтрагент.Записать();
Выясним причину зависимости форм от настроек. В системе поведение списков и форм регулируется константами и функциональными опциями:
ИспользоватьПартнеровКакКонтрагентов — включает режим, когда один партнер жестко соответствует одному контрагенту, а в интерфейсе они объединены в одну сущность.ИспользоватьПартнеровИКонтрагентов — включает независимое ведение управленческой и юридической структуры.Если бизнес-процессы не требуют ведения сложных холдинговых структур с несколькими юридическими лицами под одним брендом, перейдем в раздел НСИ и администрирование -> CRM и маркетинг -> Настройки CRM и отключим флаг Независимо вести партнеров и контрагентов (или включим режим работы без разделения). В таком случае система упрощает форму и сопоставление элементов.
Рассмотрим частые причины, по которым программно созданный объект не отображается в пользовательском интерфейсе:
Клиент = Истина или Поставщик = Истина. Если при программном создании забыть выставить соответствующий флаг, партнер отобразится только в общем списке «Все партнеры».ГруппаДоступа или назначайте реквизит ОсновнойМенеджер, иначе пользователи с ограниченными правами не увидят созданную запись.