Как настроить автоматическое заполнение артикула в 1С:Предприятие 8

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

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

Тем не менее на практике компании часто нуждаются в собственной системе артикулирования для уникальной идентификации товаров, работы с маркетплейсами (Wildberries, Ozon, Яндекс Маркет) или при производстве индивидуальной продукции. В этой статье мы подробно разберем, как реализовать автоматическое заполнение артикула различными способами: от программирования подписок на события до настройки штатными групповыми обработками.

Рассмотрим детально каждый из доступных вариантов решения этой задачи.

Способ 1. Использование подписки на события (Разработка в конфигураторе)

Использование механизма подписок на события — это классический и наиболее надежный способ внедрения бизнес-логики без изменения типовых объектов конфигурации. Мы перехватим запись элемента номенклатуры и программно заполним артикул, если пользователь оставил его пустым.

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

Разберем по шагам процесс создания подписки:

  1. Откроем конфигуратор вашей базы данных 1С.
  2. В дереве метаданных найдем ветку Общие -> Подписки на события.
  3. Добавим новую подписку на событие и назовем ее, например, ЗаполнитьАртикулНоменклатурыПередЗаписью.
  4. В свойстве Источник выберем тип СправочникОбъект.Номенклатура.
  5. В свойстве Событие выберем значение ПередЗаписью.
  6. В свойстве Обработчик укажем общий модуль (создадим новый общий модуль, например, РаботаСНоменклатуройСобытия, установив для него свойства «Сервер» и «Вызов сервера»).

Теперь проанализируем ситуацию и напишем программный код обработчика в созданном общем модуле:


Процедура ЗаполнитьАртикулНоменклатурыПередЗаписьюПередЗаписью(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт

	// Если идет загрузка данных (например, обмен), пропускаем обработку
	Если Источник.ОбменДанными.Загрузка Тогда
		Возврат;
	КонецЕсли;

	// Проверяем, заполнено ли уже поле Артикул
	Если ПустаяСтрока(Источник.Артикул) Тогда
		
		// Вариант 1: Копируем значение из Кода номенклатуры
		// Обратите внимание: у новой позиции Код может быть еще не сформирован.
		// В таком случае мы можем сгенерировать временный или последовательный номер.
		Если ПустаяСтрока(Источник.Код) Тогда
			// Установим временный артикул на основе уникального идентификатора или счетчика
			Источник.Артикул = "АРТ-" + СокрЛП(Новый УникальныйИдентификатор());
		Иначе
			Источник.Артикул = "АРТ-" + СокрЛП(Источник.Код);
		КонецЕсли;
		
	КонецЕсли;

КонецПроцедуры

Этот код проверяет наличие заполненного артикула и, если поле пустое, подставляет префикс "АРТ-" совместно с кодом номенклатуры. Вы можете адаптировать этот алгоритм под любые правила вашей компании (например, использовать генерацию по кодам категорий или видам номенклатуры).

Способ 2. Автоматическое заполнение через расширение конфигурации

Если ваша база находится на поддержке и вы не хотите вносить изменения в основную конфигурацию, лучшим решением будет использование расширений. Это позволит безболезненно обновлять систему в будущем.

Посмотрим на пример реализации логики генерации артикула с использованием аннотации &Перед для процедуры записи в модуле объекта справочника Номенклатура:


&Перед("ПередЗаписью")
Процедура Расш1_ПередЗаписью(Отказ)
	
	Если ПустаяСтрока(ЭтотОбъект.Артикул) Тогда
		// Реализуем генерацию уникального артикула по внутреннему счетчику
		ПоследнийАртикул = ПолучитьПоследнийАртикулИзБазы();
		НовыйНомер = ПоследнийАртикул + 1;
		ЭтотОбъект.Артикул = "SKU-" + Формат(НовыйНомер, "ЧГ=0");
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Функция ПолучитьПоследнийАртикулИзБазы()
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ ПЕРВЫЕ 1
		|	Номенклатура.Артикул КАК Артикул
		|ИЗ
		|	Справочник.Номенклатура КАК Номенклатура
		|ГДЕ
		|	Номенклатура.Артикул ПОДОБНО ""SKU-%""
		|УПОРЯДОЧИТЬ ПО
		|	Номенклатура.Артикул УБЫВ";
		
	РезультатЗапроса = Запрос.Выполнить();
	Если РезультатЗапроса.Пустой() Тогда
		Возврат 10000; // Начальное значение счетчика
	Иначе
		Выборка = РезультатЗапроса.Выбрать();
		Выборка.Следующий();
		// Очищаем префикс и преобразуем в число
		ЧисловаяЧасть = Сред(Выборка.Aртикул, 5);
		Возврат Число(ЧисловаяЧасть);
	EndЕсли;
	
КонецФункции

Используя этот подход, программа автоматически анализирует базу данных, находит последний присвоенный артикул формата SKU-ХХХХХ, увеличивает числовое значение на единицу и присваивает уникальный номер новому товару.

Способ 3. Групповое заполнение артикулов без программирования

Рассмотрим подробнее ситуацию, когда программиста нет рядом, но вам необходимо срочно заполнить пустые артикулы у сотен или тысяч уже созданных товаров. Для этого воспользуемся штатным инструментом 1С — Групповое изменение реквизитов.

Разберем этот процесс по шагам:

  1. Перейдите в раздел НСИ и администрирование -> Обслуживание -> Корректировка данных -> Групповое изменение реквизитов (в разных конфигурациях путь может незначительно отличаться).
  2. В поле «Выбирать элементы» укажите справочник Номенклатура.
  3. Нажмите ссылку «Добавить условия отбора» и установите фильтр: Артикул Не заполнен.
  4. Перейдите в раздел дополнительных настроек (кнопка «Параметры» внизу формы) и разрешите выполнение произвольного алгоритма (доступно для пользователей с правами Администратора).
  5. На вкладке «Выполнить произвольный алгоритм» напишем простой скрипт, который обойдет все отфильтрованные записи и присвоит им артикулы на основе кода:

Для Каждого СтрокаНоменклатуры Из Объекты Цикл
	ОбъектНоменклатуры = СтрокаНоменклатуры.ПолучитьОбъект();
	ОбъектНоменклатуры.Артикул = "ART-" + СокрЛП(ОбъектНоменклатуры.Код);
	ОбъектНоменклатуры.Записать();
КонецЦикла;

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

Особенности для конфигурации «1С:Управление нашей фирмой» (1С:УНФ)

Отдельно разберем специфику работы в программе 1С:УНФ. Часто пользователи спрашивают: можно ли динамически менять артикул позиции при передаче под индивидуальный заказ на производство? Согласно архитектурной логике систем 1С, постоянное изменение артикула в карточке номенклатуры — это ошибочный путь, который приведет к путанице в складских остатках и аналитических отчетах.

Правильное решение этой задачи заключается в использовании механизма Характеристик номенклатуры. В 1С:УНФ для одной номенклатурной позиции (например, «Шкаф индивидуальный») можно создавать неограниченное количество характеристик (например, «Заказ №15», «Заказ №16»).

Каждой отдельной характеристике в системе можно сопоставить собственный уникальный артикул. Это позволяет вести точный учет на производстве под конкретного клиента, сохраняя при этом чистоту основного справочника номенклатуры.

← На главную