Внедрения системы штрихкодирования товаров и документов для автоматизации учета. Штрихкодирование в «1С»: как просто загрузить документы в базу Не печатаются штрихкоды для документа в «1С»
Тем, кто начинает работу с электронным архивом, первый этап будет самым загруженным: нужно будет внести в базу все уже имеющиеся документы, что означает объемную работу по распознаванию документов.
Зато работа с внесением в базу тех документов, которые были созданы уже с участием «Скан-Архива», будет гораздо проще: в программе это реализовано за счет штрихкодирования документов в «1С».
Как работает штрихкодирование в «1С»
После установки «Скан-Архива» штрихкодирование начинает работать автоматически. Каждый документ при печати автоматически помечается штрихкодом. Когда он вернется к вам от контрагента и вы отсканируете его, «Скан-Архив» распознает свой штрихкод и мгновенно прикрепит скан-копию к нужному документу в базе.
Эта функция доступна во всех версиях программы «Скан-Архив». Пример документа, на который при печати из «1С» добавлен штрихкод:
Смотрите подробнее на видео, как это работает
Штрихкодирование группы документов
Это же касается и группы документов. В информационных базах, работающих в управляемом режиме на платформе 1С:Предприятие 8.3, имеется возможность выделить несколько документов в списке и отправить их на печать. В этом случае печатные формы всех выбранных документов перед выводом на печать объединяются в один печатный документ. И, чтобы штрихкод печатался корректно, необходимо подключить в базу и использовать при печати дополнительную печатную форму «СА: Печать документов со штрихкодами»: она выполняет массовую печать без объединения печатных форм в одну печатную форму.
Для использования печатной формы «СА: Печать документов со штрихкодами» ее надо предварительно подключить в базу как дополнительную обработку. После подключения допобработки она появляется в подменю «Печать» для тех документов, которым она назначена при подключении.
Далее при выборе этой печатной формы открывается окно, в котором перечислены все выбранные документы. В этом окне расположена кнопка «Печатные формы», в которой перечислены все печатные формы, доступные для выбранных документов. Необходимо выбрать подходящую печатную форму - для каждого выбранного документа в списке появится соответствующий печатный документ «Скан-Архив».
Чтобы все сформированные документы вышли на печать с правильными штрихкодами, нужно проставить параметры печати каждого печатного документа (или оставить параметры по умолчанию) и нажать кнопку «Печать».
Не печатаются штрихкоды для документа в «1С»
Если «Скан-Архив» установлен, а штрихкодирование в «1С» не настроено, следует зайти в настройки «Скан-Архива» и на вкладке «Штрихкодирование» проверить: есть ли те документы, которые печатаются. Если есть, то зайти в настройки и проверить печатные формы.
Если печатные формы в порядке, то проверяем следующее: при печати документа, нажимаем «Предварительный просмотр», потом «Параметры страницы», где поля и колонтитулы должны быть по 10 п.
Если с данными настройками также все в порядке, то проверяем модуль «Общие модули» - «Универсальные механизмы» - «Управление печатью». В вызове функции «Сформировать печатные формы» добавленный код от нашей инструкции должен быть размещен до возврата значения из функции.
Система «Корпоративный документооборот» содержит механизм штрихкодирования документов предприятия. Штрихкодирование осуществляется с помощью программного кода системы, а также специализированной компоненты (работает под ОС Windows и Linux) которая выполняет рендеринг штрихкода в изображение в формате jpg.
Для включения возможности использовать штрих-коды в системе документооборота необходимо в настройках подсистемы «Администрирование системы» включить флажок «Использовать штрихкоды». После включения штрихкодирования появляется возможность настроить сканер, в том числе указать COM порт, скорость и другие параметры. Флажок находится в форме «Настройка параметров: Система», закладка «Общие параметры».
нажмите на картинку для увеличения
Примечание: Если вы используете простой сканер штрихкодов, эмулирующий нажатия цифровой клавиатуры и не подключенный по COM порту (или через его эмуляцию), то настраивать оборудование не потребуется. Но в таком случае не будет возможности автоматически вызывать обработки внешнего события от сканера при сканировании кода, такие обработки нужно будет предварительно запускать вручную (например, нажатием Shift+I) в интерфейсе системы документооборота.
На рисунке ниже показан пример размещения тега для вывода изображения штрихкода документа.
После размещения тега в тексте шаблона можно выполнять обычное формирование содержимого документа при открытии файла из корпоративного документа.
На рисунке ниже приведен пример сформированного по шаблону документа. В данном документе заполнены не только обычные параметры, но и выведен штрихкод (в указанном в шаблоне месте).
Аналогично осуществляется ввод данных и в OpenOffice Writer.
Прочие возможности штрихкодирования
Система документооборота поддерживает возможность присвоения штрих-кодов, сформированных в других системах. Такие штрихкоды могут быть получены с документами из сторонних систем, например от контрагентов.
Для присвоения штрихкода документу можно необходимо выбрать в меню «Все действия» пункт «Штрихкоды Добавить внешний штрихкод». Пример расположения такого пункта приведен на рисунке, расположенном ниже.
Существует возможность сохранения присвоенного штрихкода в файл формата jpg. Для этого необходимо выбрать пункт «Штрихкоды Сохранить штрихкод».
Связанные с объектами штрихкоды начинаются с зарезервированного префикса «2». При необходимости все штрихкоды системы можно посмотреть в регистре сведений «Штрихкоды».
Для поиска документов по штрихкоду в системе можно воспользоваться специальной обработкой, открыть её можно либо в подсистеме «Актуальные документы» либо нажав в любом месте программы сочетание клавиш «Shift+I».
В случае, если в системе существует несколько документов с одинаковым штрихкодом, пользователю будет предложен выбор из списка таких документов. Одинаковые штрихкоды могут появиться например, в случае получения документов с одинаковым кодом от разных контрагентов.
Решение задачи обработки и сбора информации штрихкодированного товара нередко приходится производить в условиях большой удаленности объектов считывания от рабочего места оператора. В этих случаях возможно использование переносных устройств с оперативной памятью (терминалы сбора данных), промышленных сканеров штрих-кода, сканеров, использующих радиоканал для передачи данных на расстояние.
К сожалению, стоимость подобных устройств оставляет желать лучшего. Организация удаленного считывания штрихкодов с использованием вышеперечисленных устройств составляет от $600 до $1200 за ОДНУ удаленную точку и зависит от расстояние до компьютера-приемника.
Наша разработка позволяет организовать считывание и обработку информации в 1с со штрих-кодов, расположенных на значительном (до 1 км.) расстоянии от компьютера-приемника. Система легко интегрируется в 1С:Предприятие версия 8 (любая конфигурация 1с 8 , 8.1 - Управление Торговлей, УПП, Розница 8) и не требует использования нестандартного оборудования. Дистрибутив системы - небольшой файл объемом 1MB. Возможно использование КПК.
В пользу этого решения говорит прежде всего его низкая стоимость. Совокупные затраты на установку и программное обеспечение составляют $400-$500, стоимость подключения одного удаленного сканера штрих-кода - $30-$40.
Для сравнения - такое же решение на основе терминала сбора данных составляет $600 только для одной точки! Стоимость решения с использованием сканеров на радиоканале уже приближается к $1000-1200 для одной удаленной точки.
Система успешно внедрена и применяется на крупном оптовом складе электроники, расположенном в г.Щелково.
На рис.1 приведена типичная структурная схема решения с использованием следующей аппаратной базы:
Ниже приведена примерная смета по расходам на оборудование и программное обеспечение,установку 1с предприятия, необходимое для подключения 10 удаленных сканеров штрих-кодов.
Статья | Кол-во | Стоимость |
Мультипортовая плата расширения | 1 | $100 |
Конвертеры удаленного сбора данных | 20 | $400 |
Сканеры штрих-кодов Cipher Lab. | 10 | $600 |
Установка программного обеспечения. | 1 | $400 |
Монтаж и прокладка кабеля | 1 | $100 |
ИТОГО |
$1 600 |
Вид на склад из окна операторской комнаты
Монтажный шкаф
Монтажный шкаф с мультипортовой платой.
Склад из окна операторской комнаты
Контроллеры подключения сканеров штрих-кода.
На написание данной статьи меня побудили 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" + фШтрихКод;
КонецЦикла;
Возврат фШтрихКод;
КонецФункции //ШтрихКодНовый()