应收账款余额显示

*----------------------------------------------------------------------*
*                                                                      *
*  RFITEMAR      LINE ITEMS ACCOUNTS RECEIVABLE                        *
*                     ----  -        -                                 *
*                                                                      *
*                THIS REPORT SELECTS DATA TO BE DISPLAYED BY ALV       *
*----------------------------------------------------------------------*

REPORT ZFICO01 MESSAGE-ID MSITEM NO STANDARD PAGE HEADING.
INCLUDE RFITEM_DEF.
*... ICONS AND SYMBOLS:
INCLUDE <LIST>.

TABLES: KNA1, KNB1, BSID, BSIK, ADMI_FILES.
TABLES: LFA1.
TABLES: T001.
TABLES: T005.

DATA: IT_H_T001      TYPE TPIT_T_VT001 WITH HEADER LINE,
      IT_H_KNA1      TYPE TPIT_T_VKNA1 WITH HEADER LINE,
      IT_H_KNB1      TYPE TPIT_T_VKNB1 WITH HEADER LINE.

data: begin of it_kunnr occurs 3,
      bukrs like bkpf-bukrs,
      kunnr like kna1-kunnr,
      end of it_kunnr.

DATA: BEGIN OF IT_HEADER OCCURS 0,
              BUKRS LIKE BKPF-BUKRS,
              KUNNR LIKE KNA1-KUNNR,
              NAME1 LIKE KNA1-NAME1,
              WRBTR LIKE BSEG-WRBTR,"凭证货币金额
              DMBTR LIKE BSEG-DMBTR,"本位币别金额
              WAERS LIKE rfposxext-WAERS,"凭证币别
              KKBWR LIKE rfposxext-HWAER, "本币
              ZTERM LIKE BSID-ZTERM,
              BUTXT LIKE T001-BUTXT,
              DELAY TYPE I,
      END OF IT_HEADER.

DATA: BEGIN OF IT_ITEM OCCURS 1,
              KUNNR LIKE KNA1-KUNNR,
              NAME1 LIKE KNA1-NAME1,
              MATNR LIKE MARA-MATNR,
              MAKTX LIKE MAKT-MAKTX,
              WRBTR LIKE BSEG-WRBTR,"凭证货币金额
              DMBTR LIKE BSEG-DMBTR,"按本位币计的金额
              WAERS LIKE rfposxext-WAERS,"凭证币别
              KKBWR LIKE rfposxext-HWAER, "本币
              FKIMG LIKE VBRP-FKIMG,"实际已开票数量
              VRKME LIKE VBRP-VRKME,"销售单位
              ZFBDT LIKE BSEG-ZFBDT,"付款基准日期
              DELAY LIKE EKPO-KTMNG,
              BELNR LIKE BSEG-BELNR,"会计凭证编号
              VBELN LIKE VBRP-VBELN,"发票号
              bukrs like ekko-bukrs,
              zterm like rfposxext-ZTERM,
              jamon like rfposxext-jamon,
              BUTXT LIKE T001-BUTXT,
              ZFAEL like t052-ZFAEL,
              BUDAT like rfposxext-BUDAT,
      END OF IT_ITEM.

DATA: BEGIN OF it_item_show OCCURS 1,
              KUNNR LIKE KNA1-KUNNR,
              NAME1 LIKE KNA1-NAME1,
              MATNR LIKE MARA-MATNR,
              MAKTX LIKE MAKT-MAKTX,
              WRBTR LIKE BSEG-WRBTR,"凭证货币金额
              DMBTR LIKE BSEG-DMBTR,"按本位币计的金额
              WAERS LIKE rfposxext-WAERS,"凭证币别
              KKBWR LIKE rfposxext-HWAER, "本币
              FKIMG LIKE VBRP-FKIMG,"实际已开票数量
              VRKME LIKE VBRP-VRKME,"销售单位
              ZFBDT LIKE BSEG-ZFBDT,"付款基准日期
              DELAY LIKE EKPO-KTMNG,
              BELNR LIKE BSEG-BELNR,"会计凭证编号
              VBELN LIKE VBRP-VBELN,"发票号
              bukrs like ekko-bukrs,
              zterm like rfposxext-ZTERM,
              jamon like rfposxext-jamon,
              BUTXT LIKE T001-BUTXT,
              ZFAEL like t052-ZFAEL,
              BUDAT like rfposxext-BUDAT,
      END OF it_item_show.


SELECTION-SCREEN BEGIN OF BLOCK STATUS WITH FRAME TITLE TEXT-002.

SELECTION-SCREEN BEGIN OF BLOCK CUSTOMER WITH FRAME TITLE TEXT-W02.
PARAMETERS: PA_WLKUN LIKE RF42B-IDNTD MODIF ID WKL.
SELECT-OPTIONS: SO_WLKUN FOR KNB1-KUNNR MODIF ID WKL NO DATABASE
SELECTION.
SELECTION-SCREEN END OF BLOCK CUSTOMER.
SELECTION-SCREEN BEGIN OF BLOCK COMPANY WITH FRAME TITLE TEXT-W03.
PARAMETERS: PA_WLBUK LIKE RF42B-IDNTB MODIF ID WKL.
SELECT-OPTIONS: SO_WLBUK FOR KNB1-BUKRS MODIF ID WKL NO DATABASE
SELECTION.
SELECTION-SCREEN END OF BLOCK COMPANY.

*   OPEN ITEMS:
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS X_OPSEL LIKE ITEMSET-XOPSEL RADIOBUTTON GROUP RAD1.
SELECTION-SCREEN COMMENT 3(20) TEXT-003 FOR FIELD X_OPSEL.
SELECTION-SCREEN END OF LINE.
PARAMETERS PA_STIDA LIKE RFPDO-ALLGSTID DEFAULT SY-DATLO.
SELECTION-SCREEN SKIP.
*   ALL ITEMS:
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS X_AISEL LIKE ITEMSET-XAISEL RADIOBUTTON GROUP RAD1.
SELECTION-SCREEN COMMENT 3(20) TEXT-005 FOR FIELD X_AISEL.
SELECTION-SCREEN END OF LINE.
SELECT-OPTIONS SO_BUDAT FOR BSID-BUDAT NO DATABASE SELECTION.


SELECTION-SCREEN SKIP.
PARAMETER IS_DELAY TYPE C AS CHECKBOX.
PARAMETER IS_INTER TYPE C AS CHECKBOX DEFAULT 'X'.
PARAMETER IS_DESC  TYPE C AS CHECKBOX DEFAULT 'X'.

SELECTION-SCREEN END OF BLOCK STATUS.


* INNER FRAME 2:
SELECTION-SCREEN BEGIN OF BLOCK TYPE WITH FRAME TITLE TEXT-006.
PARAMETERS: X_NORM LIKE ITEMSET-XNORM NO-DISPLAY DEFAULT 'X',
            X_SHBV LIKE ITEMSET-XSHBV NO-DISPLAY,
            X_MERK LIKE ITEMSET-XMERK NO-DISPLAY,
            X_PARK LIKE ITEMSET-XPARK NO-DISPLAY,
            X_APAR LIKE ITEMSET-XARIT NO-DISPLAY.
SELECTION-SCREEN END OF BLOCK TYPE.
* END OF INNER FRAMES.
* NET DUE DATE SELECTION:
SELECT-OPTIONS SO_FAEDT FOR IT_POS-FAEDT NO-DISPLAY NO DATABASE SELECTION
                                         MODIF ID DUE.

* END OF OUTER FRAME.
* LIST LAYOUT FRAME:
SELECTION-SCREEN BEGIN OF BLOCK LIST WITH FRAME TITLE TEXT-001.
PARAMETERS: PA_VARI TYPE SLIS_VARI NO-DISPLAY,
            PA_NMAX LIKE ITEMSET-NMAX NO-DISPLAY.
SELECTION-SCREEN END OF BLOCK LIST.
*... END OF SELECTION SCREEN LAYOUT.

*... DARK PARAMETERS:
* BRANCH: READ ITEMS POSTED ON CENTRAL OFFICE?
*   VALUES: (Y)ES, (N)O, ( ) PROMPT USER, (C) SELECTION CANCELLED
PARAMETERS: PA_CENT TYPE C NO-DISPLAY.
* COMBINED FISCAL YEAR/POSTING PERIOD
DATA: LD_YRPER LIKE RWCOOM-FISCPER.
SELECT-OPTIONS: SO_YRPER FOR LD_YRPER NO-DISPLAY.
* INTERNET TRANSACTION MODE?
PARAMETERS: PA_INET TYPE C NO-DISPLAY.
* GRID CONTROL DISPLAY?
*   VALUES: (Y)ES, (N)O, ( ) GET PARAMETER
PARAMETERS: PA_GRID TYPE C NO-DISPLAY.

*... INCLUDE INTERNAL SELECT-OPTIONS FOR DERIVED ITEM FIELDS:
INCLUDE RFITEM_SEL.

INITIALIZATION.
  G_REPID = SY-REPID.
  DD_NOAUT = 'X'.
  DD_NOOAP = 'X'.
* EXPIRING CURRENCIES:
  PERFORM INIT_EXPCUR.
* DEACTIVATE USER COMMANDS:
  PERFORM CHANGE_STATUS.
* GET DUE DATE SELECTION PID VALUE:
  PERFORM DD_GET_FLAG.
* INITIALIZE WORKLIST BUTTON:
  PERFORM WL_FLAG_AND_BUTTON.
* GET T021S AND MAKE FIELD ADMINISTRATION TABLES:
  PERFORM INIT_ADMIN_TABLES.
* MAKE FIELD CATALOG, EXCLUDE ALL UNNECESSARY FIELDS:
  PERFORM MAKE_FIELDCATALOG.
* PREPARE KKBER CURRENCY LOOKUP TABLE:
  PERFORM INIT_KKCURR_TABLE.
* GET PARAMETERS:
  PERFORM GET_GENERAL_PARAM.
* SET ACCOUNT AND COMPANY CODE:
  PERFORM SET_ACCT_AND_CCODE.
