О штрихкодировании документов. Штрихкодирование в «1С»: как просто загрузить документы в базу Настройка поиска по штрих коду 1с

Решение задачи обработки и сбора информации штрихкодированного товара нередко приходится производить в условиях большой удаленности объектов считывания от рабочего места оператора. В этих случаях возможно использование переносных устройств с оперативной памятью (терминалы сбора данных), промышленных сканеров штрих-кода, сканеров, использующих радиоканал для передачи данных на расстояние.

К сожалению, стоимость подобных устройств оставляет желать лучшего. Организация удаленного считывания штрихкодов с использованием вышеперечисленных устройств составляет от $600 до $1200 за ОДНУ удаленную точку и зависит от расстояние до компьютера-приемника.
Наша разработка позволяет организовать считывание и обработку информации в 1с со штрих-кодов, расположенных на значительном (до 1 км.) расстоянии от компьютера-приемника. Система легко интегрируется в 1С:Предприятие версия 8 (любая конфигурация 1с 8 , 8.1 - Управление Торговлей, УПП, Розница 8) и не требует использования нестандартного оборудования. Дистрибутив системы - небольшой файл объемом 1MB. Возможно использование КПК.

В пользу этого решения говорит прежде всего его низкая стоимость. Совокупные затраты на установку и программное обеспечение составляют $400-$500, стоимость подключения одного удаленного сканера штрих-кода - $30-$40.

Для сравнения - такое же решение на основе терминала сбора данных составляет $600 только для одной точки! Стоимость решения с использованием сканеров на радиоканале уже приближается к $1000-1200 для одной удаленной точки.

Система успешно внедрена и применяется на крупном оптовом складе электроники, расположенном в г.Щелково.

