DataMatrix и компактный штрих код GUID

Опубликовал Сергей (scompany) в раздел Печать - Ценники

Компактный штрих-код для GUID в стандарте CODE128 и штрих кодирование DataMatrix

Обработка объединяет в себе специфичные способы штрих-кодирования. А именно в модуле обработки реализованы следующие методы:
1. Компактный штрих-код для GUID в стандарте CODE128. Штрих код генерируется в виде картинки. Может пригодится для штрих кодирования документов по ссылкам (Документ.ПолучитьИдентификатор()).
2. То же самое что и первый пункт, только штрих код генерируется в виде специального шрифта.
3. Реализация DataMatrix - двумерного стандарта штрих кода. Штрих код генерируется в виде специального шрифта.
* для работы пунктов 2, 3 нужно установить в Windows специальные шрифты, они прилагаются в самой обработке в виде макетов и более ничего.

Так же в данной обработке предусмотрена управляемая форма для демонстрации работы.

Скачать файлы

Наименование Файл Версия Размер
DataMatrix
.epf 8,49Mb
26.10.12
172
.epf 8,49Mb 172 Скачать

См. также

Комментарии
1. Филипп Мануковский (alsky-2003) 28 23.05.12 06:29 Сейчас в теме
Скажи, пожалуйста - обработка подходит для УТ 10,3 на 8.1 и 8.2 ?
2. Олег Владимирович (olezhe) 18 25.09.12 10:26 Сейчас в теме
Ошибка при выполнении файловой операции 'E:\_Разработка\Чужие\DataMatrix.epf'
по причине:
Неверный формат хранилища данных 'file://E:/_Разработка/Чужие/DataMatrix.epf'

Файл протух?
3. Loe 25.09.12 16:21 Сейчас в теме
Да, при открытии ругается.
"Ошибка при выполнении файловой операции '....\DataMatrix.epf'
по причине:
Неверный формат хранилища данных 'file://..../DataMatrix.epf'"

Как быть, что делать?
4. Сергей (scompany) 32 25.09.12 22:03 Сейчас в теме
(2) olezhe,
Это в режиме "Тонкий клиент" или "Конфигуратор"?
5. Сергей (scompany) 32 25.09.12 22:05 Сейчас в теме
6. Loe 26.09.12 21:21 Сейчас в теме
В Конфигураторе и Жирном клиенте. Это файловая ошибка, а не ошибка 1С. Пару битов не залито, файл не может быть прочтен.
7. Сергей (scompany) 32 28.09.12 14:04 Сейчас в теме
(2) olezhe,
1. файл проверил у себя: работает
2. заново выложил свой файл с обработкой.

P.S. обработка написана только для тонкого клиента.
8. Loe 28.09.12 16:03 Сейчас в теме
Все работает, отл.
Шрифты сохраняем в файлы *.ttf и копируем в папку шрифтов и формируем шрифт.

Скажите, scompany, если я захочу использовать Вашу наработку (точнее, Вами созданный шрифт), как мне ее/его заполучить в пользование?
9. Сергей (scompany) 32 28.09.12 18:22 Сейчас в теме
(8) Loe,
шрифты которые используются в обработке взяты на этом сайте:
http://grandzebu.net/informatique/codbar-en/codbar.htm
на саму обработку не накладываются никаких ограничений.
10. ksai ksai (ksai) 24.10.12 14:27 Сейчас в теме
Конфигурация УПП 1.3
При попытке нажатия на кнопку "Вывести GUID" вылетает ошибка. Посмотрел в модуле, там прописано:

ОбъектШтрихКода = Обработки.дхФормированиеШтрихКодов.Создать();
Возврат ОбъектШтрихКода.ПолучитьКартинкуШтрихКода(ШтрихКод, ТипКода, ПредставлениеКода, УголПоворота);

Обработки "дхФормированиеШтрихКодов" в типовой УПП не наблюдается.
Автор, как быть?
11. ksai ksai (ksai) 24.10.12 14:36 Сейчас в теме
И еще один момент.
В каком формате нужно выгружать макеты КомпонентаПечатиШтрихкодов%?
12. Сергей (scompany) 32 25.10.12 08:46 Сейчас в теме
(10) ksai,
Вместо
ОбъектШтрихКода = Обработки.дхФормированиеШтрихКодов.Создать();

напишите
ОбъектШтрихКода = ЭтотОбъект;
13. Сергей (scompany) 32 25.10.12 08:48 Сейчас в теме
(11) ksai,
Это типовые компоненты от 1С (native) они в формате ".dll"
14. ksai ksai (ksai) 25.10.12 09:08 Сейчас в теме
(12) scompany,
Вот вся функция

Функция ПолучитьКартинкуШтрихКода(ШтрихКод, ТипКода = Неопределено, ПредставлениеКода = Неопределено, УголПоворота = 0) Экспорт

ОбъектШтрихКода = Обработки.дхФормированиеШтрихКодов.Создать();

