Как программно создать вид номенклатуры в 1С:ERP со всеми системными полями и наборами свойств?

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

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

В этой статье мы подробно рассмотрим, как правильно организовать программное создание вида номенклатуры, чтобы он был полностью идентичен элементу, созданному вручную через интерфейс системы.

Разбор проблемы: почему недостаточно метода СоздатьЭлемент()

Когда мы выполняем команду Справочники.ВидыНоменклатуры.СоздатьЭлемент(), система выделяет память под новый объект, но не инициализирует его внутреннюю логику. В 1С:ERP за автоматическое заполнение «по умолчанию» (например, установка типа номенклатуры «Товар» или единиц измерения) отвечает обработчик ОбработкаЗаполнения в модуле объекта. Кроме того, при создании вида номенклатуры вручную, форма управления берет на себя создание связанных записей в справочнике НаборыДополнительныхРеквизитовИСведений. Без этих наборов вы не сможете добавлять дополнительные свойства ни к самому виду номенклатуры, ни к характеристикам, созданным в его рамках.

Проанализируем ситуацию, когда данные загружаются через стандартную обработку «Загрузка данных из табличного документа». Эта обработка записывает реквизиты «как есть», минуя логику формы, что и приводит к появлению «недозаполненных» объектов.

Шаг 1: Правильная инициализация объекта

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


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

// Теперь устанавливаем наши специфические данные
НовыйВид.Наименование = "Продукция собственного производства";
НовыйВид.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Товар;
НовыйВид.ИспользоватьХарактеристики = Истина;
// Обязательно устанавливаем вариант оформления продажи
НовыйВид.ВариантОформленияПродажи = Перечисления.ВариантыОформленияПродажи.РеализацияТоваровУслуг;

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

Шаг 2: Создание наборов дополнительных реквизитов

Выясним причину, по которой у программно созданных видов номенклатуры часто отсутствуют вкладки с доп. реквизитами. В 1С:ERP вид номенклатуры ссылается на два набора свойств: один для самой номенклатуры (реквизит НаборСвойств) и один для характеристик (реквизит НаборСвойствХарактеристик).

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


// После того как основные реквизиты установлены, но до окончательной записи
// В актуальных версиях ERP можно вызвать встроенные механизмы БСП
// Либо воспользоваться процедурой ПроверитьЗаполнитьНаборыСвойств, если она доступна

Если НЕ ЗначениеЗаполнено(НовыйВид.НаборСвойств) Тогда
    // Логика создания набора свойств для номенклатуры
    // Обычно это делается через вызов процедур БСП по управлению свойствами
КонецЕсли;

НовыйВид.Записать();

Если вы используете загрузку данных, то в обработчике «При записи» или «После записи» крайне желательно добавить вызов метода, который проверит наличие наборов и создаст их при необходимости. В ERP часто существует процедура Справочники.ВидыНоменклатуры.ПроверитьЗаполнитьНаборыСвойств(Объект), которую стоит поискать в вашей версии конфигурации.

Шаг 3: Настройка использования серий

Работа с сериями в ERP реализована достаточно сложно. Это не просто галочка «Использовать серии». Программное создание должно учитывать настройки политики учета серий. Если вы планируете использовать серии, вам необходимо программно заполнить табличную часть или связанные регистры настроек (в зависимости от релиза ERP).

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

Шаг 4: Использование модуля менеджера

В современных версиях ERP разработчики 1С стараются выносить логику создания сложных объектов в модуль менеджера. Проверьте наличие функции СоздатьВидНоменклатуры. Если она есть, её использование — самый правильный путь.

Пример использования такой функции:


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

// Ссылка на будущий объект (если нужно)
ВидНоменклатурыСсылка = Справочники.ВидыНоменклатуры.ПустаяСсылка();

Справочники.ВидыНоменклатуры.СоздатьВидНоменклатуры(ДанныеЗаполнения, ВидНоменклатурыСсылка);

Такой подход гарантирует, что все внутренние механизмы ERP (подписки на события, создание связанных наборов, заполнение регистров настроек) отработают штатно.

Резюме и рекомендации

Для успешного программного создания вида номенклатуры в 1С:ERP придерживайтесь следующего алгоритма:

  1. Всегда используйте метод Объект.Заполнить() сразу после создания нового элемента.
  2. Проверяйте заполнение реквизитов НаборСвойств и НаборСвойствХарактеристик. Если они пусты после записи — создавайте их вызовом методов БСП.
  3. Обращайте внимание на реквизит ТипНоменклатуры — он определяет поведение системы в документах и отчетах.
  4. При массовой загрузке данных через внешние обработки обязательно прописывайте вызов логики заполнения в событиях ПередЗаписью или ПриЗаписи.

Использование этих методов позволит вам избежать ошибок при дальнейшем создании карточек номенклатуры и обеспечит корректную работу управленческого учета в системе 1С:ERP.

← На главную