При автоматизации документооборота часто возникает задача идентификации каждой печатной страницы. Особенно это актуально для многостраничных документов, таких как Универсальный передаточный документ (УПД). Чтобы в дальнейшем система распознавания могла сопоставить скан конкретного листа с объектом в базе 1С, необходимо разместить штрихкод (ШК) на каждой странице. В данной статье мы разберем основные методы решения этой задачи для платформы 1С:Предприятие 8 на примере конфигурации «Управление торговлей 10.3».
Рассмотрим стандартный механизм 1С. Системные колонтитулы (верхний и нижний), которые настраиваются через свойства страницы табличного документа, имеют существенное ограничение: они поддерживают только текстовый формат. Вы не можете напрямую вставить туда объект Рисунок или компонент 1С:Печать штрихкодов. Проанализируем два основных пути решения этой проблемы: использование специализированных шрифтов и программное управление выводом страниц.
Этот метод является самым быстрым в реализации, так как позволяет использовать стандартный механизм колонтитулов 1С. Суть заключается в том, что мы устанавливаем в операционную систему специальный шрифт (например, EAN13, Code128 или так называемый «налоговый шрифт»), который преобразует символы в полоски штрихкода.
Разберем по шагам, как это реализовать:
Code128 строка может выглядеть как {12345}.
ТабДок.НижнийКолонтитул.Выводить = Истина;
ТабДок.НижнийКолонтитул.ТекстСправа = ПодготовленнаяСтрокаШтрихкода;
ТабДок.НижнийКолонтитул.Шрифт = Новый Шрифт("EanGnat", 12);
Важный момент: Штрихкод-шрифт должен быть установлен на всех серверах и рабочих станциях, где формируется печатная форма. Если шрифта не будет в системе, вместо штрихкода напечатаются обычные цифры или буквы.
Если использование шрифтов невозможно (например, из-за политик безопасности или необходимости использовать QR-коды), мы применяем метод программного расчета высоты страницы. Этот метод считается более профессиональным и гибким, так как позволяет вставлять полноценные графические объекты Рисунок.
Проанализируем алгоритм реализации:
ШапкаЛиста, Строка и ПодвалЛиста. В области ПодвалЛиста размещается объект штрихкода (картинка).
Для Каждого СтрокаТЧ Из Товары Цикл
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
// Заполнение параметров строки...
МассивВыводимыхОбластей = Новый Массив;
МассивВыводимыхОбластей.Добавить(ОбластьСтрока);
МассивВыводимыхОбластей.Добавить(ОбластьПодвалЛиста); // Обязательно добавляем подвал для проверки
Если Не ТабДок.ПроверитьВывод(МассивВыводимыхОбластей) Тогда
// Если не влезает, выводим подвал текущей страницы и разделитель
ТабДок.Вывести(ОбластьПодвалЛиста);
ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
ТабДок.Вывести(ОбластьШапкаЛиста);
КонецЕсли;
ТабДок.Вывести(ОбластьСтрока);
КонецЦикла;
// Не забываем вывести подвал для последней страницы
ТабДок.Вывести(ОбластьПодвалЛиста);
Этот метод позволяет разместить штрихкод в любом месте: сбоку (повернув его на 90 градусов), в углу или под табличной частью. Современные компоненты распознавания штрихкодов в 1С получают изображение от сканера целиком, поэтому ориентация кода (горизонтальная или вертикальная) для них обычно не имеет значения.
Выясним причины, по которым штрихкод может не распознаться, даже если он напечатан на каждом листе:
В современной практике все чаще вместо линейных штрихкодов (EAN, Code128) используют QR-коды. Рассмотрим, почему это выгодно:
Во-первых, QR-коды обладают встроенной системой коррекции ошибок. Даже если лист помят или частично загрязнен, код все равно будет считан. Во-вторых, QR-код занимает значительно меньше места при том же объеме данных, что критично для плотных форм типа УПД. В-третьих, в QR-код можно зашить не только ссылку на документ, но и дополнительную информацию (организацию, сумму, дату), что упрощает обработку без обращения к базе данных на этапе первичного сканирования.
Подводя итог, выбор метода зависит от ваших технических возможностей. Если нужно быстро — используйте штрихкод-шрифты в колонтитулах. Если нужно надежно и красиво — реализуйте программный вывод через ПроверитьВывод() с использованием графических объектов.