Штрихкодирование в «1С»: как просто загрузить документы в базу. Внедрения системы штрихкодирования товаров и документов для автоматизации учета Что такое штрихкод, преимущества использования

Тем, кто начинает работу с электронным архивом, первый этап будет самым загруженным: нужно будет внести в базу все уже имеющиеся документы, что означает объемную работу по распознаванию документов.

Зато работа с внесением в базу тех документов, которые были созданы уже с участием «Скан-Архива», будет гораздо проще: в программе это реализовано за счет штрихкодирования документов в «1С».

Как работает штрихкодирование в «1С»

После установки «Скан-Архива» штрихкодирование начинает работать автоматически. Каждый документ при печати автоматически помечается штрихкодом. Когда он вернется к вам от контрагента и вы отсканируете его, «Скан-Архив» распознает свой штрихкод и мгновенно прикрепит скан-копию к нужному документу в базе.

Эта функция доступна во всех версиях программы «Скан-Архив». Пример документа, на который при печати из «1С» добавлен штрихкод:


Смотрите подробнее на видео, как это работает

Штрихкодирование группы документов

Это же касается и группы документов. В информационных базах, работающих в управляемом режиме на платформе 1С:Предприятие 8.3, имеется возможность выделить несколько документов в списке и отправить их на печать. В этом случае печатные формы всех выбранных документов перед выводом на печать объединяются в один печатный документ. И, чтобы штрихкод печатался корректно, необходимо подключить в базу и использовать при печати дополнительную печатную форму «СА: Печать документов со штрихкодами»: она выполняет массовую печать без объединения печатных форм в одну печатную форму.

Для использования печатной формы «СА: Печать документов со штрихкодами» ее надо предварительно подключить в базу как дополнительную обработку. После подключения допобработки она появляется в подменю «Печать» для тех документов, которым она назначена при подключении.

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

Чтобы все сформированные документы вышли на печать с правильными штрихкодами, нужно проставить параметры печати каждого печатного документа (или оставить параметры по умолчанию) и нажать кнопку «Печать».

Не печатаются штрихкоды для документа в «1С»

Если «Скан-Архив» установлен, а штрихкодирование в «1С» не настроено, следует зайти в настройки «Скан-Архива» и на вкладке «Штрихкодирование» проверить: есть ли те документы, которые печатаются. Если есть, то зайти в настройки и проверить печатные формы.

Если печатные формы в порядке, то проверяем следующее: при печати документа, нажимаем «Предварительный просмотр», потом «Параметры страницы», где поля и колонтитулы должны быть по 10 п.

Если с данными настройками также все в порядке, то проверяем модуль «Общие модули» - «Универсальные механизмы» - «Управление печатью». В вызове функции «Сформировать печатные формы» добавленный код от нашей инструкции должен быть размещен до возврата значения из функции.

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

С этой целью в системе "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-кодом можно за считанные секунды в любом отделении Сбербанка, а также в ряде других банков и финансовых организаций.

Штрихкодирование повышает эффективность розничного магазина за счет:

  • Исключения ошибок операторов
  • Уменьшения возможности для махинаций сотрудников
  • Ускорения обслуживания клиентов.

В статье рассмотрим, как настроить штрихкодирование в 1С:Розница редакции 2.

В частности разберем:

Применимость

Статья написана для редакции 1С:Розница 2.1 . Если вы используете эту редакцию, отлично – прочтите статью и внедряйте рассмотренный функционал.

Если же вы планируете начать внедрение 1С:Розница, то скорее всего будет использоваться более свежая редакция. Интерфейсы и её функционал могут отличаться.

Поэтому, мы рекомендуем пройти курс 1С:Розница 2 для автоматизации магазинов и сервисных компаний , это поможет вам избежать ошибок и потери времени / репутации.

Что такое штрихкод, преимущества использования

Прежде всего, для более глубокого понимания, обратимся к базовой теории штрихкодирования товаров.

Что же такое штрихкод?

Штрихкод – это изображение, которое представляет собой набор геометрических символов, расположенных по определенному стандарту. Как правило, это вертикальные прямоугольники различной ширины.

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

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

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

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

Так, ввод артикула товара из 12 цифр нажатием кнопок на клавиатуре может занять у оператора минимум шесть секунд. В то время как считывание штрихкода компьютером занимает лишь доли секунды.

Кроме того, обработка штрихкода компьютером – это гораздо более точная обработка информации. В частности, при ручном вводе в среднем возникает одна ошибка на 300 знаков или цифр артикула. При работе со штрихкодом, нормой является менее одной ошибки на миллион считанных кодов.

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

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

Типы и стандарты штрихкодов

Существует довольно большое количество различных стандартов штрихкодов. Каждый из них имеет свои ограничения и преимущества. Разные стандарты штрихкодов используются обычно для разных целей.

