On-line: гостей 11. Всего: 11 [подробнее..]
АвторСообщение





Пост N: 725
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 24.03.25 22:01. Заголовок: ЭДО и все вопросы по его реализации (REST API / JSON / XML)


В ближайшее время нам предстоит переход к маркировке продукции через "Честный Знак". Вопросы, связанные с применением ТСД (терминала сбора данных) начал изучать тут: http://clipper.borda.ru/?1-4-0-00001398-000-0-0-1742816912

Кроме того, что каждая марка на каждой упаковке товара должна быть отсканирована, весь документооборот маркированной продукции должен проходить ТОЛЬКО В ЭЛЕКТРОННОМ ВИДЕ, через провайдера ЭДО. С одной стороны, это конечно круто и избавляет торговых и бухгалтерию от головняка, связанного с печатями, подписями, возвратом и потерей бумажных документов, но с другой - наваливает работы программистам.

Почитал документацию у нашего провайдера тут: https://saby.ru/help/integration/api/all_methods/format и даже немного обрадовался. Если раньше было нагромождение десятков вложенных скобок <data> ... </data>, то сейчас это более понятный (для меня) JSON и протокол REST API, с которым я сейчас пытаюсь разобраться для ТСД под управлением Mobile SMARTS. По крайней мере, готовить данные в виде хэша и и обмениваться ими при помощи hb_JsonEncode() / hb_JsonDecode() на порядок проще, чем прогрызаться через кучу скобок...

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

upd: так понимаю, что документы всё равно передаются в XML и это печально...

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 39 , стр: 1 2 All [только новые]


администратор




Пост N: 8309
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 23.05.26 19:07. Заголовок: если надо выложу сюд..


если надо выложу сюда

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 383
Зарегистрирован: 05.10.06
ссылка на сообщение  Отправлено: 23.05.26 19:07. Заголовок: Dima пишет: .... ..


Dima пишет:

 цитата:
....\contrib\hbzebra\tests\bmp.prg

а у меня такого нет

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 384
Зарегистрирован: 05.10.06
ссылка на сообщение  Отправлено: 23.05.26 19:08. Заголовок: MIKHAIL пишет: если..


MIKHAIL пишет:

 цитата:
если надо выложу сюда

будь добр, видимо давно не обновлял

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 8310
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 23.05.26 19:08. Заголовок: /* * Copyright 202..


 
/*
* Copyright 2025 Przemyslaw Czerpak <druzus /at/ priv.onet.pl>
*/

#require "hbzebra"
#require "hbbmp"

#define WIDTH 1

REQUEST HB_GT_CGI_DEFAULT

PROCEDURE Main()

DrawBarcode( WIDTH, "EAN13", "477012345678" )
DrawBarcode( WIDTH, "EAN8", "1234567" )
DrawBarcode( WIDTH, "UPCA", "01234567891" )
DrawBarcode( WIDTH, "UPCE", "123456" )
DrawBarcode( WIDTH, "CODE39", "ABC123" )
DrawBarcode( WIDTH, "CODE39", "ABC123", HB_ZEBRA_FLAG_CHECKSUM + HB_ZEBRA_FLAG_WIDE3 )
DrawBarcode( WIDTH, "ITF", "12345678901", HB_ZEBRA_FLAG_CHECKSUM )
DrawBarcode( WIDTH, "MSI", "1234567", HB_ZEBRA_FLAG_CHECKSUM )
DrawBarcode( WIDTH, "CODABAR", "40156", HB_ZEBRA_FLAG_WIDE3 )
DrawBarcode( WIDTH, "CODE93", "ABC-123" )
DrawBarcode( WIDTH, "CODE11", "1234567890", HB_ZEBRA_FLAG_CHECKSUM + HB_ZEBRA_FLAG_WIDE3 )
DrawBarcode( WIDTH, "CODE128", "Code 128" )
DrawBarcode( WIDTH, "PDF417", "Hello, World of Harbour!!! It's 2D barcode PDF417 :)" )
DrawBarcode( WIDTH, "DATAMATRIX", "Hello, World of Harbour!!! It's 2D barcode DataMatrix :)" )
DrawBarcode( WIDTH, "QRCODE", "https://en.wikipedia.org/wiki/QR_Code" )

?

RETURN

STATIC PROCEDURE DrawBarcode( nLineWidth, cType, cCode, nFlags )

LOCAL hZebra, cFile, cBitMap, pBMP, ;
nLineHeight, nX, nY, nWidth, nHeight, nDepth, nAlign, nColor