Возврат ОбъектШтрихКода.ПолучитьКартинкуШтрихКода(ШтрихКод, ТипКода, ПредставлениеКода, УголПоворота);

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

Если я напишу в ней ОбъектШтрихКода = ЭтотОбъект , то получится бесконечная рекурсия. Или я туплю, или что-то тут не так.
15. ksai ksai (ksai) 25.10.12 09:09 Сейчас в теме
(13) scompany,
Понял, спасибо. А свежие версии где взять? Они на ИТС идут или в гугле искать?
16. Сергей (scompany) 32 25.10.12 12:55 Сейчас в теме
(15) ksai,
ИТС E:\1CIts\EXE\Demo82
или в последней УТ
17. Сергей (scompany) 32 25.10.12 12:56 Сейчас в теме
(14) ksai,
Все нормально будет
18. ksai ksai (ksai) 25.10.12 16:04 Сейчас в теме
(17) scompany,
Наверно мы друг друга не поняли(

В форме обработки есть процедура:

&НаСервере
Функция ВывестиGUIDСервер()

ЭтотОбъект = РеквизитФормыВЗначение("Объект");
СтрокаКодирования1 = ЭтотОбъект.ПолучитьШтрихКодОбъекта(СокрЛП(ИдентификаторОбъекта), "Идентификатор упаковки");
ШтрихКодКартинка = ЭтотОбъект.ПолучитьКартинкуШтрихКода(СтрокаКодирования1);

Результат = Новый ТабличныйДокумент;
Макет = ЭтотОбъект.ПолучитьМакет("Макет");
ОбластьТест = Макет.ПолучитьОбласть("Тест1");
ОбластьТест.Рисунки.ШтрихКод.Картинка = ШтрихКодКартинка;
Результат.Вывести(ОбластьТест);


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

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

Здесь идет вызов функции из модуля объекта:

ШтрихКодКартинка = ЭтотОбъект.ПолучитьКартинкуШтрихКода(СтрокаКодирования1);

Листинг вызываемой функции я уже приводил:

Функция ПолучитьКартинкуШтрихКода(ШтрихКод, ТипКода = Неопределено, ПредставлениеКода = Неопределено, УголПоворота = 0) Экспорт

ОбъектШтрихКода = Обработки.дхФормированиеШтрихКодов.Создать();

Возврат ОбъектШтрихКода.ПолучитьКартинкуШтрихКода(ШтрихКод, ТипКода, ПредставлениеКода, УголПоворота);

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

Если в этой функции по вашему совету я меняю строчку:
ОбъектШтрихКода = Обработки.дхФормированиеШтрихКодов.Создать();
на строчку:
ОбъектШтрихКода = ЭтотОбъект;
то получается, что эта функция бесконечное количество раз вызывает сама себя из самой себя, что есть рекурсия без выхода.

Так что всё нормально не получается.
19. Сергей (scompany) 32 26.10.12 23:27 Сейчас в теме
(18) ksai,
обновил файл, можно проверить
20. ksai ksai (ksai) 30.10.12 09:34 Сейчас в теме
(19) scompany,

Проверил, теперь всё в порядке, спасибо!
21. Sergey Mosalov (dablack) 06.06.13 00:10 Сейчас в теме
Можно ли каким либо образом в штрих код Code128 загнать помимо гуида информацию о версии данных (Ссылка.ВерсияДанных вида "AAAAFQAAAIE="), просто есть потребность помимо документа получить его версию и проверить совпадает ли она с тем, что в базе.
22. Loe 06.06.13 09:27 Сейчас в теме
Гм, а кто мешает? Просто создайте себе алгоритм расшифровки полученной при сканировании вашего кода строки - и пользуйтесь на здоровье.
23. Сергей (scompany) 32 06.06.13 12:17 Сейчас в теме
(21) dablack,
Конечно можно, только надо модифицировать алгоритмы подготовки кода и последующей расшифровки.
Сложность будет на этапе кодировки, так там используется преобразование из 16 в 93 систему.
Надо будет приводит реквизит "Версия" к 16 основанию или иначе снизиться эффективность упаковки.
24. Sergey Mosalov (dablack) 06.06.13 20:33 Сейчас в теме
То, что надо делать алгоритмы зашифровки/расшифровки это понятно, я наверное не совсем корректно задал вопрос, хватит ли длины кода чтобы в один штрих засунуть Версию + ГУИД. Просто смутили строки в вашем коде:

// задобрим вид числа
Если лВидОбъекта > 255 Тогда
Возврат Неопределено;
КонецЕсли;
и

// можно закодировать не более 255 видов объектов
Результат = Новый Соответствие;
Результат.Вставить(Метаданные.НайтиПоПолномуИмени("Документ.ЗаказПокупателя"), 1);

Почему 255? Я потому и решил, что длина кончилась так сказать. Прошу прощения если не совсем корректно задаю вопросы, просто раньше не приходилось иметь дело со штрих кодированием глубже того, что есть в типовых типа печати ценников и пр. Однако спасибо вашей разработке кодирование ГУИДа уже работает в продакшене.
25. Сергей (scompany) 32 07.06.13 08:47 Сейчас в теме
1. Это ограничение на количество кодируемых видов объектов 1С (Документы, Справочники и т.д.). 255 видов объектов 1С или логических сущностей, что вполне избыточно. Но и это можно доработать, если нужно.
2. Cтандарт штрихкода CODE128 (EAN128) имеет свои ограничения длины, точнее явных ограничений не имеет. (штрихкод переменной длины)
3. При этом надо не забывать про другие ограничения:
- техническую возможность луча сканеров читать такие "широкие" штрихкоды
- возможность уместить на листе "широкие" штрихкоды при печати.
- чем "шире" штрихкод, тем более возрастает вероятность его порчи в процессе работы (замятия бумаги, качество печати и т.д.)

Сообственно разработка служит для обхода ограничения пункта #3.
26. Sergey Mosalov (dablack) 07.06.13 12:46 Сейчас в теме
Спасибо. Теперь все стало ясно.
27. Sergey Mosalov (dablack) 15.08.13 14:55 Сейчас в теме
Уважаемый scompany
Задавал пару месяцев вопрос про то как в штрих встроить №версии документа, но острой необходимости в реализации пока не было. Но вот настал тот день... Стал делать под свои нужды и вот на что наткнулся:
В Вашем коде как есть при определенных GUID-ах и КодовОбъектов штрих формируется, но считывается только его кусок(без конца или середины) , т.е. например:
GUID=7cbf5440-f94b-11e2-bbfb-001e671a3b56, код объекта = 14 (как в примере "Идентификатор упаковки") при переводе из GUIDв93 получается вот такая строка - 29|g[6:t;Edzg7'U`aXc)", а считано будет 29[6:;E7'UX) . Причем проблема замечена только у тех штрихов у которых при переводе из GUIDв93 на второй позиции число. Запустил маленькую обработку по докам за период, чтобы увидеть проблемные штрихи. Вот выдержка:

7cbf543c-f94b-11e2-bbfb-001e671a3b56 2PI,,$j'|a+kSTRZ_aXc)" C032560221980056056485<5049400;40=944=401281:090229004=40=:01<0554855104=@

7cbf543d-f94b-11e2-bbfb-001e671a3b56 23VRf(^#lZ"oXdGp_aXc)" C2122032099020=4854;0044950<290551830:01<4118804704=40=:01<05548551128@

7cbf543e-f94b-11e2-bbfb-001e671a3b56 2sbxC-R|[Svr]t<)`aXc)" C0325600744<174088141690200;:101283444435<04346145480<540=:01<05548551092@

7cbf543f-f94b-11e2-bbfb-001e671a3b56 2VoA!2FxKLmvb'2?`aXc)" C0325602098300895155608907400928123203444<14945601910<540=:01<05548551506@