Изначально существовали только линейные штрихкоды. Это тип одномерных штрихкодов, которые можно считать в одном направлении одной линией.

Рассмотрим примеры линейных кодов, с которыми и будем в дальнейшем работать.

Первая группа линейных штрихкодов – это EAN8 и EAN13 (European Article Number). Это европейские стандарты цифрового штрихкода, которые предназначены для кодирования идентификатора товара и производителя.

Штрихкоды данных типов могут хранить только цифровые значения. EAN8 хранит восьмизначное число, EAN13 – тринадцатизначное число. Примеры данных штрихкодов представлены на рисунке 1. В основном мы будем работать с типом штрихкодов EAN13 .

Рис.1 Примеры штрихкодов (EAN8 и EAN13)

На основании штрихкода EAN13 часто строится другой тип штрихкода ITF 14 . Данный тип штрихкода используется для оптовой транспортной упаковки товара. Основное его отличие и преимущество по сравнению с EAN13 заключается в том, что данный тип штрихкода распечатывается в гораздо большем размере.

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

Так как данный тип построен на EAN13 , он тоже хранит только цифровое значение (четырнадцатизначное число). Пример данного штрихкода представлен на рисунке 2.

Рис. 2 Пример штрихкода ITF-14

Следующая группа штрихкодов, которая используется довольно часто – это Code 39/128 и EAN128 . Отличие этих типов, прежде всего в том, что с помощью них можно закодировать не только цифры, но и буквы и даже специальные символы (скобки, знаки подчеркивания и т.д.). Соответственно, и информацию в них можно закодировать более полную.

Но есть и определенные минусы – это большая ширина штрихкода по сравнению с предыдущими типами (см. рис. 3).

Тип штрихкода EAN128 вообще позволяет закодировать в себе неограниченное количество информации, но при этом ширина штрихкода будет соответственно расти.

Рис. 3 Пример штрихкода EAN128

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

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

Данные штрихкоды становятся все более популярными. Наиболее распространенным представителем двумерных штрихкодов является QR код.

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

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

В системе 1С:Розница поддерживается работа только с линейными штрихкодами. Более подробно остановимся на описании использования кодов EAN13 и Code39 .

И сначала приведем их основные отличия.

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

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

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

Код Code39 может считываться только в исходном положении, т.е. если его перевернуть, то он уже не считается.

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

Код Code39 применяется в качестве дополнительного, когда необходимо закодировать буквы и символы (например, для кодирования серий электронных товаров).

Оправданность перемаркировки товаров собственными штрихкодами

Говоря о целесообразности использования собственных штрихкодов следует отметить, что некоторые компании абсолютно все штрихкоды производителей переклеивают собственными внутренними штрихкодами.

Другие компании используют часть штрихкодов производителей, а на части товаров используют внутренний штрихкод.

Безусловно сейчас основная часть розничного ассортимента товаров поступает уже промаркированной каким-то штрихкодом производителя и это как раз штрихкоды EAN13 .

Но здесь возможно несколько ситуаций.

Может получиться так, что разный товар от разных производителей будет иметь один и тот же штрихкод. В данной ситуации нет ничего критичного, и система 1С:Розница даже поддерживает данный вариант использования.

В конфигурации Розница 2 можно настроить возможность учета не уникальных штрихкодов.

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

Это несколько замедляет обработку товаров, а также повышает вероятность операторской ошибки.

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

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

В этом случае также следует создать собственный штрихкод и переклеить этикетку производителя.

Использование штрихкодов в системах 1С

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

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

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

Рассмотрим шаблон внутреннего штрихкода типа EAN13 .

2M LL XXXXXXXX K

Данный тип позволяет закодировать цифровой код, состоящий из 13 цифр. Значащими являются первые 12 из них.

Тринадцатая цифра (K ) является контрольным символом, который рассчитывается автоматически по определенному алгоритму типа EAN13 .

Первой цифрой всегда является цифра 2 – это общепринятое правило формирования внутреннего штрихкода компании.

Вторая цифра (M ) представляет собой префикс штрихкода штучного товара. Именно по нему система 1С:Розница будет понимать, что данный товар является штучным. С этим признаком будут связаны определенные алгоритмы в конфигурации Розница 2.

Третья и четвертая цифры штрихкода (LL ) – двухзначное число, которое является префиксом штрихкода узла распределенной информационной базы.

Оставшиеся цифры с пятой по двенадцатую (XXXXXXXX ) представляют собой номер товара по порядку.

Настройки штрихкодирования

Сначала следует настроить штрихкодирование в системе 1С:Розница .

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

В данном случае нас интересуют Настройки номенклатуры , которые появятся после выбора соответствующей команды (см. рис. 4)

Рис.4 Вызов настроек номенклатуры

