#1
|
|||
|
|||
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. |
Herramientas | Buscar en Tema |
Desplegado | |
|
|