На рис.1 приведена типичная структурная схема решения с использованием следующей аппаратной базы:

  • ПК Pentium 1500 Mhz;
  • Плата расширения;
  • Конвертеры удаленного сбора данных
  • Сканеры штрих-кодов Cypher
  • Программное обеспечение для оранизации обработки информации
  • Ниже приведена примерная смета по расходам на оборудование и программное обеспечение,установку 1с предприятия, необходимое для подключения 10 удаленных сканеров штрих-кодов.

    Статья Кол-во Стоимость
    Мультипортовая плата расширения 1 $100
    Конвертеры удаленного сбора данных 20 $400
    Сканеры штрих-кодов Cipher Lab. 10 $600
    Установка программного обеспечения. 1 $400
    Монтаж и прокладка кабеля 1 $100

    ИТОГО

    $1 600


    Вид на склад из окна операторской комнаты


    Монтажный шкаф


    Монтажный шкаф с мультипортовой платой.


    Склад из окна операторской комнаты


    Контроллеры подключения сканеров штрих-кода.

    Для быстрого и безошибочного проведения платежей физических лиц необходимо, чтобы данные с платежного документа, предъявленного в банк для оплаты, могли автоматически обрабатываться банком.

    С этой целью в системе "1С:Предприятие 8" реализован национальный стандарт штрихкодирования платежных реквизитов, разработанный Некоммерческим партнерством "Национальный платежный совет" совместно со Сбербанком России. Это позволило совершать платежи быстро и без ошибок.

    Процедура оплаты предусматривает три шага:

    • в системе "1С:Предприятие 8" печатает платежный документ с QR-кодом;
    • плательщик производит оплату путем автоматического сканирования данных удобным для него способом (Платежный терминал; Мобильный интернет-банк; Отделение Банка);
    • денежные средства за оказанные услуги поступают на счет получателя.

    При этом исключена вероятность ошибочной привязки платежа к чужому лицевому счету - в QR-коде содержится вся информация, необходимая для однозначного определения как потребителя, так и поставщика услуг. Оплачивая свои счета по квитанциям с двумерным кодом, плательщик может быть спокоен - его деньги обязательно дойдут по назначению.

    В отличие от обычных квитанций, обработка документов с QR-кодом занимает считанные секунды, ошибки операциониста при этом исключены. Такие квитанции принимаются к оплате в Сбербанке, а также в ряде других банков и финансовых организациях, поддержавших стандарт: ВТБ, Альфа-банк, КиберПлат, Почта России и др.

    Фирма "1С" реализовала поддержку QR-кода на уровне "Библиотеки стандартных подсистем" "1С:Предприятия 8". Функция печати QR-кода предоставляется в рамках договора информационно-технологического сопровождения 1С:ИТС и может быть легко встроена в любое прикладное решение системы. Подробную инструкцию по созданию платежных документов с QR-кодом можно получить на сайте http://www.sbqr.ru/standard/files/QR_code_in_1C.pdf .

    Готовые формы с QR-кодами реализованы в настоящее время в следующих решениях системы "1С:Предприятие 8":

    • - документы ПД-4, Заявление физического лица на перевод денежных средств, Счет на оплату.
    • "1С:Учет в управляющих компаниях ЖКХ, ТСЖ и ЖСК" – квитанция на оплату услуг ЖКХ.
    • "1С:Расчет квартплаты и бухгалтерия ЖКХ" – квитанция на оплату услуг ЖКХ

    Формы этих документов используются службами ЖКХ, государственными и муниципальными учреждениями для выставления квитанций на оплату госпошлин, услуг ЖКХ, услуг дошкольного и дополнительного образования и т. п. Провести платеж по квитанциям с QR-кодом можно за считанные секунды в любом отделении Сбербанка, а также в ряде других банков и финансовых организаций.

    На написание данной статьи меня побудили 2 факта:

    Начну я с наверно самого распространенного способа штрихкодирования – составление штрихкода «на лету» на основе параметров документа . Этот метод я называю «классическим». Основной принцип этого подхода заключается в том, что штрихкод (далее по тексту может использоваться сокращение ШК) формируется из некоторого набора ключевых полей, под каждое из которых отводится сколько-то символов. «Классический» вариант структуры штрихкода:

    • Код вида документа (заказ, реализация, доверенность и т.п.) – обычно от 1 до 3-х символов.
    • Код организации (по сути, замена кириллического префикса в номере документа) – обычно от 1 до 3-х символов.
    • Номер документа без префикса – от 6 до 9 символов.
    • Дата документа – от 6 до 8 символов в зависимости от варианта представления (год кодируется 2-мя или 4-мя цифрами).
    В целом на первый взгляд все здорово: учли все многообразие видов документов, различные организации, нумерацию, дату - на выходе получим уникальный ШК, который однозначно идентифицирует документ. Но сразу же очевидны и минусы: при обработке штрихкода требуется его обратное преобразование, расшифровка, получение тех самых ключевых полей, который изначально в него зашифровали. И обычно никто не заморачивается на тему реализации универсального алгоритма, настраиваемого параметрически в пользовательском режиме. Хотя вообще то никто не мешает создать некую структуру данных с указанием соответствия цифрового кода объекту метаданных, в организациях можно добавить поле с названием например «код организации для штрихкода» и т.п. Обычно все делается на скорую руку и эти вещи полностью или частично описываются хардкодом. Ну то есть прямо в коде написано что-то типа:

    ДокументТип = "000";
    Если ТипЗнч(Документ)=Тип("ДокументСсылка.РеализацияТоваровУслуг") Тогда
    ДокументТип = "001";
    ИначеЕсли ТипЗнч(Документ)=Тип("ДокументСсылка.ЗаказПокупателя") Тогда
    ДокументТип = "002";
    КонецЕсли;

    К чему все это приводит? Очевидно: к тому, что при любом изменении набора ключевых параметров (как то необходимость вывести штрихкод на новый тип документа, появление новой организации и т.п.) нужно править код. А если есть еще и обмен с другими базами и там тоже нужен поиск документа по штрихкоду, то количество мест, где надо изменить код растет, а вместе с ним растет и вероятность ошибки – забыли адаптировать код, адаптировали но с ошибкой и т.д. и т.п.
    Мало того. Бывает еще и такое, что например менеджер ошибся при заведении заказа в базу, указал не ту организацию, после чего зашел бухгалтер (ну или любой другой пользователь с соответствующими правами) и организацию изменил. Очевидно, что теперь при печати документа штрихкод будет уже совершенно другим и по ранее распечатанной бумаге документ в базе найти не удастся. В течение нескольких дней после изменения организации это может и не вызвать проблем, а через полгода кто вспомнит об этом случае?

    Основная идея метода, который я предлагаю и который успешно используется в нескольких организациях заключается в следующем: штрихкод должен быть отдельным полем и он должен храниться в базе . Не нужно привязывать его ни к номеру ни к дате ни к другим полям, так как значения этих полей в принципе могут измениться. Понятно, что нужно гарантировать уникальность штрихкодов, поэтому добавление реквизита «штрихкод» в документ – плохая идея. Да и к тому же выше я уже писал, что штрихкодировать надо разные виды документов – добавлять реквизит во все просто глупо. Очевидное решение: регистр сведений с единственным измерением типа строка – Штрихкод и ресурсом Документ составного типа. Можно указать фиксированный набор документов, либо же тип ДокументСсылка, либо вообще ЛюбаяСсылка. Явным преимуществом такой архитектуры является гарантия уникальности штрихкода на уровне платформы – ни при каких обстоятельствах не получится записать в базу 2 строки с одинаковым ШК и разными документами. Другой вопрос конечно, что можно изменить существующую запись (то есть фактически переприсвоить штрихкод другому документу и таким образом можно получить бумажные варианты 2-ух различных документов с одинаковым ШК) – но тут уже вопрос ограничения прав доступа + грамотно написанный код, который не допустит такого развития событий.

    Итак, архитектура понятна, теперь детали: как получить уникальный ШК? Можно конечно попробовать использовать просто сквозной нумератор, начать с 1 и каждый раз прибавлять на единичку – так тоже можно, но я решил использовать произвольный набор цифр. Точнее не совсем произвольный. ШК получается из уникального идентификатора документа, коим является . Как известно, GUID состоит из 32 значимых символов (цифры и буквы латинского алфавита) + разделители (тире), общая длина 36 символов. По этой причине запихнуть в ШК весь GUID не представляется возможным – потому что на документе ШК заведомо ограниченного размера, могут возникнуть сложности при считывании столь длинного ШК. К тому же, если использовать кодировку GODE128, то количество штрихов на любые символы кроме цифр ровно в 2 раза больше, чем на кодирование цифры. Да и кроме того, ШК такой длины видится избыточным, обычно должно хватать 12-15 символов чтобы обеспечить запас для кодирования документов. Соответственно, решение такое: из GIUD убрать все кроме цифр. Полученный набор цифр довести до нужной длины. В зависимости от количества документов на единицу времени в организации обычно должно хватить 12-15 символов. Полученный таким образом ШК при помощи запроса предварительно проверяется на уникальность – ведь мы же обрезали GUID, уникальность которого гарантирована, стало быть, полученный обрезанный набор цифр уже может оказаться неуникальным и его надо предварительно проверить. Если проверка пройдена – отлично, мы получили искомый ШК, если нет – генерируем ШК на основе произвольного GUID до тех пор, пока не получим уникальный ШК. В конце статьи приведен код, который все это реализует. Сама запись штрихкода происходит по подписке на событие.

    При обмене данными с другими системами передается так же и ШК в числе прочих полей. Кстати, учитывая, что ШК уникален, по нему можно вести синхронизацию. В базе-приемнике ШК может быть реквизитом документа. Естественно, уникальность ШК проверяется только в головной базе, база-приемник просто получает готовый ШК и сохраняет его.

    О плюсах данного полхода . Главный плюс – это универсальность. Нет зависимости от количества организаций в базе, добавление штрихкодирования нового вида документов делается легко и просто. При желании, можно управлять этим параметрически в режиме пользователя – создать структуру данных, где будет храниться перечень документов, к которым нужно генерировать штрихкод. То же самое и при поиске документа по ШК – никакого разбора не требуется, ведется поиск на равенство, сам алгоритм поиска универсальный и не потребует доработок. При чем во всех базах, участвующих в обмене (опять таки, оговорюсь: при условии, что существует «головная» база, которая генерирует ШК и гарантирует их уникальность, в базах-приемниках ШК генерироваться не должны, только получаться вместе с обменом).

    Исходный код:

    Функция ПроверитьЗаписатьШтрихкодДокумента(СсылкаНаОбъект) Экспорт

    Результат = Ложь;

    // первое: получим штрихкод из GUID-а, чтобы сразу в запросе проверить его уникальность, дабы убрать лишний запрос к БД
    GUID = СсылкаНаОбъект.УникальныйИдентификатор();
    Штрихкод = ПодготовитьШтрихКодИзGIUDа(GUID);

    // второе: проверяем наличие штрихкода, а так же уникальность кода в пакетном запросе
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |ИЗ
    |ГДЕ
    | ШтрихкодыДокументов.Документ = &Документ
    |;
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    | ШтрихкодыДокументов.Штрихкод
    |ИЗ
    | РегистрСведений.ШтрихкодыДокументов КАК ШтрихкодыДокументов
    |ГДЕ

    Результат = Запрос.ВыполнитьПакет();

    ВыборкаДетальныеЗаписи = Результат.Выбрать();

    Если ВыборкаДетальныеЗаписи.Следующий() Тогда
    // штрихкод есть - возвращаем Истину
    Возврат Истина
    КонецЕсли;

    // третье: штрихкода нет - запишем
    // сначала проверим ШК на основе GUID на уникальность:
    ВыборкаУникальность = Результат.Выбрать();
    Если ВыборкаУникальность.Следующий() Тогда
    // ШК не уникален. генерируем новый
    КодУникален = Ложь;
    Пока НЕ КодУникален Цикл
    Штрихкод = ПодготовитьШтрихКодИзGIUDа(Новый УникальныйИдентификатор);

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ШтрихкодыДокументов.Штрихкод
    |ИЗ
    | РегистрСведений.ШтрихкодыДокументов КАК ШтрихкодыДокументов
    |ГДЕ
    | ШтрихкодыДокументов.Штрихкод = &Штрихкод";

    Запрос.УстановитьПараметр("Штрихкод", Штрихкод);
    Результат = Запрос.Выполнить();
    КодУникален = Результат.Пустой();
    КонецЦикла;
    КонецЕсли;

    ЗаписьРегистра = РегистрыСведений.ШтрихкодыДокументов.СоздатьМенеджерЗаписи();
    ЗаписьРегистра.Документ = СсылкаНаОбъект;
    ЗаписьРегистра.Штрихкод = Штрихкод;
    ЗаписьРегистра.GUID = GUID;
    ЗаписьРегистра.ДатаСоздания = ТекущаяДата();
    ЗаписьРегистра.Пользователь = ПараметрыСеанса.ТекущийПользователь;
    Попытка
    ЗаписьРегистра.Записать();
    Результат = Истина;
    Исключение
    Результат = Ложь;
    КонецПопытки;

    Возврат Результат;

    КонецФункции

    Функция ПодготовитьШтрихКодИзGIUDа(фGIUD, фДлина = 12)

    ФШтрихКод = фGIUD;

    ФШтрихКод = СтрЗаменить(фШтрихКод, "-", "");
    фШтрихКод = СтрЗаменить(фШтрихКод, "a", "");
    фШтрихКод = СтрЗаменить(фШтрихКод, "b", "");
    фШтрихКод = СтрЗаменить(фШтрихКод, "c", "");
    фШтрихКод = СтрЗаменить(фШтрихКод, "d", "");
    фШтрихКод = СтрЗаменить(фШтрихКод, "e", "");
    фШтрихКод = СтрЗаменить(фШтрихКод, "f", "");

    ФШтрихКод = Лев(фШтрихКод, фДлина);

    // на случай, если штрихкод оказался меньше нужной длины, дополняем его ведущими нулями
    Пока СтрДлина(фШтрихКод) < фДлина Цикл
    фШтрихКод = "0" + фШтрихКод;
    КонецЦикла;

    Возврат фШтрихКод;

    КонецФункции //ШтрихКодНовый()

    Система «Корпоративный документооборот» содержит механизм штрихкодирования документов предприятия. Штрихкодирование осуществляется с помощью программного кода системы, а также специализированной компоненты (работает под ОС Windows и Linux) которая выполняет рендеринг штрихкода в изображение в формате jpg.

    Для включения возможности использовать штрих-коды в системе документооборота необходимо в настройках подсистемы «Администрирование системы» включить флажок «Использовать штрихкоды». После включения штрихкодирования появляется возможность настроить сканер, в том числе указать COM порт, скорость и другие параметры. Флажок находится в форме «Настройка параметров: Система», закладка «Общие параметры».

    нажмите на картинку для увеличения

    Примечание: Если вы используете простой сканер штрихкодов, эмулирующий нажатия цифровой клавиатуры и не подключенный по COM порту (или через его эмуляцию), то настраивать оборудование не потребуется. Но в таком случае не будет возможности автоматически вызывать обработки внешнего события от сканера при сканировании кода, такие обработки нужно будет предварительно запускать вручную (например, нажатием Shift+I) в интерфейсе системы документооборота.

    На рисунке ниже показан пример размещения тега для вывода изображения штрихкода документа.

    После размещения тега в тексте шаблона можно выполнять обычное формирование содержимого документа при открытии файла из корпоративного документа.

    На рисунке ниже приведен пример сформированного по шаблону документа. В данном документе заполнены не только обычные параметры, но и выведен штрихкод (в указанном в шаблоне месте).

    Аналогично осуществляется ввод данных и в OpenOffice Writer.

    Прочие возможности штрихкодирования

    Система документооборота поддерживает возможность присвоения штрих-кодов, сформированных в других системах. Такие штрихкоды могут быть получены с документами из сторонних систем, например от контрагентов.

    Для присвоения штрихкода документу можно необходимо выбрать в меню «Все действия» пункт «Штрихкоды Добавить внешний штрихкод». Пример расположения такого пункта приведен на рисунке, расположенном ниже.

    Существует возможность сохранения присвоенного штрихкода в файл формата jpg. Для этого необходимо выбрать пункт «Штрихкоды Сохранить штрихкод».

    Связанные с объектами штрихкоды начинаются с зарезервированного префикса «2». При необходимости все штрихкоды системы можно посмотреть в регистре сведений «Штрихкоды».

    Для поиска документов по штрихкоду в системе можно воспользоваться специальной обработкой, открыть её можно либо в подсистеме «Актуальные документы» либо нажав в любом месте программы сочетание клавиш «Shift+I».

    В случае, если в системе существует несколько документов с одинаковым штрихкодом, пользователю будет предложен выбор из списка таких документов. Одинаковые штрихкоды могут появиться например, в случае получения документов с одинаковым кодом от разных контрагентов.



    Просмотров