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