Переход на новые релизы линейки 1С:Розница 2.3.хх принес кардинальные изменения в подсистему учета алкогольной продукции и интеграции с ЕГАИС. Одним из наиболее болезненных вопросов для розничных магазинов стало ужесточение контроля уникальности штрихкодов и сопоставления номенклатуры. В базах данных, которые ведутся на протяжении многих лет, часто встречается ситуация, когда один и тот же потребительский штрихкод EAN-13 назначен нескольким карточкам товаров (например, из-за разных заводов-производителей одной и той же марки алкоголя). При попытке продать такую позицию через Рабочее место кассира (РМК) система аварийно завершает работу с критической ошибкой.
В этой статье мы подробно проанализируем причины возникновения этой проблемы, разберем программный баг в коде РМК, а также рассмотрим правильную методологию ведения учета «один ко многим» в соответствии с современными требованиями ЕГАИС.
При сканировании бутылки алкоголя кассир сначала считывает линейный штрихкод EAN-13, а затем акцизную марку (DataMatrix). Если в настройках программы разрешено использование неуникальных штрихкодов, система должна предложить кассиру выбор из списка подходящих товаров. Однако в ранних релизах версии 2.3 при помарочном учете сканирование приводит к аварийному завершению транзакции:
Значение не является значением объектного типа (Свойство)
{Обработка.РМКУправляемыйРежим.Форма.Форма.Форма(11311)}: Если (РезультатОбработки.Свойство("ЭтоДисконтнаяКарта") И РезультатОбработки.ЭтоДисконтнаяКарта)
{Обработка.РМКУправляемыйРежим.Форма.Форма.Форма(3054)}: ОбработатьКодМаркировки(ДанныеСоСканераСтруктура);
Выясним причину такого поведения системы. Разработчики существенно переработали логику работы РМК для поддержки сквозного учета маркированной продукции. Метод ОбработатьКодМаркировки отвечает за дешифрацию штрихового кода и поиск номенклатуры в базе данных.
Когда штрихкод уникален, поисковый алгоритм возвращает объект типа Структура, содержащий параметры найденной номенклатуры. Но если один и тот же штрихкод привязан к нескольким позициям, функция поиска возвращает не структуру, а Массив найденных элементов (или значение Неопределено), чтобы инициировать вывод диалогового окна выбора для кассира. Из-за программной недоработки в коде обработчика РМК система пытается вызвать метод Свойство() у переменной, которая фактически является массивом. Это и вызывает системный сбой платформы 1С.
Многие пользователи по старой привычке создают в справочнике Номенклатура отдельные карточки под каждого производителя. Например:
С точки зрения ЕГАИС это действительно разные товары с уникальными алкогольными кодами (алкокодами). Однако с переходом на помарочный учет (3-й регистр) ведение такого разделения в локальном справочнике 1С потеряло практический смысл и только усложняет учет. Вся информация о конкретном заводе-производителе и импортере зашифрована непосредственно в акцизной марке.
Рассмотрим правильный подход: в справочнике Номенклатура должна существовать только одна карточка товара, например, «Водка Медофф Люкс 0,5 л». К ней привязывается единственный штрихкод EAN-13. При этом в рабочем месте сопоставления ЕГАИС эту единую карточку 1С сопоставляют со всеми карточками классификатора ЕГАИС от разных производителей.
Проанализируем процесс продажи при такой схеме:
Этот метод полностью устраняет проблему дублирующихся штрихкодов, исключает пересортицу на складе 1С и избавляет от необходимости постоянного ручного выравнивания остатков.
Для того чтобы привести информационную базу в порядок и избавиться от ошибок в РМК, выполним следующие действия по шагам:
Шаг 1. Поиск дублирующихся штрихкодов в базе
Прежде всего нам необходимо локализовать проблему. Для этого построим отчет по регистру сведений ШтрихкодыНоменклатуры. Мы можем воспользоваться универсальным отчетом или выполнить простой запрос в консоли запросов:
ВЫБРАТЬ
Штрихкоды.Штрихкод КАК Штрихкод,
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Штрихкоды.Номенклатура) КАК КоличествоНоменклатуры
ИЗ
РегистрСведений.ШтрихкодыНоменклатуры КАК Штрихкоды
СГРУППИРОВАТЬ ПО
Штрихкоды.Штрихкод
ИМЕЮЩИЕ
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Штрихкоды.Номенклатура) > 1
Этот запрос выведет список всех штрихкодов, которые привязаны более чем к одной позиции номенклатуры.
Шаг 2. Слияние дублирующихся карточек
Чтобы объединить дубли, воспользуемся стандартным инструментом платформы. Перейдем в раздел Администрирование — Обслуживание — Корректировка данных и откроем обработку «Поиск и замена дублей». С ее помощью мы выберем «правильную» (основную) карточку номенклатуры, а остальные определим как дубли. Обработка автоматически перенесет все документы движения, остатки, сопоставления ЕГАИС и продажи на выбранную основную карточку, а старые дубли пометит на удаление.
Шаг 3. Сопоставление нескольких алкокодов ЕГАИС
Теперь перейдем в рабочее место сопоставления номенклатуры (НСИ — Более — Сопоставление номенклатуры ЕГАИС). Для нашей единственной оставшейся карточки товара добавим несколько записей соответствия с товарами ЕГАИС. Каждому производителю (каждому алкокоду) будет соответствовать одна общая позиция номенклатуры 1С. Таким образом мы реализуем связь «один ко многим».
Шаг 4. Очистка устаревших штрихкодов
После слияния карточек обязательно убедимся, что у помеченных на удаление позиций очищены штрихкоды в регистре сведений. Если этого не сделать, система продолжит видеть связь неуникального штрихкода с неактивными карточками.
Если специфика вашего учета (например, детальный партионный учет по импортерам в управленческих целях) строго требует ведения раздельных карточек под каждого производителя, вам необходимо устранить технический баг в коде РМК. Для этого выполним обновление конфигурации «1С:Розница» до актуального релиза или установим официальные патчи через сервис интернет-поддержки. В новых релизах разработчики исправили ошибку в процедуре ОбработатьКодМаркировки: теперь при обнаружении неуникального штрихкода система корректно обрабатывает массив результатов и штатно открывает стандартное окно РМК «Выберите товар» без аварийного завершения работы.
Если оперативное обновление конфигурации по каким-то причинам невозможно, кассиры могут использовать временный обходной путь: вместо прямого сканирования штрихкода EAN-13 нажимать кнопку Поиск (F7) в интерфейсе РМК, вводить штрихкод вручную или осуществлять поиск по наименованию, выбирать нужную позицию из открывшегося списка и только после этого сканировать марку ЕГАИС.