среда, 31 июля 2024 г.

SAP GUI 8.00 Patch Level 8

SAP GUI 8.00 Patch Level 8

!Внимание! Файлы получены не c сайта SAP. На свой страх и риск.

x86

Download from Mega
Download from Mail.ru
Download from Dropbox

x64

Download from Mega
Download from Mail.ru
Download from Dropbox

пятница, 28 июня 2024 г.

SAP GUI 8.00 Patch Level 7

SAP GUI 8.00 Patch Level 7

!Внимание! Файлы получены не c сайта SAP. На свой страх и риск.

x86

Download from Mega
Download from Mail.ru
Download from Dropbox

x64

Download from Mega
Download from Mail.ru
Download from Dropbox

SAP GUI 8.00 Patch Level 6 Hotfix 1

SAP GUI 8.00 Patch Level 6 Hotfix 1

!Внимание! Файлы получены не c сайта SAP. На свой страх и риск.

x86

Download from Mega
Download from Mail.ru
Download from Dropbox

x64

Download from Mega
Download from Mail.ru
Download from Dropbox

SAP GUI 8.00 Patch Level 6

SAP GUI 8.00 Patch Level 6

!Внимание! Файлы получены не c сайта SAP. На свой страх и риск.

x86

Download from Mega
Download from Mail.ru
Download from Dropbox

x64

Download from Mega
Download from Mail.ru
Download from Dropbox

SAP GUI 7.70 Patch Level 16

SAP GUI 7.70 Patch Level 16

!Внимание! Файлы получены не c сайта SAP. На свой страх и риск.

Download from Mega
Download from Mail.ru
Download from Dropbox

пятница, 12 апреля 2024 г.

Генерация "широких" диалогов ведения таблиц

Стандартный генератор ведения таблиц (и ракурсов) в SE11 генерирует табличный компонент на экране не шире 83 символов. Наверное, когда-то давно, когда компьютеры были большими, а экраны маленьким, это было нормально. Но сейчас во времена всяких FullHD и выше это уже выглядит неудобным, поскольку для таблиц, где суммартная длина полей выходит за эти 83 символа, появляется прокрутка, хотя места на экране еще больше половины.

Конечно, после генерации всегда можно вручную поправить экран и сделать компонент шире (до 255 символов).

Но настоящему ленивому програмисту всегда хочется оптимизировать такую рутину. И вот оно решение ниже. Исходники есть в Github Gist.

Нужно создать пул подпрограмм ZBC_MAINTANCE_VIEW_EXITS и в него запихать весь код из ZBC_MAINTANCE_VIEW_EXITS.abap.

Далее нужно в программе SAPMSVIM создать в 3х подпрограммах неявные расширения и вставить в них вызовы подпрограмм из ZBC_MAINTANCE_VIEW_EXITS. Что конкретно расширять и что вставлять, указано в MSVIMF21.abap

После активации всего этого добра, нужно сгенерировать (или перегенерировать) экран ведения.

ЗЫ. Кроме "расширения" табличного компонента, для таблиц, имеющих связанные текстовые таблицы, все поля текстовых таблиц "переезжают" вправо.