* SET FIELDS FOR TRANSFER PRICES
  PERFORM INSERT_TP_FIELDS.

AT SELECTION-SCREEN OUTPUT.
* CHECK FOR "SUPPRESS DIALOG":
  GD_DYNP_FUN = 7.
  GD_DYNP_VAL = 1.
  PERFORM DYNP_GET_STATUS USING    GD_DYNP_FUN
                          CHANGING GD_DYNP_VAL.
  LOOP AT SCREEN.
    PERFORM WL_MODIFY_SCREEN.
    PERFORM DD_MODIFY_SCREEN.
    MODIFY SCREEN.
  ENDLOOP.


AT SELECTION-SCREEN ON BLOCK CUSTOMER.
  IF NOT GD_WL_ON IS INITIAL.        " WORKLISTS ON >
    IF GD_DYNP_VAL EQ 0.             " REBUILD DD_BUKRS AND DD_KUNNR >
*       CUSTOMER:
      REFRESH DD_KUNNR.
      IF NOT PA_WLKUN IS INITIAL.    " CUSTOMER WORKLIST GIVEN >
        PERFORM RESOLVE_WORKLIST TABLES GT_COSEL
                                 USING  PA_WLKUN
                                        'KUNNR'.
*           WORKLIST OVERRIDES VENDOR SELECT-OPTION:
        REFRESH SO_WLKUN.
        CLEAR SO_WLKUN.
        LOOP AT GT_COSEL.
          MOVE-CORRESPONDING GT_COSEL TO DD_KUNNR.
          APPEND DD_KUNNR.
        ENDLOOP.
      ELSE.
        APPEND LINES OF SO_WLKUN TO DD_KUNNR.
      ENDIF.                         " CUSTOMER WORKLIST GIVEN <
    ENDIF.                           " REBUILD DD_BUKRS AND DD_KUNNR <
  ENDIF.                             " WORKLISTS ON <


AT SELECTION-SCREEN ON BLOCK COMPANY.
  IF NOT GD_WL_ON IS INITIAL.        " WORKLISTS ON >
    IF GD_DYNP_VAL EQ 0.             " REBUILD DD_BUKRS AND DD_KUNNR >
*       COMPANY CODES:
      REFRESH DD_BUKRS.
      IF NOT PA_WLBUK IS INITIAL.    " CCODE WORKLIST GIVEN >
        PERFORM RESOLVE_WORKLIST TABLES GT_COSEL
                                 USING  PA_WLBUK
                                        'BUKRS'.
*           WORKLIST OVERRIDES COMPANY CODE SELECT-OPTION:
        REFRESH SO_WLBUK.
        CLEAR SO_WLBUK.
        LOOP AT GT_COSEL.
          MOVE-CORRESPONDING GT_COSEL TO DD_BUKRS.
          APPEND DD_BUKRS.
        ENDLOOP.
      ELSE.
        APPEND LINES OF SO_WLBUK TO DD_BUKRS.
      ENDIF.                         " CCODE WORKLIST GIVEN <
    ENDIF.                           " REBUILD DD_BUKRS AND DD_KUNNR <
  ENDIF.                             " WORKLISTS ON <


AT SELECTION-SCREEN.

  CASE SY-UCOMM.

*...SWITCH WORKLIST ON OR OFF:
    WHEN 'FC01'.
      PERFORM WORKLIST_ON_OFF.
      PERFORM SET_ACCT_AND_CCODE.

*...PROCESS WORKLISTS AND CHECK SELECTIONS:
    WHEN 'ONLI' OR 'PRIN' OR 'INIT' OR 'PICK' OR 'ENTR' OR SPACE.
      CALL FUNCTION 'BUKRS_AUTHORITY_CHECK'
        EXPORTING
          XDATABASE = 'D'
        TABLES
          XBUKREIS  = DD_BUKRS.
      CALL FUNCTION 'BUKRS_AUTHORITY_CHECK'
        EXPORTING
          XDATABASE = 'B'
        TABLES
          XBUKREIS  = DD_BUKRS.

*    CHECK INPUT:
      PERFORM SEL_ACCOUNT_CHECK.
*     CHECK DATE (TPC)
      PERFORM CHECK_DATE TABLES DD_BUKRS
                         USING  DD_TPC.

  ENDCASE.

AT SELECTION-SCREEN ON BLOCK TYPE.
* CHECK ITEM TYPE ONLY WHEN ACTION = EXECUTE:
  IF SY-UCOMM = 'ONLI'.
    PERFORM SEL_TYPE_CHECK.
  ENDIF.

*AT SELECTION-SCREEN ON VALUE-REQUEST FOR PA_VARI.
*  PERFORM ALV_VARIANT_F4 CHANGING PA_VARI.

*** START OF SELECTION
START-OF-SELECTION.
***

  CLEAR: X_STOP.
* SET PARAMETERS:
  PERFORM SET_PARAMETERS.
* MAP SELECTIONS TO LDB LOGIC:
  PERFORM MAP_SEL_TO_LDB.

* DETERMINE COMPANY CODES WHICH USE TRANSFER PRICES
  SELECT * FROM T001A INTO TABLE IT_TP_AUTH WHERE BUKRS IN DD_BUKRS.
  LOOP AT IT_TP_AUTH.
    IF IT_TP_AUTH-CURTP+1(1) = '1' OR IT_TP_AUTH-CURTP+1(1) = '2'
      OR IT_TP_AUTH-CURTP2+1(1) = '1' OR IT_TP_AUTH-CURTP2+1(1) = '2'.
    ELSE.
      DELETE IT_TP_AUTH.
    ENDIF.
  ENDLOOP.
* CHECK TP AUTHORITY AND SET 'TECH'-ATTRIBUTE IF AUTHORITY IS MISSING
  PERFORM MAKE_FIELDCATALOG2.

GET KNA1.
* GENERAL ACCOUNT MASTER DATA:
  PERFORM KNA1_INFO_FILL.
* PERFORM T005_INFO_FILL USING 'D'.                             "1144186

GET KNB1.
* COMPANY MASTER DATA AND CURRENCIES:
  PERFORM T001_INFO_FILL.
* COMPANY ACCOUNT MASTER DATA:
  PERFORM KNB1_INFO_FILL.

GET KNB1 LATE.
* VENDOR ITEMS REQUESTED?
  IF NOT X_APAR IS INITIAL AND NOT KNA1-LIFNR IS INITIAL.
    PERFORM READ_VENDOR_ITEMS.
  ENDIF.

GET BSID.
* IMPORTING BKPF AND BSEG DATA FROM ARCHIVE
  PERFORM IMPORT_ARCH_FROM_MEMORY.
* LINE ITEMS, BASIC FIELDS:
  LD_YRPER(4) = BSID-GJAHR.
  LD_YRPER+5  = BSID-MONAT.
  CHECK LD_YRPER IN SO_YRPER.
  PERFORM POS_TABLE_FILL  CHANGING  X_STOP.

END-OF-SELECTION.
* ANY BRANCH ACCOUNTS? PROMPT USER IF NECESSARY:
  PERFORM KNB1_CHECK_BRANCH.
* SAVE ALL SELECTION CRITERIA FOR REFRESH:
  PERFORM SAVE_ALL_SELECTIONS.
* SELECTION CANCELLED IF CHOOSEN AT THE BRANCH/HEAD POPUP.
  IF PA_CENT = 'C'.
    MESSAGE S050.
    EXIT.
  ENDIF.
* DETERMINE LIST DISPLAY MODE:
  PERFORM DISPLAY_GRID_OR_CLASSIC.
* READ ITEMS POSTED ON CENTRAL OFFICE:
  PERFORM READ_CENTRAL_ITEMS.
* SET VARIANT:
  GS_VARIANT-REPORT   = G_REPID.
  GS_VARIANT-USERNAME = SY-UNAME.
  GS_VARIANT-VARIANT  = PA_VARI.
* READ SPECIAL FIELDS IF NECESSARY:
  PERFORM SPECIAL_FIELDS_INIT USING GS_VARIANT.
* NUMBER OF SELECTED ITEMS:
  IF X_STOP = 'X'.
    MESSAGE I023 WITH PA_NMAX.
  ELSE.
    DESCRIBE TABLE IT_POS LINES N_LINES.
    IF N_LINES > 0.
      MESSAGE S024 WITH N_LINES.
    ELSEIF PA_INET IS INITIAL AND GD_DYNP_VAL IS INITIAL.
      MESSAGE S033.
      EXIT.
    ELSE.
      MESSAGE I033.
      LEAVE PROGRAM.
    ENDIF.
  ENDIF.
* EXPORT GENERAL DATA USED IN HEADER INFO:
  PERFORM EXPORT_FILITEXTS_DATA.

* AUTHORITY DISPLAY OR CHANGE
  PERFORM AUTHORITY_TCODE USING 'FB02' SUBRC.
  IF SUBRC EQ 0.
    X_CHANGE = 'X'.
  ELSE.
    X_CHANGE = SPACE.
  ENDIF.




