При работе в конфигурации «Торговля и Склад» (релиз 9.2) на платформе 1С 7.7 пользователи часто сталкиваются с загадочным поведением программы: при печати ценников или прайс-листов штрихкод для части товаров выводится корректно, а для других — остается пустое место, хотя в карточке товара данные заполнены. Рассмотрим подробнее, почему это происходит и как наладить стабильную печать торгового оборудования.
Для начала разберем, что представляет собой стандарт EAN-13. Это самый распространенный формат штрихкодирования в розничной торговле. Он состоит из 13 цифр, но важно понимать, что только первые 12 из них несут информацию о товаре и производителе. Тринадцатая цифра — это контрольный символ, который вычисляется по строгому математическому алгоритму на основе предыдущих двенадцати цифр.
Проанализируем ситуацию, описанную в теме: если при изменении последней цифры штрихкод начинает печататься, а при установке цифры «9» исчезает — это верный признак того, что контрольное число в базе данных не соответствует стандарту. Внешняя компонента печати 1CBarCod.dll, которая используется в 1С 7.7, имеет встроенный механизм валидации. Если она получает строку из 13 цифр, где последняя цифра не совпадает с расчетной, она просто блокирует отрисовку объекта, чтобы не допустить печать заведомо нечитаемого кода.
Чтобы выяснить причину ошибки, давайте вместе пройдем по шагам алгоритма расчета контрольного знака (Modulo 10):
Если поставщик прислал вам код, в котором 13-я цифра — 9, а расчет по алгоритму выше дает 6, то компонента 1С откажется его печатать. Такой штрихкод считается «битым».
Если ваша задача — напечатать именно то, что прислал поставщик (например, если на товаре уже наклеены такие этикетки и вы не можете их менять), можно пойти на техническую хитрость. Разберем, как сменить формат кодирования.
Формат Code128 — это более гибкий стандарт, который позволяет кодировать любую последовательность цифр и букв без обязательной привязки к контрольной сумме EAN. Большинство современных сканеров штрихкода легко распознают оба формата автоматически.
Для реализации этого решения выполним следующие действия:
ActiveX (штрихкод) на листе.EAN-13 на Code128.В этом случае компонента перестанет проверять математическую корректность цифр и просто отрисует их «как есть».
Иногда проблема кроется в том, что штрихкод поставщика изначально принадлежит к американскому стандарту UPC-A. Он состоит из 12 цифр. При попытке записать его в поле EAN-13, система может автоматически добавлять в начало ноль или, наоборот, обрезать знаки.
Проанализируем ситуацию: если у вас в базе 13 цифр, попробуйте временно убрать последнюю и посмотреть, как ведет себя печатная форма. Если при 12 цифрах 1С сама достраивает штрихкод и печатает его — значит, программный код в конфигурации настроен на автовычисление контрольного символа. В этом случае достаточно хранить в базе только значащие цифры, а компонента сама добавит нужную 13-ю при выводе на печать.
Выясним еще одну неочевидную причину: физический размер объекта в печатной форме. Штрихкод — это графический объект, плотность штрихов в котором зависит от комбинации цифр. Цифры 7, 8 и 9 в формате EAN-13 визуально «шире», чем 1 или 2.
Если рамка объекта в таблице 1С слишком узкая, компонента может столкнуться с нехваткой места для отрисовки «тихих зон» (белых полей по краям кода). В 1С 7.7 это часто приводит к тому, что объект просто исчезает. Попробуйте растянуть границы ячейки и самого объекта штрихкода в макете — если после этого код со значением «9» на конце появится, значит проблема была в размерах.
Для программиста 1С 7.7 будет полезно внедрить небольшую функцию проверки перед печатью. Это позволит избежать пустых мест в прайсе. Рассмотрим пример логики на языке 1С:
// Пример проверки валидности штрихкода перед выводом в таблицу
Функция ПроверитьШК(Знач ТекШК)
Если СтрДлина(ТекШК) <> 13 Тогда
Возврат 0; // Неверная длина
КонецЕсли;
// Здесь можно реализовать алгоритм Modulo 10
// Если контрольный символ не совпадает - выводить предупреждение
// или программно менять тип объекта на Code128
КонецФункции
Важный совет: Если товар предназначен для реализации в крупных торговых сетях, использование некорректных штрихкодов или замена их на Code128 может привести к штрафам. В такой ситуации единственно правильное решение — требовать от поставщика корректные данные GTIN, соответствующие международному стандарту GS1.
Если в вашем прайс-листе не печатаются штрихкоды, последовательно проверьте три фактора:
1. Математическую верность 13-го знака (используйте любой онлайн-генератор EAN-13 для проверки).
2. Тип штрихкода в свойствах объекта (попробуйте переключить на Code128 для "кривых" кодов).
3. Размеры объекта в макете таблицы (увеличьте ширину ячейки).