Как внедрить маркировку товаров в старую «1С:Розница 1.0»: подробное руководство по выбору пути и реализации

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

Запуск обязательной маркировки товаров (шин, обуви, одежды, парфюмерии и других групп) ставит перед владельцами старых, сильно доработанных конфигураций сложную дилемму. С одной стороны, фирма «1С» поддерживает актуальные форматы маркировки только в современных конфигурациях (таких как «1С:Розница 2.3/3.0» или «1С:УНФ»). С другой стороны, переход на новую систему означает потерю уникального функционала, в который годами вкладывались средства, а также требует обновления парка компьютерной техники и покупки серверных лицензий.

В этой статье мы подробно проанализируем ситуацию, разберем все возможные пути решения проблемы и покажем, как технически реализовать поддержку маркировки в устаревшей конфигурации «1С:Розница 1.0» (или аналогичной «1С:Управление торговлей 10.3» на обычных формах) с минимальными затратами.

---

Анализ возможных путей решения проблемы

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

Вариант 1. Полный переход на «1С:Розница 2.3 / 3.0»
Это официальный путь, рекомендуемый фирмой «1С».

Вариант 2. «Лобовой» перенос подсистемы маркировки из «1С:УТ 10.3»
Поскольку «1С:Управление торговлей 10.3» также построена на обычных формах, у разработчиков часто возникает соблазн просто скопировать модули ИС МП (Информационной системы маркировки продукции) в «1С:Розница 1.0».

Вариант 3. Облегченная самостоятельная доработка «1С:Розница 1.0»
Этот вариант предполагает, что мы отказываемся от полноценного обмена с ГИС МТ через саму программу 1С. Все операции по приемке накладных (УПД) и списанию кодов маркировки осуществляются вручную в личном кабинете «Честного Знака» или через веб-интерфейс оператора ЭДО. В самой 1С дорабатывается исключительно блок розничных продаж (РМК): сканирование кода DataMatrix и передача его в кассовый аппарат для печати чека.

Вариант 4. Гибридная схема (Бэк + Фронт)
Учет и доработки остаются в старой «1С:Розница 1.0» (она выступает в роли бэк-офиса). На рабочие места кассиров (фронт-офис) устанавливается легкое современное ПО, например, «1С:РМК» или автономные смарт-терминалы. Между базами настраивается простой односторонний обмен: из Розницы 1.0 на кассы выгружаются товары и цены, а обратно загружаются отчеты о розничных продажах. Этот вариант идеален при жестких требованиях к стабильности кассовой зоны.

---

Техническая реализация облегченной интеграции в «1С:Розница 1.0»

Если принято решение идти по пути Варианта 3 (облегченная доработка), нам потребуется решить две ключевые технические задачи: научить программу корректно считывать и разбирать двухмерный код DataMatrix, а также передавать этот код в обработку обслуживания ККТ для формирования фискального признака в чеке.

Рассмотрим по шагам, как это реализовать на встроенном языке «1С:Предприятие 8».

Шаг 1. Настройка и подключение 2D-сканера

Для работы с маркировкой необходим 2D-сканер штрихкодов, поддерживающий чтение формата DataMatrix GS1. На уровне 1С сканер должен быть подключен в режиме эмуляции COM-порта (через драйверы 1С или сторонние решения, например, АТОЛ). Это необходимо для того, чтобы программа могла перехватывать событие сканирования программно, не требуя фокуса ввода в текстовом поле.

Шаг 2. Разбор штрихкода DataMatrix в модуле 1С

При сканировании маркированного товара сканер передает в систему строку, содержащую различные группы данных (идентификаторы применения AI). Нам необходимо вычленить из этой строки чистый код маркировки, очистить его от лишних спецсимволов и разделителей (таких как символ GS с кодом 29).

Проанализируем пример функции разбора штрихкода DataMatrix на встроенном языке:


Функция РазобратьКодМаркировки(Знач ИсходныйШтрихкод) Экспорт
    
    Результат = Новый Структура;
    Результат.Вставить("Успешно", Ложь);
    Результат.Вставить("GTIN", "");
    Результат.Вставить("СерийныйНомер", "");
    Результат.Вставить("ОчищенныйКод", "");
    
    // Удаляем возможные символы GS (код символа 29)
    СимволGS = Символ(29);
    ОчищеннаяСтрока = СтрЗаменить(ИсходныйШтрихкод, СимволGS, "");
    
    // В зависимости от товарной группы длина и структура кода могут отличаться.
    // Рассмотрим стандартный шаблон GS1 для шин и обуви:
    // (01) GTIN [14 символов] + (21) Серийный номер [13 символов]
    
    Если Лев(ОчищеннаяСтрока, 2) = "01" Тогда
        GTIN = Сред(ОчищеннаяСтрока, 3, 14);
        
        // Ищем идентификатор серийного номера (обычно начинается с "21")
        ОстатокСтроки = Сред(ОчищеннаяСтрока, 17);
        Если Лев(ОстатокСтроки, 2) = "21" Тогда
            СерийныйНомер = Сред(ОстатокСтроки, 3, 13);
            
            Результат.GTIN = GTIN;
            Результат.СерийныйНомер = СерийныйНомер;
            // Формируем чистый код для передачи в ККТ
            Результат.ОчищенныйКод = "01" + GTIN + "21" + СерийныйНомер;
            Результат.Успешно = Истина;
        КонецЕсли;
    КонецЕсли;
    
    Если Не Результат.Успешно Тогда
        // Если код не соответствует стандартному шаблону, возвращаем исходный для прямой передачи
        Результат.ОчищенныйКод = ИсходныйШтрихкод;
        Результат.Успешно = Истина;
    КонецЕсли;
    
    Возврат Результат;
    
