В типовых конфигурациях 1С 7.7 (например, в «Торговля и Склад 7.7») базовый функционал ориентирован преимущественно на линейный формат EAN-13. Однако в реальных бизнес-процессах часто требуется закодировать в штрихкод значительно больше информации: составной номер и дату документа, артикулы нескольких позиций для групповой обработки или уникальные идентификаторы. Разберем подробно, какими способами можно реализовать формирование, печать и считывание штрихкодов повышенной емкости (Code 128, 2D/QR) в среде 1С 7.7.
Стандарт EAN-13 строго ограничен 12 информационными десятичными цифрами и 1 контрольным символом. Попытка поместить в него произвольный текст, буквы или длинный набор чисел технически невозможна. Для передачи расширенных данных применяются два основных подхода:
Рассмотрим основные методы размещения штрихкодов форматов Code 128 или QR-кодов в печатных формах 1С 7.7:
Если в конфигурации используется хранение связок через внутренние числовые идентификаторы формата 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:
ОбработкаВнешнегоСобытия. Параметр Данные принимает всю считанную строку без ограничения в 13 символов.Разберем пример разбора составного штрихкода, содержащего номер и дату документа, разделенные символом ;:
Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные)
Если Событие = "BarCodeRead" Тогда
СтрШК = СокрЛП(Данные);
// Разбираем строку, если используется составной формат с разделителем ";"
СтрШК = СтрЗаменить(СтрШК, ";", РазделительСтрок);
КолвоСтрок = СтрЧислоСтрок(СтрШК);
Если КолвоСтрок > 1 Тогда
НомДок = СокрЛП(СтрПолучитьСтроку(СтрШК, 1));
ДатаДок = СокрЛП(СтрПолучитьСтроку(СтрШК, 2));
// Выполняем поиск или обработку документа по полученным реквизитам
Иначе
// Обработка простого штрихкода
Сообщить("Считан штрихкод: " + СтрШК);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Платформа 1С 7.7 внутренне работает с кодовой страницей Windows-1251 (ANSI). Большинство современных 2D-сканеров передают содержимое QR-кодов и DataMatrix в кодировке UTF-8. Если штрихкод содержит кириллический текст, сканер выдаст нечитаемый набор символов («кракозябры»). Для корректного распознавания выполните одно из действий:
ОбработкаВнешнегоСобытия (например, с использованием объекта ADODB.Stream).