Как программно создать контрагента в 1С:Комплексная автоматизация 2 и ERP 2

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

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

Проблема 1: Логические ошибки в коде и метод Записать()

Проанализируем типичную ошибку в структуре кода. Часто программисты помещают метод Записать() внутрь условий, из-за чего для определенных типов лиц (например, юридических) запись просто не вызывается. Также важно понимать, что в КА 2 недостаточно просто присвоить значения полям ИНН и КПП.

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


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

Если ЮФЛ = "Юридическое лицо" Тогда
    СоздаюНовогоКонтрагента.ЮридическоеФизическоеЛицо = Перечисления.ЮридическоеФизическоеЛицо.ЮридическоеЛицо;
Иначе
    СоздаюНовогоКонтрагента.Записать(); // ОШИБКА: Запись происходит только для ФизЛиц!
КонецЕсли;

Решение: Метод Записать() должен всегда находиться вне условий заполнения реквизитов, чтобы объект сохранялся в базе данных независимо от того, является он юридическим или физическим лицом.

Проблема 2: Разделение понятий «Партнер» и «Контрагент»

Это ключевая архитектурная особенность КА 2 и ERP. В этих системах разделены управленческий и регламентированный учет:

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

Шаг 1: Программное создание Партнера

Перед созданием контрагента нам необходимо создать (или найти существующего) партнера. Рассмотрим пример кода:


НовыйПартнер = Справочники.Партнеры.СоздатьЭлемент();
НовыйПартнер.Наименование = "Название организации";
НовыйПартнер.НаименованиеПолное = "Полное наименование организации";
НовыйПартнер.Клиент = Истина; // Если это покупатель
НовыйПартнер.Поставщик = Истина; // Если это поставщик
НовыйПартнер.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ЮрЛицо;
НовыйПартнер.Записать();

СсылкаНаПартнера = НовыйПартнер.Ссылка;

Шаг 2: Создание Контрагента с привязкой к Партнеру

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

Разберем алгоритм решения этой задачи:

  1. Создаем элемент контрагента.
  2. Заполняем основные реквизиты (ИНН, КПП, Партнер).
  3. Выполняем первую запись, чтобы получить ссылку.
  4. Устанавливаем ГоловнойКонтрагент = Объект.Ссылка.
  5. Записываем объект повторно.

Пример правильной реализации:


НовыйКонтрагент = Справочники.Контрагенты.СоздатьЭлемент();
НовыйКонтрагент.Наименование = "ООО Ромашка";
НовыйКонтрагент.НаименованиеПолное = "Общество с ограниченной ответственностью Ромашка";
НовыйКонтрагент.Партнер = СсылкаНаПартнера; // Привязка к созданному ранее партнеру
НовыйКонтрагент.ИНН = "7700000000";
НовыйКонтрагент.КПП = "770001001";
НовыйКонтрагент.СтранаРегистрации = Справочники.СтраныМира.Россия;
НовыйКонтрагент.ЮридическоеФизическоеЛицо = Перечисления.ЮридическоеФизическоеЛицо.ЮридическоеЛицо;

// Первая запись для получения ссылки
НовыйКонтрагент.Записать();

// Установка головного контрагента (ссылка на самого себя)
НовыйКонтрагент.ГоловнойКонтрагент = НовыйКонтрагент.Ссылка;
НовыйКонтрагент.Записать();

Использование режима ОбменДанными.Загрузка

Если вы выполняете массовый импорт данных из внешнего источника (например, из Excel), полезно использовать свойство ОбменДанными.Загрузка = Истина. Это отключит лишние проверки в модуле объекта и ускорит запись. Однако помните, что в этом случае вам придется заполнять абсолютно все обязательные реквизиты вручную, так как стандартные механизмы автозаполнения не сработают.


НовыйКонтрагент = Справочники.Контрагенты.СоздатьЭлемент();
НовыйКонтрагент.ОбменДанными.Загрузка = Истина;
// ... заполнение ...
НовыйКонтрагент.Записать();

Работа с контактной информацией

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

Посмотрим на пример добавления адреса:


НоваяСтрокаКИ = НовыйКонтрагент.КонтактнаяИнформация.Добавить();
НоваяСтрокаКИ.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес;
НоваяСтрокаКИ.Вид = Справочники.ВидыКонтактнойИнформации.ЮрАдресКонтрагента;
НоваяСтрокаКИ.Представление = "г. Москва, ул. Ленина, д. 1";

Профессиональный подход: использование API

Для минимизации ошибок рекомендуется использовать процедуры из общих модулей, которые уже написаны разработчиками фирмы «1С». Например, в модуле КонтрагентыСлужебный или ПартнерыИКонтрагенты существуют функции для корректного заполнения реквизитов. Это позволяет избежать проблем с заполнением дублирующих реквизитов (например, ЮрФизЛицо и ЮридическоеФизическоеЛицо), которые могут использоваться системой для разных целей (отчетность vs интерфейс).

Подведем итог: для успешного создания контрагента в КА 2/ERP обязательно обеспечьте наличие Партнера, корректно заполните Головного контрагента через повторную запись и не забывайте про привязку Контактной информации в табличную часть объекта.

← На главную