Ver Mensaje Individual
  #1  
Viejo 06/04/15, 20:39:11
pancho6102 pancho6102 is offline
Senior Member
 
Fecha de Ingreso: jun 2010
Localización: Queretaro México
Mensajes: 238
Duda sentencia LOOP

Buenas tardes Foro estoy analizando un programa que SAP libero para unos reportes gubernamentales, el problema es que estoy analizando el codigo, pero se me presento el siguiente caso con un LOOP que puedo deducir lo que hace pero no entiedo por que funciona asi:

LOOP.
CLEAR: t_totales_nit, t_totales_cta, kna1.
READ TABLE t_bseg_exc WITH TABLE KEY belnr = bkpf-belnr.
IF sy-subrc = 0.
CLEAR bseg-dmbtr.
CONTINUE.
ENDIF.
bseg-dmbtr = bseg_dmbtr20.
IF bseg-shkzg = 'H'.
bseg-dmbtr = - bseg-dmbtr.
bseg_wrbtr20 = - bseg_wrbtr20.
bseg_dmbtr20 = - bseg_dmbtr20.
ENDIF.
IF bseg-dmbtr = 0 AND bseg_dmbtr20 <> 0.
v_indica20 = 'X'.
ELSE.
v_indica20 = ''.
ENDIF.
CHECK bseg-dmbtr NE 0.
READ TABLE t_ctanit_lfa1 WITH KEY belnr = bkpf-belnr
buzei = bseg-buzei.
IF sy-subrc NE 0.
READ TABLE t_ctanit_lfa1 WITH KEY belnr = bkpf-belnr.
IF sy-subrc NE 0.
li_docm = 1.
ELSE.
li_docm = 0.
ENDIF.
ELSE.
li_docm = 0.
ENDIF.
* Documents FI-GL.
IF li_docm = 1.
CLEAR t_nits_all.
DATA: v_subrc0 LIKE syst-subrc.
IF bseg-xref1 <> ''.
READ TABLE t_nits_all WITH KEY stcd1 = bseg-xref1.
IF sy-subrc <> 0.
READ TABLE t_nits_all WITH KEY stcd1bk = bseg-xref1.
v_subrc0 = syst-subrc.
ELSE.
v_subrc0 = syst-subrc.
ENDIF.
* name1 = bseg-xref3. " Ya no valida el nombre.
ELSE.
v_subrc0 = 4.
ENDIF.
IF v_subrc0 NE 0.
CLEAR kna1.
IF bseg-xref1 <> ''.
READ TABLE t_xref1_kna1 WITH KEY stcd1 = bseg-xref1.
IF sy-subrc = 0.
SELECT SINGLE * INTO kna1
FROM kna1
WHERE kunnr = t_xref1_kna1-kunnr.
ENDIF.
v_subrc0 = syst-subrc.
* SELECT SINGLE * INTO kna1 FROM kna1
* WHERE stcd1 = bseg-xref1.
* v_subrc0 = syst-subrc.
ELSE.
READ TABLE it_bseg_tempo_deu
WITH KEY bukrs = p_bukrs
belnr = bkpf-belnr
gjahr = p_gjahr.
IF sy-subrc = 0.
SELECT SINGLE * INTO kna1 FROM kna1
WHERE kunnr = it_bseg_tempo_deu-kunnr.
v_subrc0 = syst-subrc.
IF sy-subrc = 0.
t_nits_lfa1-stcd1 = kna1-stcd1.
t_nits_lfa1-name1 = kna1-name1.
bseg-xref1 = kna1-stcd1.
ENDIF.
ELSE.
v_subrc0 = 4.
ENDIF.
ENDIF.
IF v_subrc0 = 0.
CLEAR it_kna1_tmp3.
it_kna1_tmp3 = kna1.
APPEND it_kna1_tmp3.
t_nits_lfa1-stcd1 = bseg-xref1.
t_nits_lfa1-name1 = kna1-name1.
* t_nits_lfa1-KUNNR = KNA1-KUNNR.
t_nits_lfa1-land1 = kna1-land1.
t_nits_lfa1-stcdt = kna1-stcdt.
t_nits_lfa1-ort01 = kna1-ort01.
t_nits_lfa1-regio = kna1-regio.
t_nits_lfa1-stras = kna1-stras.

