Как программно создать контрагента с видом Физическое лицо через внешнюю обработку

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

При разработке внешних обработок для импорта данных (например, из XML-файлов или сторонних систем) часто возникает задача программного создания элементов справочника Контрагенты. Одной из ключевых сложностей для начинающих разработчиков является установка типа контрагента: юридическое или физическое лицо. По умолчанию система часто подставляет значение "Юридическое лицо", и попытка изменить это через "список выбора" на форме является ошибочным путем. Разберем, как правильно решить эту задачу на уровне программного кода, не привязываясь к интерактивным действиям пользователя.

Метод 1: Прямое заполнение реквизитов объекта

Первый и самый очевидный способ — это прямое обращение к реквизиту создаваемого объекта. В большинстве типовых конфигураций 1С (таких как Бухгалтерия предприятия 3.0, УТ 11, ERP) за тип контрагента отвечает реквизит ЮридическоеФизическоеЛицо. Он имеет тип перечисления.

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


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

// Заполняем остальные данные
НовыйКонтрагент.Наименование = "Иванов Иван Иванович";
НовыйКонтрагент.НаименованиеПолное = "Иванов Иван Иванович";
НовыйКонтрагент.ИНН = "123456789012"; // Для физлиц ИНН состоит из 12 цифр

Попытка
    НовыйКонтрагент.Записать();
    Сообщить("Контрагент успешно создан: " + НовыйКонтрагент.Ссылка);
Исключение
    Сообщить("Ошибка при записи: " + ОписаниеОшибки());
КонецПопытки;

Проанализируем этот подход. Он отлично подходит для простых задач, однако стоит учитывать, что в современных конфигурациях при интерактивном изменении типа лица на форме могут срабатывать дополнительные механизмы заполнения. При прямой записи через СоздатьЭлемент() эти механизмы (обработчики событий формы) не работают.

Метод 2: Использование метода Заполнить() с параметрами

Более профессиональный и надежный способ, особенно для конфигураций на базе БСП (Библиотеки стандартных подсистем), — использование метода Заполнить(). Этот метод вызывает процедуру ОбработкаЗаполнения в модуле объекта справочника. Рассмотрим, как передать структуру данных для автоматического заполнения всех связанных полей.

Выясним, как это реализовать на практике:


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

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

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

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

Особенности работы в различных конфигурациях

Проанализируем ситуацию с разделением сущностей в комплексных системах, таких как 1С:Управление торговлей 11 или 1С:ERP. В этих программах концепция контрагента тесно связана со справочником Партнеры.

  1. Связь с физическими лицами: Если вы создаете контрагента-физическое лицо в ERP, система может потребовать предварительного создания записи в справочнике ФизическиеЛица. Реквизит контрагента будет ссылаться на эту запись для хранения персональных данных.
  2. Проверка ИНН: Для физических лиц (включая ИП) длина ИНН составляет 12 символов, в то время как для юридических лиц — 10. При программном заполнении из внешних источников (например, XML) обязательно добавляйте проверку длины строки, иначе объект может не пройти валидацию при записи или вызвать ошибки в регламентированной отчетности.
  3. Индивидуальные предприниматели (ИП): Обратите внимание, что в некоторых версиях конфигураций ИП может выделяться как отдельное значение перечисления или требовать специфической комбинации флагов (например, ЮрЛицо = ФизическоеЛицо, но установлен флаг "Является индивидуальным предпринимателем").

Открытие формы с предзаполненным видом лица

Если ваша задача состоит не в автоматической загрузке 300 контрагентов, а в том, чтобы помочь пользователю нажать кнопку во внешней обработке и увидеть готовую, предзаполненную форму создания физического лица, используйте параметры открытия формы. В этом случае "стучаться" в список выбора на форме не нужно — форма сама примет нужный вид при открытии.

Посмотрим на пример открытия формы объекта из внешней обработки:


ПараметрыЗаполнения = Новый Структура;
ПараметрыЗаполнения.Вставить("ЮридическоеФизическоеЛицо", Перечисления.ЮридическоеФизическоеЛицо.ФизическоеЛицо);

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

ОткрытьФорму("Справочник.Контрагенты.ФормаОбъекта", ПараметрыФормы);

При таком подходе пользователь увидит новую карточку контрагента, где тип "Физическое лицо" уже выбран, а соответствующие поля (например, ФИО вместо краткого наименования) уже отображены на экране.

Рекомендации по массовой загрузке

Разберем по шагам алгоритм безопасной загрузки данных из внешнего файла:

  1. Поиск дублей: Перед созданием нового объекта обязательно выполните поиск по ИНН. Создавать дубликаты контрагентов — одна из самых частых ошибок импорта, которую потом крайне сложно исправлять.
  2. Использование транзакций: При загрузке большого объема данных из XML оборачивайте процесс в транзакцию (НачатьТранзакцию() / ЗафиксироватьТранзакцию()), чтобы избежать частичного появления некорректных данных в базе при возникновении ошибки в середине файла.
  3. Заполнение контактной информации: Помните, что адреса и телефоны в современных конфигурациях часто хранятся в табличных частях или регистрах сведений. Простого заполнения реквизита "Адрес" строкой может быть недостаточно для корректной работы системы.

Таким образом, для программного выбора вида контрагента достаточно использовать возможности объектной модели 1С, игнорируя визуальные элементы управления формой. Это делает код более стабильным и независимым от изменений интерфейса конфигурации.

← На главную