SWITCH cType
CASE "EAN13" ; hZebra := hb_zebra_create_ean13( cCode, nFlags ) ; EXIT
CASE "EAN8" ; hZebra := hb_zebra_create_ean8( cCode, nFlags ) ; EXIT
CASE "UPCA" ; hZebra := hb_zebra_create_upca( cCode, nFlags ) ; EXIT
CASE "UPCE" ; hZebra := hb_zebra_create_upce( cCode, nFlags ) ; EXIT
CASE "CODE39" ; hZebra := hb_zebra_create_code39( cCode, nFlags ) ; EXIT
CASE "ITF" ; hZebra := hb_zebra_create_itf( cCode, nFlags ) ; EXIT
CASE "MSI" ; hZebra := hb_zebra_create_msi( cCode, nFlags ) ; EXIT
CASE "CODABAR" ; hZebra := hb_zebra_create_codabar( cCode, nFlags ) ; EXIT
CASE "CODE93" ; hZebra := hb_zebra_create_code93( cCode, nFlags ) ; EXIT
CASE "CODE11" ; hZebra := hb_zebra_create_code11( cCode, nFlags ) ; EXIT
CASE "CODE128" ; hZebra := hb_zebra_create_code128( cCode, nFlags ) ; EXIT
CASE "PDF417" ; hZebra := hb_zebra_create_pdf417( cCode, nFlags ); nLineHeight := nLineWidth * 3 ; EXIT
CASE "DATAMATRIX" ; hZebra := hb_zebra_create_datamatrix( cCode, nFlags ); nLineHeight := nLineWidth ; EXIT
CASE "QRCODE" ; hZebra := hb_zebra_create_qrcode( cCode, nFlags ); nLineHeight := nLineWidth ; EXIT
ENDSWITCH

IF hZebra != NIL
IF hb_zebra_geterror( hZebra ) == 0

IF nLineHeight == NIL
nLineHeight := nLineWidth * 36
ENDIF

nAlign := 32
nDepth := 1
nX := nY := 1
/* get barcode size and add 1 pixel border over it */
hb_zebra_getsize( hZebra, @nWidth, @nHeight )
nWidth := nWidth * nLineWidth + nY + nY
nHeight := nHeight * nLineHeight + nX + nX

? cType, "code width", hb_ntos( nWidth ), "height", hb_ntos( nHeight )
IF Empty( pBMP := hb_bmp_new( nWidth, nHeight, nDepth ) )
? "Cannot create BMP image"
ELSE
/* allocate white color (RGB) and use it to fill the background */
nColor := hb_bmp_color( pBMP, 255, 255, 255 )
hb_bmp_rect( pBMP, 0, 0, nWidth, nHeight, nColor )
/* allocate black color for barcode drawing */
nColor := hb_bmp_color( pBMP, 0, 0, 0 )
? "Building BMP with", cType, "code for vale:", hb_zebra_getcode( hZebra )
hb_zebra_draw_bmp( hZebra, pBMP, nColor, nX, nY, nLineWidth, nLineHeight )
cFile := Lower( cType ) + ".bmp"
? "Creating BMP file:", cFile
IF ! hb_bmp_save( pBMP, cFile )
? "Cannot save BMP to file:", cFile
ENDIF
/* destroy BMP file */
pBMP := NIL
ENDIF

/* and now much faster version */
cBitMap := hb_zebra_getbitmap( hZebra, nAlign, .T./*lBottomUp>*/, @nWidth, @nHeight, nLineWidth, nLineHeight, nX )
pBMP := hb_bmp_frombitmap( cBitMap, nAlign, nWidth, nHeight, nDepth, /*nDPI*/, /*aPalette*/, /*@nError*/ )
cFile := Lower( cType ) + "b.bmp"
? "Creating BMP file:", cFile
IF ! hb_bmp_save( pBMP, cFile )
? "Cannot save BMP to file:", cFile
ENDIF
/* destroy BMP file */
pBMP := NIL

ELSE
? "Type", cType, "Code", cCode, "Error", hb_zebra_geterror( hZebra )
ENDIF
hb_zebra_destroy( hZebra )
ELSE
? "Invalid barcode type", cType
ENDIF
?

RETURN

STATIC FUNCTION hb_zebra_draw_bmp( hZebra, pBMP, nColor, ... )

IF hb_zebra_geterror( hZebra ) != 0
RETURN HB_ZEBRA_ERROR_INVALIDZEBRA
ENDIF

RETURN hb_zebra_draw( hZebra, {| x, y, w, h | hb_bmp_rect( pBMP, x, y, w, h, nColor ) }, ... )



Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 385
Зарегистрирован: 05.10.06
ссылка на сообщение  Отправлено: 23.05.26 19:14. Заголовок: Dima пишет: #requir..


Dima пишет:

 цитата:
#require "hbmp"

так у меня нету самой библиотеки в пакете

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 8311
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 23.05.26 19:17. Заголовок: капец.... могу сырцы..


