SAP SOPORTE VENTAS RV77U903

From SapWiki
************************************************************
*** Atención: Rutina copiada !                           ***
*** Por favor, observe                                    ***
*** Sec. signos 011 sustituida por 903  en todas partes! ***
************************************************************

*---------------------------------------------------------------------*
*       FORM LST1_903                                                 *
*---------------------------------------------------------------------*
*       Liefer und Zahlungsbedingungen                                *
*---------------------------------------------------------------------*
FORM lst1_903.

  DATA: ls_rvkusta1_pay_del_terms TYPE rvkusta1_s_pay_del_terms,
        pos                       TYPE i,
        ls_listpos                TYPE t_list_position.
  DATA element_hlp LIKE element.
  DATA string_length TYPE i.
* to handle SY-SUBRC correct make sure, that LOOP is only processes when
* table is not empty
  DESCRIBE TABLE yknvv.
  CLEAR sy-subrc.
  CHECK sy-tfill > 0.
  tab_name = 'KNVV'.
  objekt   = kunde_faktura.

* determine list position
  pos = 903.
  ls_listpos-listname = 'PAY_DEL_TERMS'.
  ls_listpos-position = pos.
  ls_listpos-objekt = objekt.

  LOOP AT yknvv.
    MOVE yknvv TO knvv.

*   further data to determine list position
    ls_listpos-vkorg = knvv-vkorg.
    ls_listpos-vtweg = knvv-vtweg.
    ls_listpos-spart = knvv-spart.

    CLEAR tvzbt.

    IF NOT ( knvv-zterm IS INITIAL ).  "Zahlungsbedingung
      PERFORM tvzbt_lesen(rvtab001) USING knvv-zterm.
    ENDIF.
    IF xml_ouput_flag IS INITIAL.
      IF sapscript_print = no.
        IF acc_flag IS INITIAL.
          SKIP.
          RESERVE 2 LINES.

*      Liefer- u Zahlungsbedingungen
          WRITE: (90) sy-uline.
          FORMAT COLOR COL_HEADING INTENSIFIED.
          WRITE: /2 'Condiciones de entrega y pago'.
          IF vtber_print = 'X'.
            WRITE: 40(19) 'Área de ventas',
                   yknvv-vkorg,
                   yknvv-vtweg,
                   yknvv-spart.
          ENDIF.
          WRITE: 1 sy-vline, 90 sy-vline.
          WRITE: 91(42) space COLOR OFF.
          FORMAT COLOR OFF.
          PERFORM hide_knvv IN PROGRAM (anwendung).
          WRITE: /(90) sy-uline.
          WRITE: 1 sy-vline, 90 sy-vline.

          FORMAT COLOR COL_BACKGROUND INTENSIFIED.
*      Incoterms
          WRITE: /2(19) 'Incoterms',
                22 knvv-inco1 INTENSIFIED OFF,
                   knvv-inco2 INTENSIFIED OFF.
          WRITE: 1 sy-vline, 90 sy-vline.
          PERFORM hide_knvv IN PROGRAM (anwendung).
*      Rechnungstermine
          WRITE: /2(19) 'Condición de pago',
*             22 TVZBT-VTEXT INTENSIFIED OFF.
                 22 knvv-zterm INTENSIFIED OFF.
          WRITE: 1 sy-vline, 90 sy-vline.
          PERFORM hide_knvv IN PROGRAM (anwendung).

          WRITE: /(90) sy-uline.
          WRITE: 1 sy-vline, 90 sy-vline.

        ELSE.

*         header lines
*         Liefer- u Zahlungsbedingungen
          MOVE 'Condiciones de entrega y pago' TO ls_listpos-line1.
          APPEND ls_listpos TO wa_header-list.

*         item lines
*         Incoterms
          MOVE knvv-inco1 TO ls_rvkusta1_pay_del_terms-knvv_inco1.
          MOVE knvv-inco2 TO ls_rvkusta1_pay_del_terms-knvv_inco2.
*         Rechnungstermine
*           MOVE TVZBT-VTEXT TO ls_rvkusta1_pay_del_terms-tvzbt_vtext.
          MOVE knvv-zterm  TO ls_rvkusta1_pay_del_terms-knvv_zterm.

          MOVE knvv-vkorg TO ls_rvkusta1_pay_del_terms-vkorg.
          MOVE knvv-vtweg TO ls_rvkusta1_pay_del_terms-vtweg.
          MOVE knvv-spart TO ls_rvkusta1_pay_del_terms-spart.

          APPEND ls_rvkusta1_pay_del_terms TO
                                     wa_rvkusta1_cust-pay_del_terms.

        ENDIF.
      ELSE.
        DATA ls_tvzbt TYPE tvzbt.
        SELECT SINGLE * FROM tvzbt INTO ls_tvzbt
              WHERE    spras =    sy-langu
              AND      zterm =    knvv-zterm.

        info_prtlines_lst1_init.
        WRITE:  'Condiciones de entrega y pago'     TO v77komlst1-tline1,
*      1. line
                'Incoterms'     TO v77komlst1-telement1(19),
*      2. line
                'Condición de pago'     TO v77komlst1-telement2(19).

        WRITE ls_tvzbt-vtext TO v77komlst1-telement10.

        DATA   lt_lineitems  TYPE TABLE OF bapi3007_2.
        DATA ls_lineitems LIKE LINE OF lt_lineitems.
        DATA ld_amount LIKE ls_lineitems-lc_amount.
        DATA ld_tlfns TYPE knb1-tlfns.
        DATA ld_kraus TYPE knkk-kraus.
        DATA ld_ctlpc TYPE knkk-ctlpc.
        DATA ld_rtext TYPE   t691t-rtext.
        DATA ld_date TYPE d.
        DATA ld_date_1 TYPE d.
        DATA ls_s520 TYPE s520.

*Atraso promedio (días):
        SELECT  SINGLE tlfns INTO ld_tlfns FROM  knb1
               WHERE  kunnr  = knvv-kunnr
               AND    bukrs  = tvko-bukrs.

        WRITE ld_tlfns TO v77komlst1-telement9.

* Seguro (sí/no)
        SELECT SINGLE * FROM  knkk
               WHERE  kunnr  = knkk-kunnr
               AND    kkber  = knkk-kkber.

        IF knkk-kraus is initial or knkk-kraus = 'ESPACE'.
          v77komlst1-telement8 = 'NO'.
        ELSE."evargas
          data: validate type string,
          importing LIKE DD01V-DATATYPE.
          move knkk-kraus to validate.
          CALL FUNCTION 'NUMERIC_CHECK'
            EXPORTING
              STRING_IN        = validate
           IMPORTING
*   STRING_OUT       =
             HTYPE            = importing.
          if importing = 'NUMC' OR knkk-kraus = 'NOMINADO'.
            v77komlst1-telement8 = 'SI'.
            if knkk-kraus = 'NOMINADO'.
              WRITE knkk-dbekr TO v77komlst1-telement4 CURRENCY knkk-dbwae.
              condense v77komlst1-telement4 NO-GAPS.
            else.
              v77komlst1-telement4 = 'INNOMINADO'.
            endif.
          else.
            v77komlst1-telement8 = 'NO'.
            v77komlst1-telement4 = knkk-kraus.
          endif.
*            CASE knkk-kraus.
*              WHEN 'ESPACE'.
*                v77komlst1-telement8 = 'NO'.
*              WHEN OTHERS.
*                v77komlst1-telement8 = 'SI'.
*                if knkk-kraus = 'NOMINADO'.
*                  WRITE knkk-dbekr TO v77komlst1-telement4 CURRENCY knkk-dbwae.
*                  condense v77komlst1-telement4 NO-GAPS.
*                else.
*                  v77komlst1-telement4 = 'INNOMINADO'.
*                endif.
*            ENDCASE.
        ENDIF.

* Categoría de Riesgo
        SELECT  SINGLE rtext INTO ld_rtext FROM  t691t
               WHERE  spras  = sy-langu
               AND    ctlpc  = knkk-ctlpc
               AND    kkber  = knkk-kkber
               .
        IF sy-subrc = 0.
          WRITE ld_rtext TO v77komlst1-telement7.
          concatenate knkk-ctlpc '#('  v77komlst1-telement7 ')'
               into  v77komlst1-telement7.
          TRANSLATE v77komlst1-telement7 USING '# '.
        ENDIF.

* Atraso en pago
        CALL FUNCTION 'BAPI_AR_ACC_GETOPENITEMS'
          EXPORTING
            companycode = tvko-bukrs
            customer    = knvv-kunnr
            keydate     = sy-datum
          TABLES
            lineitems   = lt_lineitems.

        LOOP AT lt_lineitems INTO ls_lineitems.
          ld_date = ls_lineitems-bline_date + ls_lineitems-dsct_days1.
          CHECK ld_date < sy-datum.
          IF ls_lineitems-db_cr_ind = 'H'.
            ls_lineitems-lc_amount = ls_lineitems-lc_amount * -1.
          ENDIF.

          ADD ls_lineitems-lc_amount TO ld_amount.
        ENDLOOP.
        IF ld_amount <> 0.
          ld_amount = ld_amount / 1000.
          WRITE ld_amount TO v77komlst1-telement6 DECIMALS 0.
        ELSE.
          WRITE ld_amount TO v77komlst1-telement6 DECIMALS 0.
        ENDIF.
        CONDENSE v77komlst1-telement6 NO-GAPS.
*        WRITE v77komlst1-tline3 TO v77komlst1-tline3(14) RIGHT-JUSTIFIED.

* bloqueo (si/no)
        IF knkk-crblb <> space.
          v77komlst1-telement5 = 'SI'.
        ELSE.
          v77komlst1-telement5 = 'NO'.
        ENDIF.

        info_sap_script_write.

* historial de ventas
        DATA ld_m(7) TYPE c.
        DATA ld_count TYPE c.

        info_prtlines_lst1_init.
        element = 'LST1_903_003'.
        ld_count = '1'.

        DO 4 TIMES.
* MES - 1
          CALL FUNCTION 'HR_BR_ADD_MONTH_TO_DATE'
            EXPORTING
              dmm_datin = sy-datum
              dmm_count = ld_count
              dmm_oper  = '-'
              dmm_pos   = space
            IMPORTING
              dmm_daout = ld_date.
          IF ld_count = '1'.
            ld_date_1 = ld_date .
          ENDIF.

          CONCATENATE ld_date+4(2) '.'  ld_date(4) INTO ld_m.

          CLEAR ls_s520.
          SELECT sum( netwr ) INTO ls_s520-netwr FROM  s520
                 WHERE  spmon   = ld_date(6)
                 AND    pkunag  = knvv-kunnr
                 AND vkorg = knvv-vkorg
                 AND vtweg  = knvv-vtweg
                 AND VRSIO = '000'.
*                 AND spart = knvv-spart.

          IF sy-subrc = 0.
            ls_s520-netwr = ls_s520-netwr / 1000.  "Miles de $
            WRITE ls_s520-netwr TO v77komlst1-telement1 CURRENCY knvv-waers.
          ELSE.
            v77komlst1-telement1 = 0.
          ENDIF.

          CONDENSE v77komlst1-telement1 NO-GAPS.
*        WRITE v77komlst1-telement1 TO v77komlst1-telement1(10) RIGHT-JUSTIFIED.  "???
*        v77komlst1-telement6+20 = ld_m.
          v77komlst1-telement2 = ld_m.
          v77komlst1-telement4 = ld_count.
          kna1-erdat = ld_date.

          info_sap_script_write.
          ADD 1 TO ld_count.

        ENDDO.
*Venta último año (M$):

        info_prtlines_lst1_init.
        element = 'LST1_903_004'.

        CALL FUNCTION 'HR_BR_ADD_MONTH_TO_DATE'
          EXPORTING
            dmm_datin = ld_date_1
            dmm_count = '12'
            dmm_oper  = '-'
            dmm_pos   = space
          IMPORTING
            dmm_daout = ld_date.

        CLEAR ls_s520-netwr.
        SELECT  SUM( netwr ) INTO ls_s520-netwr FROM  s520
               WHERE  spmon   BETWEEN ld_date(6) AND ld_date_1(6)
               AND    pkunag  = knvv-kunnr
               AND vkorg = knvv-vkorg
               AND vtweg  = knvv-vtweg
               AND VRSIO = '000'.
*               AND spart = knvv-spart.
        IF sy-subrc = 0.
          ls_s520-netwr = ls_s520-netwr / 1000.  "Miles de $
          WRITE ls_s520-netwr TO v77komlst1-telement1 CURRENCY knvv-waers.
          CONDENSE v77komlst1-telement1 NO-GAPS.
        ELSE.
          v77komlst1-telement1 = '0'.
        ENDIF.

        CONDENSE v77komlst1-telement1 NO-GAPS.
*        WRITE v77komlst1-telement1 TO v77komlst1-telement1(14) RIGHT-JUSTIFIED.
*        v77komlst1-telement1+20 = 'Año'.
*        v77komlst1-telement1+24 = ld_date(4).

        info_sap_script_write.   "???
      ENDIF.
    ELSE. "XML-OUTPUT
*      DATA: lvt_para TYPE sdcas_t_w3_html WITH HEADER LINE.
*      DATA: lvt_paralines TYPE sdcas_t_w3_html WITH HEADER LINE.
*      DATA: lvt_keyline TYPE sdcas_t_w3_html WITH HEADER LINE.
*      DATA: lvt_keyline_spart TYPE sdcas_t_w3_html WITH HEADER LINE.
*      DATA: lvt_link TYPE sdcas_t_w3_html WITH HEADER LINE.
*      DATA: lvt_paymentruleline TYPE sdcas_t_w3_html WITH HEADER LINE.
*      DATA: lvt_paymentrulelines TYPE sdcas_t_w3_html WITH HEADER LINE.
*      DATA: lvf_offset TYPE i.
*      DATA: lvf_offset_link TYPE i.
*      DATA: html_line TYPE w3_html.
*      REFRESH lvt_paralines.
*      PERFORM xml_fill_paraline USING 'DDY' '/320/320' lvt_para[].
*      APPEND LINES OF lvt_para TO lvt_paralines.
*      PERFORM xml_fill_paraline USING 'KUN' ykna1-kunnr lvt_para[].
*      APPEND LINES OF lvt_para TO lvt_paralines.
*      PERFORM xml_fill_paraline USING 'VKO' xvtber-vkorg lvt_para[].
*      APPEND LINES OF lvt_para TO lvt_paralines.
*      PERFORM xml_fill_paraline USING 'VTW' yknvv-vtweg lvt_para[].
*      APPEND LINES OF lvt_para TO lvt_paralines.
*      PERFORM xml_fill_paraline USING 'SPA' yknvv-spart lvt_para[].
*      APPEND LINES OF lvt_para TO lvt_paralines.
*
*      REFRESH lvt_keyline_spart.
*      REFRESH lvt_keyline.
*      REFRESH lvt_paymentrulelines.
**      PERFORM xml_fill_linkline USING
**                          'TRX' '' 'VD03' text-x13 lvt_paralines[]
**                            CHANGING  lvt_link[]
**                               lvf_offset_link.
*      PERFORM xml_fill_keyline USING
*                               'TSPA'
*                               yknvv-spart
*                               ''
*                               ''
*                               lvt_link[]
*                              CHANGING
*                               lvt_keyline_spart[]
*                               lvf_offset.
*      PERFORM xml_fill_keyline USING
*                               'TVTW'
*                               yknvv-vtweg
*                               ''
*                               ''
*                               lvt_keyline_spart[]
*                              CHANGING
*                               lvt_keyline[]
*                               lvf_offset.
*      INSERT lines of lvt_keyline INTO xml_output INDEX
*                                    gvf_infoblock_pointer.
*      DESCRIBE TABLE lvt_keyline LINES sy-tfill.
*      gvf_infoblock_pointer = gvf_infoblock_pointer + sy-tfill -
*                        ( 2 * lvf_offset ) - lvf_offset_link.
*      gvf_customer_pointer = gvf_customer_pointer + sy-tfill.
*
**      Liefer- u Zahlungsbedingungen
**      PERFORM xml_template_ib USING  '903'
**                                     text-u13
**                                     text-u13
**                       .
*      gvf_infoblock_pointer = gvf_infoblock_pointer +
*                              ( 2 * lvf_offset ) + lvf_offset_link.
*
*
**      Incoterms
*      CLEAR html_line.
*      WRITE knvv-inco1 TO html_line.
*      WRITE knvv-inco2 TO html_line+6.
*      DATA: lvf_html_line TYPE char255.
*      lvf_html_line = html_line.
**      PERFORM escape_xml_text
**        CHANGING lvf_html_line.
*      PERFORM xml_fill_paymentruleline USING text-031
*                                             lvf_html_line
*                                   CHANGING lvt_paymentruleline[].
*      APPEND LINES OF lvt_paymentruleline TO lvt_paymentrulelines.
**      Rechnungstermine
*      PERFORM xml_fill_paymentruleline USING text-032
**                                           TVZBT-VTEXT
*                                         knvv-zterm
*                                   CHANGING lvt_paymentruleline[].
*      APPEND LINES OF lvt_paymentruleline TO lvt_paymentrulelines.
*      DATA: lvt_paymentruletab TYPE w3html OCCURS 30 WITH HEADER LINE.
*      DATA: merge_table TYPE swww_t_merge_table WITH HEADER LINE.
*
*      CALL FUNCTION 'WWW_GET_SCRIPT_AND_HTML'
*        EXPORTING
*          obj_name = 'SDCAS_XML_PAYMENT_BORDER'
*        TABLES
*          html     = lvt_paymentruletab[].
*      xml_addtable2mergetab '<!--row-->' ' '  lvt_paymentrulelines.
*      xml_merge lvt_paymentruletab merge_table.
*      INSERT lines of lvt_paymentruletab INTO xml_output INDEX
*                                gvf_infoblocks_pointer.
*      DESCRIBE TABLE lvt_paymentruletab LINES sy-tfill.
*      gvf_infoblocks_pointer = gvf_infoblocks_pointer + sy-tfill.
*      gvf_infoblock_pointer = gvf_infoblock_pointer + sy-tfill.
*      gvf_customer_pointer = gvf_customer_pointer + sy-tfill.
    ENDIF.
  ENDLOOP.
ENDFORM.                                                    "LST1_903
*&---------------------------------------------------------------------*
*&      Form  xml_fill_paymentruleline
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM xml_fill_paymentruleline USING col1
                                    col2
                   CHANGING paymentruleline TYPE sdcas_t_w3_html.
  STATICS: washere.
  STATICS: lvt_paymentrule TYPE sdcas_t_w3_html WITH HEADER LINE.
  STATICS: col1_offset_l TYPE i.
  STATICS: col2_offset_l TYPE i.
  DATA: html_line TYPE w3_html.

  IF washere IS INITIAL.
    CALL FUNCTION 'WWW_GET_SCRIPT_AND_HTML'
      EXPORTING
        obj_name = 'SDCAS_XML_PAYMENT_ITEM'
      TABLES
        html     = lvt_paymentrule[].
    LOOP AT lvt_paymentrule.
      IF lvt_paymentrule CS '<!--col1-->'.
        col1_offset_l = sy-tabix.
      ENDIF.
      IF lvt_paymentrule CS '<!--col2-->'.
        col2_offset_l = sy-tabix.
      ENDIF.
    ENDLOOP.
    washere = 'X'.
  ENDIF.
  paymentruleline[] = lvt_paymentrule[].

  MODIFY paymentruleline FROM col1 INDEX col1_offset_l.
  MODIFY paymentruleline FROM col2 INDEX col2_offset_l.

ENDFORM.                    " xml_fill_paymentruleline