В настройках номенклатуры присутствует целая группа настроек, которая связана со штрихкодированием товаров (см. рис. 5).

Рис.5 Группа настроек Штрихкодирование

Первая настройка позволяет включить в системе возможность использования не уникальных кодов.

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

Первый префикс позволяет системе 1С:Розница понять, что данный штрихкод является именно штрихкодом штучного товара.

Если используется распределенная информационная база (РИБ) и существует несколько узлов для разных магазинов, то данное значение префикса будет передаваться при обмене. Это значение будет единым для всех магазинов.

Второй префикс (префикс штрихкода узла РИБ) наоборот не участвует в обмене и имеет разные значения для разных узлов РИБ.

Дело в том, что обмен между разными узлами происходит сеансами, не в режиме реального времени.

Соответственно, если бы данного префикса штрихкода узла РИБ не существовало, то могла бы возникнуть ситуация, когда в разных узлах пользователи создали бы товары с одинаковым штрихкодом – даже если не уникальные штрихкоды были бы запрещены.

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

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

Ввод информации о штрихкодах

Информация о штрихкодах товара вводится из карточки номенклатуры. Команда для открытия списка номенклатуры находится в разделе (см. рис. 6).

Рис. 6 Открытие списка номенклатуры

Рис.7 Форма списка номенклатуры

В форме списка номенклатуры двойным кликом мыши можно выбрать любую позицию номенклатуры и открыть ее карточку (см. рис. 8).

В панели навигации карточки есть специальная команда Штрихкоды , после вызова которой появляется табличная часть со штрихкодами для данной позиции номенклатуры (см. рис. 9).

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

Рис. 8 Карточка позиции номенклатуры

Рис. 9 Создание штрихкодов

Для создания нового штрихкода в командной панели табличной части следует нажать на кнопку Создать . Появится форма создания штрихкода (см. рис.9). В этой форме поле Номенклатура заполняется автоматически.

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

После ввода требуемых данных следует нажать на кнопку Записать и закрыть .

Для создания нового (внутреннего) штрихкода на форме создания существует кнопка Новый штрихкод (см. рис. 9), по нажатию на которую программа Розница 2 сама создает новый штрихкод типа EAN13 в соответствии с ранее рассмотренным шаблоном.

Если для номенклатуры ведется учет по характеристикам, то при создании штрихкода необходимо указать характеристику (см. рис. 10). В этом случае поле характеристика является обязательным для заполнения.

Рис.10 Создание штрихкода в случае учета по характеристикам

В старых системах (Розница ред. 1 , Управление торговлей 10.3 ) была возможность установки штрихкода на номенклатуру, без обязательного указания характеристики.

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

В новом поколении систем данное поведение было изменено. Теперь штрихкод строго идентифицирует сочетание Номенклатура + Характеристика .

Если требуется просмотреть список всех штрихкодов, которые введены в систему 1С:Розница , то можно в разделе Нормативно-справочная информация в группе Смотри также (слева внизу) воспользоваться командой Штрихкоды .

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

Рис. 11 Форма списка всех штрихкодов.

Где и как в системе можно работать со штрихкодами?

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

Кроме этого, штрихкод может быть считан и обработан в рабочем месте кассира.

И третьим местом частого использования штрихкодов является список Номенклатура . В нем считывание штрихкода позволит открыть карточку найденной номенклатуры.

На рисунке 12 представлен документ “Реализация товаров” . Обратите внимание, в командной панели табличной части Товары присутствует специальная кнопка Ввести штрихкод , по нажатию на которую открывается специальное диалоговое окно, в котором можно вручную ввести требуемый штрихкод.

Рис. 12 Заполнение табличной части документа по штрихкоду

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

После ввода штрихкода какого-либо из товаров и нажатия клавиши Enter система 1С:Розница находит данную номенклатуру и добавляет ее в чек (см. рис. 13).

Рис. 13 Рабочее место кассира

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

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

В списке номенклатуры через меню все действия доступна команда Поиск по штрихкоду (см. рис.14).

Также следует иметь ввиду, что существует стандартная горячая клавиша для ввода штрихкода F7 . Она же работает и во всех документах.

Рис. 14 Поиск по штрихкоду в списке номенклатуры

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

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

Если с предложением системы согласиться, то откроется для заполнения карточка позиции номенклатуры.

Штрихкодирование в 1С:Управлении торговлей 11

В 1С:Управлении торговлей штрихкодирование находит и другое применение. Штрихкоды выводятся практически во все типовые печатные формы, и используются для быстрого поиска конкретных документов. Расширен перечень объектов, для которых предусмотрена печать этикеток со штрихкодом: для доставки, складских ячеек, упаковочных листов и пр.

Игорь Сапрыгин,
г. Кемерово

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

На написание данной статьи меня побудили 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" + фШтрихКод;
КонецЦикла;

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

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