Почему при сканировании акцизной марки в «1С:Розница» выбирается другой товар и как это исправить?

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

В процессе автоматизации розничной торговли алкогольной продукцией одной из самых неприятных проблем является некорректная идентификация номенклатуры при сканировании акцизных марок. Представьте ситуацию: кассир на кассе или кладовщик на складе при вскрытии тары сканирует акцизную марку бутылки одного бренда, а в документе 1С автоматически появляется совершенно другая позиция номенклатуры. При этом обычный линейный штрихкод (EAN-13) распознается абсолютно верно. Эта проблема особенно характерна для конфигураций «1С:Розница 2.2» и старых релизов линейки 2.3.

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

Выясним причину: почему происходит путаница между похожими товарами?

Давайте подробно рассмотрим ситуацию на конкретном примере. В базе данных есть две очень похожие позиции:

  1. Настойка горькая "ЛОРД БАЙРОН ЯНГ со вкусом ВИСКИ" (алкокод ЕГАИС оканчивается на 331924).
  2. Настойка горькая "ЛОРД БАЙРОН ОЛД со вкусом ВИСКИ" (алкокод ЕГАИС оканчивается на 331922).

При сканировании марки от бутылки «ОЛД» программа подставляет правильный товар. Однако при сканировании марки от бутылки «ЯНГ» система упорно меняет её на «ОЛД». Почему так происходит, если сопоставление номенклатуры ЕГАИС, на первый взгляд, выполнено без ошибок?

Основная причина кроется в механизме кэширования связей кодов маркировки и физических товаров в 1С. Архитектура интеграции ЕГАИС и государственной информационной системы маркировки разработана таким образом, чтобы минимизировать нагрузку на базу данных при повторных операциях. Рассмотрим подробнее, как именно 1С связывает марку с карточкой товара.

При первом сканировании акцизной марки система дешифрует зашитый в ней уникальный код. В марках старого и нового образца алкогольный код (алкокод) представлен в виде буквенно-цифровой последовательности Base36. Программа выполняет декодирование этой последовательности в привычный числовой формат (Base10), чтобы сопоставить его с классификатором ЕГАИС. В старых релизах 1С:Розница существовали математические ошибки округления при таком преобразовании для очень близких по значению алкокодов. В результате марка товара «А» ошибочно распознавалась системой как марка товара «Б».

После распознавания марка связывается с конкретной карточкой номенклатуры, и эта связь записывается в специальный кэш — справочник ШтрихкодыУпаковокИТоваров. При последующих сканированиях этой марки (например, при оформлении вскрытия тары или чека ККМ) программа уже не обращается к сложным алгоритмам декодирования и сопоставления. Она мгновенно обращается к кэшу и автоматически подтягивает ту номенклатуру, связь с которой была записана ранее — пусть даже эта запись была создана ошибочно.

Разберем по шагам схему исправления проблемы

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

Шаг 1. Очистка кэша в справочнике «Штрихкоды упаковок и товаров»

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

  1. Включите режим технического специалиста. Для этого перейдите в меню Настройки (или нажмите на изображение шестеренки в правом верхнем углу экрана), выберите пункт Параметры и установите флажок «Режим технического специалиста». Нажмите кнопку «Применить».
  2. Откройте меню «Функции для технического специалиста» (в более старых версиях платформы этот пункт назывался «Все функции»).
  3. В открывшемся окне найдите раздел Справочники и выберите справочник ШтрихкодыУпаковокИТоваров.
  4. В списке элементов установите отбор по той номенклатуре, которая ошибочно подставляется системой (в нашем примере это «ЛОРД БАЙРОН ОЛД»).
  5. Внимательно изучите список связанных штрихкодов. Найдите в списке те записи, которые физически соответствуют маркам другого товара («ЛОРД БАЙРОН ЯНГ»).
  6. Удалите эти ошибочные записи (или пометьте на удаление и выполните удаление помеченных объектов). После очистки этих связей 1С при следующем сканировании марки будет вынуждена произвести полноценное первичное распознавание и создаст корректную связь с правильным товаром.

Шаг 2. Проверка регистра статусов акцизных марок

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

  1. Через «Функции для технического специалиста» перейдите в раздел Регистры сведений.
  2. Найдите регистр АкцизныеМаркиЕГАИС.
  3. Найдите записи по проблемным штрихкодам или маркам.
  4. Обратите внимание на колонку «Статус». Если для марки, которую вы пытаетесь вскрыть или продать, установлен статус «Реализовано» или «В резерве», система может вести себя некорректно. Для исправления ситуации статус должен быть изменен на «В наличии».

Шаг 3. Ревизия сопоставления номенклатуры ЕГАИС

Также важно исключить перекрестное сопоставление алкокодов в системе. Для этого:

  1. Откройте регистр сведений СоответствиеНоменклатурыЕГАИС.
  2. Убедитесь, что алкокод 0001912000002331924 жестко привязан только к одной карточке «ЛОРД БАЙРОН ЯНГ», а алкокод 0001912000002331922 — к «ЛОРД БАЙРОН ОЛД».
  3. Если вы обнаружили, что один из этих кодов сопоставлен сразу с обеими карточками товаров в 1С, удалите лишние строки сопоставления. Каждому алкокоду ЕГАИС должна соответствовать ровно одна позиция номенклатуры в информационной базе.

Как автоматизировать процесс программно?

Если подобных позиций в вашей базе накопилось много, ручной поиск в справочнике ШтрихкодыУпаковокИТоваров может занять слишком много времени. Программист может написать простую обработку для автоматической очистки некорректных связей. Рассмотрим пример кода на встроенном языке 1С для группового удаления ошибочных привязок:


// Пример программной очистки кэшированных штрихкодов упаковки
Процедура ОчиститьОшибочныеШтрихкоды(ОшибочныйТовар, ПравильныйТовар) Экспорт
    
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |	Штрихкоды.Ссылка КАК Ссылка,
        |	Штрихкоды.ЗначениеШтрихкода КАК ЗначениеШтрихкода
        |ИЗ
        |	Справочник.ШтрихкодыУпаковокИТоваров КАК Штрихкоды
        |ГДЕ
        |	Штрихкоды.Номенклатура = &ОшибочныйТовар";
    
    Запрос.УстановитьПараметр("ОшибочныйТовар", ОшибочныйТовар);
    
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
        // Проверяем, действительно ли штрихкод/марка относится к другому товару
        // Здесь можно добавить проверку по алкокоду внутри марки
        Если Найти(Выборка.ЗначениеШтрихкода, "331924") > 0 Тогда
            Попытка
                ОбъектШтрихкода = Выборка.Ссылка.ПолучитьОбъект();
                // Либо перепривязываем к правильному товару:
                ОбъектШтрихкода.Номенклатура = ПравильныйТовар;
                ОбъектШтрихкода.Записать();
                ЗаписьЖурналаРегистрации("Событие.ИсправлениеШтрихкода", 
                    УровеньЖурналаРегистрации.Информация, , , 
                    "Успешно перенаправлен штрихкод: " + Выборка.ЗначениеШтрихкода);
            Исключение
                ВызватьИсключение "Не удалось обновить штрихкод упаковки: " + КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
            КонецПопытки;
        КонецЕсли;
    КонецЦикла;
    
КонецПроцедуры

Как предотвратить повторение проблемы в будущем?

Для того чтобы система больше не допускала таких сбоев, рекомендуется выполнить следующие действия:

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

← На главную