Duda sentencia LOOP

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • pancho6102
    Senior Member
    • jun
    • 238

    #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.
    Editado por última vez por pancho6102; 06/04/2015, 20:56:53.
    Francisco Ramirez.
    consultor SAP ABAP Netweaver
    Queretaro, Mexico.
  • pancho6102
    Senior Member
    • jun
    • 238

    #2
    Ya revise bien el codigo de nueva cuenta, no me di cuenta que usa Field Groups es por ello el comportamiento.

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

    Comentario

    • sconoredhot
      Senior Member
      • feb
      • 341

      #3
      hola

      Yo no termine de entender que hace el loop solo.
      ¿alguien me podria explicar ese comportamiento?

      Gracias!
      Sebas

      Desarrollador ABAP.

      Comentario

      • FFARRO
        Junior Member
        • nov
        • 11

        #4
        Me parece que cuando usas un table control o step loop... ese loop vacio recorre los registros de esos controles.

        Saludos.

        Freddy Farro
        Desarrolador ABAP
        ________________________

        Saludos,

        Freddy Farro
        Desarrollador ABAP

        Comentario

        Trabajando...