O comando MODIFY é usado para realizar modificações e valores já existentes, podendo ser utilizado para altera valores de uma DYNPRO, tabelas standard, tabelas Z e ate mesmo uma tabela interna. Para modificar uma tabela interna usando o comando MODIFY, basta seguinte a seguinte lógica.
Lógica 1: Uma tabela interna contém 1 ou N campo, em algum momento esta tabela foi carregada por um SELECT ou qualquer outro tipo de comando que pode carregar uma tabela interna, porém pode acontecer que um dos campos não podem vir dados de uma forma, por exemplo, quando um campo tiver valores negativo este devem se calculados para positivos, ou uma data esta menor do que a desejada, para realizar estas alterações basta usar os comando MODIFY que modifica uma campo ou mais de uma linha por. Exemplo 1. será carregado em uma tabela interna os dados referentes a contabilidades de FI, este dados será selecionados e carregados na tabelas interna, após a tabela carregada, será verificados o índice atual da tabela onde será modificado o valor do campo BUZEI para 002 para linhas de índice par e 001 para linha de índice impar, quando o índice for par o campo WEBTR será modificado para SPACE.
SINTAXE DE MODIFY.
MODIFY {TABELA_INTERNA} INDEX {INDICE} TRANSPORTING CAMPO1 … CAMPO N.
Os campos devem estar separados por espaços, este campos serão os campos que serão modificados na tabelas interna. Lembrando que para controlar o INDEX de uma tabela INTERNA se estiver usando o comando LOOP AT tabela_INTERNA, a variável SY-TABIX contém o índice atual da tabela e os campos a serem alterados deve ser carregados antes do comando. Exemplo:
DATA: BEGIN OF T_BSIK OCCURS 0,
BUKRS LIKE BSIK-BUKRS,
LIFNR LIKE BSIK-LIFNR,
BELNR LIKE BSIK-BELNR,
UMSKZ LIKE BSIK-UMSKZ,
BLART LIKE BSIK-BLART,
XBLNR LIKE BSIK-XBLNR,
ZFBDT LIKE BSIK-ZFBDT,
DMBTR LIKE BSIK-DMBTR,
DMBE2 LIKE BSIK-DMBE2,
WRBTR LIKE BSIK-WRBTR,
BUZEI LIKE BSIK-BUZEI,
GJAHR LIKE BSIK-GJAHR,
BLDAT LIKE BSIK-BLDAT,
SHKZG LIKE BSIK-SHKZG,
ZBD1T LIKE BSIK-ZBD1T,
END OF T_BSIK.
CLEAR: T_BSIK, T_BSIK[].
SELECT BUKRS LIFNR BELNR UMSKZ BLART XBLNR ZFBDT DMBTR
DMBE2 WRBTR BUZEI GJAHR BLDAT SHKZG ZBD1T
FROM BSIK INTO TABLE T_BSIK
WHERE LIFNR = ‘0000000111’.
DATA CHAVE TYPE I VALUE 0.
LOOP AT T_BSIK.
IF CHAVE = 0.
MOVE SPACE TO T_BSIK-WRBTR.
MOVE ‘002’ TO T_BSIK-BUZEI.
MODIFY T_BSIK INDEX SY-TABIX TRANSPORTING BUZEI WRBTR.
CHAVE = 1.
ELSE.
MOVE ‘001’ TO T_BSIK-BUZEI.
MODIFY T_BSIK INDEX SY-TABIX TRANSPORTING BUZEI.
CHAVE = 0. ENDIF. WRITE: / T_BSIK-BUZEI, T_BSIK-WRBTR.
ENDLOOP.
Lógica 2: Uma tabela interna contém 1 ou N campo, em algum momento esta tabela foi carregada por um SELECT ou qualquer outro tipo de comando que pode carregar uma tabela interna, porém pode acontecer que um dos campos não podem vir dados de uma forma, por exemplo, altera todos os valores de dados de uma coluna onde o valor seja positivo ou negativo. Exemplo 2. será carregado em uma tabela interna os dados referentes a contabilidades de FI, este dados será selecionados e carregados na tabelas interna, após a tabela carregada, os campos da coluna referentes ao campo BUZEI quando for 001 alterar todos para 002.
SINTAXE DE MODIFY.
MODIFY {TABELA_INTERNA} TRANSPORTING CAMPO ….. CAMPON WHERE CAMPO {<, >, <=, >=, =, <>} [ valor ].
Os campos devem estar separados por espaços, estes campos serão os campos que serão modificados na tabelas interna. Antes os campos devem ser carregados.
DATA: BEGIN OF T_BSIK OCCURS 0,
BUKRS LIKE BSIK-BUKRS,
LIFNR LIKE BSIK-LIFNR,
BELNR LIKE BSIK-BELNR,
UMSKZ LIKE BSIK-UMSKZ,
BLART LIKE BSIK-BLART,
XBLNR LIKE BSIK-XBLNR,
ZFBDT LIKE BSIK-ZFBDT,
DMBTR LIKE BSIK-DMBTR,
DMBE2 LIKE BSIK-DMBE2,
WRBTR LIKE BSIK-WRBTR,
BUZEI LIKE BSIK-BUZEI,
GJAHR LIKE BSIK-GJAHR,
BLDAT LIKE BSIK-BLDAT,
SHKZG LIKE BSIK-SHKZG,
ZBD1T LIKE BSIK-ZBD1T,
END OF T_BSIK.
CLEAR: T_BSIK, T_BSIK[].
SELECT BUKRS LIFNR BELNR UMSKZ BLART XBLNR ZFBDT DMBTR
DMBE2 WRBTR BUZEI GJAHR BLDAT SHKZG ZBD1T
FROM BSIK INTO TABLE T_BSIK
WHERE LIFNR = ‘0000000111’.
*//**** Modifica todos os campos ****\\* DE UMA SO VEZ
MOVE ‘002’ TO T_BSIK-BUZEI.
MODIFY T_BSIK TRANSPORTING BUZEI WHERE BUZEI = ‘001’.
LOOP AT T_BSIK.
WRITE / T_BSIK-BUZEI.
ENDLOOP.
Filed under: Comandos, OpenSQL | Tagged: abap, CAMPOS, INDEX, MODIFY, SQL, Tabela, TRANSPORTING | Leave a comment »