t_totales_nit-kunnr = kna1-kunnr.
ELSE.
IF v_subrc0 = 4 AND bseg-ebeln <> '' AND
bseg-lifnr = '' AND bseg-xref1 = ''
AND bkpf-blart = 'WL' .
*** llenar el registro.
****leer de la tabla
READ TABLE t_ci_svf WITH KEY
ebeln = bseg-ebeln
ebelp = bseg-ebelp.
IF sy-subrc = 0 AND t_ci_svf-lifnr <> ''.
READ TABLE t_nits_all
WITH KEY lifnr = t_ci_svf-lifnr.
IF sy-subrc = 0.
MOVE-CORRESPONDING t_nits_all
TO t_nits_lfa1.
bseg-lifnr = t_ci_svf-lifnr.
ELSE.
SELECT SINGLE * INTO CORRESPONDING FIELDS OF t_nits_all
FROM lfa1
WHERE lifnr = t_ci_svf-lifnr.
MOVE-CORRESPONDING t_nits_all
TO t_nits_lfa1.
bseg-lifnr = t_ci_svf-lifnr.
ENDIF.
ENDIF.
ELSE.
MOVE: bseg-xref1 TO t_stcd1-stcd1,
bseg-xref3 TO t_stcd1-name1.
COLLECT t_stcd1.
t_nits_lfa1-stcd1 = bseg-xref1.
t_nits_lfa1-name1 = bseg-xref3.
ENDIF.
ENDIF.
ELSE.
MOVE-CORRESPONDING t_nits_all TO t_nits_lfa1.
ENDIF.
* t_nits_lfa1-stcd1 = bseg-xref1.
* t_nits_lfa1-name1 = bseg-xref3.
PERFORM get_nits_em USING t_nits_lfa1-stcd1
t_nits_lfa1-name1.
ELSE.
IF t_ctanit_lfa1-xcpdk EQ zdi00_check.
READ TABLE t_nits_lfa1_cpd
WITH KEY belnr = t_ctanit_lfa1-belnr
buzei = t_ctanit_lfa1-buzei
lifnr = t_ctanit_lfa1-lifnr.
IF sy-subrc EQ 0.
t_nits_lfa1 = t_nits_lfa1_cpd.
ENDIF.
ELSE.
READ TABLE t_nits_lfa1 WITH KEY lifnr = t_ctanit_lfa1-lifnr.
ENDIF.
ENDIF.
t_totales_nit-cncpt = cncpt.
t_totales_nit-nronit = t_nits_lfa1-stcd1.
t_totales_nit-nomnit = t_nits_lfa1-name1.
t_totales_nit-amnt1 = bseg-dmbtr.
t_totales_nit-amnt2 = 0.
t_totales_nit-lifnr = t_nits_lfa1-lifnr.
IF p_frmat EQ zdi00_1001.
IF NOT s_hkneg IS INITIAL.
IF bseg-hkont IN s_hkneg.
t_totales_nit-amnt1 = 0.
t_totales_nit-amnt2 = bseg-dmbtr.
ENDIF.
ENDIF.
ENDIF.
COLLECT t_totales_nit.
MOVE-CORRESPONDING t_totales_nit TO t_totales_cta.
t_totales_cta-gjahr = p_gjahr.
t_totales_cta-belnr = bkpf-belnr.
t_totales_cta-hkont = bseg-hkont.
COLLECT t_totales_cta.
ENDLOOP.

bueno es que en el codigo usa al comienzo Un Loop, siempre lo he visto pero minimo con el AT (solo el at cuando es con header line ) pero en el codigo solo esta el LOOP y creo que recorre a BKPF y a BSEG pero aun no logro entender bien esa parte.

¿Alguien le ha tocdo algun caso similar?.

Saludos.
__________________
Francisco Ramirez.
consultor SAP ABAP Netweaver
Queretaro, Mexico.

Úlima edición por pancho6102 fecha: 06/04/15 a las 20:56:53.
Responder Con Cita