КонецФункции

Шаг 3. Доработка интерфейса кассира (РМК)

В рабочем месте кассира (РМК) при подборе товара по штрихкоду необходимо добавить проверку: является ли сканируемый товар маркированным. Для этого в карточку номенклатуры (или в свойства/категории) предварительно добавляется признак «Маркируемый товар».

Рассмотрим алгоритм обработки события сканирования в форме РМК:


Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные)
    
    ПолученныйШтрихкод = СокрЛП(Данные);
    
    // Проверяем, открыта ли смена и активна ли корзина
    Если Не СменаОткрыта() Тогда
        Предупреждение("Смена не открыта!");
        Возврат;
    КонецЕсли;
    
    // Пытаемся найти номенклатуру по обычному штрихкоду
    НоменклатураСсылка = НайтиНоменклатуруПоШтрихкоду(ПолученныйШтрихкод);
    
    Если ЗначениеЗаполнено(НоменклатураСсылка) Тогда
        // Это обычный штрихкод товара EAN-13
        Если НоменклатураСсылка.Маркируемый Тогда
            // Товар требует маркировки, просим кассира отсканировать марку
            КодМарки = ЗапроситьКодМаркировкиСЭкрана();
            Если КодМарки = "" Тогда
                Возврат; // Отмена добавления
            КонецЕсли;
            ДобавитьТоварВЧек(НоменклатураСсылка, КодМарки);
        Иначе
            ДобавитьТоварВЧек(НоменклатураСсылка, "");
        EndIf;
    Иначе
        // Возможно, кассир сразу отсканировал код маркировки DataMatrix
        СведенияОМарке = РазобратьКодМаркировки(ПолученныйШтрихкод);
        Если СведенияОМарке.Успешно Тогда
            НоменклатураСсылка = НайтиНоменклатуруПоGTIN(СведенияОМарке.GTIN);
            Если ЗначениеЗаполнено(НоменклатураСсылка) Тогда
                ДобавитьТоварВЧек(НоменклатураСсылка, СведенияОМарке.ОчищенныйКод);
            Иначе
                Предупреждение("Товар с GTIN " + СведенияОМарке.GTIN + " не найден в базе данных!");
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;
    
КонецПроцедуры

Шаг 4. Передача кода маркировки в онлайн-кассу (ККТ)

Для того чтобы Честный Знак зафиксировал продажу, код маркировки должен быть передан в кассовый аппарат и отправлен через ОФД. В старых обработках обслуживания ККТ (купленных на Инфостарте или написанных самостоятельно) необходимо найти процедуру формирования XML-пакета чека или вызова метода драйвера ДобавитьТовар (в зависимости от требований драйвера АТОЛ или Штрих-М).

В современных фискальных накопителях и драйверах для передачи марки используется специальный реквизит (тег 1162 для старых ФФД или структура разбора для ФФД 1.2). Нам необходимо передать туда очищенный код маркировки в байтовом представлении или в виде строки.

Пример изменения структуры XML, передаваемой в обработку торгового оборудования АТОЛ:


// В процедуре формирования XML для ККТ добавляем атрибут маркировки
ЗаписьXML.ЗаписатьНачалоЭлемента("FiscalString");
ЗаписьXML.ЗаписатьАтрибут("Name", СтрокаТовара.Номенклатура.Наименование);
ЗаписьXML.ЗаписатьАтрибут("Quantity", СтрокаТовара.Количество);
ЗаписьXML.ЗаписатьАтрибут("PriceWithDiscount", СтрокаТовара.Цена);
ЗаписьXML.ЗаписатьАтрибут("SumWithDiscount", СтрокаТовара.Сумма);
ЗаписьXML.ЗаписатьАтрибут("Department", 1);
ЗаписьXML.ЗаписатьАтрибут("Tax", "none"); // НДС

Если ЗначениеЗаполнено(СтрокаТовара.КодМаркировки) Тогда
    // Передаем шестнадцатеричное или строковое представление кода маркировки
    // Для АТОЛ 10-й версии это может быть атрибут "MarkingCode"
    ЗаписьXML.ЗаписатьАтрибут("MarkingCode", ПолучитьHexПреобразование(СтрокаТовара.КодМаркировки));
КонецЕсли;

ЗаписьXML.ЗаписатьКонецЭлемента(); // FiscalString

---

Архитектура модулей при самостоятельной разработке

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

  1. Справочник «ШтрихкодыУпаковок»: Необходим для хранения считанных марок и привязки их к документам поступления и реализации. Это позволит избежать повторных продаж одной и той же марки.
  2. Общий модуль «МаркировкаСервер»: Здесь будут размещены функции по валидации КМ (проверка контрольных символов), разбору структуры GS1 и формированию JSON-запросов, если в будущем вы решите настроить базовое API с Честным Знаком.
  3. Регистр сведений «СтатусыМаркированныхТоваров»: Позволит контролировать, какие марки находятся на складе, какие проданы, а какие списаны. Это убережет от штрафов за продажу товаров, не введенных в оборот.

---

Оценка рисков и долгосрочной поддержки

Прежде чем программист приступит к работе по Варианту 3, руководство компании должно четко осознавать следующие риски:

Резюме: Если у вас небольшой магазин с оборотом в несколько сотен шин в месяц, доработка «1С:Розница 1.0» под сканирование на кассе и ручная приемка в Личном кабинете Честного Знака — это вполне рабочий, экономически оправданный костыль на короткую дистанцию. Однако, если бизнес планирует масштабироваться, лучшим решением будет переход на «1С:Розницу 2.3/3.0» через веб-клиент (для экономии на железе рабочих мест) либо развертывание гибридной схемы с использованием современного кассового фронт-офиса.

← На главную