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