CLEAR:IT_ITEM.REFRESH:IT_ITEM.
DATA: GT_VBRP TYPE STANDARD TABLE OF VBRP WITH KEY VBELN WITH HEADER LINE.
DATA: WA_VBRP LIKE VBRP.
SELECT * INTO CORRESPONDING FIELDS OF TABLE GT_VBRP FROM VBRP FOR ALL ENTRIES IN IT_POS WHERE VBELN = IT_POS-REBZG.
LOOP AT IT_POS.
  CLEAR:IT_ITEM.
  LOOP AT IT_H_KNA1 WHERE KUNNR = IT_POS-KONTO.
     IT_ITEM-NAME1 = IT_H_KNA1-NAME1.
     EXIT.
  ENDLOOP.
  LOOP AT IT_H_T001 WHERE BUKRS = IT_POS-BUKRS.
     IT_ITEM-BUTXT = IT_H_T001-BUTXT.
     EXIT.
  ENDLOOP.

  LOOP AT IT_H_KNB1 WHERE BUKRS = IT_POS-BUKRS AND KUNNR = IT_POS-KONTO.
      IT_ITEM-ZTERM = IT_H_KNB1-ZTERM.
      SELECT  SINGLE ZFAEL INTO IT_ITEM-ZFAEL FROM T052 WHERE ZTERM = IT_ITEM-ZTERM.
      EXIT.
  ENDLOOP.

  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
    EXPORTING
      INPUT         = IT_POS-KONTO
   IMPORTING
     OUTPUT        = IT_POS-KONTO.

  IT_ITEM-KUNNR = IT_POS-KONTO.

  CLEAR:WA_VBRP.
  READ TABLE GT_VBRP WITH TABLE KEY VBELN = IT_POS-REBZG INTO WA_VBRP.
  IF WA_VBRP IS NOT INITIAL.
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
      EXPORTING
        INPUT         = WA_VBRP-MATNR
      IMPORTING
        OUTPUT        = IT_ITEM-MATNR.
      IT_ITEM-MAKTX = WA_VBRP-ARKTX.
      IT_ITEM-VBELN = WA_VBRP-VBELN.
  ENDIF.
  IT_ITEM-BELNR = IT_POS-BELNR.

  IT_ITEM-WRBTR = IT_POS-WRSHB."记账金额
  IT_ITEM-DMBTR = IT_POS-DMSHB."凭证

  IT_ITEM-WAERS = IT_POS-WAERS."DOC 币
  IT_ITEM-KKBWR = IT_POS-KKBWR."本币
  IT_ITEM-ZFBDT = IT_POS-ZFBDT."付款基准日期

  IF SY-DATUM > IT_POS-BUDAT.
     IT_ITEM-DELAY = SYST-DATUM - ( IT_POS-BUDAT + IT_ITEM-ZFAEL ) + 1. "超期天数 = 当前日期 - ( 付款基准日期 + 付款天数 )"IT_POS-ZFBDT
  ENDIF.
  it_item-BUDAT = it_pos-budat.
  IT_ITEM-FKIMG = 0.
  CLEAR:WA_VBRP.
  LOOP AT GT_VBRP INTO WA_VBRP WHERE VBELN = IT_POS-REBZG.
      IT_ITEM-FKIMG = WA_VBRP-FKIMG + IT_ITEM-FKIMG.
      CLEAR:WA_VBRP.
  ENDLOOP.
  it_item-bukrs = it_pos-bukrs.
  "it_item-zterm = it_pos-zterm."取客主档中的付款条件
  it_item-jamon = it_pos-jamon.
  clear:it_kunnr.
  it_kunnr-BUKRS = IT_POS-bukrs.
  it_kunnr-kunnr = it_item-kunnr.
  IF IS_INTER = 'X'.
    IF IT_KUNNR-KUNNR+0(1) <> 'S'.
        append it_kunnr.
    ENDIF.
  ELSE.
    append it_kunnr.
  ENDIF.

  IF IS_DELAY = 'X'.
     IF IT_ITEM-DELAY > 0.
        APPEND IT_ITEM.
     ENDIF.
  ELSE.
    APPEND IT_ITEM.
  ENDIF.


ENDLOOP.

DELETE ADJACENT DUPLICATES FROM it_kunnr COMPARING bukrs kunnr.




refresh:IT_HEADER.
loop at it_kunnr.
    data:l_WRBTR LIKE BSEG-WRBTR.
    clear:l_WRBTR.
    CLEAR: IT_HEADER.
    loop at it_item where bukrs = it_kunnr-bukrs and kunnr = it_kunnr-kunnr.
           IT_HEADER-BUKRS = IT_ITEM-BUKRS.
           IT_HEADER-KUNNR = IT_ITEM-KUNNR.
           IT_HEADER-NAME1 = IT_ITEM-NAME1.
           IT_HEADER-DMBTR = IT_HEADER-DMBTR + IT_ITEM-DMBTR.
           IT_HEADER-WRBTR = IT_HEADER-WRBTR + IT_ITEM-WRBTR.
           IT_HEADER-WAERS  = IT_ITEM-WAERS .
           IT_HEADER-KKBWR   = IT_ITEM-KKBWR  .
           IT_HEADER-BUTXT = IT_ITEM-BUTXT.
           IF IT_HEADER-DELAY < IT_ITEM-DELAY.
               IT_HEADER-DELAY = IT_ITEM-DELAY.
           ENDIF.
    endloop.
    if IT_HEADER-DMBTR <> 0.
        CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
          EXPORTING
            INPUT         = IT_KUNNR-KUNNR
         IMPORTING
           OUTPUT        = IT_KUNNR-KUNNR.

        LOOP AT IT_H_KNB1 WHERE BUKRS = IT_KUNNR-BUKRS AND KUNNR = IT_KUNNR-KUNNR.
            IT_HEADER-ZTERM = IT_H_KNB1-ZTERM.
            EXIT.
        ENDLOOP.
        APPEND:IT_HEADER.
    ELSE.
        CLEAR:IT_HEADER.
    endif.
endloop.

perform outasalv_header.

FORM user_command USING r_ucomm LIKE sy-ucomm
                        rs_selfield TYPE slis_selfield.
    if r_ucomm = '&IC1'.
        CLEAR:it_item_show.REFRESH:it_item_show.
        READ TABLE IT_HEADER  INDEX RS_SELFIELD-TABINDEX.
        LOOP AT IT_ITEM WHERE KUNNR = IT_HEADER-KUNNR AND BUKRS = IT_HEADER-BUKRS.
             APPEND IT_ITEM TO it_item_show.
             CLEAR:IT_ITEM.
        ENDLOOP.

        if IS_DESC = 'X'.
           sort it_item_show by DELAY descending.
        ELSE.
           sort it_item_show by DELAY.
        ENDIF.

        PERFORM outasalv.
    endif.
ENDFORM.


FORM user_command2 USING r_ucomm LIKE sy-ucomm
                        rs_selfield TYPE slis_selfield.
    if r_ucomm = '&IC1'.
       read table it_item_show index RS_SELFIELD-TABINDEX.
        SET PARAMETER ID: 'BLN' FIELD it_item_show-BELNR,
                          'BUK' FIELD it_item_show-BUKRS,
                          'GJR' FIELD it_item_show-jamon+0(4).
       CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.
    endif.
ENDFORM.

FORM outasalv_header.
  DATA dis_filed TYPE slis_t_fieldcat_alv WITH HEADER LINE.
  DATA : gs_layout   TYPE slis_layout_alv .
*  data: i_fieldcat type line of slis_t_fieldcat_alv. "ALV字段信息结构

  DEFINE add_field.
    dis_filed-fieldname = &1.
    dis_filed-reptext_ddic = &2.
    dis_filed-outputlen    = &3.
    "dis_filed-lzero = 'X'. "不显示值为0的数据和前导0
    dis_filed-no_zero = &4.
    append dis_filed.
    clear: dis_filed.
    "gs_layout-colwidth_optimize    = 'X'."自动设置宽度

  END-OF-DEFINITION.
    add_field 'BUKRS' '公司' '10' 'X'.
    add_field 'BUTXT' '公司名称' '30' 'X'.
    add_field 'KUNNR' '客户'  '20' 'X'.
    add_field 'NAME1' '客户名称' '30' 'X'.
    add_field 'WRBTR' '会计凭证金额' '15' 'X'.
    add_field 'WAERS' '会计凭证币别'  '10' 'X'.
    add_field 'DMBTR' '本位币金额' '15' 'X'.
    add_field 'KKBWR' '本位币'  '10' 'X'.
    add_field 'ZTERM' '付款条件' '10' 'X'.
    add_field 'DELAY' '收款延期天数' '10' 'X'.

  if IS_DESC = 'X'.
     sort it_header by DELAY descending..
  ELSE.
     sort it_header by DELAY.
  ENDIF.


  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program = 'ZFICO01'
      it_fieldcat        = dis_filed[]
      i_save             = 'A'

      is_layout          = gs_layout
      i_callback_user_command     = 'USER_COMMAND'
    TABLES
      t_outtab           = it_header.
  IF sy-subrc <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

ENDFORM.                    "outasalv




FORM outasalv.
  DATA dis_filed TYPE slis_t_fieldcat_alv WITH HEADER LINE.
  DATA : gs_layout   TYPE slis_layout_alv .
*  data: i_fieldcat type line of slis_t_fieldcat_alv. "ALV字段信息结构

  DEFINE add_field.
    dis_filed-fieldname = &1.
    dis_filed-reptext_ddic = &2.
    "dis_filed-lzero = 'X'. "不显示值为0的数据和前导0
    dis_filed-no_zero = &3.
    append dis_filed.
    clear: dis_filed.
    gs_layout-colwidth_optimize    = 'X'."自动设置宽度

  END-OF-DEFINITION.
    add_field 'KUNNR' '客户' 'X'.
    add_field 'NAME1' '客户名称' 'X'.
    add_field 'MATNR' '产品型号' 'X'.
    add_field 'MAKTX' '产品描述' 'X'.
    add_field 'WRBTR' '会计凭证金额' 'X'.
    add_field 'WAERS' '会计凭币别' 'X'.
    add_field 'DMBTR' '本位币金额' 'X'.
    add_field 'KKBWR' '本位币别' 'X'.
    add_field 'FKIMG' '数量' 'X'.
    "add_field 'VRKME' '销售单位'.
    add_field 'BELNR' '财务凭证号' 'X'.
    add_field 'VBELN' '销售发票号' 'X'.
    add_field 'BUDAT' '过账日期' 'X'.
    add_field 'ZTERM' '付款条件' 'X'.
    add_field 'ZFAEL' '付款期限(天)' 'X'.
    add_field 'DELAY' '过期天数' 'X'.


  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program = 'ZFICO01'
      it_fieldcat        = dis_filed[]
      i_save             = 'A'
      is_layout          = gs_layout
      i_callback_user_command     = 'USER_COMMAND2'
    TABLES
      t_outtab           = it_item_show.
  IF sy-subrc <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

ENDFORM.                    "outasalv

*----------------------------------------------------------------------*
*  FORM SEL_ACCOUNT_CHECK
*----------------------------------------------------------------------*
FORM SEL_ACCOUNT_CHECK.

  DATA: LD_LINES LIKE SY-INDEX,
        LD_SINGLE_ACCOUNT TYPE C,
        LD_SINGLE_BUKRS   TYPE C.

  READ TABLE DD_KUNNR INDEX 1.
  IF SY-SUBRC NE 0.
    READ TABLE DD_BUKRS INDEX 1.
    IF SY-SUBRC NE 0.
      MESSAGE W019.
    ENDIF.
  ENDIF.
  READ TABLE DD_KUNNR INDEX 1.
  IF SY-SUBRC EQ 0.
    LOOP AT DD_KUNNR TRANSPORTING NO FIELDS
                     WHERE OPTION NE 'EQ' OR
                           SIGN   NE 'I'.
      EXIT.
    ENDLOOP.
    SUBRC = SY-SUBRC.                  "ARBEITSVORRAT: SUBRC NE 0
  ELSE.
    SUBRC = 0.
  ENDIF.
  IF SUBRC EQ 0.
    SELECT SINGLE KUNNR FROM KNB1 INTO KNB1-KUNNR
           WHERE KUNNR IN DD_KUNNR
             AND BUKRS IN DD_BUKRS.
  ELSE.
    SELECT KUNNR FROM KNB1 INTO KNB1-KUNNR
           UP TO 1 ROWS
           FOR ALL ENTRIES IN DD_KUNNR
           WHERE KUNNR EQ DD_KUNNR-LOW
             AND BUKRS IN DD_BUKRS.
    ENDSELECT.
  ENDIF.
  IF SY-SUBRC NE 0.
    MESSAGE E030(MSITEM).
  ENDIF.
  CLEAR KNB1.

*...WRITE DD_KUNNR UND DD_BUKRS INTO MEMORY
*...(IMPORTANT LATER FOR DISPUTE-MANAGEMENT).

  EXPORT DD_KUNNR TO MEMORY ID 'FILITEXTS_KUNNR'.
  EXPORT DD_BUKRS TO MEMORY ID 'FILITEXTS_BUKRS'.

*...FIND OUT, IF SINGLE ACCOUNTS AND COMPANY CODES HAVE BEEN SELECTED..*
*...(IMPORTANT FOR HEADER DISPLAY).....................................*

  CLEAR LD_SINGLE_ACCOUNT.
  DESCRIBE TABLE DD_KUNNR LINES LD_LINES.
  IF LD_LINES EQ 1.
    READ TABLE DD_KUNNR INDEX 1.
    IF ( DD_KUNNR-SIGN EQ 'I' AND DD_KUNNR-OPTION EQ 'EQ' ) OR
       ( DD_KUNNR-SIGN EQ 'I' AND DD_KUNNR-OPTION EQ 'BT' AND
         DD_KUNNR-LOW  EQ DD_KUNNR-HIGH ).
      LD_SINGLE_ACCOUNT = 'X'.
    ENDIF.
  ENDIF.
  CLEAR LD_SINGLE_BUKRS.
  DESCRIBE TABLE DD_BUKRS LINES LD_LINES.
  IF LD_LINES EQ 1.
    READ TABLE DD_BUKRS INDEX 1.
    IF ( DD_BUKRS-SIGN EQ 'I' AND DD_BUKRS-OPTION EQ 'EQ' ) OR
       ( DD_BUKRS-SIGN EQ 'I' AND DD_BUKRS-OPTION EQ 'BT' AND
         DD_BUKRS-LOW  EQ DD_BUKRS-HIGH ).
      LD_SINGLE_BUKRS = 'X'.
    ENDIF.
  ENDIF.
  EXPORT LD_SINGLE_BUKRS LD_SINGLE_ACCOUNT TO MEMORY ID
                                      'FILITEXTS_SINGLE'.

ENDFORM.                    "SEL_ACCOUNT_CHECK

*----------------------------------------------------------------------*
*  FORM SEL_TYPE_CHECK
*----------------------------------------------------------------------*
FORM SEL_TYPE_CHECK.
  IF X_NORM IS INITIAL AND X_SHBV IS INITIAL AND X_MERK IS INITIAL
     AND X_PARK IS INITIAL AND X_APAR IS INITIAL.
    MESSAGE E020.
  ENDIF.
ENDFORM.                    "SEL_TYPE_CHECK

*----------------------------------------------------------------------*
*      FORM  POS_TABLE_FILL
*----------------------------------------------------------------------*
FORM POS_TABLE_FILL  CHANGING  P_STOP.
  DATA: TEXT_INDEX TYPE I,
        OKAY       TYPE C VALUE SPACE.

  CLEAR WA_POS.
  MOVE-CORRESPONDING BSID  TO WA_POS.
*... CHECK ITEM AGAINST SELECTION FLAGS:
  PERFORM CHECK_ITEM_OK  USING X_NORM
                               X_SHBV
                               X_MERK
                               X_PARK
                               WA_POS
                         CHANGING OKAY.
  CHECK OKAY = 'X'.
*
  WA_POS-KOART = C_KOART_AR.
  WA_POS-KONTO = BSID-KUNNR.
  WA_POS-DMSHB = BSID-DMBTR.
  WA_POS-WRSHB = BSID-WRBTR.
  WA_BSEGP-BDIFF = BSID-BDIFF.
  WA_BSEGP-BDIF2 = BSID-BDIF2.
  WA_BSEGP-BDIF3 = BSID-BDIF3.
* DERIVE NONTRIVIAL ITEM FIELDS:
  CALL FUNCTION 'ITEM_DERIVE_FIELDS'
       EXPORTING
            S_T001    = IT_H_T001
            S_BSEGP   = WA_BSEGP
            KEY_DATE  = P_KEYDATE
*           XOPVW     = 'X'
            I_KALSM     = T005-KALSM
       CHANGING
            S_ITEM    = WA_POS
       EXCEPTIONS
            BAD_INPUT = 1
            OTHERS    = 2
            .
  IF SY-SUBRC NE 0.
    MESSAGE A022.
  ENDIF.
* CHECK AND MODIFY TEXT FIELD IN INTERNET CASE:
  IF NOT PA_INET IS INITIAL.
    IF WA_POS-SGTXT(1) NE '*'.
*     TAKE POSTING KEY TEXT:
      CLEAR WA_POS-SGTXT.
      SELECT SINGLE LTEXT FROM TBSLT INTO WA_POS-SGTXT
                    WHERE SPRAS = SY-LANGU
                    AND   BSCHL = WA_POS-BSCHL
                    AND   UMSKZ = WA_POS-UMSKZ.
    ELSE.
*     TAKE LINE ITEM TEXT:
      SHIFT WA_POS-SGTXT.
    ENDIF.
  ENDIF.
* FILL CURRENCY FIELDS:
  PERFORM ITEM_CURRENCY_FIELDS.
* CHECK DARK SELECT-OPTIONS AND ADD ITEM TO TABLE:
  PERFORM ITEM_CHECK_APPEND.
* CHECK MAX NUMBER:
  DESCRIBE TABLE IT_POS LINES N_LINES.
  IF PA_NMAX > 0 AND N_LINES GE PA_NMAX.
    P_STOP = 'X'.
    STOP.
  ENDIF.
ENDFORM.                    "POS_TABLE_FILL

*----------------------------------------------------------------------*
*      FORM  POS_TABLE_FILL_VENDOR
*----------------------------------------------------------------------*
FORM POS_TABLE_FILL_VENDOR  CHANGING  P_STOP.
  DATA: TEXT_INDEX TYPE I,
        OKAY       TYPE C VALUE SPACE.

  CLEAR WA_POS.
  MOVE-CORRESPONDING BSIK  TO WA_POS.
*... CHECK ITEM AGAINST SELECTION FLAGS:
  PERFORM CHECK_ITEM_OK  USING X_NORM
                               X_SHBV
                               X_MERK
                               X_PARK
                               WA_POS
                         CHANGING OKAY.
  CHECK OKAY = 'X'.
*
  WA_POS-KOART = 'K'.
  WA_POS-KONTO = KNA1-LIFNR.
  WA_POS-DMSHB = BSIK-DMBTR.
  WA_POS-WRSHB = BSIK-WRBTR.
  WA_BSEGP-BDIFF = BSIK-BDIFF.
  WA_BSEGP-BDIF2 = BSIK-BDIF2.
  WA_BSEGP-BDIF3 = BSIK-BDIF3.
* DERIVE NONTRIVIAL ITEM FIELDS:
  CALL FUNCTION 'ITEM_DERIVE_FIELDS'
       EXPORTING
            S_T001    = IT_H_T001
            S_BSEGP   = WA_BSEGP
            KEY_DATE  = P_KEYDATE
*           XOPVW     = 'X'
            I_KALSM     = T005-KALSM
       CHANGING
            S_ITEM    = WA_POS
       EXCEPTIONS
            BAD_INPUT = 1
            OTHERS    = 2
            .
  IF SY-SUBRC NE 0.
    MESSAGE A022.
  ENDIF.
* CHECK AND MODIFY TEXT FIELD IN INTERNET CASE:
  IF NOT PA_INET IS INITIAL.
    IF WA_POS-SGTXT(1) NE '*'.
      CLEAR WA_POS-SGTXT.
    ELSE.
      SHIFT WA_POS-SGTXT.
    ENDIF.
  ENDIF.
* FILL CURRENCY FIELDS:
  PERFORM ITEM_CURRENCY_FIELDS.
* CHECK DARK SELECT-OPTIONS AND ADD ITEM TO TABLE:
  PERFORM ITEM_CHECK_APPEND.
* CHECK MAX NUMBER:
  DESCRIBE TABLE IT_POS LINES N_LINES.
  IF PA_NMAX > 0 AND N_LINES GE PA_NMAX.
    P_STOP = 'X'.
    STOP.
  ENDIF.
