俄罗斯专用财务报表 采购和销售相关

J_3RF_SELL_BOOK_02

*----------------------------------------------------------------------*
*       FORM View_EXTRACT
*----------------------------------------------------------------------*
FORM VIEW_EXTRACT
  USING    V_EXTRACT   LIKE DISEXTRACT
  CHANGING CT_BOOK     TYPE J_3R_T_SELL
           CS_TOTALS   TYPE J_3RSELL.

*  data: it_book type j_3r_t_sell,"note 2140917
*        wa_book type j_3rsell.
  DATA: "i_gjahr type bkpf-gjahr,
        LV_DELETED TYPE ABAP_BOOL,
        LV_SKIP TYPE ABAP_BOOL.
  FIELD-SYMBOLS: <FS_BOOK> LIKE LINE OF CT_BOOK."note 2140917

  IF V_EXTRACT-EXNAME IS INITIAL AND VR_EMPTY IS NOT INITIAL.
    EXIT.
  ENDIF.

  PERFORM LOAD_EXTRACT USING    V_EXTRACT
                       CHANGING CT_BOOK CS_TOTALS.

  IF P_COLLCT IS INITIAL.
* Tax tranfer document data have not been deleted -
* the selections can apply
    LOOP AT CT_BOOK ASSIGNING <FS_BOOK>.
      "apply selection parameters for trn docs.
      PERFORM APPLY_SEL_PARAM_TRN
        CHANGING
          <FS_BOOK>
          LV_SKIP
      .
      IF LV_SKIP IS NOT INITIAL.
        LV_DELETED = ABAP_TRUE.
        CONTINUE.
      ENDIF.
      PERFORM FILL_ADD_FIELDS CHANGING <FS_BOOK>.
*      append <fs_book> to ct_book.
    ENDLOOP.
  ELSE.
* Tax transfer document data have been deleted -
* only Company code and Customer selections can apply
    LOOP AT CT_BOOK ASSIGNING <FS_BOOK>
      WHERE BUKRS      IN BR_BUKRS AND
            LIFNR_CRED IN SEL_CLNT.

      PERFORM FILL_ADD_FIELDS CHANGING <FS_BOOK>.
*      append wa_book to ct_book.
    ENDLOOP.
  ENDIF.

  IF LV_DELETED IS NOT INITIAL.
    DELETE CT_BOOK WHERE BUKRS IS INITIAL.
  ENDIF.
*  free it_book.

* 2074991 - renumerate
  PERFORM ADD_TRANSPARENT_NUMBER.
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"$\SE:(1) Form VIEW_EXTRACT, End                                                                                                                            A
*$*$-Start: (1)---------------------------------------------------------------------------------$*$*
ENHANCEMENT 1  Z_J_3RF_SELL_BOOK_02_VIEW_EXTR.    "active version
  "需求描述:俄分Sales ledger 导出XML文件时,将凭证字段替换成ZOUNR字段(数值等同PI号)
  "需求编号:暂无
  "开发者:
  "开发日期:2018.04.25
  FIELD-SYMBOLS:<CT_BOOK> TYPE J_3RSELL.
  DATA:LT_BOOK_SEL TYPE TABLE OF J_3RSELL.
  DATA:LT_BKPF TYPE TABLE OF BKPF,
       LS_BKPF TYPE BKPF,
       LT_BSEG TYPE TABLE OF BSEG,
       LS_BSEG TYPE BSEG.
  DATA:LT_ACC_EXT TYPE TABLE OF ZSSD_J_3R_SALES_LEDGER_01,
       LS_ACC_EXT TYPE ZSSD_J_3R_SALES_LEDGER_01.

*  BREAK-POINT.
  CLEAR:LT_BOOK_SEL[],LT_BKPF[],LT_BSEG[].
  LT_BOOK_SEL[] = CT_BOOK[].
  IF LT_BOOK_SEL[] IS NOT INITIAL.
   SORT LT_BOOK_SEL BY BUKRS GJAHR_INV BELNR_INV.
   DELETE ADJACENT DUPLICATES FROM LT_BOOK_SEL COMPARING BUKRS GJAHR_INV BELNR_INV.
   SELECT BUKRS GJAHR BELNR
     INTO CORRESPONDING FIELDS OF TABLE LT_BKPF
     FROM BKPF
     FOR ALL ENTRIES IN LT_BOOK_SEL
     WHERE BUKRS EQ LT_BOOK_SEL-BUKRS
       AND GJAHR EQ LT_BOOK_SEL-GJAHR_INV
       AND BELNR EQ LT_BOOK_SEL-BELNR_INV
       AND GLVOR EQ 'SD00'.
    IF SY-SUBRC EQ  0.
      SELECT BUKRS GJAHR BELNR INTO CORRESPONDING FIELDS OF TABLE LT_BSEG FROM BSEG
        FOR ALL ENTRIES IN LT_BKPF
        WHERE BUKRS EQ LT_BKPF-BUKRS
          AND GJAHR EQ LT_BKPF-GJAHR
          AND BELNR EQ LT_BKPF-BELNR
          AND KOART EQ 'D'.
      SORT LT_BKPF BY BUKRS GJAHR BELNR.
      SORT LT_BSEG BY BUKRS GJAHR BELNR.
    ENDIF.
  ENDIF.

  CLEAR:LT_ACC_EXT.
  LOOP AT CT_BOOK ASSIGNING <CT_BOOK>.
*    IF <CT_BOOK>-ZUONR IS INITIAL." '指定' 字段为空时,还按原来的逻辑走
*       CONTINUE.
*    ENDIF.
    READ TABLE LT_BKPF TRANSPORTING NO FIELDS WITH KEY BUKRS = <CT_BOOK>-BUKRS
                                                       GJAHR = <CT_BOOK>-GJAHR_INV
                                                       BELNR = <CT_BOOK>-BELNR_INV BINARY SEARCH.
    IF SY-SUBRC EQ 0.
       READ TABLE LT_BSEG TRANSPORTING NO FIELDS WITH KEY BUKRS = <CT_BOOK>-BUKRS
                                                          GJAHR = <CT_BOOK>-GJAHR_INV
                                                          BELNR = <CT_BOOK>-BELNR_INV BINARY SEARCH.

       CLEAR:LS_ACC_EXT.
       LS_ACC_EXT-NUM_LINE   = <CT_BOOK>-NUM_LINE.
       LS_ACC_EXT-BUKRS      = <CT_BOOK>-BUKRS.
       LS_ACC_EXT-GJAHR      = <CT_BOOK>-GJAHR_INV.
       LS_ACC_EXT-BELNR      = <CT_BOOK>-BELNR_INV.
       CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
         EXPORTING
           INPUT     = LS_ACC_EXT-BELNR
         IMPORTING
           OUTPUT    = LS_ACC_EXT-BELNR .
       CONCATENATE LS_ACC_EXT-BUKRS LS_ACC_EXT-GJAHR '-' LS_ACC_EXT-BELNR INTO <CT_BOOK>-EXT_NUMBER.
       LS_ACC_EXT-EXT_NUMBER = <CT_BOOK>-EXT_NUMBER.
       APPEND LS_ACC_EXT TO LT_ACC_EXT.
    ENDIF.

*   <ct_book>
  ENDLOOP.

   IF LT_ACC_EXT[] IS NOT INITIAL.
     CALL FUNCTION 'ZFI_SET_ACC_EXT'
       TABLES
         IT_ACC_EXT = LT_ACC_EXT.
   ENDIF.


ENDENHANCEMENT.
*$*$-End:   (1)---------------------------------------------------------------------------------$*$*
ENDFORM.                                                   "View_EXTRACT

J_3RF_SELL_BOOK_02

*&---------------------------------------------------------------------*
*&      Form  prepare_interface
*&---------------------------------------------------------------------*

FORM PREPARE_INTERFACE.
  DATA: NAME1   LIKE ADDR1_VAL-NAME1,
        NAME2   LIKE ADDR1_VAL-NAME2,
        NAME3   LIKE ADDR1_VAL-NAME3,
        NAME4   LIKE ADDR1_VAL-NAME4,
        NAME1_R LIKE ADDR1_VAL-NAME1,
        NAME2_R LIKE ADDR1_VAL-NAME2,
        NAME3_R LIKE ADDR1_VAL-NAME3,
        NAME4_R LIKE ADDR1_VAL-NAME4.

  DATA: WA_BOOK  TYPE J_3RSELL,
        WA_BUFF  TYPE J_3R_SALES_LEDGER_LINE,
        WA_TOTAL TYPE J_3R_SALES_LEDGER_LINE.
  DATA: L_VALUE  TYPE STRING,
        L_LEN    TYPE I.
  DATA: L_MONAT_LOW    TYPE BKPF-MONAT,           " 2056387
        L_MONAT_HIGH   TYPE BKPF-MONAT,           " 2056387
        LS_ADD_QUART_R LIKE LINE OF AD_MONAT[].   " 2056387
  FIELD-SYMBOLS: <FS_BOOK> TYPE J_3RSELL.
  " maximum length of BKPF-XBLNR
  DATA: MAX_XBLNR_LEN TYPE I VALUE 16.  " 2099024
  DESCRIBE FIELD WA_BOOK-XBLNR_INV  LENGTH MAX_XBLNR_LEN IN CHARACTER MODE.
  DESCRIBE FIELD WA_BUFF-EXT_NUMBER LENGTH L_LEN         IN CHARACTER MODE.
  IF MAX_XBLNR_LEN >= L_LEN.
    CLEAR MAX_XBLNR_LEN. " do not read external texts
  ENDIF.

  REFRESH: BUFF_TAB, BUFF_TAB_ADD.
  CLEAR: IN_TOTALS.

  "N1362831 - get long external numbers
  IF P_EXTNUM EQ 'X' AND
     ( P_XBLNR = 'X' OR P_XBLNR1 = 'X' OR P_XBLNR2 = 'X' OR PAR_EXTP = 'X' ) AND
     PAR_EXT  EQ 'X' AND
     PAR_EXTN NE SPACE AND
     MAX_XBLNR_LEN > 0.           " 2099024 - do not load texts

    LOOP AT P_BOOK ASSIGNING <FS_BOOK>.

*     1711413 - do not overwrite journal data
      CHECK <FS_BOOK>-JOURNAL IS INITIAL.

      CHECK LCL_SELL_BOOK=>IF_EXT_NUMBER( IS_BOOK = <FS_BOOK>
                                          IS_CORR = ' '
                                        ) = 'X'. " 1909868

      L_LEN = STRLEN( <FS_BOOK>-EXT_NUMBER ).
      IF L_LEN EQ MAX_XBLNR_LEN.

        PERFORM READ_TEXTS(J_3RF_BUY_BOOK_03)
           USING <FS_BOOK>-BUKRS
                 <FS_BOOK>-BELNR_INV
                 <FS_BOOK>-GJAHR_INV
                 PAR_EXTN
           CHANGING L_VALUE.
        IF L_VALUE NE SPACE.
          <FS_BOOK>-EXT_NUMBER = L_VALUE.
        ENDIF.
      ENDIF.
    ENDLOOP.

  ENDIF.
  "end of N1362831

  LOOP AT P_BOOK INTO WA_BOOK WHERE BELNR_ADD EQ SPACE.
    CLEAR WA_BUFF.
    MOVE-CORRESPONDING WA_BOOK TO WA_BUFF.
    "N1351387: fill FLG_BELNR_TRN for new format only
    IF P_DP_BAS IS INITIAL.
       CLEAR WA_BUFF-FLG_BELNR_TRN.
    ELSEIF WA_BUFF-FLG_BELNR_TRN = 'A'.
      CLEAR WA_BUFF-HWBAS2_TRN.  " no totals
      CLEAR WA_BUFF-HWBAS5_TRN.
* Note 2003630
      CLEAR WA_BUFF-HWBAS3_TRN.
      CLEAR WA_BUFF-HWBAS4_TRN.
    ENDIF.
*   N1795513: print actual payment date
    IF P_ACTPAY = 'X'.
      WA_BUFF-BLDAT_PAY = WA_BOOK-BLDAT_ORIGPAY.
    ENDIF.
    IF VER2012 = 'X'.
      PERFORM ADOBE_FILL_INV USING    WA_BOOK
                             CHANGING WA_BUFF.
    ENDIF.
    APPEND WA_BUFF TO BUFF_TAB.
  ENDLOOP.

*  sort p_book by gjahr_add monat_add belnr_add bldat_inv. "note 2201957

  LOOP AT P_BOOK INTO WA_BOOK WHERE BELNR_ADD NE SPACE.
* The code below has been moved to form FILL_ADD_FIELDS
*    if ( wa_book-flag_add = 'X' ) and
*       ( wa_book-belnr_inv = wa_book-belnr_trn ).
*      wa_book-belnr_inv = wa_book-belnr_add.
*    endif.
    CLEAR WA_BUFF.
    MOVE-CORRESPONDING WA_BOOK TO WA_BUFF.
    "N1351387: fill FLG_BELNR_TRN for new format only
    IF P_DP_ADD IS INITIAL.
      CLEAR WA_BUFF-FLG_BELNR_TRN.
    ELSEIF WA_BUFF-FLG_BELNR_TRN = 'A'.
      CLEAR WA_BUFF-HWBAS2_TRN.  " no totals
      CLEAR WA_BUFF-HWBAS5_TRN.
* Note 2003630
      CLEAR WA_BUFF-HWBAS3_TRN.
      CLEAR WA_BUFF-HWBAS4_TRN.
    ENDIF.
    IF VER2012 = 'X'.
      PERFORM ADOBE_FILL_INV USING    WA_BOOK
                             CHANGING WA_BUFF.
    ENDIF.
    APPEND WA_BUFF TO BUFF_TAB_ADD.
  ENDLOOP.

  SELECT SINGLE * FROM T001 WHERE BUKRS = MAINBUK.
* INN
  SELECT SINGLE PAVAL INTO BUFF_HEADER-INN
    FROM T001Z WHERE BUKRS = MAINBUK AND PARTY = 'SAPR01'.
* KPP
  SELECT SINGLE PAVAL INTO BUFF_HEADER-KPP
    FROM T001Z WHERE BUKRS = MAINBUK AND PARTY = 'SAPR10'.
* Chief Accountant
  IF VER2012 IS INITIAL. " 1969939 - signature is chief accountant
  SELECT SINGLE PAVAL INTO BUFF_HEADER-CHIEF_ACCOUNTANT
    FROM T001Z WHERE BUKRS = MAINBUK AND PARTY = 'SAPR15'.
  ELSE.                  " 1969939 - signature is CEO
  SELECT SINGLE PAVAL INTO BUFF_HEADER-CHIEF_ACCOUNTANT
    FROM T001Z WHERE BUKRS = MAINBUK AND PARTY = 'SAPR13'.
  ENDIF.

  BUFF_HEADER-GJAHR       = BR_GJAHR-LOW.
  BUFF_HEADER-BUDAT_BEGIN = BR_BUDAT-LOW.
  BUFF_HEADER-BUDAT_END   = BR_BUDAT-HIGH.
  PERFORM GET_CALENDAR_PERIOD(J_3RF_BUY_BOOK_03) USING SEL_MONA-LOW
                                              CHANGING BUFF_HEADER-MONAT_BEGIN.
  PERFORM GET_CALENDAR_PERIOD(J_3RF_BUY_BOOK_03) USING SEL_MONA-HIGH
                                              CHANGING BUFF_HEADER-MONAT_END.
* 1695097 - format from..  to.. dates
  IF VER2012 = 'X'.
    PERFORM ADOBE_PERIOD(J_3RF_BUY_BOOK_03)   CHANGING BUFF_HEADER-GJAHR
                                                       BUFF_HEADER-MONAT_BEGIN
                                                       BUFF_HEADER-MONAT_END
                                                       BUFF_HEADER-BUDAT_BEGIN
                                                       BUFF_HEADER-BUDAT_END.
  ENDIF.


  PERFORM SELECT_ADDR USING NAME1
                            NAME2
                            NAME3
                            NAME4
                            NAME1_R
                            NAME2_R
                            NAME3_R
                            NAME4_R
                            MAINBUK.
  IF S_ADR <> 'X'.
    CONCATENATE NAME1 NAME2 NAME3 NAME4
      INTO BUFF_HEADER-COMPANY_NAME SEPARATED BY SPACE.
  ELSE.
    CONCATENATE NAME1_R NAME2_R NAME3_R NAME4_R
      INTO BUFF_HEADER-COMPANY_NAME SEPARATED BY SPACE.
  ENDIF.

  IF NOT BUFF_TAB_ADD IS INITIAL OR
     NOT VR_EMPTY IS INITIAL. " 2178684
    MOVE-CORRESPONDING BUFF_HEADER TO BUFF_HEADER_ADD.
    BUFF_HEADER_ADD-GJAHR       = AD_GJAHR-LOW.
    BUFF_HEADER_ADD-BUDAT_BEGIN = AD_BUDAT-LOW.
    BUFF_HEADER_ADD-BUDAT_END   = AD_BUDAT-HIGH.
    IF BUFF_HEADER_ADD-BUDAT_BEGIN IS INITIAL AND
       BUFF_HEADER_ADD-BUDAT_END   IS INITIAL AND
       NOT AD_VTDAT-LOW IS INITIAL AND
       NOT AD_VTDAT-HIGH IS INITIAL.
      BUFF_HEADER_ADD-BUDAT_BEGIN = AD_VTDAT-LOW.
      BUFF_HEADER_ADD-BUDAT_END   = AD_VTDAT-HIGH.
    ENDIF.

    L_MONAT_LOW  = AD_MONAT-LOW.
    L_MONAT_HIGH = AD_MONAT-HIGH.
*   2056387 - tax period from quarter
    IF NOT P_QUART       IS INITIAL AND
       NOT ADD_QUART_R[] IS INITIAL AND
       P_XML             IS INITIAL.  " for XML - use months
      LOOP AT ADD_QUART_R INTO LS_ADD_QUART_R.
        L_MONAT_LOW  = LS_ADD_QUART_R-LOW.
        L_MONAT_HIGH = LS_ADD_QUART_R-HIGH.
        EXIT.
      ENDLOOP.
    ENDIF.

    PERFORM GET_CALENDAR_PERIOD(J_3RF_BUY_BOOK_03)
       USING    L_MONAT_LOW  " 2056387
       CHANGING BUFF_HEADER_ADD-MONAT_BEGIN.
    PERFORM GET_CALENDAR_PERIOD(J_3RF_BUY_BOOK_03)
       USING    L_MONAT_HIGH  " 2056387
       CHANGING BUFF_HEADER_ADD-MONAT_END.
    IF NOT BUFF_HEADER_ADD-MONAT_BEGIN IS INITIAL AND  " 2056387
       BUFF_HEADER_ADD-MONAT_END IS INITIAL.
      BUFF_HEADER_ADD-MONAT_END = BUFF_HEADER_ADD-MONAT_BEGIN.
    ENDIF.
    BUFF_HEADER_ADD-AD_SHEET    = AD_SHEET.
    BUFF_HEADER_ADD-DATE_OUTPUT = AD_DATE.
    MOVE-CORRESPONDING GS_TOTALS TO IN_TOTALS.
  ENDIF.
  BUFF_HEADER-DECREE451     = P_DP_BAS.
  BUFF_HEADER_ADD-DECREE451 = P_DP_ADD.
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"$\SE:(2) Form PREPARE_INTERFACE, End                                                                                                                       A
*$*$-Start: (2)---------------------------------------------------------------------------------$*$*
ENHANCEMENT 1  Z_J_3RF_SELL_BOOK_02_PREPARE.    "active version
  "需求描述:俄分Sales ledger 导出XML文件时,将凭证字段替换成ZOUNR字段(数值等同PI号)
  "需求编号:暂无
  "开发者:
  "开发日期:2018.08.07
  DATA:LS_ACC_EXT TYPE ZSSD_J_3R_SALES_LEDGER_01,
       LT_ACC_EXT TYPE TABLE OF ZSSD_J_3R_SALES_LEDGER_01.

  CLEAR:LT_ACC_EXT[],LS_ACC_EXT.
  CALL FUNCTION 'ZFI_GET_ACC_EXT'
    TABLES
      ET_ACC_EXT = LT_ACC_EXT.

  IF LT_ACC_EXT[] IS NOT INITIAL.
    LOOP AT BUFF_TAB INTO WA_BUFF.
      CLEAR:LS_ACC_EXT.
      READ TABLE LT_ACC_EXT INTO LS_ACC_EXT WITH KEY NUM_LINE = WA_BUFF-NUM_LINE.
      IF SY-SUBRC EQ 0.
        WA_BUFF-EXT_NUMBER = LS_ACC_EXT-EXT_NUMBER.
        IF WA_BUFF-EXT_NUMBER_CORR IS NOT INITIAL.
          WA_BUFF-EXT_NUMBER_CORR =  LS_ACC_EXT-EXT_NUMBER.
        ENDIF.
        MODIFY BUFF_TAB FROM WA_BUFF.
      ENDIF.
      CLEAR:WA_BUFF.
    ENDLOOP.
  ENDIF.

ENDENHANCEMENT.
*$*$-End:   (2)---------------------------------------------------------------------------------$*$*
ENDFORM.                    " prepare_interface

J_3RF_BUY_BOOK_03

*&---------------------------------------------------------------------*
*&      Form  prepare_interface
*&---------------------------------------------------------------------*

FORM PREPARE_INTERFACE.
  DATA: NAME1 LIKE ADDR1_VAL-NAME1,
        NAME2 LIKE ADDR1_VAL-NAME2,
        NAME3 LIKE ADDR1_VAL-NAME3,
        NAME4 LIKE ADDR1_VAL-NAME4,
        NAME1_R LIKE ADDR1_VAL-NAME1,
        NAME2_R LIKE ADDR1_VAL-NAME2,
        NAME3_R LIKE ADDR1_VAL-NAME3,
        NAME4_R LIKE ADDR1_VAL-NAME4.

  DATA: WA_BOOK  TYPE J_3RBUY,
        WA_BUFF  TYPE TY_ADOBE_LINE,
        WA_TOTAL TYPE TY_ADOBE_TOTAL.

  DATA: IT_CUSTOMS TYPE TABLE OF STRING.
  DATA: L_LEN      TYPE I,
        L_STR      LIKE LINE OF IT_CUSTOMS.
  DATA: NUM_LINE_ADD(10) TYPE N VALUE '1'.
  DATA: L_VALUE    TYPE STRING.
  DATA: L_MONAT_LOW    TYPE BKPF-MONAT,           " 2056387
        L_MONAT_HIGH   TYPE BKPF-MONAT,           " 2056387
        LS_ADD_QUART_R LIKE LINE OF AD_MONAT[].   " 2056387
  " maximum length of BKPF-XBLNR
  DATA: MAX_XBLNR_LEN TYPE I VALUE 16,  " 2099024
        L_LONG_GTD    TYPE STRING,      " 2099024
        L_CORR        TYPE FLAG.        " 2554457
  DESCRIBE FIELD WA_BOOK-XBLNR_INV  LENGTH MAX_XBLNR_LEN IN CHARACTER MODE.
  DESCRIBE FIELD WA_BUFF-EXT_NUMBER LENGTH L_LEN         IN CHARACTER MODE.
  IF MAX_XBLNR_LEN >= L_LEN.
    CLEAR MAX_XBLNR_LEN. " do not read external texts
  ENDIF.

  REFRESH: BUFF_TAB, BUFF_TAB_ADD.
  CLEAR: IN_TOTALS.

  NUM_LINE_ADD = AD_DOC_N.  "N1472064
  IF NUM_LINE_ADD IS INITIAL.
    NUM_LINE_ADD = 1.
  ENDIF.

  LOOP AT P_BOOK_ALV1 INTO WA_BOOK. " where belnr_add eq space.
    CLEAR WA_BUFF.
    MOVE-CORRESPONDING WA_BOOK TO WA_BUFF.       "#EC ENHOK

    "N1351387: fill FLG_BELNR_TRN for new format only
    CLEAR WA_BUFF-FLG_BELNR_TRN.
    IF ( WA_BOOK-BELNR_ADD EQ SPACE AND P_DP_BAS NE SPACE ) OR
       ( WA_BOOK-BELNR_ADD NE SPACE AND P_DP_ADD NE SPACE ).
      WA_BUFF-FLG_BELNR_TRN = WA_BOOK-FLG_BELNR_TRN.
      IF WA_BUFF-FLG_BELNR_TRN = 'A'.
        CLEAR WA_BUFF-MM_INV_VORNU." no gtd
        CLEAR WA_BUFF-HWBAS2_TRN.  " no totals
        CLEAR WA_BUFF-HWBAS5_TRN.
* Note 2003630
        CLEAR WA_BUFF-HWBAS3_TRN.
        CLEAR WA_BUFF-HWBAS4_TRN.
      ENDIF.
    ENDIF.

    "N1362831 - get long external number
    L_LEN = STRLEN( WA_BUFF-EXT_NUMBER ).

    L_CORR = ' '.
    IF WA_BOOK-BELNR_CORR_INV = WA_BOOK-BELNR_INV AND  " 2554457
       WA_BOOK-GJAHR_CORR_INV = WA_BOOK-GJAHR_INV.
      L_CORR = 'X'.
    ENDIF.

    IF P_EXTNUM EQ 'X'           AND
       WA_BOOK-JOURNAL IS INITIAL AND " 1711413 - do not overwrite journal data
       LCL_BUY_BOOK=>IF_EXT_NUMBER( IS_BOOK  = WA_BOOK     " 1802867
                                    I_XBLNR  = P_XBLNR
                                    I_XBLNR1 = P_XBLNR1
                                    I_XBLNR2 = P_XBLNR2
                                    IF_CORR  = L_CORR ) = 'X' AND
       L_LEN    EQ MAX_XBLNR_LEN AND
       PAR_EXT  EQ 'X'           AND
       PAR_EXTN NE SPACE         AND
       MAX_XBLNR_LEN > 0.      " 2099024 - do not load texts.

      PERFORM READ_TEXTS
         USING WA_BOOK-BUKRS
               WA_BOOK-BELNR_INV
               WA_BOOK-GJAHR_INV
               PAR_EXTN
         CHANGING L_VALUE.
      IF L_VALUE NE SPACE.
        WA_BUFF-EXT_NUMBER = L_VALUE.
      ENDIF.
    ENDIF.

* Replace ; with space for better output in PDF form
    IF NOT WA_BUFF-MM_INV_VORNU IS INITIAL AND
       P_XML IS INITIAL.
      REFRESH IT_CUSTOMS.
      SPLIT WA_BUFF-MM_INV_VORNU AT ';' INTO TABLE IT_CUSTOMS.
      CONCATENATE LINES OF IT_CUSTOMS INTO WA_BUFF-MM_INV_VORNU SEPARATED BY SPACE.
    ENDIF.

    "N1326787: for long GTDs - load directly from the database
    REFRESH IT_CUSTOMS.
    L_LEN = STRLEN( WA_BUFF-MM_INV_VORNU ).
    IF P_LNGGTD EQ 'X' AND L_LEN > MAX_GTD_LEN.
      PERFORM GET_LONG_GTD
        TABLES  IT_CUSTOMS
        USING   WA_BOOK
        CHANGING L_LONG_GTD. " 2099024
*     2099024 - use full string
*     read table it_customs into l_str index 1.
*     if sy-subrc IS INITIAL.
*       wa_buff-mm_inv_vornu = l_str.
*     endif.
      REFRESH IT_CUSTOMS.
      WA_BUFF-MM_INV_VORNU = L_LONG_GTD.
    ENDIF.

    L_LEN = STRLEN( WA_BUFF-PAY_EXT_NUMBER ).
    IF P_LNGGTD EQ 'X' AND L_LEN > 250.
        DATA L_BELNR TYPE BKPF-BELNR.                 "2418782
        DATA L_GJAHR TYPE BKPF-GJAHR.                 "2418782

        IF WA_BUFF-OPER_TYP = '22'.                "2418782
            L_BELNR = WA_BOOK-BELNR_TRN.             "2418782
            L_GJAHR = WA_BOOK-GJAHR_TRN.             "2418782
        ELSE.                                         "2418782
            L_BELNR = WA_BOOK-BELNR_INV.             "2418782
            L_GJAHR = WA_BOOK-GJAHR_INV.             "2418782
       ENDIF.                                        "2418782

      PERFORM READ_TEXTS
      USING   WA_BOOK-BUKRS
              L_BELNR
              L_GJAHR
              PAR_PAYN
      CHANGING L_LONG_GTD.
      WA_BUFF-PAY_EXT_NUMBER = L_LONG_GTD.
    ENDIF.

    "N1329299: print actual payment date
    IF P_ACTPAY EQ 'X'.
      WA_BUFF-BLDAT_PAY = WA_BOOK-BLDAT_ORIGPAY.
    ENDIF.

*   1695097 - re-arrange columns for correction and revision invoices
    IF VER2012 = 'X'.
      PERFORM ADOBE_FILL_INV USING    WA_BOOK
                             CHANGING WA_BUFF.
    ENDIF.

    IF WA_BOOK-BELNR_ADD EQ SPACE.
      APPEND WA_BUFF TO BUFF_TAB.
    ELSE.
      "N1334957 - always renumerate additional sheets
      WA_BUFF-NUM_LINE = NUM_LINE_ADD.
      NUM_LINE_ADD     = NUM_LINE_ADD + 1.

      APPEND WA_BUFF TO BUFF_TAB_ADD.
    ENDIF.

    "N1326787: now append GTD rows
    IF NOT IT_CUSTOMS IS INITIAL.
      CLEAR WA_BUFF.
      LOOP AT IT_CUSTOMS INTO L_STR FROM 2.
        WA_BUFF-MM_INV_VORNU = L_STR.
        IF WA_BOOK-BELNR_ADD EQ SPACE.
      APPEND WA_BUFF TO BUFF_TAB.
    ELSE.
      APPEND WA_BUFF TO BUFF_TAB_ADD.
        ENDIF.
      ENDLOOP.
    ENDIF.
  ENDLOOP.

* The code below has been moved to form FILL_ADD_FIELDS
*  loop at p_book_alv1 into wa_book where belnr_add ne space.
*    if ( wa_book-flag_add = 'X' ) and
*       ( wa_book-belnr_inv = wa_book-belnr_trn ).
*      wa_book-belnr_inv = wa_book-belnr_add.
**      wa_pbook-xblnr_inv = wa_pbook-xblnr_test.
*    endif.
*    move-corresponding wa_book to wa_buff.
*    append wa_buff to buff_tab_add.
*  endloop.

  SELECT SINGLE * FROM T001  WHERE BUKRS = MAINBUK.
* INN
  SELECT SINGLE PAVAL INTO BUFF_HEADER-INN
    FROM T001Z WHERE BUKRS = MAINBUK AND PARTY = 'SAPR01'.
* KPP
  SELECT SINGLE PAVAL INTO BUFF_HEADER-KPP
    FROM T001Z WHERE BUKRS = MAINBUK AND PARTY = 'SAPR10'.
* Chief Accountant
  IF VER2012 IS INITIAL. " 1969939 - signature is chief accountant
  SELECT SINGLE PAVAL INTO BUFF_HEADER-CHIEF_ACCOUNTANT
    FROM T001Z WHERE BUKRS = MAINBUK AND PARTY = 'SAPR15'.
  ELSE.                  " 1969939 - signature is CEO
  SELECT SINGLE PAVAL INTO BUFF_HEADER-CHIEF_ACCOUNTANT
    FROM T001Z WHERE BUKRS = MAINBUK AND PARTY = 'SAPR13'.
  ENDIF.

  BUFF_HEADER-GJAHR       = BR_GJAHR-LOW.
  BUFF_HEADER-BUDAT_BEGIN = BR_BUDAT-LOW.
  BUFF_HEADER-BUDAT_END   = BR_BUDAT-HIGH.
  PERFORM GET_CALENDAR_PERIOD USING    SEL_MONA-LOW
                              CHANGING BUFF_HEADER-MONAT_BEGIN.
  PERFORM GET_CALENDAR_PERIOD USING    SEL_MONA-HIGH
                              CHANGING BUFF_HEADER-MONAT_END.

* 1695097 - format from..  to.. dates
  IF VER2012 = 'X'.
    PERFORM ADOBE_PERIOD CHANGING BUFF_HEADER-GJAHR
                                  BUFF_HEADER-MONAT_BEGIN
                                  BUFF_HEADER-MONAT_END
                                  BUFF_HEADER-BUDAT_BEGIN
                                  BUFF_HEADER-BUDAT_END.
  ENDIF.

  PERFORM SELECT_ADDR USING NAME1
                            NAME2
                            NAME3
                            NAME4
                            NAME1_R
                            NAME2_R
                            NAME3_R
                            NAME4_R
                            MAINBUK.
  IF S_ADR <> 'X'.
* Check if the Russian version of address is requested
    CONCATENATE NAME1 NAME2 NAME3 NAME4
      INTO BUFF_HEADER-COMPANY_NAME SEPARATED BY SPACE.
  ELSE.
    CONCATENATE NAME1_R NAME2_R NAME3_R NAME4_R
      INTO BUFF_HEADER-COMPANY_NAME SEPARATED BY SPACE.
  ENDIF.

  IF NOT BUFF_TAB_ADD IS INITIAL OR
     NOT VR_EMPTY IS INITIAL. " 2178684
    MOVE-CORRESPONDING BUFF_HEADER TO BUFF_HEADER_ADD.
    BUFF_HEADER_ADD-GJAHR       = AD_GJAHR-LOW.
    BUFF_HEADER_ADD-BUDAT_BEGIN = AD_BUDAT-LOW.
    BUFF_HEADER_ADD-BUDAT_END   = AD_BUDAT-HIGH.
    IF BUFF_HEADER_ADD-BUDAT_BEGIN IS INITIAL AND
       BUFF_HEADER_ADD-BUDAT_END   IS INITIAL AND
       NOT AD_VTDAT-LOW IS INITIAL AND
       NOT AD_VTDAT-HIGH IS INITIAL.
      BUFF_HEADER_ADD-BUDAT_BEGIN = AD_VTDAT-LOW.
      BUFF_HEADER_ADD-BUDAT_END   = AD_VTDAT-HIGH.
    ENDIF.

    L_MONAT_LOW  = AD_MONAT-LOW.
    L_MONAT_HIGH = AD_MONAT-HIGH.
*   2056387 - tax period from quarter
    IF NOT P_QUART       IS INITIAL AND
       NOT ADD_QUART_R[] IS INITIAL AND
       P_XML             IS INITIAL.  " for XML - use months
      LOOP AT ADD_QUART_R INTO LS_ADD_QUART_R.
        L_MONAT_LOW  = LS_ADD_QUART_R-LOW.
        L_MONAT_HIGH = LS_ADD_QUART_R-HIGH.
        EXIT.
      ENDLOOP.
    ENDIF.

    PERFORM GET_CALENDAR_PERIOD USING    L_MONAT_LOW  " 2056387
                                CHANGING BUFF_HEADER_ADD-MONAT_BEGIN.
    PERFORM GET_CALENDAR_PERIOD USING    L_MONAT_HIGH  " 2056387
                                CHANGING BUFF_HEADER_ADD-MONAT_END.
    IF NOT BUFF_HEADER_ADD-MONAT_BEGIN IS INITIAL AND  " 2056387
       BUFF_HEADER_ADD-MONAT_END IS INITIAL.
      BUFF_HEADER_ADD-MONAT_END = BUFF_HEADER_ADD-MONAT_BEGIN.
    ENDIF.
    BUFF_HEADER_ADD-AD_SHEET    = AD_SHEET.
    BUFF_HEADER_ADD-DATE_OUTPUT = AD_DATE.
    MOVE-CORRESPONDING GS_TOTALS TO IN_TOTALS.       "#EC ENHOK
  ENDIF.
  BUFF_HEADER-DECREE451     = P_DP_BAS.
  BUFF_HEADER_ADD-DECREE451 = P_DP_ADD.
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"$\SE:(2) Form PREPARE_INTERFACE, End                                                                                                                       A
*$*$-Start: (2)---------------------------------------------------------------------------------$*$*
ENHANCEMENT 1  Z_J_3RF_BUY_BOOK_03_PREPARE.    "active version
*
  "需求描述:俄分Sales ledger 导出XML文件时,将凭证字段替换成ZOUNR字段(数值等同PI号)
  "需求编号:暂无
  "开发者:
  "开发日期:2018.08.06
  DATA:LS_ACC_EXT TYPE ZSSD_J_3R_SALES_LEDGER_01,
       LT_ACC_EXT TYPE TABLE OF ZSSD_J_3R_SALES_LEDGER_01.

  CLEAR:LT_ACC_EXT[],LS_ACC_EXT.
  CALL FUNCTION 'ZFI_GET_ACC_EXT'
    TABLES
      ET_ACC_EXT = LT_ACC_EXT.

  IF LT_ACC_EXT[] IS NOT INITIAL.
    LOOP AT BUFF_TAB INTO WA_BUFF.
      CLEAR:LS_ACC_EXT.
      READ TABLE LT_ACC_EXT INTO LS_ACC_EXT WITH KEY NUM_LINE = WA_BUFF-NUM_LINE.
      IF SY-SUBRC EQ 0.
        WA_BUFF-EXT_NUMBER = LS_ACC_EXT-EXT_NUMBER.
        IF WA_BUFF-EXT_NUMBER_CORR IS NOT INITIAL.
          WA_BUFF-EXT_NUMBER_CORR = LS_ACC_EXT-EXT_NUMBER.
        ENDIF.
        MODIFY BUFF_TAB FROM WA_BUFF.
      ENDIF.
      CLEAR:WA_BUFF.
    ENDLOOP.
  ENDIF.
ENDENHANCEMENT.
*$*$-End:   (2)---------------------------------------------------------------------------------$*$*
ENDFORM.                    " prepare_interface

J_3RF_BUY_BOOK_03

*----------------------------------------------------------------------*
*       FORM View_EXTRACT
*----------------------------------------------------------------------*
FORM VIEW_EXTRACT
  USING    V_EXTRACT   LIKE DISEXTRACT
  CHANGING CT_BOOK     TYPE J_3R_T_BUY
           CS_TOTALS   TYPE J_3RBUY.

  DATA:
*        it_book type j_3r_t_buy,
*        wa_book type j_3rbuy,
        NUM_LINE_ADD(10) TYPE N VALUE '1',
        NUM_LINE_BAS(10) TYPE N,
        LV_DELETE TYPE ABAP_BOOL,
        LV_SKIP TYPE ABAP_BOOL.

  FIELD-SYMBOLS: <FS_BOOK> LIKE LINE OF CT_BOOK.

  IF V_EXTRACT-EXNAME IS INITIAL AND VR_EMPTY IS NOT INITIAL.
    EXIT.
  ENDIF.

  NUM_LINE_BAS = NUM_STRT. " 1695097
  IF NUM_LINE_BAS IS INITIAL.
    NUM_LINE_BAS = 1.
  ENDIF.

  NUM_LINE_ADD = AD_DOC_N.  "N1472064
  IF NUM_LINE_ADD IS INITIAL.
    NUM_LINE_ADD = 1.
  ENDIF.

  PERFORM LOAD_EXTRACT USING    V_EXTRACT
                       CHANGING CT_BOOK CS_TOTALS.
* Apply selections
  LOOP AT CT_BOOK ASSIGNING <FS_BOOK>.
    "apply selection parameters for trn docs.
    PERFORM APPLY_SEL_PARAM_TRN
      CHANGING
        <FS_BOOK>
        LV_SKIP
    .
    IF LV_SKIP IS NOT INITIAL.
      LV_DELETE = ABAP_TRUE.
      CONTINUE.
    ENDIF.

    IF VER2012 IS INITIAL. "note 2250473
      CLEAR <FS_BOOK>-NUM_LINE.
*   Look for report's line number in numbering pool
    IF NUM_AUTO = 'X' AND <FS_BOOK>-BELNR_ADD IS INITIAL. " 1702300
      <FS_BOOK>-NUM_LINE = NUM_LINE_BAS.
      NUM_LINE_BAS     = NUM_LINE_BAS + 1.
    ELSEIF <FS_BOOK>-BELNR_ADD IS INITIAL AND
       <FS_BOOK>-BELNR_TRN IS INITIAL. "N1326572: 0% tax
      SELECT SINGLE BELNR_TRANSP INTO <FS_BOOK>-NUM_LINE
        FROM J_3RBUE_BOOK_NUM
        WHERE BUKRS = <FS_BOOK>-BUKRS AND
              BELNR = <FS_BOOK>-BELNR_INV AND
              GJAHR = <FS_BOOK>-GJAHR_INV AND
              BUZEI = <FS_BOOK>-BUZEI_TEST.
    ELSEIF <FS_BOOK>-BELNR_ADD IS INITIAL.
      SELECT SINGLE BELNR_TRANSP INTO <FS_BOOK>-NUM_LINE
        FROM J_3RBUE_BOOK_NUM
        WHERE BUKRS = <FS_BOOK>-BUKRS AND
              BELNR = <FS_BOOK>-BELNR_TRN AND
              GJAHR = <FS_BOOK>-GJAHR_TRN AND
              BUZEI = <FS_BOOK>-BUZEI_TEST.
    ELSE.
*       N1334957 - sequential numbering for additional sheets
*        select single belnr_transp into wa_book-num_line
*          from j_3rbue_book_num
*          where bukrs = wa_book-bukrs and
*                belnr = wa_book-belnr_add and
*                gjahr = wa_book-gjahr_add and
*                buzei = wa_book-buzei_add.
        <FS_BOOK>-NUM_LINE = NUM_LINE_ADD.
        NUM_LINE_ADD     = NUM_LINE_ADD + 1.
      ENDIF.
    ENDIF.

    PERFORM FILL_ADD_FIELDS CHANGING <FS_BOOK>.
*    append wa_book to ct_book.
  ENDLOOP.

  IF LV_DELETE IS NOT INITIAL.
    DELETE CT_BOOK WHERE BUKRS IS INITIAL.
  ENDIF.

*  free it_book.
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"$\SE:(1) Form VIEW_EXTRACT, End                                                                                                                            A
*$*$-Start: (1)---------------------------------------------------------------------------------$*$*
ENHANCEMENT 1  Z_J_3RF_BUY_BOOK_03_VIEW.    "active version
*
  "需求描述:俄分Sales ledger 导出XML文件时,将凭证字段替换成ZOUNR字段(数值等同PI号)
  "需求编号:暂无
  "开发者:
  "开发日期:2018.08.06
  FIELD-SYMBOLS:<CT_BOOK> TYPE J_3RBUY.
  DATA:LT_BOOK_SEL TYPE TABLE OF J_3RBUY.
  DATA:LT_BKPF TYPE TABLE OF BKPF,
       LS_BKPF TYPE BKPF,
       LT_BSEG TYPE TABLE OF BSEG,
       LS_BSEG TYPE BSEG.
  DATA:LT_ACC_EXT TYPE TABLE OF ZSSD_J_3R_SALES_LEDGER_01,
       LS_ACC_EXT TYPE ZSSD_J_3R_SALES_LEDGER_01.

*  BREAK-POINT.
  CLEAR:LT_BOOK_SEL,LT_BKPF,LT_BSEG.
  LT_BOOK_SEL = CT_BOOK.
  IF LT_BOOK_SEL IS NOT INITIAL.
   SORT LT_BOOK_SEL BY BUKRS GJAHR_INV BELNR_INV.
   DELETE ADJACENT DUPLICATES FROM LT_BOOK_SEL COMPARING BUKRS GJAHR_INV BELNR_INV.
   SELECT BUKRS GJAHR BELNR INTO CORRESPONDING FIELDS OF TABLE LT_BKPF FROM BKPF
     FOR ALL ENTRIES IN LT_BOOK_SEL
     WHERE BUKRS = LT_BOOK_SEL-BUKRS
       AND GJAHR = LT_BOOK_SEL-GJAHR_INV
       AND BELNR = LT_BOOK_SEL-BELNR_INV
       AND GLVOR = 'SD00'.
    IF SY-SUBRC EQ  0.
      SELECT BUKRS GJAHR BELNR ZUONR
        INTO CORRESPONDING FIELDS OF TABLE LT_BSEG FROM BSEG
        FOR ALL ENTRIES IN LT_BKPF
        WHERE BUKRS = LT_BKPF-BUKRS
          AND GJAHR = LT_BKPF-GJAHR
          AND BELNR = LT_BKPF-BELNR
          AND KOART = 'D'.
      SORT LT_BKPF BY BUKRS GJAHR BELNR.
      SORT LT_BSEG BY BUKRS GJAHR BELNR.
    ENDIF.
  ENDIF.

  CLEAR:LT_ACC_EXT.
  LOOP AT CT_BOOK ASSIGNING <CT_BOOK>.

    READ TABLE LT_BKPF TRANSPORTING NO FIELDS WITH KEY BUKRS = <CT_BOOK>-BUKRS
                                                       GJAHR = <CT_BOOK>-GJAHR_INV
                                                       BELNR = <CT_BOOK>-BELNR_INV BINARY SEARCH.
    IF SY-SUBRC EQ 0.
       READ TABLE LT_BSEG INTO LS_BSEG WITH KEY BUKRS = <CT_BOOK>-BUKRS
                                                GJAHR = <CT_BOOK>-GJAHR_INV
                                                BELNR = <CT_BOOK>-BELNR_INV BINARY SEARCH.
*       IF LS_BSEG-ZUONR IS INITIAL.
*         CONTINUE.
*       ENDIF.
       CLEAR:LS_ACC_EXT.
       LS_ACC_EXT-NUM_LINE   = <CT_BOOK>-NUM_LINE.
       LS_ACC_EXT-BUKRS      = <CT_BOOK>-BUKRS.
       LS_ACC_EXT-GJAHR      = <CT_BOOK>-GJAHR_INV.
       LS_ACC_EXT-BELNR      = <CT_BOOK>-BELNR_INV.
       CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
         EXPORTING
           INPUT     = LS_ACC_EXT-BELNR
         IMPORTING
           OUTPUT    = LS_ACC_EXT-BELNR .
       CONCATENATE LS_ACC_EXT-BUKRS LS_ACC_EXT-GJAHR '-' LS_ACC_EXT-BELNR INTO <CT_BOOK>-EXT_NUMBER.
       LS_ACC_EXT-EXT_NUMBER = <CT_BOOK>-EXT_NUMBER.
       APPEND LS_ACC_EXT TO LT_ACC_EXT.
    ENDIF.

*   <ct_book>
  ENDLOOP.

   IF LT_ACC_EXT[] IS NOT INITIAL.
     CALL FUNCTION 'ZFI_SET_ACC_EXT'
       TABLES
         IT_ACC_EXT = LT_ACC_EXT.
   ENDIF.
ENDENHANCEMENT.
*$*$-End:   (1)---------------------------------------------------------------------------------$*$*
ENDFORM.                                                   "View_EXTRACT

猜你喜欢

转载自www.cnblogs.com/ferzalez/p/9509270.html