7cbf5440-f94b-11e2-bbfb-001e671a3b56 29|g[6:t;Edzg7'U`aXc)" C65020300;41<:10524641434254818<4113141<2124941220<540=:01<055485514=0@

7cbf5441-f94b-11e2-bbfb-001e671a3b56 2y+19;.p+>[!mGyj`aXc)" C032560113944461605254452047944119:10515320188113<500<540=:01<05548551548@

7cbf5442-f94b-11e2-bbfb-001e671a3b56 2\8Ws?"lx6R%rWn#aaXc)" C03256023024528107419155150<740524902845443281=0444940=40=:01<05548551443@

7cbf5443-f94b-11e2-bbfb-001e671a3b56 2?E QDsgh/I)wgc9aaXc)" C03256019181815518209807441<4=006598054870441<<0560540=40=:01<05548551548@

7cbf5444-f94b-11e2-bbfb-001e671a3b56 2"RF.IgcX(@-|wXOaaXc)" C03256055190289045298041<<05:0185491141600;704:0182140=40=:01<055485514=0@

7cbf5445-f94b-11e2-bbfb-001e671a3b56 2b^lhM[_H!71$+NeaaXc)" C0325604<1;0050<4=0029:1004=90851521246 14859440:105<40=40=:01<055485510:1@

Если попробовать кодировать под другим кодом объекта, например "1" проблема вылезает, но уже на других штрихах...
В исходниках покапался, но проблему решить не смог...
28. Сергей (scompany) 32 16.08.13 21:06 Сейчас в теме
(27) dablack,
Добрый вечер.
Для печати используете штрих кодов какой способ используете?
1. Печать шрифтом
2. Печать компонентой 1С
3. Печать сторонней компонентой.
29. Sergey Mosalov (dablack) 18.08.13 14:01 Сейчас в теме
30. Sergey Mosalov (dablack) 19.08.13 09:45 Сейчас в теме
Да, действительно, если печать штрих шрифтом, то при считывании код обрезается, если печатаю стандартной компонентой, то все ок.
31. Сергей (scompany) 32 19.08.13 17:35 Сейчас в теме
Вот как раз печать шрифтом тестировалось не полностью.