ENDFORM.                               " POS_TABLE_FILL_VENDOR

*&---------------------------------------------------------------------*
*&      FORM  KNA1_INFO_FILL
*&---------------------------------------------------------------------*
FORM KNA1_INFO_FILL.
  CLEAR IT_H_KNA1.
  MOVE-CORRESPONDING KNA1 TO IT_H_KNA1.
  INSERT TABLE IT_H_KNA1.
ENDFORM.                    "KNA1_INFO_FILL

*&---------------------------------------------------------------------*
*&      FORM  KNB1_INFO_FILL
*&---------------------------------------------------------------------*
FORM KNB1_INFO_FILL.
  CLEAR IT_H_KNB1.
  MOVE-CORRESPONDING KNB1 TO IT_H_KNB1.
  INSERT TABLE IT_H_KNB1.
* TABLE OF ACCOUNTS:
  PERFORM FILL_ACCT_TABLE  USING  C_KOART_AR
                                  KNB1-KUNNR
                                  KNB1-BUKRS
                                  KNA1-LIFNR
                                  KNA1-NAME1
                                  SPACE.
ENDFORM.                    "KNB1_INFO_FILL

*&---------------------------------------------------------------------*
*&      FORM  KNB1_CHECK_BRANCH
*&---------------------------------------------------------------------*
FORM KNB1_CHECK_BRANCH.
  DATA: LS_SELECTION    LIKE ADDR1_SEL,
        LS_BRANCH_ADDR  LIKE ADDR1_VAL,
        LS_CENTRAL_ADDR LIKE ADDR1_VAL,
        LS_KNA1         LIKE KNA1,
        LB_OKAY         TYPE C.
  DATA: LD_MANDT LIKE KNB1-MANDT.
  DATA: LD_BUKRS LIKE KNB1-BUKRS.
  DATA: LD_KNRZE LIKE KNB1-KNRZE.
  DATA: LD_TEXT(2) TYPE C.

  LOOP AT IT_H_KNB1 WHERE NOT KNRZE IS INITIAL.
    IF PA_CENT NE 'N'.
      LD_MANDT = IT_H_KNB1-MANDT.
      LD_BUKRS = IT_H_KNB1-BUKRS.
      LD_KNRZE = IT_H_KNB1-KNRZE.
      READ TABLE IT_H_KNB1 WITH KEY MANDT = LD_MANDT
                                    KUNNR = LD_KNRZE
                                    BUKRS = LD_BUKRS
           BINARY SEARCH
           TRANSPORTING NO FIELDS.
      IF SY-SUBRC = 0.
        CONTINUE.
      ELSE.
        CLEAR IT_CENTRAL.
        IF PA_CENT IS INITIAL.
*         CHECK PERMANENT USER SETTING:
          GET PARAMETER ID 'FIT_BRANCH' FIELD LD_TEXT.
          IF LD_TEXT+1(1) = 'X'.
*           'NEVER AGAIN' CASE:
            LB_OKAY = LD_TEXT(1).
          ELSE.
*           GET CENTRAL ADDRESS RECORD FOR BRANCH ACCOUNT:
            READ TABLE IT_H_KNA1 WITH KEY MANDT = IT_H_KNB1-MANDT
                                          KUNNR = IT_H_KNB1-KUNNR
                                          BINARY SEARCH.
            IF SY-SUBRC = 0.
              LS_SELECTION-ADDRNUMBER = IT_H_KNA1-ADRNR.
              CALL FUNCTION 'ADDR_GET'
                EXPORTING
                  ADDRESS_SELECTION = LS_SELECTION
                IMPORTING
                  ADDRESS_VALUE     = LS_BRANCH_ADDR
                EXCEPTIONS
                  PARAMETER_ERROR   = 1
                  OTHERS            = 2.
            ENDIF.
*           GET CENTRAL ADDRESS RECORD FOR CENTRAL ACCOUNT:
            SELECT SINGLE NAME1 ADRNR FROM KNA1
                                INTO CORRESPONDING FIELDS OF LS_KNA1
                                WHERE KUNNR = IT_H_KNB1-KNRZE.

            IF SY-SUBRC = 0.
              LS_SELECTION-ADDRNUMBER = LS_KNA1-ADRNR.
              CALL FUNCTION 'ADDR_GET'
                EXPORTING
                  ADDRESS_SELECTION = LS_SELECTION
                IMPORTING
                  ADDRESS_VALUE     = LS_CENTRAL_ADDR
                EXCEPTIONS
                  PARAMETER_ERROR   = 1
                  OTHERS            = 2.
            ENDIF.
*           SHOW POPUP:
            CALL FUNCTION 'FI_ITEMS_BRANCH_CENTRAL'
              EXPORTING
                ID_BRANCH_ACCT   = IT_H_KNB1-KUNNR
                ID_BRANCH_NAME1  = LS_BRANCH_ADDR-NAME1
                ID_CENTRAL_ACCT  = IT_H_KNB1-KNRZE
                ID_CENTRAL_NAME1 = LS_CENTRAL_ADDR-NAME1
                ID_BUKRS         = IT_H_KNB1-BUKRS
              IMPORTING
                EB_CENTRAL_ITEMS = LB_OKAY.

          ENDIF.
        ENDIF.
* RETURN TO SELECTION SCREEN, IF SELECTION IS CANCELLED IN BRANCH/HEAD
* POPUP:
        IF LB_OKAY = 'C'.
          PA_CENT = 'C'.
          CLEAR IT_CENTRAL.
          REFRESH IT_CENTRAL.
          EXIT.
        ENDIF.
* ADD ACCOUNT TO MEMORY, AND FILL CENTRAL ACCOUNT, IF REQUIRED:
        IF PA_CENT = 'Y' OR LB_OKAY = 'X'.
          IT_CENTRAL-CENTRAL = IT_H_KNB1-KNRZE.
        ENDIF.
        IT_CENTRAL-BRANCH  = IT_H_KNB1-KUNNR.
        IT_CENTRAL-BUKRS   = IT_H_KNB1-BUKRS.
        APPEND IT_CENTRAL.
      ENDIF.
    ENDIF.
  ENDLOOP.

ENDFORM.                    "KNB1_CHECK_BRANCH

*&---------------------------------------------------------------------*
*&      FORM  T001_INFO_FILL
*&---------------------------------------------------------------------*
FORM T001_INFO_FILL.

  READ TABLE IT_H_T001 WITH KEY MANDT = SY-MANDT
                                BUKRS = KNB1-BUKRS
                       BINARY SEARCH.
  IF SY-SUBRC NE 0.
    CLEAR: IT_H_T001.
    SELECT SINGLE * FROM T001 INTO IT_H_T001
        WHERE BUKRS = KNB1-BUKRS.
    INSERT TABLE IT_H_T001.

*    TABLE OF COMPANIES:
    PERFORM FILL_COMP_TABLE  USING  KNB1-BUKRS
                              IT_H_T001-WAERS
                              IT_H_T001-KKBER.
  ENDIF.

  IF WA_X001-BUKRS NE KNB1-BUKRS.
    CLEAR: WA_X001.
    CALL FUNCTION 'FI_CURRENCY_INFORMATION'
      EXPORTING
        I_BUKRS                = KNB1-BUKRS
      IMPORTING
        E_X001                 = WA_X001
      EXCEPTIONS
        CURRENCY_2_NOT_DEFINED = 1
        CURRENCY_3_NOT_DEFINED = 2
        OTHERS                 = 3.
    IF SY-SUBRC = 0.
* ?
    ENDIF.
  ENDIF.

ENDFORM.                    "T001_INFO_FILL

*&---------------------------------------------------------------------*
*&      FORM  MAP_SEL_TO_LDB
*&---------------------------------------------------------------------*
FORM MAP_SEL_TO_LDB.

  DATA: LD_STIDA LIKE SY-DATUM.

  CLEAR:   DD_AUGDT, DD_BUDAT, DD_OPOPT, DD_APOPT, DD_STIDA .
  REFRESH: DD_AUGDT, DD_BUDAT.

* DETERMINE WHETHER PARKED (XSTAV) AND/OR NORMAL ITEMS
* (XSTAN) MUST BE SELECTED BY THE LOG. DATABASE
  IF X_PARK = 'X'.
    B0SG-XSTAV = 'X'.
  ELSE.
    CLEAR B0SG-XSTAV.
  ENDIF.
  IF ( X_NORM = 'X' OR X_SHBV = 'X' OR X_MERK = 'X' ).
    B0SG-XSTAN = 'X'.
  ELSE.
    CLEAR B0SG-XSTAN.
  ENDIF.

* DETERMINE RELEVANT KEYDATES FOR THE SELECTION BY THE LOG. DATABASE
* (DD_STIDA)
  GET PARAMETER ID 'FI_STIDA' FIELD LD_STIDA.
  IF NOT LD_STIDA IS INITIAL AND SY-SUBRC EQ 0.
    PA_STIDA = LD_STIDA.
    SET PARAMETER ID 'FI_STIDA' FIELD '00000000'.
  ENDIF.
  CASE 'X'.
    WHEN X_OPSEL.
      IF PA_STIDA IS INITIAL.
        P_KEYDATE         = '99991231'.
        DD_STIDA          = '99991231'.
        B0SG-XNOPL        = 'X'.
      ELSE.
        P_KEYDATE         = PA_STIDA.
        DD_STIDA          = PA_STIDA.
      ENDIF.
      DD_OPOPT          = 'X'.

    WHEN X_AISEL.
      P_KEYDATE         = '99991231'.
      DD_STIDA          = '99991231'.
      DD_BUDAT[]        = SO_BUDAT[].
      DD_OPOPT          = 'X'.
      DD_APOPT          = 'X'.
  ENDCASE.
  PA_STIDA_DEFAULT = DD_STIDA.

* FOR READING FROM ARCHIVES:
* NUMBER OF ARCHIVED ITEMS AS I-MESSAGE:
  DD_IARCH = 'X'.
  DD_MEMOR = 'X'.

ENDFORM.                    "MAP_SEL_TO_LDB

*&---------------------------------------------------------------------*
*&      FORM  SET_PARAMETERS
*&---------------------------------------------------------------------*
FORM SET_PARAMETERS.
* SET GENERAL PARAMETERS:
  PERFORM SET_GENERAL_PARAM.
* SET ACC.TYPE SPECIFIC PARAMETERS:
  CLEAR: DD_KUNNR, DD_BUKRS.
  CLEAR: SO_WLKUN, SO_WLBUK.
  IF GD_WL_ON IS INITIAL.
    READ TABLE DD_KUNNR INDEX 1.
    IF SY-SUBRC = 0 AND DD_KUNNR-SIGN = 'I' AND DD_KUNNR-OPTION = 'EQ'
        AND NOT DD_KUNNR-LOW IS INITIAL.
      SET PARAMETER ID 'KUN' FIELD DD_KUNNR-LOW.
    ENDIF.
    READ TABLE DD_BUKRS INDEX 1.
    IF SY-SUBRC = 0 AND DD_BUKRS-SIGN = 'I' AND DD_BUKRS-OPTION = 'EQ'
        AND NOT DD_BUKRS-LOW IS INITIAL.
      SET PARAMETER ID 'BUK' FIELD DD_BUKRS-LOW.
    ENDIF.
    SET PARAMETER ID 'AVD' FIELD SPACE.
    SET PARAMETER ID 'AVB' FIELD SPACE.
  ELSE.
*   WORKLISTS SWITCHED ON:
    SET PARAMETER ID 'AVD' FIELD PA_WLKUN.
    SET PARAMETER ID 'AVB' FIELD PA_WLBUK.
    READ TABLE SO_WLKUN INDEX 1.
    IF SY-SUBRC = 0 AND SO_WLKUN-SIGN = 'I' AND SO_WLKUN-OPTION = 'EQ'
        AND NOT SO_WLKUN-LOW IS INITIAL.
      SET PARAMETER ID 'KUN' FIELD SO_WLKUN-LOW.
    ENDIF.
    READ TABLE SO_WLBUK INDEX 1.
    IF SY-SUBRC = 0 AND SO_WLBUK-SIGN = 'I' AND SO_WLBUK-OPTION = 'EQ'
        AND NOT SO_WLBUK-LOW IS INITIAL.
      SET PARAMETER ID 'BUK' FIELD SO_WLBUK-LOW.
    ENDIF.
  ENDIF.

* SET PARAMETERS FOR READING FROM ARCHIV
  GD_USEAR = DD_USEAR.
  GD_USEDB = DD_USEDB.
  GD_MEMOR = 'X'.

ENDFORM.                    "SET_PARAMETERS

*&---------------------------------------------------------------------*
*&      FORM  READ_VENDOR_ITEMS
*&---------------------------------------------------------------------*
FORM READ_VENDOR_ITEMS.
* PREPARE SELECTION SCREEN TABLE:
  PERFORM KDF_SELSCREEN.
  IF SY-SUBRC <> 0 .
    SY-SUBRC = 0.
    EXIT.
  ENDIF.
* PREPARE DYNAMIC SELECTIONS:
  PERFORM KDF_DYNAMICS.
* PREPARE CALLBACKS FOR LDB_PROCESS:
  PERFORM FILL_KDF_CALLBACK.
* EXPORT B0SG FLAGS FOR LDB
  EXPORT B0SG TO MEMORY ID 'KDF_B0SG'.
* READ LDB KDF:
  CALL FUNCTION 'LDB_PROCESS'
    EXPORTING
      LDBNAME                     = 'KDF'
      EXPRESSIONS                 = IT_DYN_TEXPR[]
    TABLES
      CALLBACK                    = IT_CALLBACK
      SELECTIONS                  = IT_SELSCREEN
    EXCEPTIONS
      LDB_SELECTIONS_ERROR        = 1
      LDB_SELECTIONS_NOT_ACCEPTED = 2
      FREE_SELECTIONS_ERROR       = 3
      CALLBACK_NO_EVENT           = 4
      CALLBACK_NO_PROGRAM         = 5
      CALLBACK_NO_CBFORM          = 6
      OTHERS                      = 7.
  IF SY-SUBRC NE 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ELSE.
    PERFORM IMPORT_ARCH_FROM_MEMORY.
  ENDIF.
ENDFORM.                               " READ_VENDOR_ITEMS

*&---------------------------------------------------------------------*
*&      FORM  READ_CENTRAL_ITEMS
*&---------------------------------------------------------------------*
FORM READ_CENTRAL_ITEMS.
* LOOP OVER ALL IDENTIFIED CENTRAL OFFICE ACCTS:
  LOOP AT IT_CENTRAL WHERE NOT CENTRAL IS INITIAL.
*   PREPARE SELECTION SCREEN TABLE:
    PERFORM DDF_SELSCREEN.
*   PREPARE DYNAMIC SELECTIONS:
    PERFORM DDF_DYNAMICS.
*   PREPARE CALLBACKS FOR LDB_PROCESS:
    PERFORM FILL_DDF_CALLBACK.
*   EXPORT B0SG FLAGS FOR LDB
    EXPORT B0SG TO MEMORY ID 'DDF_B0SG'.
*   READ LDB DDF:
    CALL FUNCTION 'LDB_PROCESS'
      EXPORTING
        LDBNAME                     = 'DDF'
        EXPRESSIONS                 = IT_DYN_TEXPR[]
      TABLES
        CALLBACK                    = IT_CALLBACK
        SELECTIONS                  = IT_SELSCREEN
      EXCEPTIONS
        LDB_NOT_REENTRANT           = 1
        LDB_INCORRECT               = 2
        LDB_ALREADY_RUNNING         = 3
        LDB_ERROR                   = 4
        LDB_SELECTIONS_ERROR        = 5
        LDB_SELECTIONS_NOT_ACCEPTED = 6
        FREE_SELECTIONS_ERROR       = 10
        CALLBACK_NO_EVENT           = 11
        CALLBACK_NODE_DUPLICATE     = 12
        CALLBACK_NO_PROGRAM         = 13
        CALLBACK_NO_CBFORM          = 14
        OTHERS                      = 17.
    IF SY-SUBRC = 0 .
      PERFORM IMPORT_ARCH_FROM_MEMORY.
    ENDIF.
  ENDLOOP.
ENDFORM.                               " READ_CENTRAL_ITEMS

*&---------------------------------------------------------------------*
*&      FORM  KDF_SELSCREEN
*&---------------------------------------------------------------------*
FORM KDF_SELSCREEN.

  TYPES:   BEGIN OF ACCCOCO,
             LIFNR LIKE KNA1-LIFNR,
             BUKRS LIKE KNB1-BUKRS,
           END OF ACCCOCO.
  DATA:    LD_SELECTIONS_OLD TYPE ACCCOCO.
  STATICS: ST_SELECTIONS_OLD TYPE SORTED TABLE OF ACCCOCO
           WITH UNIQUE KEY LIFNR BUKRS.

  LD_SELECTIONS_OLD-LIFNR = KNA1-LIFNR.
  LD_SELECTIONS_OLD-BUKRS = KNB1-BUKRS.
  INSERT LD_SELECTIONS_OLD INTO TABLE ST_SELECTIONS_OLD.
  IF SY-SUBRC <> 0.
    EXIT.
  ELSE.
    REFRESH: IT_SELSCREEN.
* FILL SELECTIONS: FIRST SINGLE VALUES & PARAMETERS
    IT_SELSCREEN-SELNAME = 'KD_LIFNR'.
    IT_SELSCREEN-KIND    = 'S'.
    IT_SELSCREEN-SIGN    = 'I'.
    IT_SELSCREEN-OPTION  = 'EQ'.
    IT_SELSCREEN-LOW     = KNA1-LIFNR.
    APPEND IT_SELSCREEN.
    CLEAR IT_SELSCREEN.
    IT_SELSCREEN-SELNAME = 'KD_BUKRS'.
    IT_SELSCREEN-KIND    = 'S'.
    IT_SELSCREEN-SIGN    = 'I'.
    IT_SELSCREEN-OPTION  = 'EQ'.
    IT_SELSCREEN-LOW     = KNB1-BUKRS.
    APPEND IT_SELSCREEN.
    CLEAR IT_SELSCREEN.
    IT_SELSCREEN-SELNAME = 'KD_OPOPT'.
    IT_SELSCREEN-KIND    = 'P'.
    IT_SELSCREEN-SIGN    = 'I'.
    IT_SELSCREEN-OPTION  = 'EQ'.
    IT_SELSCREEN-LOW     = DD_OPOPT.
    APPEND IT_SELSCREEN.
    CLEAR IT_SELSCREEN.
    IT_SELSCREEN-SELNAME = 'KD_APOPT'.
    IT_SELSCREEN-KIND    = 'P'.
    IT_SELSCREEN-SIGN    = 'I'.
    IT_SELSCREEN-OPTION  = 'EQ'.
    IT_SELSCREEN-LOW     = DD_APOPT.
    APPEND IT_SELSCREEN.
    CLEAR IT_SELSCREEN.
    IT_SELSCREEN-SELNAME = 'KD_STIDA'.
    IT_SELSCREEN-KIND    = 'P'.
    IT_SELSCREEN-SIGN    = 'I'.
    IT_SELSCREEN-OPTION  = 'EQ'.
    IT_SELSCREEN-LOW     = DD_STIDA.
    APPEND IT_SELSCREEN.
* NOW SELECT OPTION TABLES:
    LOOP AT DD_AUGDT.
      CLEAR IT_SELSCREEN.
      IT_SELSCREEN-SELNAME = 'KD_AUGDT'.
      IT_SELSCREEN-KIND    = 'S'.
      MOVE-CORRESPONDING DD_AUGDT TO IT_SELSCREEN.
      APPEND IT_SELSCREEN.
    ENDLOOP.
    LOOP AT DD_BUDAT.
      CLEAR IT_SELSCREEN.
      IT_SELSCREEN-SELNAME = 'KD_BUDAT'.
      IT_SELSCREEN-KIND    = 'S'.
      MOVE-CORRESPONDING DD_BUDAT TO IT_SELSCREEN.
      APPEND IT_SELSCREEN.
    ENDLOOP.
    IF SY-SUBRC <> 0.
      SY-SUBRC = 0.
    ENDIF.

* PARAMETERS AND SELECT OPTIONS FOR ARCHIVES
    CLEAR IT_SELSCREEN.
    IT_SELSCREEN-SELNAME = 'KD_USEDB'.
    IT_SELSCREEN-KIND    = 'P'.
    IT_SELSCREEN-SIGN    = 'I'.
    IT_SELSCREEN-OPTION  = 'EQ'.
    IT_SELSCREEN-LOW     = DD_USEDB.
    APPEND IT_SELSCREEN.
    CLEAR IT_SELSCREEN.
    IT_SELSCREEN-SELNAME = 'KD_USEAR'.
    IT_SELSCREEN-KIND    = 'P'.
    IT_SELSCREEN-SIGN    = 'I'.
    IT_SELSCREEN-OPTION  = 'EQ'.
    IT_SELSCREEN-LOW     = DD_USEAR.
    APPEND IT_SELSCREEN.
    CLEAR IT_SELSCREEN.
    IT_SELSCREEN-SELNAME = 'KD_USEAS'.
    IT_SELSCREEN-KIND    = 'P'.
    IT_SELSCREEN-SIGN    = 'I'.
    IT_SELSCREEN-OPTION  = 'EQ'.
    IT_SELSCREEN-LOW     = DD_USEAS.
    APPEND IT_SELSCREEN.
    IF NOT DD_FILES[] IS INITIAL.
      LOOP AT DD_FILES.
        CLEAR IT_SELSCREEN.
        IT_SELSCREEN-SELNAME = 'KD_FILES'.
        IT_SELSCREEN-KIND    = 'S'.
        MOVE-CORRESPONDING DD_FILES TO IT_SELSCREEN.
        APPEND IT_SELSCREEN.
      ENDLOOP.
    ENDIF.
    CLEAR IT_SELSCREEN.
    IT_SELSCREEN-SELNAME = 'KD_MEMOR'.
    IT_SELSCREEN-KIND    = 'P'.
    IT_SELSCREEN-SIGN    = 'I'.
    IT_SELSCREEN-OPTION  = 'EQ'.
    IT_SELSCREEN-LOW     = DD_MEMOR.
    APPEND IT_SELSCREEN.
    CLEAR IT_SELSCREEN.
    IT_SELSCREEN-SELNAME = 'KD_IARCH'.
    IT_SELSCREEN-KIND    = 'P'.
    IT_SELSCREEN-SIGN    = 'I'.
    IT_SELSCREEN-OPTION  = 'EQ'.
    IT_SELSCREEN-LOW     = DD_IARCH.
    APPEND IT_SELSCREEN.

    CLEAR IT_SELSCREEN.
    IT_SELSCREEN-SELNAME = 'KD_NOOAP'.
    IT_SELSCREEN-KIND    = 'P'.
    IT_SELSCREEN-SIGN    = 'I'.
    IT_SELSCREEN-OPTION  = 'EQ'.
    IT_SELSCREEN-LOW     = DD_NOOAP.
    APPEND IT_SELSCREEN.

  ENDIF.

ENDFORM.                               " KDF_SELSCREEN

*&---------------------------------------------------------------------*
*&      FORM  DDF_SELSCREEN
*&---------------------------------------------------------------------*
FORM DDF_SELSCREEN.

  REFRESH: IT_SELSCREEN.
* FILL SELECTIONS: FIRST SINGLE VALUES & PARAMETERS
  IT_SELSCREEN-SELNAME = 'DD_KUNNR'.
  IT_SELSCREEN-KIND    = 'S'.
  IT_SELSCREEN-SIGN    = 'I'.
  IT_SELSCREEN-OPTION  = 'EQ'.
  IT_SELSCREEN-LOW     = IT_CENTRAL-CENTRAL.
  APPEND IT_SELSCREEN.
  CLEAR IT_SELSCREEN.
  IT_SELSCREEN-SELNAME = 'DD_BUKRS'.
  IT_SELSCREEN-KIND    = 'S'.
  IT_SELSCREEN-SIGN    = 'I'.
  IT_SELSCREEN-OPTION  = 'EQ'.
  IT_SELSCREEN-LOW     = IT_CENTRAL-BUKRS.
  APPEND IT_SELSCREEN.
  CLEAR IT_SELSCREEN.
  IT_SELSCREEN-SELNAME = 'DD_OPOPT'.
  IT_SELSCREEN-KIND    = 'P'.
  IT_SELSCREEN-SIGN    = 'I'.
  IT_SELSCREEN-OPTION  = 'EQ'.
  IT_SELSCREEN-LOW     = DD_OPOPT.
  APPEND IT_SELSCREEN.
  CLEAR IT_SELSCREEN.
  IT_SELSCREEN-SELNAME = 'DD_APOPT'.
  IT_SELSCREEN-KIND    = 'P'.
  IT_SELSCREEN-SIGN    = 'I'.
  IT_SELSCREEN-OPTION  = 'EQ'.
  IT_SELSCREEN-LOW     = DD_APOPT.
  APPEND IT_SELSCREEN.
  CLEAR IT_SELSCREEN.
  IT_SELSCREEN-SELNAME = 'DD_STIDA'.
  IT_SELSCREEN-KIND    = 'P'.
  IT_SELSCREEN-SIGN    = 'I'.
  IT_SELSCREEN-OPTION  = 'EQ'.
  IT_SELSCREEN-LOW     = DD_STIDA.
  APPEND IT_SELSCREEN.
* NOW SELECT OPTION TABLES:
  LOOP AT DD_AUGDT.
    CLEAR IT_SELSCREEN.
    IT_SELSCREEN-SELNAME = 'DD_AUGDT'.
    IT_SELSCREEN-KIND    = 'S'.
    MOVE-CORRESPONDING DD_AUGDT TO IT_SELSCREEN.
    APPEND IT_SELSCREEN.
  ENDLOOP.
  LOOP AT DD_BUDAT.
    CLEAR IT_SELSCREEN.
    IT_SELSCREEN-SELNAME = 'DD_BUDAT'.
    IT_SELSCREEN-KIND    = 'S'.
    MOVE-CORRESPONDING DD_BUDAT TO IT_SELSCREEN.
    APPEND IT_SELSCREEN.
  ENDLOOP.

* PARAMETERS AND SELECT OPTIONS FOR ARCHIVES
  CLEAR IT_SELSCREEN.
  IT_SELSCREEN-SELNAME = 'DD_USEDB'.
  IT_SELSCREEN-KIND    = 'P'.
  IT_SELSCREEN-SIGN    = 'I'.
  IT_SELSCREEN-OPTION  = 'EQ'.
  IT_SELSCREEN-LOW     = DD_USEDB.
  APPEND IT_SELSCREEN.
  CLEAR IT_SELSCREEN.
  IT_SELSCREEN-SELNAME = 'DD_USEAR'.
  IT_SELSCREEN-KIND    = 'P'.
  IT_SELSCREEN-SIGN    = 'I'.
  IT_SELSCREEN-OPTION  = 'EQ'.
  IT_SELSCREEN-LOW     = DD_USEAR.
  APPEND IT_SELSCREEN.
  CLEAR IT_SELSCREEN.
  IT_SELSCREEN-SELNAME = 'DD_USEAS'.
  IT_SELSCREEN-KIND    = 'P'.
  IT_SELSCREEN-SIGN    = 'I'.
  IT_SELSCREEN-OPTION  = 'EQ'.
  IT_SELSCREEN-LOW     = DD_USEAS.
  APPEND IT_SELSCREEN.
  IF NOT DD_FILES[] IS INITIAL.
    LOOP AT DD_FILES.
      CLEAR IT_SELSCREEN.
      IT_SELSCREEN-SELNAME = 'DD_FILES'.
      IT_SELSCREEN-KIND    = 'S'.
      MOVE-CORRESPONDING DD_FILES TO IT_SELSCREEN.
      APPEND IT_SELSCREEN.
    ENDLOOP.
  ENDIF.
  CLEAR IT_SELSCREEN.
  IT_SELSCREEN-SELNAME = 'DD_MEMOR'.
  IT_SELSCREEN-KIND    = 'P'.
  IT_SELSCREEN-SIGN    = 'I'.
  IT_SELSCREEN-OPTION  = 'EQ'.
  IT_SELSCREEN-LOW     = DD_MEMOR.
  APPEND IT_SELSCREEN.
  CLEAR IT_SELSCREEN.
  IT_SELSCREEN-SELNAME = 'DD_MEMOR'.
  IT_SELSCREEN-KIND    = 'P'.
  IT_SELSCREEN-SIGN    = 'I'.
  IT_SELSCREEN-OPTION  = 'EQ'.
  IT_SELSCREEN-LOW     = DD_MEMOR.
  APPEND IT_SELSCREEN.

  CLEAR IT_SELSCREEN.
  IT_SELSCREEN-SELNAME = 'DD_NOOAP'.
  IT_SELSCREEN-KIND    = 'P'.
  IT_SELSCREEN-SIGN    = 'I'.
  IT_SELSCREEN-OPTION  = 'EQ'.
  IT_SELSCREEN-LOW     = DD_NOOAP.
  APPEND IT_SELSCREEN.


ENDFORM.                               " DDF_SELSCREEN

*&---------------------------------------------------------------------*
*&      FORM  KDF_DYNAMICS
*&---------------------------------------------------------------------*
FORM KDF_DYNAMICS.
  DATA: RT_DYN_TRANGE  TYPE RSDS_TRANGE.

  REFRESH: IT_DYN_TEXPR.