капец....
могу сырцы Harbour выложить 17 метров от 23.04.2026 (там все есть)
пиши если надо и куда сложить

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 386
Зарегистрирован: 05.10.06
ссылка на сообщение  Отправлено: 23.05.26 19:20. Заголовок: Dima пишет: пиши ес..


Dima пишет:

 цитата:
пиши если надо и куда сложить

написал в личку

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 8312
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 23.05.26 19:28. Заголовок: MIKHAIL https://fex..

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 8313
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 23.05.26 19:36. Заголовок: MIKHAIL отпиши если..


MIKHAIL
отпиши если поймал или не поймал, тогда придумаем что то другое

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2054
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 23.05.26 19:41. Заголовок: Dima пишет: require..


Dima пишет:

 цитата:
require "hbzebra"


Дима, зебра поддерживает обычный DataMatrix , но не GS1 DataMatrix для сканеров внешней логистики.
Единственный путь встроить в harbour, это делать обертку на опенсорс zint , там есть и cи исходники библиотеки и DLL для подключения.
Другие варианты это принтера со встроенной поддержкой печати GS1, online генераторы, и все остальное платное , где если повезет есть rest API

Как изврат можно по rest обратиться к 1С и при наличии там компоненты GS1, получить картинку уже из 1С

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 8314
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 23.05.26 19:49. Заголовок: Haz /* DataMatr..

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2055
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 23.05.26 20:06. Заголовок: Dima пишет: DataMat..


Dima пишет:

 цитата:
DataMatrix is ISO/IEC 16022:2006


После беглого просмотра - это не GS1

Подробнее - в тему нужно погружаться,
Можно найти стандарт даташита на gs1 , но кто его в harbere реализует ?
Можно найти кучу онлайн кодеров и утилит для генерации картинки, как правило либо триал либо подписка
А готовой либы для harbour точно нет.

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

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 8315
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 23.05.26 20:18. Заголовок: Haz пишет: Правда я..


Haz пишет:

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


эта свежая.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2056
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 23.05.26 20:35. Заголовок: Dima пишет: эта све..


Dima пишет:

 цитата:
эта свежая.


Ты про libdmtx , то там нет упоминания про стандарты GS1
Другие опенсорсы у меня не открываются, хотя лезу через Нидерланды.
Почитаю подробнее на досуге просто ради любопытства, в моей работе это не нужно 😁
Тут нюанс в том для чего используется, для чтения кода или для печати наклейки.
Поскольку считанный сканером код это байт последовательности, то их можно править ручками по стандарту,
Но это очень тернистый путь

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 8316
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 23.05.26 20:45. Заголовок: Haz ладно, проехали..


Haz
ладно, проехали...просто хотел помочь, но online сканеры не распознают bmp что
создал пример что выше..

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 745
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 24.05.26 16:04. Заголовок: Вот эта штука умеет..


Вот эта штука умеет GS1: https://barcode.tec-it.com/ru/GS1DataMatrix
Но понятное дело, что это для штучных задач - остатки этим способом не перемаркировать.

Подскажите пожалуйста, правильно ли я понял написанное тут: https://www.cleverence.ru/support/77127/

Получается, что для того, чтобы DataMatrix картинка соответствовала стандарту GS1, у кодирующей последовательности должны выполняться условия:
1) начало - CHR(232) = код FNC1
2) вставить разделители полей переменной длины - CHR(29)

?

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 387
Зарегистрирован: 05.10.06
ссылка на сообщение  Отправлено: 24.05.26 19:10. Заголовок: Sergy пишет: Но пон..


Sergy пишет:

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

Подскажите пожалуйста, правильно ли я понял написанное тут: https://www.cleverence.ru/support/77127/

Получается, что для того, чтобы DataMatrix картинка соответствовала стандарту GS1, у кодирующей последовательности должны выполняться условия:
1) начало - CHR(232) = код FNC1
2) вставить разделители полей переменной длины - CHR(29)

?



Я NiceLabel настроил для маркировки, полный код маркировки беру из 1С, он идет уже с разделителями, разбираю на компоненты и скармливаю этой проге. Она сама из компонентов формирует правильный GS1 DataMatrix, который корректно считывается. Для маркировки остатков сойдет...

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 5
Зарегистрирован: 11.11.25
ссылка на сообщение  Отправлено: 25.05.26 15:59. Заголовок: MIKHAIL пишет: долж..

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 6
Зарегистрирован: 11.11.25
ссылка на сообщение  Отправлено: 25.05.26 16:02. Заголовок: MIKHAIL пишет: Но п..


MIKHAIL пишет:

 цитата:
Но понятное дело, что это для штучных задач


Конечно.
Для перемаркировки остатков нужно в ЧЗ покупать коды.

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 39 , стр: 1 2 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 11
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет