В практике складского учета часто возникает задача жесткого контроля каждой единицы хранения. Типичный пример: на складе лежат три абсолютно одинаковых масляных фильтра, которые числятся на одной карточке номенклатуры. При обычной схеме учета все они имеют один и тот же штрихкод. Это создает лазейки для злоупотреблений и ошибок — например, при инвентаризации кладовщик может просто трижды отсканировать один и тот же фильтр, не замечая (или скрывая), что двух других фактически нет на складе. Чтобы решить эту проблему, руководство компаний часто требует внедрить систему индивидуального штрихкодирования каждой единицы остатков.
В рамках данной статьи мы подробно проанализируем различные подходы к реализации этой задачи в среде «1С» (на примере конфигурации «Альфа-Авто 5.1» и аналогичных решений, таких как «Управление торговлей 10.3»), рассмотрим плюсы и минусы каждого варианта, а также разберем технические и организационные нюансы их внедрения.
Главная цель — сделать так, чтобы каждый экземпляр товара имел свой уникальный штрихкод (ШК). При этом во всех ключевых складских операциях (поступление, перемещение, инвентаризация, реализация) сотрудники должны сканировать именно этот конкретный ШК.
Основная сложность внедрения такой системы в лоб — это колоссальное увеличение объема базы данных и усложнение оперативной работы пользователей. Если у вас хранится 100 000 единиц товаров, создание под каждую из них отдельной характеристики или элемента справочника приведет к деградации производительности системы. Кроме того, на этапе выписки документов (например, при резервировании или создании заказ-наряда менеджером) еще неизвестно, какую именно коробку со стеллажа возьмет кладовщик, что делает невозможным предварительное указание уникального идентификатора в документе.
Давайте рассмотрим детально 5 основных технических сценариев решения этой задачи.
---
Этот вариант является наиболее гибким и не раздувает справочники номенклатуры и характеристик. Суть метода заключается в создании отдельного независимого регистра сведений, который будет хранить жизненный цикл каждого уникального штрихкода.
Проанализируем структуру метаданных, которую нам потребуется создать:
УникальныеШтрихкодыНоменклатуры:
Штрихкод (Строка, например, EAN13 или Code128).Номенклатура (СправочникСсылка.Номенклатура).Статус (ПеречислениеСсылка.СтатусыУникальныхШК: НаСкладе, Продан, Списан, Утерян).ДокументДвижения (ДокументСсылка).Поскольку в одной строке документа может быть указано количество товара более одной штуки, обычного реквизита в табличной части Товары будет недостаточно. Нам необходимо добавить подчиненную табличную часть (например, УникальныеНомера) во все ключевые документы движения: Поступление товаров, Перемещение товаров, Инвентаризация товаров, Реализация товаров.
Рассмотрим по шагам логику работы этой схемы при проведении документов:
Шаг 1. Поступление товара. При оформлении прихода система генерирует необходимое количество уникальных штрихкодов (равное количеству приходуемого товара). Принтер этикеток распечатывает уникальные наклейки. В этот момент в нашем регистре сведений создаются записи со статусом НаСкладе.
Шаг 2. Контроль уникальности при списании и инвентаризации. При проведении расходных документов или инвентаризации программа должна проверять соответствие отсканированных кодов данным регистра. Напишем пример процедуры валидации отсканированных штрихкодов перед проведением документа:
Процедура ПроверитьУникальныеШтрихкоды(ДокументОбъект, Отказ) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТабЧасть.Штрихкод КАК Штрихкод,
| ТабЧасть.Номенклатура КАК Номенклатура
|ПОМЕСТИТЬ ВтДокумента
|ИЗ
| &ТабличнаяЧасть КАК ТабЧасть
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВтДокумента.Штрихкод КАК Штрихкод,
| ВтДокумента.Номенклатура КАК НоменклатураДокумента,
| РегШК.Номенклатура КАК НоменклатураРегистра,
| РегШК.Статус КАК СтатусРегистра
|ИЗ
| ВтДокумента КАК ВтДокумента
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.УникальныеШтрихкодыНоменклатуры КАК РегШК
| ПО ВтДокумента.Штрихкод = РегШК.Штрихкод";
Запрос.УстановитьПараметр("ТабличнаяЧасть", ДокументОбъект.УникальныеНомера.Выгрузить());
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
// Если оформляем расход, код должен быть в статусе "НаСкладе"
Если Выборка.СтатусРегистра <> Перечисления.СтатусыУникальныхШК.НаСкладе Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
НСтр("ru = 'Штрихкод " + Выборка.Штрихкод + " имеет некорректный статус на складе или не зарегистрирован!'"),
,,, Отказ);
КонецЕсли;
Если Выборка.НоменклатураДокумента <> Выборка.НоменклатураРегистра Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
НСтр("ru = 'Товар по штрихкоду " + Выборка.Штрихкод + " не соответствует выбранному в документе!'"),
,,, Отказ);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
---
Прежде чем приступать к масштабным доработкам конфигурации, давайте проанализируем штатные возможности линейки «Альфа-Авто» от компании «Рарус». Разработчики заложили в систему механизмы серийного учета, которые можно адаптировать под индивидуальный учет единиц хранения.
Для реализации этого сценария выполним следующие настройки:
Тип номенклатуры установим использование серийного учета.СерийныйНомер.Как решить проблему резервирования и выписки документов?
В сообщении №9 форума справедливо отмечено, что менеджер при создании заказ-наряда или счета не может знать, какую конкретно коробку принесет кладовщик. Чтобы обойти это ограничение, в «Альфа-Авто» применяется двухэтапная схема списания:
---
Это крайне эффективный архитектурный подход, позволяющий полностью уберечь базу данных «1С» от перегрузки миллионами записей уникальных кодов. Мы разделяем складской учет на два контура: учетный контур (в «1С») и операционный контур (на терминалах сбора данных под управлением ПО Mobile SMARTS, Клеверенс или Сканпорт).
Рассмотрим, как работает эта схема:
Таким образом, мы полностью исключаем возможность обмана системы при инвентаризации (нельзя отсканировать одну коробку три раза), не усложняя при этом структуру метаданных «1С».
---
Если мы хотим осуществлять проверку в самой «1С», но не желаем хранить терабайты данных в регистре штрихкодов, отличным решением станет применение составных штрихкодов. Чаще всего для этого используется символика Code 128 или двумерные коды DataMatrix.
Разберем алгоритм работы этого метода:
[КодНоменклатуры1С]_[УникальныйПорядковыйНомер]. Например, штрихкод 00004125_10482 означает, что перед нами товар с кодом «00004125», а конкретный экземпляр имеет номер «10482».
// Пример обработки считанной строки составного штрихкода
Процедура ОбработатьСоставнойШтрихкод(СчитанныйШтрихкод, ТекущийДокумент)
Разделитель = Найти(СчитанныйШтрихкод, "_");
Если Разделитель = 0 Тогда
// Обработка обычного штрихкода
Возврат;
КонецЕсли;
КодНоменклатуры = Лев(СчитанныйШтрихкод, Разделитель - 1);
УникальныйНомер = Сред(СчитанныйШтрихкод, Разделитель + 1);
СсылкаНаТовар = Справочники.Номенклатура.НайтиПоКоду(КодНоменклатуры);
Если ЗначениеЗаполнено(СсылкаНаТовар) Тогда
// Проверяем, нет ли уже этого уникального номера в табличной части текущего документа
НайденныеСтроки = ТекущийДокумент.УникальныеНомера.НайтиСтроки(Новый Структура("УникальныйНомер", УникальныйНомер));
Если НайденныеСтроки.Количество() > 0 Тогда
ВызватьИсключение "Предупреждение! Данный экземпляр товара уже отсканирован в этом документе!";
Иначе
// Добавляем запись во временную таблицу документа для контроля уникальности
НоваяСтрока = ТекущийДокумент.УникальныеНомера.Добавить();
НоваяСтрока.Номенклатура = СсылкаНаТовар;
НоваяСтрока.УникальныйНомер = УникальныйНомер;
// Увеличиваем количество товара в основной табличной части
// ... логика добавления товара в ТЧ Товары
КонецЕсли;
КонецЕсли;
КонецПроцедуры
---
Современные конфигурации «1С» уже имеют встроенную подсистему интеграции с ГИС МТ («Честный ЗНАК»). Мы можем использовать этот готовый и тщательно оптимизированный разработчиками «1С» функционал для организации **собственной внутренней маркировки** предприятия.
Вместо создания своих регистров мы используем типовой регистр ШтрихкодыУпаковок. При поступлении товара генерируются внутренние коды маркировки в формате DataMatrix, содержащие GTIN товара и серийный номер. Все типовые формы подбора и проверки кодов маркировки в «1С» будут работать автоматически, не требуя от программиста написания кода с нуля. Это наиболее надежный и поддерживаемый вендором путь автоматизации.
---
Анализируя внедрение подобных систем на реальных складах автозапчастей, необходимо учитывать важнейшие социальные и экономические аспекты, упомянутые экспертами:
Проанализировав все представленные варианты, мы можем сделать вывод, что выбор конкретного метода зависит от масштаба вашего предприятия, бюджета на автоматизацию и готовности складского персонала к жесткой дисциплине. Оптимальным решением с точки зрения производительности системы является вынос логики контроля на уровень ТСД или использование механизма серийных номеров «Альфа-Авто» с двухэтапной схемой списания при отгрузке.