"1
"Add Implicit Enhancement at the end of form CREATE_DYNP_HEADER (INCLUDE MSVIMF21)
"Put this code inside created enhancement:
PERFORM post_create_dynp_header in PROGRAM ZBC_MAINTANCE_VIEW_EXITS if FOUND
USING p_dyname p_gencb p_detail dropdown_length_tcrl max_dynp_fieldlen CHANGING p_header.
"2
"Add Implicit Enhancement at the begin of form CREATE_DYNP_FIELDLIST (INCLUDE MSVIMF21)
"Put this code inside created enhancement:
PERFORM pre_create_dynp_fieldlist IN PROGRAM ZBC_MAINTANCE_VIEW_EXITS IF FOUND
USING p_make_detail p_skip_fields p_flds_to_cont CHANGING p_dfies_tab.
"3
"Add Implicit Enhancement at the end of form CREATE_DYNP_CONT (INCLUDE MSVIMF21)
"Put this code inside created enhancement:
IF p_mode = '11' and <w_cont> is ASSIGNED.
PERFORM post_create_dynp_cont in PROGRAM ZBC_MAINTANCE_VIEW_EXITS if FOUND
CHANGING <w_cont>.
ENDIF.
view raw MSVIMF21.abap hosted with ❤ by GitHub
*&---------------------------------------------------------------------*
*& Subroutinenpool ZBC_MAINTANCE_VIEW_EXITS
*&
*&---------------------------------------------------------------------*
PROGRAM zbc_maintance_view_exits.
TYPES:
BEGIN OF ts_dynpid,
prog LIKE d020s-prog,
dnum LIKE d020s-dnum,
END OF ts_dynpid.
TYPES tt_dfies TYPE STANDARD TABLE OF dfies WITH KEY tabname fieldname langu position.
TYPES tt_flds_to_cont_type TYPE STANDARD TABLE OF rpy_dyfatc WITH DEFAULT KEY.
DATA gps_header TYPE REF TO rpy_dyhead.
DATA gpt_fields TYPE REF TO tt_flds_to_cont_type.
FORM post_create_dynp_header
USING is_dyname TYPE ts_dynpid
is_gencb TYPE vimgencb
iv_detail TYPE xfeld
iv_dropdown_length_tcrl TYPE scrndeflg
iv_max_dynp_fieldlen TYPE scrnvislg
CHANGING cs_header TYPE rpy_dyhead.
CLEAR gps_header.
CLEAR gpt_fields.
CHECK iv_detail IS INITIAL.
"Add some check of enabling this functionality if you need. Something like it:
"SELECT SINGLE @abap_true FROM tvarvc WHERE name = 'ZDISABLE_WIDE_VIEW_MAINT_GEN' INTO @DATA(lv_disable).
"CHECK lv_disable IS INITIAL.
gps_header = REF #( cs_header ).
ENDFORM.
FORM pre_create_dynp_fieldlist USING iv_make_detail TYPE xfeld
iv_skip_fields TYPE xfeld
it_flds_to_cont TYPE tt_flds_to_cont_type
CHANGING ct_dfies TYPE tt_dfies.
DATA lt_dfies_txt TYPE tt_dfies.
IF iv_make_detail = abap_true OR ct_dfies[] IS INITIAL OR gps_header IS NOT BOUND.
RETURN.
ENDIF.
gpt_fields = REF #( it_flds_to_cont ).
*"Move text table fields to end
DATA(lv_tabname) = ct_dfies[ 1 ]-tabname.
LOOP AT ct_dfies REFERENCE INTO DATA(lps_dfies)
WHERE tabname <> lv_tabname.
APPEND lps_dfies->* TO lt_dfies_txt.
ENDLOOP.
IF sy-subrc = 0.
DELETE ct_dfies WHERE tabname <> lv_tabname.
APPEND LINES OF lt_dfies_txt TO ct_dfies.
ENDIF.
ENDFORM.
FORM post_create_dynp_cont CHANGING cs_cont TYPE rpy_dycatt.
DATA lps_field TYPE REF TO rpy_dyfatc.
CHECK gps_header IS BOUND AND gpt_fields IS BOUND.
DATA(lv_size) = 0.
LOOP AT gpt_fields->* REFERENCE INTO lps_field
WHERE tc_heading IS INITIAL AND tc_title IS INITIAL.
ADD lps_field->vislength TO lv_size.
ENDLOOP.
lv_size = nmin( val1 = lv_size val2 = 255 ).
IF lv_size > gps_header->columns.
gps_header->columns = lv_size.
ENDIF.
IF lv_size > cs_cont-length.
cs_cont-length = lv_size.
ENDIF.
CLEAR gps_header.
CLEAR gpt_fields.
ENDFORM.