Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 04:58

Формирование штрих-кода 22 символов.

Автор mixqn, 16 сен 2013, 11:29

0 Пользователей и 1 гость просматривают эту тему.

mixqn

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

Формат штрих-кода:
1.       Код товара, 8 символов
2.       Код вида единицы хранения (штука, коробка, мешок) – 1 символ
3.       Срок годности, 8 символов, формат: ГГГГММДДЧ– 4 цифры года, 2 цифры месяца, 2 цифры дня  (дата с точностью до дня, часы, минуты и секунды нас не интересуют, поэтому при расшифровке в 1С будем просто добавлять «000000»)
4.       Вес с точностью до грамма для весового товара, 5 символов. Для штучного товара заполнять нулями.

ИТОГО: 22 символа
Кодировать EAN 128 (предположительно).

Теперь пытаюсь сформировать собственно код. Использую компоненту «1С:Печать штрихкодов». Написал примерно такой программный код:
ТабДок = Новый ТабличныйДокумент;

Макет = ПолучитьМакет("ШК");
РисунокШтрихкод = Макет.Рисунки.ШК;

РисунокШтрихкод.Объект.ТипКода = ТипШтрихкода;//УправлениеРозничнойТорговлей.ПолучитьЗначениеТипаШтрихкодаДляЭУ(ТипШтрихкода);
РисунокШтрихкод.Объект.Сообщение = ШтрихКод;

ТабДок.Вывести(Макет);

ТабДок.ТолькоПросмотр      = Истина;
ТабДок.ОтображатьСетку     = Ложь;
ТабДок.ОтображатьЗаголовки = Ложь;
ТабДок.Показать("Этикетка");


С формированием кодов EAN 13 (при длине 13 смимв.), CODE 128 и других проблем нет. Попытка сформировать EAN 128 результата не дает – поле штрихкода заполняется красными диагональными штрихами.

Для иллюстрации результата прикладываю обработки. Первая предназначена для типовой конфигурации, где есть нужные объекты, вторая не использует ни общие модули, ни объекты – все переделано на простые типы, чтобы работало в любой конфе. Расшифровка типов штрихкодов:
// Возвращает значение типа штрихкода для использования в ЭУ
// "1С:Печать штрихкодов"
//
// Параметры
// ТипКода - ПланыВидовХарактеристик.ТипыШтрихкодов - тип, значение для которого
// нужно получить
//
// Возвращаемое значение:
//   Число, которое может быть присвоено свойству ЭУ "ТипКода"
//
Функция ПолучитьЗначениеТипаШтрихкодаДляЭУ(ТипКода) Экспорт
Перем Значение;

Если ТипКода = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN8 Тогда
Значение = 0;
ИначеЕсли ТипКода = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13 Тогда
Значение = 1;
ИначеЕсли ТипКода = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN128 Тогда
Значение = 2;
ИначеЕсли ТипКода = ПланыВидовХарактеристик.ТипыШтрихкодов.Code39 Тогда
Значение = 3;
ИначеЕсли ТипКода = ПланыВидовХарактеристик.ТипыШтрихкодов.Code128 Тогда
Значение = 4;
ИначеЕсли ТипКода = ПланыВидовХарактеристик.ТипыШтрихкодов.ITF14 Тогда
Значение = 11;
Иначе
Значение = -1;
КонецЕсли;

Возврат Значение;
КонецФункции // ПолучитьЗначениеТипаШтрихкодаДляЭУ()

Добавлено: 16 сен 2013, 11:33


да, чтобы было понятно, CODE 128 формируется нормально, но не подходит по той причине, что сканер его не читает.
Добавлено: 16 сен 2013, 11:39


да и еще вопрос: существует в природе документация по компоненте "печать штрихкодов"? я не нашел ничего, код пишу основываясь на логике, именах свойств объекта, по аналогии с найденными примерами

LordWizard

Думаю тебе лучше выйти на спеца из Штрих-М. они практически неплохо работают со штрих-кодами. +79164177675 (зовут Михаил). скажи что от Константина - программера 1С.
Правильно ведите учет или пишите программы и вам воздастся!...

(Кстати - кнопочку Сказать Спасибо - никто не отменял)

