— Removido a pedido do autor de onde retirei a informação —
— Removed by author request —
se for necessário alterar descrições de campos no SAP seguir as instruções:
http://www.renet-web.net/2005/09/01/changing-standard-sap-field-descriptions/
— Removido a pedido do autor de onde retirei a informação —
— Removed by author request —
se for necessário alterar descrições de campos no SAP seguir as instruções:
http://www.renet-web.net/2005/09/01/changing-standard-sap-field-descriptions/
Quem já trabalha com o SAP há algum tempo, de certeza que consegue alterar os conteúdos de uma tabela do SAP (entrando em debug e alterado o código da função para EDIT)….
Mas o que eu vos mostro, é mais poderoso e consequentemente, mais perigoso.
Este método, permite alterar o conteúdo das tabelas directamente na listagem principal. Para isso basta efectuar os seguintes passos:
Transacção: SE16N
– Escrever o nome da tabela
– No local onde se executam os comandos/transacções, escrever: &SAP_EDIT
– ENTER
– F8 ou executar
Reparem que o conteúdo de está todo editável…
Nos mapas em que se representam os dados com ALVs (quer em Listas quer em Grids), é bom colocar o nome do mapa e os vários critérios de selecção no topo da lista, especialmente quando são impressos.
Para uniformizar e centralizar este processo, inventei (possivelmente a roda, mas como não conheço nada do SAP para utilizar) uma rotina que lê os parametros de selecção e cria uma tabela preparadinha para se passar no evento de TOP_OF_PAGE, através da função REUSE_ALV_COMMENTARY_WRITE:
*&———————————————————————*
*& Form F_PREP_SELECTION_SCREEN
*&———————————————————————*
* Lê tela de selecção de determinado relatório e retorna uma tabela
* preparada para ser adicionada no head da ALV
*———————————————————————-*
* –> p_repname
* –> p_reptext
* –> p_company
* <– pt_listheader
*———————————————————————-*
FORM f_prep_selection_screen USING p_repname TYPE trdir-name
p_reptext
p_company
CHANGING pt_listheader TYPE slis_t_listheader.DATA: lt_param TYPE STANDARD TABLE OF swu_repsc.
CALL FUNCTION ‘SWF_GET_REPORT_PARAMETERS’
EXPORTING
reportname = p_repname
TABLES
parameter = lt_param
* CONTAINER =
EXCEPTIONS
report_not_found = 1
report_not_type_1 = 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.DATA: l_param LIKE LINE OF lt_param,
l_list LIKE LINE OF pt_listheader.* typ(1) TYPE C, ” H = Header, S = Selection, A = Action
* KEY(20) TYPE C,
* info TYPE slis_entry,* Empresa:
l_list-typ = ‘H’.
l_list-info = p_company.
APPEND l_list TO pt_listheader.* nome do layout:
l_list-typ = ‘H’.
l_list-info = p_reptext.
APPEND l_list TO pt_listheader.FIELD-SYMBOLS: <param> TYPE ANY,
<t_param> TYPE ANY TABLE,
<sign> TYPE ANY,
<op> TYPE ANY,
<low> TYPE ANY,
<high> TYPE ANY,
<wa> TYPE ANY.
DATA: l_sel(8),
l_tmp(60).l_list-typ = ‘S’.
LOOP AT lt_param INTO l_param.
CLEAR: l_list-info, l_tmp.IF l_param-text(2) = ‘D ‘.
l_param-text(1) = ‘ ‘.
CONDENSE l_param-text.
ENDIF.
MOVE l_param-text TO l_list-key. “nome do parametroIF l_param-kind = ‘P’. “parameters
ASSIGN (l_param-selname) TO <param>.
IF <param> IS NOT INITIAL.
WRITE <param> TO l_tmp.
CONDENSE l_tmp.
MOVE l_tmp TO l_list-info.
APPEND l_list TO pt_listheader.
ENDIF.
ELSEIF l_param-kind = ‘S’. “Select options
CLEAR l_tmp.
CONCATENATE l_param-selname ‘[]’ INTO l_tmp.
ASSIGN (l_tmp) TO <t_param>.
IF <t_param>[] IS NOT INITIAL.
LOOP AT <t_param> ASSIGNING <wa>.
ASSIGN COMPONENT ‘SIGN’ OF STRUCTURE <wa> TO <sign>.
ASSIGN COMPONENT ‘OPTION’ OF STRUCTURE <wa> TO <op>.
ASSIGN COMPONENT ‘LOW’ OF STRUCTURE <wa> TO <low>.
ASSIGN COMPONENT ‘HIGH’ OF STRUCTURE <wa> TO <high>.
IF <sign> = ‘E’.
MOVE ‘(exclui)’ TO l_list-info.
ENDIF.CASE <op>.
WHEN ‘EQ’.
move <low> TO l_list-info.
WHEN ‘GT’.
CONCATENATE l_list-info ‘maiores que’ <low>
INTO l_list-info SEPARATED BY space.
WHEN ‘LT’.
CONCATENATE l_list-info ‘menores que’ <low>
INTO l_list-info SEPARATED BY space.
WHEN ‘LE’.
CONCATENATE l_list-info ‘menores ou iguais a’ <low>
INTO l_list-info SEPARATED BY space.
WHEN ‘GE’.
CONCATENATE l_list-info ‘maiores ou iguais a’ <low>
INTO l_list-info SEPARATED BY space.
WHEN ‘NE’.
CONCATENATE l_list-info ‘diferentes de’ <low>
INTO l_list-info SEPARATED BY space.
WHEN ‘BT’.
CONCATENATE l_list-info <low> ‘a’ <high>
INTO l_list-info SEPARATED BY space.
ENDCASE.APPEND l_list TO pt_listheader.
CLEAR l_list-info.
ENDLOOP.
ENDIF.
ENDIF.
ENDLOOP.ENDFORM. ” F_PREP_SELECTION_SCREEN
Sempre que for necessário ler dados que foram inseridos numa GRID ALV, que não seja Object Oriented, na rotina de callback do user command, deve colar-se o seguinte código:
DATA: ref_grid TYPE REF TO cl_gui_alv_grid.
IF ref_grid IS INITIAL.
CALL FUNCTION ‘GET_GLOBALS_FROM_SLVC_FULLSCR’
IMPORTING
e_grid = ref_grid.
ENDIF.
IF NOT ref_grid IS INITIAL.
CALL METHOD ref_grid->check_changed_data .
ENDIF.
Desta forma, a tabela interna que contem os dados a serem representados é actualizado com o que foi inserido/editado na ALV.
Se alguma vez for necessário pesquisar uma ordem de venda por vendedor (ou responsável de vendas), cuja informação é um parceiro de HR (um funcionário) e se por ventura for necessário criar um report cujo critério de pesquisa é o vendedor, a coisa faz-se muito fácil:
SELECT-OPTIONS: s_vendr FOR vbpa-kunnr MATCHCODE OBJECT prem.
Aqui só é necessário o matchode certo, caso contrário usa o por omição do tipo VBPA-KUNNR (clientes).
bem… este assunto é todo muito novo para mim, mas vai ficar aqui só umas pequenas dicas (notas para o futuro)
esta tecnologia permite ver no SAP – numa lista ALV – os dados do relatório no próprio Excel.
Para isso tem que se usar um template baseado nos std do SAP
A reter:
em dois dias…
foi um fim de semana na bike um bocado fraca… estes 24Km foram feitos em dois dias!!!
no sábado, com a “maria” e com o mano, fomos dar uma voltinha pelo quintal lá de casa, e no final da manhã somámos 12 Km.
a “maria” portou-se lindamente, tendo apenas que desmontar numa subida um pouco mais longa. passámos por um mega trilho de cerca de 1km quase sempre a descer, com espaço apenas para uma bike. fizemos uma primeira passagem para apalpar o terreno, e depois voltamos a subir para refazer o single, é um single espetacular!!!
no Domingo, aventurei-me a seguir o meu irmão e ir ter com uma malta que habitualmente vai visitar a Serra D’Aire.
Mas neste dia, o tempo não ajudava e eram poucos, e os poucos que estavam presentes, são “hiper-mega-pro-masters” no que toca ao btt, e aparentemente com bikes mais caras que o meu carro (bem, talvez o total das bikes superasse o valor do meu carro – 4 bikes) mas o que aconteceu até me envergonha….
o dito single que fiz a descer no dia anterior, foi feito a subir… a uma velocidade muito elevada. o que fez com que eu rebentasse muito cedo – não (só) fisicamente, mas anímicamente, pois estava-me a custar ser uma “ancora” para os mega-hiper-ri-pro-masters do btt… decidi que eu não estava ali para sofrer, e rumei a casa. 12km.
eu não presto pra nada… e já não posso dar a desculpa da bike.
nunca usei.
mas pode ser útil. no entanto, a SAP deixou de dar suporte a esta tecnologia…
isso agora não interessa nada, o que interessa é saber como o fazer caso seja mesmo necessário em versões superiores à 4.6C.
Existe um report que se pode correr para criar os tais field-exits: RSMODPRF
e pronts, tenho dito.
Eu sei como! se consultarmos as tabelas:
Com estas tabelas conseguimos inferir quais os parametros a passar à FM READ_TEXT
Quando as ALV Grid que têm input fields não estão a retornar correctamente os valores preenchidos, é uma seca…
Pode ser que isto só acontece para ALV Grids criados com as funções REUSE*, mas como estas até são práticas…
Para não se apanhar barretes:
data: ref_grid TYPE REF TO cl_gui_alv_grid.
IF ref_grid IS INITIAL.
CALL FUNCTION ‘GET_GLOBALS_FROM_SLVC_FULLSCR’
IMPORTING
e_grid = ref_grid.
ENDIF.
IF NOT ref_grid IS INITIAL.
CALL METHOD ref_grid->check_changed_data .
ENDIF.
Wow… ou não… é tão básico que faz impressão…