* GET REPORT DYNAMIC SELECTIONS:
  CALL FUNCTION 'RS_REFRESH_FROM_DYNAMICAL_SEL'
    EXPORTING
      CURR_REPORT        = G_REPID
      MODE_WRITE_OR_MOVE = 'M'
    IMPORTING
      P_TRANGE           = RT_DYN_TRANGE
    EXCEPTIONS
      NOT_FOUND          = 1
      WRONG_TYPE         = 2
      OTHERS             = 3.
  IF SY-SUBRC NE 0.
    EXIT.
  ENDIF.
  DELETE RT_DYN_TRANGE WHERE TABLENAME NE 'BSID'.
  CALL FUNCTION 'FREE_SELECTIONS_RANGE_2_EX'
    EXPORTING
      FIELD_RANGES = RT_DYN_TRANGE
    IMPORTING
      EXPRESSIONS  = IT_DYN_TEXPR[].
* REPLACE TABLENAMES: CUSTOMER -> VENDOR
  LOOP AT IT_DYN_TEXPR.
    CASE IT_DYN_TEXPR-TABLENAME.
      WHEN 'KNA1'.
        IT_DYN_TEXPR-TABLENAME = 'LFA1'.
      WHEN 'KNB1'.
        IT_DYN_TEXPR-TABLENAME = 'LFB1'.
      WHEN 'BSID'.
        IT_DYN_TEXPR-TABLENAME = 'BSIK'.
      WHEN OTHERS.
        DELETE IT_DYN_TEXPR.
        CONTINUE.
    ENDCASE.
    MODIFY IT_DYN_TEXPR.
  ENDLOOP.

* CREATE DUMMY IF IT_DYN_TEXPR IS EMPTY, DUE TO TECHNICAL REASONS
* IN LDB RUNTIME ENVIRONMENT (REFRESH DYN_SEL)
  READ TABLE IT_DYN_TEXPR INDEX 1.
  IF SY-SUBRC NE 0.
     APPEND INITIAL LINE TO IT_DYN_TEXPR.
  ENDIF.

ENDFORM.                               " KDF_DYNAMICS

*&---------------------------------------------------------------------*
*&      FORM  DDF_DYNAMICS
*&---------------------------------------------------------------------*
FORM DDF_DYNAMICS.
  DATA: RT_DYN_TRANGE  TYPE RSDS_TRANGE,
        LS_EXPR        LIKE RSDSEXPR.

  REFRESH: IT_DYN_TEXPR,
           IT_DYN_TEXPR-EXPR_TAB.
* GET REPORT DYNAMIC SELECTIONS:
  CALL FUNCTION 'RS_REFRESH_FROM_DYNAMICAL_SEL'
    EXPORTING
      CURR_REPORT        = G_REPID
      MODE_WRITE_OR_MOVE = 'M'
    IMPORTING
      P_TRANGE           = RT_DYN_TRANGE
    EXCEPTIONS
      NOT_FOUND          = 1
      WRONG_TYPE         = 2
      OTHERS             = 3.
  IF SY-SUBRC > 1.
    EXIT.
  ENDIF.
  DELETE RT_DYN_TRANGE WHERE TABLENAME NE 'BSID'.
  CALL FUNCTION 'FREE_SELECTIONS_RANGE_2_EX'
    EXPORTING
      FIELD_RANGES = RT_DYN_TRANGE
    IMPORTING
      EXPRESSIONS  = IT_DYN_TEXPR[].
* ADD SELECTION: ITEMS BELONGING TO BRANCH
  IT_DYN_TEXPR-TABLENAME = 'BSID'.
  LS_EXPR-FIELDNAME = 'FILKD'.
  LS_EXPR-OPTION    = 'EQ'.
  LS_EXPR-LOW       = IT_CENTRAL-BRANCH.
  APPEND LS_EXPR TO IT_DYN_TEXPR-EXPR_TAB.
  APPEND IT_DYN_TEXPR.

ENDFORM.                               " DDF_DYNAMICS

*&---------------------------------------------------------------------*
*&      FORM  FILL_KDF_CALLBACK
*&---------------------------------------------------------------------*
FORM FILL_KDF_CALLBACK.
  REFRESH: IT_CALLBACK.

*  IT_CALLBACK-LDBNODE = 'LFA1'.                                "1144186
*  IT_CALLBACK-GET     = 'X'.                                   "1144186
*  IT_CALLBACK-CB_PROG = C_REPID_AR.                            "1144186
*  IT_CALLBACK-CB_FORM = 'CB_KDF_GET_LFA1'.                     "1144186
*  APPEND IT_CALLBACK.                                          "1144186

  IT_CALLBACK-LDBNODE = 'BSIK'.
  IT_CALLBACK-GET     = 'X'.
  IT_CALLBACK-CB_PROG = C_REPID_AR.
  IT_CALLBACK-CB_FORM = 'CB_KDF_GET_BSIK'.
  APPEND IT_CALLBACK.
ENDFORM.                               " FILL_KDF_CALLBACK

*&---------------------------------------------------------------------*
*&      FORM  FILL_DDF_CALLBACK
*&---------------------------------------------------------------------*
FORM FILL_DDF_CALLBACK.
  REFRESH: IT_CALLBACK.
*  IT_CALLBACK-LDBNODE = 'KNA1'.                                "1144186
*  IT_CALLBACK-GET     = 'X'.                                   "1144186
*  IT_CALLBACK-CB_PROG = C_REPID_AR.                            "1144186
*  IT_CALLBACK-CB_FORM = 'CB_DDF_GET_KNA1'.                     "1144186
*  APPEND IT_CALLBACK.                                          "1144186

  IT_CALLBACK-LDBNODE = 'BSID'.
  IT_CALLBACK-GET     = 'X'.
  IT_CALLBACK-CB_PROG = C_REPID_AR.
  IT_CALLBACK-CB_FORM = 'CB_DDF_GET_BSID'.
  APPEND IT_CALLBACK.
ENDFORM.                               " FILL_DDF_CALLBACK

*&---------------------------------------------------------------------*
*&      FORM  CB_KDF_GET_BSIK
*&---------------------------------------------------------------------*
FORM CB_KDF_GET_BSIK  USING  NAME     LIKE LDBN-LDBNODE
                             LS_BSIK  LIKE BSIK
                             MODE     TYPE C
                             SELECTED TYPE C.
  BSIK = LS_BSIK.
  PERFORM POS_TABLE_FILL_VENDOR  CHANGING  X_STOP.
ENDFORM.                               " CB_KDF_GET_BSIK

*&---------------------------------------------------------------------*
*&      FORM  CB_DDF_GET_BSID
*&---------------------------------------------------------------------*
FORM CB_DDF_GET_BSID  USING  NAME     LIKE LDBN-LDBNODE
                             LS_BSID  LIKE BSID
                             MODE     TYPE C
                             SELECTED TYPE C.
  BSID = LS_BSID.

* HWAER WOULD BE FILLED INCORRECT IN THE CASE THE IT_H_T001
* STANDS ON THE WRONG ENTRY
  IF BSID-BUKRS <> IT_H_T001-BUKRS.
    READ TABLE IT_H_T001 WITH KEY BUKRS = BSID-BUKRS.
  ENDIF.

* ATTENTION: CHANGE ACCOUNT NUMBER!!
  BSID-KUNNR = BSID-FILKD.
  PERFORM POS_TABLE_FILL  CHANGING  X_STOP.
ENDFORM.                               " CB_DDF_GET_BSID

*&---------------------------------------------------------------------*
*&      FORM  SET_ACCT_AND_CCODE
*&---------------------------------------------------------------------*
FORM SET_ACCT_AND_CCODE.

  REFRESH: DD_KUNNR, DD_BUKRS, SO_WLKUN, SO_WLBUK.
  CLEAR:   DD_KUNNR, DD_BUKRS, SO_WLKUN, SO_WLBUK,
           PA_WLKUN, PA_WLBUK.

  IF GD_WL_ON IS INITIAL.
    GET PARAMETER ID 'KUN' FIELD DD_KUNNR-LOW.
    IF SY-SUBRC = 0 AND NOT DD_KUNNR-LOW IS INITIAL.
      DD_KUNNR-SIGN   = 'I'.
      DD_KUNNR-OPTION = 'EQ'.
      APPEND DD_KUNNR.
    ENDIF.
    GET PARAMETER ID 'BUK' FIELD DD_BUKRS-LOW.
    IF SY-SUBRC = 0 AND NOT DD_BUKRS-LOW IS INITIAL.
      DD_BUKRS-SIGN   = 'I'.
      DD_BUKRS-OPTION = 'EQ'.
      APPEND DD_BUKRS.
    ENDIF.
  ELSE.
*   WORKLISTS SWITCHED ON:
    GET PARAMETER ID 'AVD' FIELD PA_WLKUN.
    GET PARAMETER ID 'AVB' FIELD PA_WLBUK.
    IF PA_WLKUN IS INITIAL.
      GET PARAMETER ID 'KUN' FIELD SO_WLKUN-LOW.
      IF SY-SUBRC = 0 AND NOT SO_WLKUN-LOW IS INITIAL.
        SO_WLKUN-SIGN   = 'I'.
        SO_WLKUN-OPTION = 'EQ'.
        APPEND SO_WLKUN.
      ENDIF.
    ENDIF.
    IF PA_WLBUK IS INITIAL.
      GET PARAMETER ID 'BUK' FIELD SO_WLBUK-LOW.
      IF SY-SUBRC = 0 AND NOT SO_WLBUK-LOW IS INITIAL.
        SO_WLBUK-SIGN   = 'I'.
        SO_WLBUK-OPTION = 'EQ'.
        APPEND SO_WLBUK.
      ENDIF.
    ENDIF.
  ENDIF.

ENDFORM.                               " SET_ACCT_AND_CCODE

*&---------------------------------------------------------------------*
*&     INCLUDE RFITEM_INC
*&---------------------------------------------------------------------*
INCLUDE RFITEM_INC.
*
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SAP剑客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值