svrider

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

   ВнешняяКомпонента = Новый("AddIn.КартинкаШтрихкода.Barcode");
   ВнешняяКомпонента.Шрифт = "Tahoma";
   ВнешняяКомпонента.РазмерШрифта = 12;
   ВнешняяКомпонента.Ширина = Окр(ПараметрыШтрихкода.Ширина);
   ВнешняяКомпонента.Высота = Окр(ПараметрыШтрихкода.Высота);
   ВнешняяКомпонента.АвтоТип = Ложь;
   ВнешняяКомпонента.ТипКода = 4;
   ВнешняяКомпонента.ОтображатьТекст = Истина;
   ВнешняяКомпонента.ЗначениеКода = Штрихкод;

// Сформируем картинку
ДвоичныеДанныеКартинки = ВнешняяКомпонента.ПолучитьШтрихкод();
Картинка = Новый Картинка(ДвоичныеДанныеКартинки);
ОбластьПечати = Макет.ПолучитьОбласть("ИмяОбластиПечати");
Рисунок = ОбластьПечати.Рисунки.Штрихкод1с;
Рисунок.Картинка = Картинка;

По поводу типа кода:
1 - EAN13
2 - EAN128
3 - Code39
4 - Code128

Вообще это в формировании этикеток в 11ой торговле есть

Dethmontt

У EAN128 штрих кажется должен быть типа - (8)3423445345345
Добавлено: 17 сен 2013, 02:05


Цитата: mixqn от 16 сен 2013, 11:29да и еще вопрос: существует в природе документация по компоненте "печать штрихкодов"? я не нашел ничего, код пишу основываясь на логике, именах свойств объекта, по аналогии с найденными примерами
Правой кнопкой мыши по штрих коду - справка. Там и по свойствам и примеры штрих кодов найдешь.

Добавлено: 17 сен 2013, 02:18


Текст скопировать не получилось
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

mixqn

svrider, общие принципы работы понятны и кажется я явно написал об этом в стартпосте.
проблема именно с формированием кода длинной 22 символа.
CODE 128 не воспринимается сканером - почему? - может кто подскажет? это проблема оборудования или ШК неверно сформирован? на сколько я знаю, контрольного символа в CODE 128 быть не должно, тогда почему не считывается??.
EAN 128 не могу сформировать теми же методами - прикладывал обработки для экспериментов, если кто скачивал и смотрел, там видно, что все другие варианты кроме EAN 128 формируются при указании произвольного набора цифр (скажем, 1234567890). пусть не всегда правильно - т.к. например для EAN 13 нужно контрольную цифру рассчитать, но главное формируются, ШК создается. EAN 128 не хочет. почему?
Цитата: Dethmontt от 17 сен 2013, 02:02У EAN128 штрих кажется должен быть типа - (8)3423445345345
мне не принципиально, пусть выглядит так. мне надо решить задачу - обеспечить формирование и считывание сканером ШК набора цифр длинной 22 символа. считывание например EAN 13 дает нужный мне результат, но длинна мала. учитывая размер мне теоретически подходят CODE 128 и EAN 128. Первый не читается, второй не формируется. По этому поводу и тема.
Цитата: Dethmontt от 17 сен 2013, 02:02Правой кнопкой мыши по штрих коду - справка. Там и по свойствам и примеры штрих кодов найдешь.
у меня эта справка не открывается :) 1С-ка закрывается аварийно с записью дампа. пробовал в разных базах и в конфигураторе и в предприятии, результат один.

Dethmontt

У тебя фактически получается вот такой штрих для EAN128
(8)8-цифр(1)1-Цифра(8)8-цифр(5)5-цифр
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

mixqn

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

как это сделать?

в любом виде, пусть так
Цитата: Dethmontt от 17 сен 2013, 09:29
(8)8-цифр(1)1-Цифра(8)8-цифр(5)5-цифр

Dethmontt

Эээ... С помощью твоей обработки - ПечатьПроизвольныхШтрихКодов1.epf нормально формируется шрих код


Добавлено: 17 сен 2013, 09:48


Щас проверить читается он или нет не могу...
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

mixqn

ха, прикольно. работает :zebzdr:
Dethmontt, спасибо!
Добавлено: 17 сен 2013, 10:55


EAN 128 тоже не читается...значит все таки придется сканер мучить.

mixqn

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

проблема чтения была из за РАМКИ!!! при добавлении объекта "1С:Печать штрихкодов" в макет он "по умолчанию" обведен рамкой (что видно на скрине выше). так вот эта самая рамка и вызывала проблему считывания. убрал рамку - все прекрасно работает.

люди, не повторяйте моих ошибок! :)

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск