SAPфорум.RU https://sapboard.ru/forum/ |
|
Изменение функционала транзакции S_P99_41000062- Ведомость материалов (валюта отчета) https://sapboard.ru/forum/viewtopic.php?f=13&t=94739 |
Страница 1 из 1 |
Автор: | Maksimka [ Чт, апр 20 2017, 08:21 ] |
Заголовок сообщения: | Изменение функционала транзакции S_P99_41000062- Ведомость материалов (валюта отчета) |
Добрый день уважаемые ММ-щики. Вопрос такой: отчёт, выдаваемый транзакцией S_P99_41000062, отображается только в валюте, которую выбирает пользователь на селекционном экране, т.е. либо 10-Валюта БЕ, либо 31-Валюта концерна, оценка концерна. Т.е. можно выбрать только одну валюту. Возникла необходимость отображения этого отчёта в обеих валютах, но на селекционном экране можно выбрать только одно из этих условий. Существует ли настройка изменения этой стандартной транзакции? Можно, конечно, z-овский отчёт написать. Но мне стало интересно, можно ли изменить эту стандартную транзакцию? |
Автор: | Maksimka [ Пн, апр 24 2017, 07:28 ] |
Заголовок сообщения: | Re: Изменение функционала транзакции S_P99_41000062- Ведомость материалов (валюта отчета) |
В общем, я не стал заморачиваться с энхансментами. Мне попалась под руки другая программа, где сделали вызов одной программы из другой. Я по аналогии попытался сделать такой вызов из z-селекционного экрана стандартной транзакции. Получилось что-то типа: Code: submit rkkbmlmat with r_matnr in r_matnr with p_werks = p_werks with p_poper = p_poper with p_bdatj = p_bdatj with p_curtp = '10 Валюта БЕ' exporting list to memory and return. call function 'LIST_FROM_MEMORY' tables listobject = listtab exceptions not_found = 1 others = 2. if sy-subrc ne 0. message id sy-msgid type sy-msgty number sy-msgno with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. endif. call function 'LIST_TO_ASCI' tables listasci = ascilistkzt listobject = listtab exceptions empty_list = 1 list_index_invalid = 2 others = 3. После обработки таблички ASCILISTKZT я опять вызываю SUBMIT, но уже с второй валютой, валютой концерна. Возникла одна мелочь, которая мне не совсем понятна. Вроде бы, банальный селект из физической таблички MARA, но почему-то селект проходит безрезультатно. Code: *loop at itab. select single mtart from mara into (itab-mtart) where matnr = itab-matnr. modify itab. endloop. Я не могу забрать из таблицы поле "Вид материала", оно, вроде бы, имеется в физической табличке, но почему-то выборка не проходит. В отладчике смотрел поле внутренней таблички, в которой я собираю отчёт, там itab-matnr заполняется, соответственно, условие where должно срабатывать, но оно этого не делает. Вот мне и непонятно: то ли в таблице MARA с этим полем что-то не так и его просто так не забрать оттуда, либо я с абапом что-то не так делаю. Может, кто подскажет? |
Автор: | Admin [ Пн, апр 24 2017, 10:00 ] |
Заголовок сообщения: | Re: Изменение функционала транзакции S_P99_41000062- Ведомость материалов (валюта отчета) |
Переместил в форум по программированию, поскольку тут больше задача девелопера, нежели консультанта. |
Автор: | Maksimka [ Пн, апр 24 2017, 14:29 ] |
Заголовок сообщения: | Re: Изменение функционала транзакции S_P99_41000062- Ведомость материалов (валюта отчета) |
С выборкой вида материала получилось, я совсем забыл, что номер материала в таблице mara лежит с кучей нулей впереди. Теперь возник ещё вопрос такой. В стандартной программе транзакции отчёт выходит в виде одного настроенного формата, который был установлен по умолчанию и отображается на селекционном экране. Теперь я пытаюсь сделать такой же формат у себя в транзакции, поставить его по умолчанию и передать в стандартную программу транзакции S_P99_41000062 через submit, но выходит как то не удобно, т.е. запускаю программу, заполняю поля на селекционном экране, но отчёт не запускается до тех пока я не выберу формат, при чём отчёт сразу запускается при выборе формата, т.е. без нажатия кнопочки часы и пока я не зайду в окно выбора формата и не выберу его отчёт не запускается. Толи я что то намудрил, толи лыжи не едут, чота не пойму как надо сделать правильно, чтобы отчёт просто запускался бы в формате, который используется и в стандартной программе транзакции S_P99_41000062. бы В общем часть кода, где срабатывает формат такая Code: selection-screen skip 2.
select-options: r_matnr for ckmlhd-matnr. parameters: p_werks like mlkey-werks_ml_productive obligatory memory id wrk. selection-screen skip 1. ** Periode selection-screen begin of block parameter with frame title text-101. parameters: p_poper like cki_doc_ml-sl_periode memory id mlp, p_bdatj like ckmlrunplant-gjahr memory id mlj. selection-screen end of block parameter. parameters: p_alvdef like disvariant-variant. " DATA: VARIANT like disvariant-variant. select single variant from ltdxd into p_alvdef where report = sy-cprog. at selection-screen on value-request for p_alvdef. gs_alv_variant-report = sy-repid. call function 'REUSE_ALV_VARIANT_F4' exporting is_variant = gs_alv_variant i_save = 'A' importing es_variant = gs_alv_variant exceptions not_found = 2. if sy-subrc = 2. message id sy-msgid type 'S' number sy-msgno with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. else. p_alvdef = gs_alv_variant-variant. endif. * refresh listtab. refresh listtabusd. refresh ascilistkzt. refresh ascilistusd. submit rkkbmlmat with r_matnr in r_matnr with p_werks = p_werks with p_poper = p_poper with p_bdatj = p_bdatj with p_curtp = '10 Валюта БЕ' with p_alvdef = p_alvdef exporting list to memory and return. call function 'LIST_FROM_MEMORY' tables listobject = listtab exceptions not_found = 1 others = 2. if sy-subrc ne 0. message id sy-msgid type sy-msgty number sy-msgno with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. endif. call function 'LIST_TO_ASCI' tables listasci = ascilistkzt listobject = listtab exceptions empty_list = 1 list_index_invalid = 2 others = 3. if sy-subrc <> 0. message id sy-msgid type sy-msgty number sy-msgno with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. endif. |
Автор: | baboon [ Пн, апр 24 2017, 15:48 ] |
Заголовок сообщения: | Re: Изменение функционала транзакции S_P99_41000062- Ведомость материалов (валюта отчета) |
А точно в отчете RKKBMLMAT параметр с вариантом называется p_alvdef? У меня - p_varian. И писать "10 валюта БЕ", необязательно, достаточно просто "10". |
Автор: | Maksimka [ Пн, апр 24 2017, 16:08 ] |
Заголовок сообщения: | Re: Изменение функционала транзакции S_P99_41000062- Ведомость материалов (валюта отчета) |
baboon написал(а): А точно, в отчете rkkbmlmat, параметр с вариантом называется p_alvdef? У меня - p_varian. И писать "10 валюта БЕ", необязательно, достаточно просто "10". Заменил везде на p_varian. Результат тот же. При выборе формата сразу срабатывает программа rkkbmlmat и запускается отчёт. А без формата транзакция не запускается. |
Автор: | baboon [ Пн, апр 24 2017, 16:34 ] |
Заголовок сообщения: | Re: Изменение функционала транзакции S_P99_41000062- Ведомость материалов (валюта отчета) |
См. как заполняется значение p_varian в программе rkkbmlmat в событии initialization (их там 2, см второе). Вместо sy-repid надо указать 'RKKBMLMAT'. Таким образом будет получено имя варианта по-умолчанию для стандартной программы. |
Автор: | Maksimka [ Вт, апр 25 2017, 07:14 ] |
Заголовок сообщения: | Re: Изменение функционала транзакции S_P99_41000062- Ведомость материалов (валюта отчета) |
baboon написал(а): См. как заполняется значение p_varian в программе rkkbmlmat в событии initialization (их там 2, см второе). Вместо sy-repid надо указать 'RKKBMLMAT'. Таким образом будет получено имя варианта по-умолчанию для стандартной программы. Я указал вместо sy-repid в строке gs_alv_variant-report = 'RKKBMLMAT'. При запуске транзакции стали подтягиваться форматы, созданные в стандартной транзакции, но запускается отчёт также, только когда выберешь формат в диалоговом окне выбора формата. Может быть ещё где нибудь что нибудь подкрутить надо?! |
Автор: | baboon [ Вт, апр 25 2017, 09:16 ] |
Заголовок сообщения: | Re: Изменение функционала транзакции S_P99_41000062- Ведомость материалов (валюта отчета) |
Старею. Блоки at selection screen работают как процедуры, т.е. всё, что ниже, до следующего блока будет одной процедурой. Поэтому submit выполняется только при выборе варианта. Надо перед refresh listtab поставить start-of-selection |
Автор: | Maksimka [ Чт, май 04 2017, 14:06 ] |
Заголовок сообщения: | Re: Изменение функционала транзакции S_P99_41000062- Ведомость материалов (валюта отчета) |
Возник ещё один вопрос такой, как на селекционном экране parameters можно было бы автоматом проставить текущий период, т.е. месяц. С финансовым годом там вроде бы понятно, ставишь default sy-datum и он ставит по умолчанию на экран текущий год, а вот как быть с месяцем? |
Автор: | Maksimka [ Чт, май 04 2017, 16:36 ] |
Заголовок сообщения: | Re: Изменение функционала транзакции S_P99_41000062- Ведомость материалов (валюта отчета) |
В общем сделал я следующее, объявил переменную datum (8) type d, затем переменной datum присвоил значение sy-datum. В общем как то так Code: datum = sy-datum. data: datum2(8) TYPE n, datum3(2) TYPE n. CLEAR datum2. move datum to datum2. SHIFT datum2 RIGHT by 2 PLACES. SHIFT datum2 LEFT by 6 PLACES. *condense datum2 no-gaps. SHIFT datum2 RIGHT DELETING TRAILING space. move datum2 to datum3. В итоге у меня datum3 равен текущему периоду, т.е. значение 05, но как мне передать его в parameters. Если бы это был select-options, то можно было бы через Inicialization, а там присвоить Period-low = ' ' и period-high = ' ' значение поля datum3. А как быть с parameters в данном случае? Я пытаюсь передавать, Code: parameters: p_poper like cki_doc_ml-sl_periode obligatory DEFAULT datum3, но ничего не передаётся. Как быть в данном случае? |
Автор: | Maksimka [ Чт, май 04 2017, 17:00 ] |
Заголовок сообщения: | Re: Изменение функционала транзакции S_P99_41000062- Ведомость материалов (валюта отчета) |
Хм...вроде бы разобрался. Надо было просто в блоке INITIALIZATION всё это дело сделать и передать в parameters, типа Code: data: datum2(8) TYPE n, datum3(2) TYPE n. selection-screen skip 2. select-options: r_matnr for ckmlhd-matnr obligatory, s_werks for ekpo-werks obligatory memory id wrk. *include rckm_par_bukrs_werks_ml_prod. parameters: p_werks like mlkey-werks_ml_productive no-display. selection-screen skip 1. ** Periode selection-screen begin of block parameter with frame title text-101. parameters: p_poper like cki_doc_ml-sl_periode obligatory , *parameters: p_poper like cki_doc_ml-sl_periode * memory id mlp obligatory DEFAULT datum2, p_bdatj like ckmlrunplant-gjahr memory id mlj obligatory default sy-datum. selection-screen end of block parameter. INITIALIZATION. datum = sy-datum. CLEAR datum2. move datum to datum2. SHIFT datum2 RIGHT by 2 PLACES. SHIFT datum2 LEFT by 6 PLACES. *condense datum2 no-gaps. SHIFT datum2 RIGHT DELETING TRAILING space. move datum2 to datum3. p_poper = datum3. Я правда не знаю насколько я правильно тут написал, но период стал подтягиваться на селекционный экран. |
Автор: | olegbash [ Пт, май 05 2017, 09:00 ] |
Заголовок сообщения: | Re: Изменение функционала транзакции S_P99_41000062- Ведомость материалов (валюта отчета) |
лично я пришел к выводу, что предзаполнение лучше делать не в INITIALIZATION, а в событии at selection screen output. Тогда при вызове из внешней программы будет заполняться то, что мы указали принудительно. (естественно, нужно сделать проверку на пустоту/непустоту в событии) |
Автор: | AFH [ Пт, май 05 2017, 10:52 ] |
Заголовок сообщения: | Re: Изменение функционала транзакции S_P99_41000062- Ведомость материалов (валюта отчета) |
Maksimka написал: Я правда не знаю насколько я правильно тут написал, но период стал подтягиваться на селекционный экран. Вместо тысячи слов (т.е. вместо всего кода в инициализэйшн) Code: p_poper = sy-datum+4(2)
|
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |