Текущее время: Чт, мар 28 2024, 17:54

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 25 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Генерация QR кода больших размеров средствами SAP
СообщениеДобавлено: Пн, янв 15 2018, 16:04 
Начинающий
Начинающий

Зарегистрирован:
Чт, май 13 2010, 16:56
Сообщения: 20
Всем привет!

Возникла необходимость генерить 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 без использования сторонних приложений и программ.

Спасибо за любую предоставленную информацию.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Генерация QR кода больших размеров средствами SAP
СообщениеДобавлено: Пн, янв 15 2018, 16:14 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Вт, сен 05 2017, 23:56
Сообщения: 537
На серваке интернет есть?
В смысле конечный клиент это только тот кто запускает гуй, или тот кто содержит сервак?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Генерация QR кода больших размеров средствами SAP
СообщениеДобавлено: Пн, янв 15 2018, 16:21 
Начинающий
Начинающий

Зарегистрирован:
Чт, май 13 2010, 16:56
Сообщения: 20
Kuranov.Dmitry написал(а):
На серваке интернет есть?
В смысле конечный клиент это только тот кто запускает гуй, или тот кто содержит сервак?

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


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Генерация QR кода больших размеров средствами SAP
СообщениеДобавлено: Вт, янв 16 2018, 11:17 
Специалист
Специалист

Зарегистрирован:
Чт, мар 25 2010, 09:02
Сообщения: 207
В ноте 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.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Генерация QR кода больших размеров средствами SAP
СообщениеДобавлено: Вт, янв 16 2018, 11:33 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, дек 20 2007, 18:21
Сообщения: 1613
QR код можно генерить в выходной форме SFP. Возможно там больше схавает.

_________________
я твой сап эфай внедрял
BAdI-позитив
Взять немножечко абопу, сунь туда кошачью *опу, RFC лапки, БТ старой бабки, на медленном базиснике переносить, тестовое окружение материть, снимать SAT пенку, биться головой о стенку, охапка тайм-шитов, отчет готов!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Генерация QR кода больших размеров средствами SAP
СообщениеДобавлено: Вт, янв 16 2018, 13:23 
Начинающий
Начинающий

Зарегистрирован:
Чт, май 13 2010, 16:56
Сообщения: 20
Kengur написал(а):
QR код можно генерить в выходной форме SFP. Возможно там больше схавает.

Там тоже ограничение.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Генерация QR кода больших размеров средствами SAP
СообщениеДобавлено: Вт, янв 16 2018, 13:31 
Начинающий
Начинающий

Зарегистрирован:
Чт, май 13 2010, 16:56
Сообщения: 20
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


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Генерация QR кода больших размеров средствами SAP
СообщениеДобавлено: Ср, янв 17 2018, 10:42 
Специалист
Специалист

Зарегистрирован:
Чт, мар 25 2010, 09:02
Сообщения: 207
Посмотрите, про кодовые слова немного расписано тут:

https://habrahabr.ru/company/edison/blog/341212/

Изображение

Как-то там сложно, маски, уровни коррекции и т.д. не придется ли наполовину генератор самим написать чтобы кодовые слова разобрать.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Генерация QR кода больших размеров средствами SAP
СообщениеДобавлено: Ср, янв 17 2018, 14:15 
Начинающий
Начинающий

Зарегистрирован:
Чт, май 13 2010, 16:56
Сообщения: 20
AFH написал(а):
Посмотрите, про кодовые слова немного расписано тут:

https://habrahabr.ru/company/edison/blog/341212/



Как-то там сложно, маски, уровни коррекции и т.д. не придется ли наполовину генератор самим написать чтобы кодовые слова разобрать.

Спасибо за ссылку. Алгоритмы действительно очень сложные. Разработку своего генератора QR кода оставлю на на последний момент. Пока все же постараюсь найти более менее готовое решение.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Генерация QR кода больших размеров средствами SAP
СообщениеДобавлено: Чт, янв 18 2018, 10:45 
Ассистент
Ассистент
Аватара пользователя

Зарегистрирован:
Пн, сен 17 2007, 07:11
Сообщения: 41
Сам не пробовал, но, возможно, решение по ссылке поможет

https://archive.sap.com/discussions/thread/3824600


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Генерация QR кода больших размеров средствами SAP
СообщениеДобавлено: Чт, янв 18 2018, 13:52 
Начинающий
Начинающий

Зарегистрирован:
Чт, май 13 2010, 16:56
Сообщения: 20
DiVo написал(а):
Сам не пробовал, но, возможно, решение по ссылке поможет

https://archive.sap.com/discussions/thread/3824600


Пробую, но честно говоря не совсем понял смысл описанный по ссылке, так как не силен в смартформах.

Создал в SO10 текст.
Изображение

В смартформах создал шаблон-> текст-> строки программы.
Изображение
Изображение

Заполнил как написано в приведенной ссылке, при активации выдает ошибку.
Изображение

Где в смартформах прописать эти переменные gv_qrcode1 gv_qrcode2?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Генерация QR кода больших размеров средствами SAP
СообщениеДобавлено: Чт, янв 18 2018, 14:08 
Специалист
Специалист

Зарегистрирован:
Пн, июл 11 2011, 10:50
Сообщения: 197
Папка "Глобальные настройки" вкладка "Глобальные определения"


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Генерация QR кода больших размеров средствами SAP
СообщениеДобавлено: Чт, янв 18 2018, 14:51 
Начинающий
Начинающий

Зарегистрирован:
Чт, май 13 2010, 16:56
Сообщения: 20
Bimit написал(а):
Папка "Глобальные настройки" вкладка "Глобальные определения"

Спасибо. Извините за глупые вопросы.
Теперь все активируется, но на экран выводится пустой белый лист...
Как Сап должен понять в смартоформах что нужно вывести QR код?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Генерация QR кода больших размеров средствами SAP
СообщениеДобавлено: Чт, янв 18 2018, 15:00 
Начинающий
Начинающий

Зарегистрирован:
Чт, май 13 2010, 16:56
Сообщения: 20
Еще по ссылке https://archive.sap.com/discussions/thread/3824600 у человека в настройках текста стоит формат абзацев QR, у меня таких настроек нет. Как он туда QR указал?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Генерация QR кода больших размеров средствами SAP
СообщениеДобавлено: Чт, янв 18 2018, 15:36 
Ассистент
Ассистент
Аватара пользователя

Зарегистрирован:
Пн, сен 17 2007, 07:11
Сообщения: 41
Сначала в тр. SE73 создайте свой QR код (как здесь):

https://blogs.sap.com/2016/05/12/qr-code-or-2d-bar-code-in-sap/

Затем для смартформы создайте стиль и в этом стиле создайте формат знаков, ссылающийся на ранее созданный QR код. Далее используйте этот формат в смартформе для отображения QR кода.

Изображение

Изображение


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 25 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB