При работе с товарами от иностранных поставщиков пользователи часто сталкиваются с проблемой: штрихкод состоит из 12 символов, но при попытке распечатать этикетку или считать код сканером в 1С возникают ошибки. Система либо добавляет лишние символы, либо сканер отказывается распознавать напечатанный код. В этой статье мы подробно разберем, почему так происходит, и как настроить систему для корректной работы.
Первым делом нам необходимо выяснить причину возникновения проблемы. Штрихкод из 12 цифр — это практически всегда американский стандарт UPC-A. Однако 1С и сканеры часто путают его с другими форматами или пытаются принудительно преобразовать в европейский стандарт EAN-13.
Проанализируем основные причины конфликтов:
ПечатьШтрихкода установлено значение Авто, компонента анализирует длину строки. Видя 12 цифр, она может интерпретировать их как EAN-13, которому «не хватает» одного знака. В результате 1С добавляет ведущий ноль или пересчитывает контрольный символ, что делает код нечитаемым для базы данных.*). Если при печати эти символы не включены в структуру штрихкода, сканер его просто проигнорирует.Рассмотрим, как правильно настроить макет этикетки, чтобы 1С не изменяла данные при выводе на печать. Вместо использования режима Авто, мы рекомендуем жестко задать тип штрихкода в свойствах объекта на макете.
Пошаговый алгоритм настройки:
ТипШтрихкода. Если это чисто цифровой код, попробуем установить Code 128 или UPC-A вместо CODE39. Code 128 является наиболее универсальным и компактным, он не добавляет лишних контрольных символов сам по себе.ОтображатьКонтрольныйСимвол. Если оно включено (Истина), 1С будет пытаться вычислить и дописать лишнюю цифру в конец. Для оригинальных кодов поставщика это свойство лучше отключить.Если мы работаем с макетом программно, проанализируем пример кода, который задает параметры формирования штрихкода:
// Пример настройки параметров объекта печати штрихкода
ОбъектШК = ОбластьМакета.Рисунки.Штрихкод.Объект;
ОбъектШК.ТипШтрихкода = 4; // Соответствует Code 128
ОбъектШК.Сообщение = "123456789012"; // Наш 12-значный код
ОбъектШК.ОтображатьКонтрольныйСимвол = Ложь;
Выясним, почему сканер может не находить номенклатуру, даже если код на этикетке выглядит верно. Часто проблема кроется в настройках «железа». Сканер может быть запрограммирован на трансформацию данных перед передачей их в компьютер.
Рассмотрим параметры, которые нужно проверить в руководстве к вашему сканеру (обычно это делается считыванием специальных сервисных штрихкодов из инструкции):
Иногда проще скорректировать входящие данные от сканера программно, чем перенастраивать десятки устройств в розничной сети. Проанализируем ситуацию, когда сканер всё же присылает лишний ноль, а в базе код лежит без него. Мы можем перехватить событие сканирования и «почистить» данные.
В модуле формы или в обработке ПодключаемоеОборудованиеРТ (в зависимости от версии конфигурации) можно добавить условие:
// Обработка данных, полученных от сканера штрихкодов
ДанныеШК = Данные.Штрихкод;
Если СтрДлина(ДанныеШК) = 13 И Лев(ДанныеШК, 1) = "0" Тогда
// Если получили 13 символов с ведущим нулем, обрезаем его для поиска
ПоисковыйШтрихкод = Сред(ДанныеШК, 2);
Иначе
ПоисковыйШтрихкод = ДанныеШК;
КонецЕсли;
Проанализируем, какой формат печати выбрать, если CODE39 не читается. CODE39 — это дискретный код, который физически занимает много места. Если 12 символов печатаются на узкой этикетке (например, 30х20 мм или 43х25 мм), линии становятся слишком плотными, и бюджетные сканеры не могут их распознать.
Почему Code 128 лучше?
Мы выяснили, что проблема 12-значных кодов в 1С:Розница обычно решается одним из трех способов:
Code 128 или UPC-A с выключенным контрольным символом.UPC-A -> EAN-13.Рекомендуем начать с визуального сравнения: считайте штрихкод поставщика обычным приложением на смартфоне и сравните полученную строку с той, которую выдает ваш сканер в 1С. Это сразу укажет на то, на каком этапе (печать или чтение) происходит искажение информации.