Как в 1С 7.7 работать со штрихкодами длиной более 13 символов

Программист 1С v7.7 Управленческий учет Торговля и дистрибуция
← На главную

В типовых конфигурациях 1С 7.7 (например, в «Торговля и Склад 7.7») базовый функционал ориентирован преимущественно на линейный формат EAN-13. Однако в реальных бизнес-процессах часто требуется закодировать в штрихкод значительно больше информации: составной номер и дату документа, артикулы нескольких позиций для групповой обработки или уникальные идентификаторы. Разберем подробно, какими способами можно реализовать формирование, печать и считывание штрихкодов повышенной емкости (Code 128, 2D/QR) в среде 1С 7.7.

Ограничения стандарта EAN-13 и выбор подходящего формата

Стандарт EAN-13 строго ограничен 12 информационными десятичными цифрами и 1 контрольным символом. Попытка поместить в него произвольный текст, буквы или длинный набор чисел технически невозможна. Для передачи расширенных данных применяются два основных подхода:

  1. Переход на штрихкоды произвольной длины (Code 128, Code 39, QR-код, DataMatrix). Это позволяет напрямую хранить в коде любую текстовую или числовую строку. Например, формат QR-кода способен вмещать до 7089 цифр или до 4296 символов латиницы.
  2. Кодирование уникального идентификатора (ID) записи. Если требуется остаться в рамках EAN-13, в штрихкод помещают только уникальный числовой идентификатор элемента справочника, а все объемные данные (номера документов, даты, состав) хранят в базе данных внутри соответствующей записи.

Способы вывода и печати длинных штрихкодов в 1С 7.7

Рассмотрим основные методы размещения штрихкодов форматов Code 128 или QR-кодов в печатных формах 1С 7.7:

  1. Использование внешней ActiveX-компоненты («1С:Печать штрихкодов»). В таблицу печатной формы вставляется объект OLE/ActiveX. В коде формирования отчета или печатной формы разработчик обращается к свойствам внедренного объекта, передает туда строку произвольной длины и задает тип штрихкода (Code 128, QR, PDF417).
  2. Печать через специализированные шрифты (TrueType Font). Для одномерных кодов (например, Code 128) ячейке печатной формы назначается шрифт штрихкода. Исходная строка должна быть предварительно подготовлена: к ней добавляются стартовые и стоповые символы, а также рассчитывается контрольный символ.
  3. Генерация графического файла. Изображение штрихкода формируется внешней DLL или консольной утилитой и сохраняется во временный графический файл (BMP/PNG), после чего загружается в поле картинки печатной формы 1С 7.7.

Алгоритм расчета контрольного символа для EAN-кодов

Если в конфигурации используется хранение связок через внутренние числовые идентификаторы формата EAN, контрольное число рассчитывается по стандартному алгоритму (модуль 10 с весовыми коэффициентами). Проанализируем пример функции для расчета контрольного символа EAN-13 и EAN-8:


Функция КонтрольноеЧислоЕАН(ШК) Экспорт
    Чет = 0;
    Нечет = 0;
    Если (СтрДлина(ШК) = 12) Или (СтрДлина(ШК) = 13) Тогда
        Для й = 1 По 6 Цикл
            Нечет = Нечет + Число(Сред(ШК, 2*й - 1, 1));
            Чет   = Чет   + Число(Сред(ШК, 2*й, 1));
        КонецЦикла;
        Возврат (10 - (Нечет + Чет*3)%10)%10;
    ИначеЕсли (СтрДлина(ШК) = 7) Или (СтрДлина(ШК) = 8) Тогда
        Для й = 1 По 3 Цикл
            Нечет = Нечет + Число(Сред(ШК, 2*й - 1, 1));
            Чет   = Чет   + Число(Сред(ШК, 2*й, 1));
        КонецЦикла;
        Нечет = Нечет + Число(Сред(ШК, 7, 1));
        Возврат (10 - (Нечет*3 + Чет)%10)%10;
    КонецЕсли;
КонецФункции

Настройка сканирования и обработка внешнего события

При считывании штрихкодов длиной более 13 символов важно учитывать особенности взаимодействия сканера и платформы 1С 7.7:

  1. Режим работы сканера: Сканеры в режиме эмуляции клавиатуры могут обрезать слишком длинные строки из-за ограничений буфера ввода или искажать символы при переключении системной раскладки клавиатуры. Рекомендуется переводить сканер в режим виртуального COM-порта (RS-232 / VCP).
  2. Обработка события в коде: При передаче данных через специализированную компоненту в модуле формы или глобальном модуле перехватывается процедура ОбработкаВнешнегоСобытия. Параметр Данные принимает всю считанную строку без ограничения в 13 символов.

Разберем пример разбора составного штрихкода, содержащего номер и дату документа, разделенные символом ;:


Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные)
    Если Событие = "BarCodeRead" Тогда
        СтрШК = СокрЛП(Данные);
        
        // Разбираем строку, если используется составной формат с разделителем ";"
        СтрШК = СтрЗаменить(СтрШК, ";", РазделительСтрок);
        КолвоСтрок = СтрЧислоСтрок(СтрШК);
        
        Если КолвоСтрок > 1 Тогда
            НомДок = СокрЛП(СтрПолучитьСтроку(СтрШК, 1));
            ДатаДок = СокрЛП(СтрПолучитьСтроку(СтрШК, 2));
            // Выполняем поиск или обработку документа по полученным реквизитам
        Иначе
            // Обработка простого штрихкода
            Сообщить("Считан штрихкод: " + СтрШК);
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

Особенности работы с кодировками при использовании 2D-кодов

Платформа 1С 7.7 внутренне работает с кодовой страницей Windows-1251 (ANSI). Большинство современных 2D-сканеров передают содержимое QR-кодов и DataMatrix в кодировке UTF-8. Если штрихкод содержит кириллический текст, сканер выдаст нечитаемый набор символов («кракозябры»). Для корректного распознавания выполните одно из действий:

  1. Перенастройте сканер штрихкодов с помощью сервисных кодов на принудительную трансляцию символов в кодировку Windows-1251.
  2. Выполняйте программное декодирование входящей строки UTF-8 в Windows-1251 в процедуре ОбработкаВнешнегоСобытия (например, с использованием объекта ADODB.Stream).
  3. Используйте в штрихкодах только латинские буквы, цифры и базовые спецсимволы-разделители, что полностью исключает конфликт кодовых страниц.
← На главную