В практике автоматизации торговых и производственных предприятий часто возникает классическая коллизия между требованиями складской логистики и требованиями бухгалтерского или налогового учета. Типичный пример: на склад поступает товар, имеющий один уникальный заводской штрихкод (EAN-13), но для целей учета в 1С его необходимо разделить на две или более разные позиции номенклатуры. Чаще всего это связано с необходимостью раздельного учета НДС (например, экспорт и внутренний рынок) или акцизов.
Рассмотрим ситуацию подробнее. У нас есть одна физическая единица товара, на упаковке которой напечатан один штрихкод. Однако в системе созданы две карточки номенклатуры: «Товар (внутренний рынок)» с НДС 20% и «Товар (экспорт)» без НДС или с НДС 0%. При попытке присвоить один и тот же штрихкод второй позиции система выдает ошибку уникальности. Разберем по шагам все возможные пути решения этой задачи — от изменения методологии учета до программных доработок.
Проанализируем причину создания двух карточек. Если разделение на две позиции продиктовано исключительно желанием видеть разные ставки НДС в документах, то в современных конфигурациях, таких как 1С:ERP, 1С:Комплексная автоматизация или 1С:Управление торговлей 11, в этом нет необходимости. Мы можем использовать одну карточку номенклатуры для всех видов операций.
Выясним, как система определяет ставку НДС в документе реализации:
ERP-системах можно использовать механизм направлений деятельности для разделения финансового результата, не дублируя при этом справочник номенклатуры.Преимущество: Это самый «чистый» способ. У нас остается одна карточка, один штрихкод, и при сканировании товар однозначно подбирается в документ. Ставка НДС подставится автоматически на основании правил налогообложения конкретной сделки.
Если специфика учета все же требует жесткого разделения остатков, рассмотрим вариант с использованием характеристик. В 1С штрихкод может быть назначен как на номенклатуру в целом, так и на конкретную характеристику.
Разберем, как это работает в типовых решениях. Мы можем создать одну позицию номенклатуры и две характеристики: «Внутренний» и «Экспорт». При этом штрихкод мы записываем в регистр сведений ШтрихкодыНоменклатуры, указывая только номенклатуру, но оставляя поле «Характеристика» пустым.
В этом случае при сканировании штрихкода в документе система:
Это позволяет физически использовать один код, но при этом разделять учетные потоки. Однако стоит помнить, что это замедляет работу сотрудников склада, так как требует ручного подтверждения при каждом сканировании.
Если бизнес-процесс невозможно изменить, и вам критически важно иметь две разные карточки с одним штрихкодом, придется прибегнуть к программным изменениям. В системе 1С за проверку уникальности штрихкода отвечает логика записи в регистр сведений ШтрихкодыНоменклатуры (или аналогичный в зависимости от версии платформы).
Проанализируем ситуацию с точки зрения архитектуры базы данных. По умолчанию измерением регистра является сам Штрихкод. Это означает, что на уровне СУБД нельзя записать две одинаковые строки в измерение. Чтобы обойти это, программисты часто используют следующие методы:
УникальныйИдентификатор или ссылка на Номенклатуру переносится из ресурсов в измерения). Это позволяет хранить дубли штрихкодов.ПередЗаписью регистра штрихкодов, убрав проверку на дубли или изменив алгоритм поиска.Посмотрим на пример логики, которую можно внедрить в расширение для поиска товара при наличии дублей штрихкодов:
&Вместо("НайтиПоШтрихкоду")
Функция Мой_НайтиПоШтрихкоду(Штрихкод)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Штрихкоды.Номенклатура,
| Штрихкоды.Характеристика
|ИЗ
| РегистрСведений.ШтрихкодыНоменклатуры КАК Штрихкоды
|ГДЕ
| Штрихкоды.Штрихкод = &Штрихкод";
Запрос.УстановитьПараметр("Штрихкод", Штрихкод);
Результат = Запрос.Выполнить().Выгрузить();
Если Результат.Количество() > 1 Тогда
// Если найдено несколько позиций, вызываем форму выбора
ВыбраннаяСтрока = Результат.ВыбратьСтроку("Выберите нужную позицию товара");
Возврат ВыбраннаяСтрока;
ИначеЕсли Результат.Количество() = 1 Тогда
Возврат Результат[0];
КонецЕсли;
Возврат Неопределено;
КонецФункции
Важно: Такой подход требует доработки всех экранных форм, где используется сканирование (РМК, документы закупки, реализации, складские ордера), чтобы система адекватно реагировала на множественный результат поиска.
В современных конфигурациях 1С (УТ 11, ERP) штрихкод можно привязать к упаковке номенклатуры. Это дает определенную гибкость. Рассмотрим сценарий, в котором мы создаем для экспортного товара отдельную виртуальную упаковку «Экспортная паллета» или «Экспортная пачка». Для автоматизации этого процесса подойдёт обработка для массового создания индивидуальных упаковок.
Даже если физически упаковка не отличается, привязка штрихкода к разным владельцам (в данном случае к упаковкам разных номенклатурных позиций) может быть реализована в системе. Однако это все равно потребует контроля уникальности в коде 1С, так как типовые механизмы блокируют создание одинаковых строк в регистре штрихкодов вне зависимости от типа владельца. При необходимости можно использовать расширение для переноса и копирования штрихкодов и упаковок между номенклатурой.
Выясним еще один методический прием, который часто используется на крупных складах. Чтобы не путать складских работников, вся приемка и хранение ведутся на одной основной карточке товара, к которой привязан заводской штрихкод.
В момент отгрузки на экспорт в системе создается документ Сборка (комплектация) товаров. Этот документ списывает «Товар (общий)» и приходует «Товар (экспорт)». Сразу после этого создается документ реализации экспортной позиции. Таким образом:
Проанализируем ситуацию с обязательной маркировкой. Если ваш товар подлежит маркировке в системе «Честный знак», то использование одного GTIN (штрихкода) для двух разных позиций в 1С может привести к серьезным проблемам при обмене данными с ГИС МТ.
GTIN (Global Trade Item Number) должен однозначно идентифицировать товарную позицию. Если вы отгружаете код маркировки, привязанный к одному GTIN, а в 1С выбираете другую номенклатуру, возникнет конфликт сопоставления. Поэтому при работе с маркированным товаром настоятельно рекомендуется использовать Решение 1 (одна карточка с разными настройками налогообложения).
Подведем итог. Если ваша цель — избежать ошибок и сохранить систему на типовой поддержке, выбирайте путь использования одной карточки номенклатуры с управлением ставкой НДС через документы и договоры. Если же разделение карточек неизбежно, наиболее стабильным техническим решением будет использование характеристик или разработка расширения, которое позволит выбирать нужную позицию из списка при сканировании дублирующегося штрихкода.