SAPфорум.RU https://www.sapboard.ru/forum/ |
|
Генерация QR кода больших размеров средствами SAP https://www.sapboard.ru/forum/viewtopic.php?f=13&t=95947 |
Страница 1 из 2 |
Автор: | MeIIIok [ Пн, янв 15 2018, 16:04 ] |
Заголовок сообщения: | Генерация QR кода больших размеров средствами SAP |
Всем привет! Возникла необходимость генерить QR коды большого размера (больше 1000 символов кириллицей). При огромном количестве генераторов QR кодов в интернете, у сапа с этим обстоят дела более скромно. У меня в системе вообще не было возможности создания QR. Накатили ноту 2030263 - Support for QR Code 2005 Barcode in SAPscript and Smart Forms, появилась возможность создания QR, но наткнулся на ограничение в 255 символов. Покопавшись в коде нашел вызов системной функции, которая генерит сам код, в которой как раз это ограничение на 255 символов: Code: call 'RSPO_CACHE_CONTROL' id 'AREA' field 'BARCODE' id 'OP' field 'RENDERBARCODE' id 'BC_PAR' field bc_cmd-tdprintpar id 'BP_PAR' field bp_cmd-tdprintpar id 'BARCDATA' field barcdata id 'BARCDATALEN' field barcdatalen id 'BMSIZE' field bitmapsize id 'WIDTH' field w id 'HEIGHT' field h id 'MSG' field msg id 'ERRMSG' field errmsg. Где BARCDATA и есть содержимое QR кода и при передаче значения больше 255 системная функция перестает выполнятся и возвращает ошибку "operation RENDERBARCODE(BARCODE) failed" если переменную передаю типа string то ошибка "parameter cU("BARCDATA") missing for RENDERBARCODE(BARCODE)" Пообщавшись с нашим базисом, сделал вывод, что системные функции написаны на языке C, и докрутить их до нужной кондиции нет возможности, так же как и создать свою скопировав системный код. В интернете описаны решения с ГУГЛ апи, но оно не подходит, так как у конечного пользователя нет интернета. Решение с установкой "левых" программ к пользователю на машину, тоже затруднительно. Может у кого то был подобный опыт и смогли найти более менее сносное решение с минимальным количеством костылей и желательно в пределах системы SAP без использования сторонних приложений и программ. Спасибо за любую предоставленную информацию. |
Автор: | Kuranov.Dmitry [ Пн, янв 15 2018, 16:14 ] |
Заголовок сообщения: | Re: Генерация QR кода больших размеров средствами SAP |
На серваке интернет есть? В смысле конечный клиент это только тот кто запускает гуй, или тот кто содержит сервак? |
Автор: | MeIIIok [ Пн, янв 15 2018, 16:21 ] |
Заголовок сообщения: | Re: Генерация QR кода больших размеров средствами SAP |
Kuranov.Dmitry написал(а): На серваке интернет есть? В смысле конечный клиент это только тот кто запускает гуй, или тот кто содержит сервак? Доступа к интернету нет ни на сервере, ни на компе где будут запускать программу. |
Автор: | AFH [ Вт, янв 16 2018, 11:17 ] |
Заголовок сообщения: | Re: Генерация QR кода больших размеров средствами SAP |
В ноте 2030263 (вроде) есть программа REPORT RSPO_QR_BARCODE_DEBUG, там есть такие куски: Code: *>>>> START OF INSERTION <<<<
FORM call_kernel USING iv_text TYPE string iv_corrlevel TYPE c iv_mode TYPE c CHANGING ev_codewords TYPE string ev_symbol TYPE string ev_qr_version type i ev_qr_width type i ev_error_message TYPE string. DATA: lv_text_length TYPE i, lv_text_help TYPE c LENGTH 3200, "3200 digits = biggest encodable input string lv_codewords_help TYPE c LENGTH 8800, "2178 (number of codewords biggest symbol) * 4 (three digits + space) = 8712 lv_symbol_help TYPE c LENGTH 1000, lv_qr_version type i, lv_qr_symbolwidth type i. lv_text_length = strlen( iv_text ). lv_text_help = iv_text. CALL 'RSPO_DM_BARCODE_ENCODE' ID 'TEXT_LENGTH' FIELD lv_text_length ID 'TEXT' FIELD lv_text_help ID 'MODE' FIELD iv_mode ID 'QR_ERRCORR' FIELD iv_corrlevel ID 'CODEWORDS' FIELD lv_codewords_help ID 'SYMBOL' FIELD lv_symbol_help ID 'QR_VERSION' FIELD lv_qr_version ID 'QR_WIDTH' FIELD lv_qr_symbolwidth. |
Автор: | Kengur [ Вт, янв 16 2018, 11:33 ] |
Заголовок сообщения: | Re: Генерация QR кода больших размеров средствами SAP |
QR код можно генерить в выходной форме SFP. Возможно там больше схавает. |
Автор: | MeIIIok [ Вт, янв 16 2018, 13:23 ] |
Заголовок сообщения: | Re: Генерация QR кода больших размеров средствами SAP |
Kengur написал(а): QR код можно генерить в выходной форме SFP. Возможно там больше схавает. Там тоже ограничение. |
Автор: | MeIIIok [ Вт, янв 16 2018, 13:31 ] |
Заголовок сообщения: | Re: Генерация QR кода больших размеров средствами SAP |
AFH написал(а): В ноте 2030263 (вроде) есть программа REPORT RSPO_QR_BARCODE_DEBUG, там есть такие куски: Code: *>>>> START OF INSERTION <<<< FORM call_kernel USING iv_text TYPE string iv_corrlevel TYPE c iv_mode TYPE c CHANGING ev_codewords TYPE string ev_symbol TYPE string ev_qr_version type i ev_qr_width type i ev_error_message TYPE string. DATA: lv_text_length TYPE i, lv_text_help TYPE c LENGTH 3200, "3200 digits = biggest encodable input string lv_codewords_help TYPE c LENGTH 8800, "2178 (number of codewords biggest symbol) * 4 (three digits + space) = 8712 lv_symbol_help TYPE c LENGTH 1000, lv_qr_version type i, lv_qr_symbolwidth type i. lv_text_length = strlen( iv_text ). lv_text_help = iv_text. CALL 'RSPO_DM_BARCODE_ENCODE' ID 'TEXT_LENGTH' FIELD lv_text_length ID 'TEXT' FIELD lv_text_help ID 'MODE' FIELD iv_mode ID 'QR_ERRCORR' FIELD iv_corrlevel ID 'CODEWORDS' FIELD lv_codewords_help ID 'SYMBOL' FIELD lv_symbol_help ID 'QR_VERSION' FIELD lv_qr_version ID 'QR_WIDTH' FIELD lv_qr_symbolwidth. Нашел отчет этот, это уже близко к истине, ограничение по QR коду 3200 символов, и вроде генерит его нормально, системная функция выдает набор кодовых слов (codewords), как бы теперь их преобразовать в BMP файл? Результат работы выглядит сейчас так: Прогр. ZRSPO_QRCODE_BARCODE_DEBUG Input String: a1234567890b1234567890c1234567890d1234567890e1234567890g123456 Mode: Automatic Mode Error Corr. Level: H = 30% Generated Data Codewords: 64 0 22 17 0 161 237 200 197 65 0 0 88 132 2 135 183 35 21 4 0 1 99 16 10 30 220 140 84 16 0 5 144 64 40 123 114 49 80 64 0 22 81 0 161 237 200 197 65 0 0 89 196 2 135 183 35 21 4 0 1 116 16 10 30 220 140 84 16 0 5 200 64 40 123 114 49 80 64 0 22 33 0 161 237 200 197 65 0 0 91 132 2 135 183 35 21 4 0 1 115 16 10 30 220 140 84 16 0 9 153 132 64 40 123 114 49 80 64 0 22 33 0 161 237 200 197 65 0 0 88 196 2 135 183 35 21 4 0 1 100 16 10 30 220 140 84 16 0 5 148 64 40 123 114 49 80 64 0 22 113 0 161 237 200 197 65 0 0 93 4 2 135 183 35 21 4 0 1 114 16 10 30 220 140 84 16 0 5 136 64 40 123 114 49 80 64 0 22 225 0 161 237 200 197 65 0 0 92 196 2 135 183 35 21 4 0 1 102 0 236 17 236 Вариант в котором ограничение 255 символов это происходило в системной функции, при генерации он походу сразу создавал где то внутри BMP файл, который потом считывался кусками в 16-тиричном виде. Code: CALL 'RSPO_CACHE_CONTROL' ID 'AREA' FIELD 'BARCODE' ID 'OP' FIELD 'RENDERBARCODE' ID 'BC_PAR' FIELD bc_cmd-tdprintpar ID 'BP_PAR' FIELD bp_cmd-tdprintpar ID 'BARCDATA' FIELD barcdata ID 'BARCDATALEN' FIELD barcdatalen ID 'BMSIZE' FIELD bitmapsize ID 'WIDTH' FIELD w ID 'HEIGHT' FIELD h ID 'MSG' FIELD msg ID 'ERRMSG' FIELD errmsg. IF sy-subrc = 0. * get bitmap buffer totallen = 0. DO. CALL 'RSPO_CACHE_CONTROL' ID 'AREA' FIELD 'BARCODE' ID 'OP' FIELD 'GETBITMAP' ID 'BUFFER' FIELD bmbuf-data ID 'LENGTH' FIELD c_bmbuf_size ID 'ACTSIZE' FIELD actlen. IF sy-subrc = 0. IF actlen > 0. APPEND bmbuf. ADD actlen TO totallen. ENDIF. IF totallen >= bitmapsize. sy-subrc = 0. EXIT. ENDIF. ELSE. * write: / 'ERROR at GETBITMAP, SUBRC', sy-subrc. EXIT. ENDIF. ENDDO. IF sy-subrc = 0. * write: / 'Read', totallen, 'bytes of bitmap data'. ENDIF. ELSE. CONCATENATE errmsg ':' msg INTO errormsg. sy-subrc = 1. "concatenate changes SUBRC ENDIF Да и это нота 2042314 https://launchpad.support.sap.com/#/notes/2042314 |
Автор: | AFH [ Ср, янв 17 2018, 10:42 ] |
Заголовок сообщения: | Re: Генерация QR кода больших размеров средствами SAP |
Посмотрите, про кодовые слова немного расписано тут: https://habrahabr.ru/company/edison/blog/341212/ Как-то там сложно, маски, уровни коррекции и т.д. не придется ли наполовину генератор самим написать чтобы кодовые слова разобрать. |
Автор: | MeIIIok [ Ср, янв 17 2018, 14:15 ] |
Заголовок сообщения: | Re: Генерация QR кода больших размеров средствами SAP |
AFH написал(а): Посмотрите, про кодовые слова немного расписано тут: https://habrahabr.ru/company/edison/blog/341212/ Как-то там сложно, маски, уровни коррекции и т.д. не придется ли наполовину генератор самим написать чтобы кодовые слова разобрать. Спасибо за ссылку. Алгоритмы действительно очень сложные. Разработку своего генератора QR кода оставлю на на последний момент. Пока все же постараюсь найти более менее готовое решение. |
Автор: | DiVo [ Чт, янв 18 2018, 10:45 ] |
Заголовок сообщения: | Re: Генерация QR кода больших размеров средствами SAP |
Сам не пробовал, но, возможно, решение по ссылке поможет https://archive.sap.com/discussions/thread/3824600 |
Автор: | MeIIIok [ Чт, янв 18 2018, 13:52 ] |
Заголовок сообщения: | Re: Генерация QR кода больших размеров средствами SAP |
DiVo написал(а): Сам не пробовал, но, возможно, решение по ссылке поможет https://archive.sap.com/discussions/thread/3824600 Пробую, но честно говоря не совсем понял смысл описанный по ссылке, так как не силен в смартформах. Создал в SO10 текст. В смартформах создал шаблон-> текст-> строки программы. Заполнил как написано в приведенной ссылке, при активации выдает ошибку. Где в смартформах прописать эти переменные gv_qrcode1 gv_qrcode2? |
Автор: | Bimit [ Чт, янв 18 2018, 14:08 ] |
Заголовок сообщения: | Re: Генерация QR кода больших размеров средствами SAP |
Папка "Глобальные настройки" вкладка "Глобальные определения" |
Автор: | MeIIIok [ Чт, янв 18 2018, 14:51 ] |
Заголовок сообщения: | Re: Генерация QR кода больших размеров средствами SAP |
Bimit написал(а): Папка "Глобальные настройки" вкладка "Глобальные определения" Спасибо. Извините за глупые вопросы. Теперь все активируется, но на экран выводится пустой белый лист... Как Сап должен понять в смартоформах что нужно вывести QR код? |
Автор: | MeIIIok [ Чт, янв 18 2018, 15:00 ] |
Заголовок сообщения: | Re: Генерация QR кода больших размеров средствами SAP |
Еще по ссылке https://archive.sap.com/discussions/thread/3824600 у человека в настройках текста стоит формат абзацев QR, у меня таких настроек нет. Как он туда QR указал? |
Автор: | DiVo [ Чт, янв 18 2018, 15:36 ] |
Заголовок сообщения: | Re: Генерация QR кода больших размеров средствами SAP |
Сначала в тр. SE73 создайте свой QR код (как здесь): https://blogs.sap.com/2016/05/12/qr-code-or-2d-bar-code-in-sap/ Затем для смартформы создайте стиль и в этом стиле создайте формат знаков, ссылающийся на ранее созданный QR код. Далее используйте этот формат в смартформе для отображения QR кода. |
Страница 1 из 2 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |