*&---------------------------------------------------------------------*
*& Report ZUFI014
*&
*&---------------------------------------------------------------------*
*& Author : CHUNG NAM INTERNATIONAL CO.,LTD. DREEXU
*& Creation Date : 07.06.2010
*& Program Type : Executable Programs
*& Logical DB : [Nil]
*& Text Elements
*& (Titles&Headers) : [Nil]
*& (Selection Texts) : [Nil]
*& (Text symbols) : [Nil]
*& GUI Status : [Nil] OR [Standard]
*& Variants : [Nil] OR Variant
*& Message Class : [Nil]
*& Description :
*&
*&---------------------------------------------------------------------*
*& Modifications :
*& ID Date Programmer Description
*&
*&---------------------------------------------------------------------*
REPORT ZUFI014.
TABLES: TBSL,T001,SKB1,LFB1,KNB1,T052.
DATA: BEGIN OF IT_UPDATA OCCURS 0.
* --UPLOAD DATA
DATA: INV_DATE LIKE BKPF-BLDAT. "发票日期
DATA: DOC_TYPE LIKE BKPF-BLART. "凭证类型
DATA: CCDE LIKE BKPF-BUKRS. "公司代码
DATA: PST_DATE LIKE BKPF-BUDAT. "过账日期
DATA: CUR LIKE BKPF-WAERS. "货币
DATA: REF_NO LIKE BKPF-XBLNR. "参照
DATA: HD_TXT LIKE BKPF-BKTXT. "抬头文本
DATA: PK1 LIKE RF05A-NEWBS. "过账码1
DATA: ACCT1 LIKE RF05A-NEWKO. "会计科目1
DATA: SPGL LIKE RF05A-NEWUM. "特别总账标记
DATA: ZTERM LIKE BSEG-ZTERM. "Payment Key(付款条件)
DATA: ZBD1T LIKE BSEG-ZBD1T. "Cash discount days 1(天数)
DATA: ZFBDT LIKE BSEG-ZFBDT. "Baseline Date for Due Date Calculation(付款基准日期)
DATA: TAXCODE LIKE BSEG-MWSKZ. "税码
DATA: DUEON LIKE BSEG-ZFBDT. "到期日
DATA: FCAMT1 LIKE BSEG-WRBTR. "外币金额1
DATA: LCAMT1 LIKE BAPIACCR09-EXCH_RATE. "BSEG-DMBTR. "本币金额1(因參數問題,改為傳匯率)
DATA: ASSGN1 LIKE BSEG-ZUONR. "分配1
DATA: ITEM_TXT1 LIKE BSEG-SGTXT. "项目文本1
DATA: CCTR1 LIKE COBL-KOSTL. "成本中心1
DATA: PCTR1 LIKE COBL-PRCTR. "利润中心1
DATA: BUSAR1 LIKE COBL-GSBER. "业务范围1
DATA: PK2 LIKE RF05A-NEWBS. "过账码2
DATA: ACCT2 LIKE RF05A-NEWKO. "会计科目2
DATA: FCAMT2 LIKE BSEG-WRBTR. "外币2
DATA: LCAMT2 LIKE BAPIACCR09-EXCH_RATE. "BSEG-DMBTR. "本币2(因參數問題,改為傳匯率)
DATA: ASSGN2 LIKE BSEG-ZUONR. "分配2
DATA: ITEM_TXT2 LIKE BSEG-SGTXT. "项目文本2
DATA: CCTR2 LIKE COBL-KOSTL. "成本中心2
DATA: PCTR2 LIKE COBL-PRCTR. "利润中心2
DATA: BUSAR2 LIKE COBL-GSBER. "业务范围2
* --OTHER MESSAGE
DATA: AWKEY LIKE BKPF-AWKEY.
DATA: BELNR LIKE BKPF-BELNR. "Document Number(用戶可以根據這個在FB03查)
DATA: MTYPE LIKE BAPIRET2-TYPE.
DATA: MESS LIKE BAPIRET2-MESSAGE.
DATA: END OF IT_UPDATA.
DATA: gd_documentheader LIKE bapiache09,
it_accountgl LIKE TABLE OF bapiacgl09 WITH HEADER LINE,
it_currencyamount LIKE TABLE OF bapiaccr09 WITH HEADER LINE,
it_accvendap LIKE TABLE OF bapiacap09 WITH HEADER LINE,
it_acccustar LIKE TABLE OF bapiacar09 WITH HEADER LINE,
it_ext2 LIKE TABLE OF bapiparex WITH HEADER LINE,
it_return LIKE TABLE OF bapiret2 WITH HEADER LINE.
DATA: l_type LIKE gd_documentheader-obj_type,
l_key LIKE gd_documentheader-obj_key,
l_sys LIKE gd_documentheader-obj_sys.
TYPE-POOLS: SLIS.
DATA:GT_LAYOUT TYPE SLIS_LAYOUT_ALV.
DATA:T_EDITPOS TYPE TABLE OF CDRED WITH HEADER LINE.
DATA:WA_T_EDITPOS TYPE CDRED.
DATA:ET_RETURN TYPE TABLE OF BAPIRET2 WITH HEADER LINE.
DATA:T_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
W_FILEDCAT LIKE LINE OF T_FIELDCAT.
DATA:T_LISTHEADER TYPE SLIS_T_LISTHEADER,
W_LISTHEADER LIKE LINE OF T_LISTHEADER.
DATA:T_EVENT TYPE SLIS_T_EVENT,
W_EVENT LIKE LINE OF T_EVENT.
DATA:T_SORT TYPE SLIS_T_SORTINFO_ALV.
DATA:X_SORT LIKE LINE OF T_SORT.
*&---------------------------------------------------------------------*
*& SELECTION SCREEN
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK SEL1_B1 WITH FRAME TITLE TEXT-T01.
PARAMETERS: P_UFILE TYPE C LENGTH 128 DEFAULT 'C:/ZUFI014_TEMP.XLS' OBLIGATORY.
SELECTION-SCREEN SKIP.
"SELECTION-SCREEN BEGIN OF LINE.
parameters: p_storno like rfpdo3-allgstor default ' '. "
"SELECTION-SCREEN COMMENT 4(28) TEXT-P04.
parameters: st_budat like rfpdo-allgsdat modif id D1. "Buchungsdatum storno
"SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK SEL1_B1.
PARAMETERS: P_TEST AS CHECKBOX DEFAULT 'X'.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_UFILE.
PERFORM GET_F4_FILENAME USING P_UFILE.
*----------------------------------------------------------------------*
* INITIALIZATION
*----------------------------------------------------------------------*
INITIALIZATION.
CALL FUNCTION 'Z_REPORT_LIST'
EXPORTING
P_CPROG = SY-CPROG
P_UNAME = SY-UNAME
.
*----------------------------------------------------------------------*
* AT SELECTION-SCREEN OUTPUT
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
* TOP-OF-PAGE
*----------------------------------------------------------------------*
TOP-OF-PAGE.
END-OF-PAGE.
*----------------------------------------------------------------------*
* START-OF-SELECTION
*----------------------------------------------------------------------*
START-OF-SELECTION.
IF p_storno = 'X' AND st_budat IS INITIAL.
MESSAGE TEXT-E03 TYPE 'S' DISPLAY LIKE 'E'.
STOP.
ENDIF.
IF p_storno = 'X' AND st_budat+4(2) = '01'.
MESSAGE TEXT-E04 TYPE 'S' DISPLAY LIKE 'E'.
STOP.
ENDIF.
PERFORM CONTROL_FILENAME USING P_UFILE. "控制文件類型及存在與否(XLS)
PERFORM UPLOAD_DATA. "上載數據到內表
PERFORM AUTO_UPLOAD. "記帳/沖銷記錄
PERFORM SUB_CALL_ALV_FUNCTION. "ALV SHOW
END-OF-SELECTION.
******************************************************************************
* FORM: GET_F4_FILENAME
* DESC: 控制讀取文件類型
******************************************************************************
FORM GET_F4_FILENAME USING P_FILE_PATH.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
DEF_FILENAME = ''
DEF_PATH = 'C:/'
MASK = ',XLS(*.XLS),*.XLS.'
MODE = 'O'
* TITLE = ''
IMPORTING
FILENAME = P_FILE_PATH
* RC =
EXCEPTIONS
INV_WINSYS = 1
NO_BATCH = 2
SELECTION_CANCEL = 3
SELECTION_ERROR = 4
OTHERS = 5.
ENDFORM. "--GET_F4_FILENAME
******************************************************************************
* FORM: CONTROL_FILENAME
* DESC: 控制文件類型及存在與否(XLS)
******************************************************************************
FORM CONTROL_FILENAME USING P_FILE_PATH.
DATA: L_FILE TYPE C LENGTH 128,
L_TYPE TYPE C LENGTH 4,
L_EXIST TYPE C LENGTH 1,
L_LEN TYPE I.
CLEAR: L_FILE, L_TYPE, L_EXIST, L_LEN.
* 控制文件類型(XLS)
L_FILE = P_FILE_PATH.
TRANSLATE L_FILE TO UPPER CASE.
CONDENSE L_FILE.
"--P_FILE_PATH = L_FILE.
L_LEN = STRLEN( L_FILE ).
L_LEN = L_LEN - 4.
L_TYPE = L_FILE+L_LEN(4).
IF L_TYPE <> '.XLS'.
MESSAGE TEXT-M01 TYPE 'S' DISPLAY LIKE 'E'. "Please choose the correct upload filename !
STOP.
ENDIF.
* 控制文件存在與否
CALL FUNCTION 'TMP_GUI_GET_FILE_EXIST'
EXPORTING
FNAME = P_FILE_PATH
IMPORTING
EXIST = L_EXIST " X 表示存在
EXCEPTIONS
FILEINFO_ERROR = 1
OTHERS = 2.
IF L_EXIST <> 'X'.
MESSAGE TEXT-M02 TYPE 'S' DISPLAY LIKE 'E'.
STOP.
ENDIF.
* 提示數據正在處理中
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
PERCENTAGE = 100
TEXT = TEXT-S01.
ENDFORM. "--CONTROL_FILENAME
******************************************************************************
* FORM: UPLOAD_DATA
* DESC: 上載數據到內表
******************************************************************************
FORM ADD_PRE_ZERO USING PF_PRETEXT.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = PF_PRETEXT
IMPORTING
OUTPUT = PF_PRETEXT.
ENDFORM.
FORM DATA_CONVERT USING PF_VALUE PF_DATE.
CLEAR: PF_DATE.
CALL FUNCTION 'CONVERT_DATE_INPUT'
EXPORTING
INPUT = PF_VALUE
PLAUSIBILITY_CHECK = 'X'
IMPORTING
OUTPUT = PF_DATE
EXCEPTIONS
PLAUSIBILITY_CHECK_FAILED = 1
WRONG_FORMAT_IN_INPUT = 2
OTHERS = 3.
ENDFORM. "--DATA_CONVERT
FORM UPLOAD_DATA.
DATA: LT_LOAD LIKE ALSMEX_TABLINE OCCURS 0 WITH HEADER LINE.
* 讀EXCEL到內表
CLEAR: LT_LOAD, LT_LOAD[].
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
FILENAME = P_UFILE
I_BEGIN_COL = '1'
I_END_COL = '31'
I_BEGIN_ROW = '2'
I_END_ROW = '6000'
TABLES
INTERN = LT_LOAD
EXCEPTIONS
INCONSISTENT_PARAMETERS = 1
UPLOAD_OLE = 2
OTHERS = 3.
IF SY-SUBRC NE 0.
MESSAGE TEXT-M03 TYPE 'S' DISPLAY LIKE 'E'. "Upload Excel files was faild!
STOP.
ENDIF.
* 處理讀到內表LT_LOADDATA的數據
CLEAR: IT_UPDATA, IT_UPDATA[].
SORT LT_LOAD BY ROW COL.
LOOP AT LT_LOAD.
CASE LT_LOAD-COL.
WHEN '0001'. PERFORM DATA_CONVERT USING LT_LOAD-VALUE IT_UPDATA-INV_DATE. "IT_UPDATA-INV_DATE = LT_LOAD-VALUE.
WHEN '0002'. IT_UPDATA-DOC_TYPE = LT_LOAD-VALUE.
WHEN '0003'. IT_UPDATA-CCDE = LT_LOAD-VALUE.
WHEN '0004'. PERFORM DATA_CONVERT USING LT_LOAD-VALUE IT_UPDATA-PST_DATE. "IT_UPDATA-PST_DATE = LT_LOAD-VALUE.
WHEN '0005'. IT_UPDATA-CUR = LT_LOAD-VALUE.
TRANSLATE IT_UPDATA-CUR TO UPPER CASE.
WHEN '0006'. IT_UPDATA-REF_NO = LT_LOAD-VALUE.
WHEN '0007'. IT_UPDATA-HD_TXT = LT_LOAD-VALUE.
WHEN '0008'. IT_UPDATA-PK1 = LT_LOAD-VALUE.
WHEN '0009'. IT_UPDATA-ACCT1 = LT_LOAD-VALUE.
WHEN '0010'. IT_UPDATA-SPGL = LT_LOAD-VALUE.
WHEN '0011'. IT_UPDATA-ZTERM = LT_LOAD-VALUE.
WHEN '0012'. IT_UPDATA-ZBD1T = LT_LOAD-VALUE.
WHEN '0013'. PERFORM DATA_CONVERT USING LT_LOAD-VALUE IT_UPDATA-ZFBDT.
WHEN '0014'. IT_UPDATA-TAXCODE = LT_LOAD-VALUE.
WHEN '0015'. PERFORM DATA_CONVERT USING LT_LOAD-VALUE IT_UPDATA-DUEON. "IT_UPDATA-DUEON = LT_LOAD-VALUE.
WHEN '0016'. IT_UPDATA-FCAMT1 = LT_LOAD-VALUE.
WHEN '0017'. IT_UPDATA-LCAMT1 = LT_LOAD-VALUE.
WHEN '0018'. IT_UPDATA-ASSGN1 = LT_LOAD-VALUE.
WHEN '0019'. IT_UPDATA-ITEM_TXT1 = LT_LOAD-VALUE.
WHEN '0020'. IT_UPDATA-CCTR1 = LT_LOAD-VALUE.
PERFORM ADD_PRE_ZERO USING IT_UPDATA-CCTR1.
WHEN '0021'. IT_UPDATA-PCTR1 = LT_LOAD-VALUE.
PERFORM ADD_PRE_ZERO USING IT_UPDATA-PCTR1.
WHEN '0022'. IT_UPDATA-BUSAR1 = LT_LOAD-VALUE.
WHEN '0023'. IT_UPDATA-PK2 = LT_LOAD-VALUE.
WHEN '0024'. IT_UPDATA-ACCT2 = LT_LOAD-VALUE.
WHEN '0025'. IT_UPDATA-FCAMT2 = LT_LOAD-VALUE.
WHEN '0026'. IT_UPDATA-LCAMT2 = LT_LOAD-VALUE.
WHEN '0027'. IT_UPDATA-ASSGN2 = LT_LOAD-VALUE.
WHEN '0028'. IT_UPDATA-ITEM_TXT2 = LT_LOAD-VALUE.
WHEN '0029'. IT_UPDATA-CCTR2 = LT_LOAD-VALUE.
PERFORM ADD_PRE_ZERO USING IT_UPDATA-CCTR2.
WHEN '0030'. IT_UPDATA-PCTR2 = LT_LOAD-VALUE.
PERFORM ADD_PRE_ZERO USING IT_UPDATA-PCTR2.
WHEN '0031'. IT_UPDATA-BUSAR2 = LT_LOAD-VALUE.
WHEN OTHERS.
ENDCASE.
AT END OF ROW.
APPEND IT_UPDATA.
CLEAR IT_UPDATA.
ENDAT.
ENDLOOP.
IF IT_UPDATA[] IS INITIAL.
MESSAGE TEXT-M01 TYPE 'S' DISPLAY LIKE 'E'. "No Upload data!
STOP.
ENDIF.
ENDFORM. "--UPLOAD_DATA
******************************************************************************
* FORM: CONVERT_CURRENCY
* DESC: 求本位幣值
******************************************************************************
FORM CONVERT_CURRENCY USING F_MONEY
F_FORCUR
F_LOCCUR
F_RATE.
DATA: LA LIKE BSEG-WRBTR,
LC LIKE T001-WAERS,
FA LIKE BSEG-WRBTR,
FC LIKE T001-WAERS,
FR LIKE BAPIACCR09-EXCH_RATE,
TY LIKE TCURR-KURST.
FA = F_MONEY.
FC = F_FORCUR.
LC = F_LOCCUR.
TY = 'M'.
IF F_FORCUR <> F_LOCCUR.
CALL FUNCTION 'CONVERT_TO_LOCAL_CURRENCY'
EXPORTING
DATE = SY-DATUM
FOREIGN_AMOUNT = FA
FOREIGN_CURRENCY = FC
LOCAL_CURRENCY = LC
TYPE_OF_RATE = TY
IMPORTING
*** LOCAL_AMOUNT = LA
EXCHANGE_RATE = FR
EXCEPTIONS
NO_RATE_FOUND = 1
OTHERS = 2.
IF SY-SUBRC = 0.
*** F_MONEY = LA.
F_RATE = FR.
ENDIF.
ENDIF.
ENDFORM.
******************************************************************************
* FORM: FILL_IN_TABLES
* DESC: BAPI參數填充
******************************************************************************
FORM FILL_IN_TABLES USING PF_AUTOMESS.
data: WA_ZEXTEN LIKE ZEXTEN014.
PF_AUTOMESS = ''.
* ---初始化參數
CLEAR: gd_documentheader, it_accountgl, it_currencyamount, it_accvendap, it_acccustar, it_ext2, it_return.
CLEAR: it_accountgl[], it_currencyamount[], it_accvendap[], it_acccustar[], it_ext2[], it_return[].
SELECT SINGLE * FROM T001 WHERE BUKRS = IT_UPDATA-CCDE. "求取公司的本位幣
* ----gd_documentheader
gd_documentheader-USERNAME = SY-UNAME.
gd_documentheader-DOC_DATE = IT_UPDATA-INV_DATE.
gd_documentheader-DOC_TYPE = IT_UPDATA-DOC_TYPE.
gd_documentheader-COMP_CODE = IT_UPDATA-CCDE.
gd_documentheader-PSTNG_DATE = IT_UPDATA-PST_DATE.
gd_documentheader-REF_DOC_NO = IT_UPDATA-REF_NO.
gd_documentheader-HEADER_TXT = IT_UPDATA-HD_TXT.
gd_documentheader-bus_act = 'RFBU'.
* --根據IT_UPDATA-PK1&IT_UPDATA-PK2按借貸分別求參數
* >>>>IT_UPDATA-PK1>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>BEGIN
SELECT SINGLE * FROM TBSL WHERE BSCHL = IT_UPDATA-PK1. "求取post key的借or貸
IF TBSL-SHKZG = 'S'.
IT_UPDATA-FCAMT1 = ABS( IT_UPDATA-FCAMT1 ).
"IT_UPDATA-LCAMT1 = ABS( IT_UPDATA-LCAMT1 ).
ELSEIF TBSL-SHKZG = 'H'.
IT_UPDATA-FCAMT1 = ABS( IT_UPDATA-FCAMT1 ) * -1.
"IT_UPDATA-LCAMT1 = ABS( IT_UPDATA-LCAMT1 ) * -1.
ENDIF.
* >>----it_currencyamount(10)
it_currencyamount-ITEMNO_ACC = 10.
it_currencyamount-CURRENCY = IT_UPDATA-CUR.
it_currencyamount-AMT_DOCCUR = IT_UPDATA-FCAMT1.
IF T001-WAERS <> IT_UPDATA-CUR. "--不是本位幣時,求匯率(因參數問題,改為傳匯率)
IF IT_UPDATA-LCAMT1 IS NOT INITIAL.
it_currencyamount-EXCH_RATE = IT_UPDATA-LCAMT1.
ELSE. "如果用戶沒有錄入本位值,則取系統最近的匯率
PERFORM CONVERT_CURRENCY USING IT_UPDATA-FCAMT1 IT_UPDATA-CUR T001-WAERS it_currencyamount-EXCH_RATE.
ENDIF.
* IF IT_UPDATA-FCAMT1 <> 0 AND IT_UPDATA-LCAMT1 IS NOT INITIAL.
* it_currencyamount-EXCH_RATE = IT_UPDATA-LCAMT1 / IT_UPDATA-FCAMT1.
* ELSE. "如果用戶沒有錄入本位值,則取系統最近的匯率
* PERFORM CONVERT_CURRENCY USING IT_UPDATA-FCAMT1 IT_UPDATA-CUR T001-WAERS it_currencyamount-EXCH_RATE.
* ENDIF.
ENDIF.
APPEND it_currencyamount.
CLEAR it_currencyamount.
* >>----it_ext2(10)
CLEAR: WA_ZEXTEN.
WA_ZEXTEN-POSNR = 10. "凭证行项目
WA_ZEXTEN-BSCHL = IT_UPDATA-PK1. "post key1
IF TBSL-XSONU = 'X'.
WA_ZEXTEN-UMSKZ = IT_UPDATA-SPGL. "Special G/L Indicator
ENDIF.
it_ext2-STRUCTURE = 'ZEXTEN014'.
it_ext2-VALUEPART1 = WA_ZEXTEN.
APPEND it_ext2.
CLEAR it_ext2.
*CASE1
CASE TBSL-KOART.
WHEN 'K'. "VENDOR
* >>----it_accvendap(10)
it_accvendap-ITEMNO_ACC = 10.
it_accvendap-COMP_CODE = IT_UPDATA-CCDE.
it_accvendap-VENDOR_NO = IT_UPDATA-ACCT1.
PERFORM ADD_PRE_ZERO USING it_accvendap-VENDOR_NO. "前導加0
"-it_accvendap-GL_ACCOUNT = IT_UPDATA-ACCT1. "-'1310111010'
it_accvendap-SP_GL_IND = IT_UPDATA-SPGL.
it_accvendap-TAX_CODE = IT_UPDATA-TAXCODE.
IF TBSL-SHKZG = 'S'.
it_accvendap-BLINE_DATE = IT_UPDATA-DUEON.
ENDIF.
it_accvendap-ALLOC_NMBR = IT_UPDATA-ASSGN1.
it_accvendap-ITEM_TEXT = IT_UPDATA-ITEM_TXT1.
it_accvendap-BUS_AREA = IT_UPDATA-BUSAR1.
* ---LFB1
select single * from LFB1 where lifnr = it_accvendap-VENDOR_NO and
bukrs = IT_UPDATA-CCDE.
IF IT_UPDATA-ZTERM IS NOT INITIAL.
it_accvendap-PMNTTRMS = IT_UPDATA-ZTERM. "Payment Key
ELSE.
it_accvendap-PMNTTRMS = LFB1-ZTERM.
ENDIF.
select single * from T052 where zterm = LFB1-ZTERM.
IF IT_UPDATA-ZBD1T IS NOT INITIAL.
it_accvendap-DSCT_DAYS1 = IT_UPDATA-ZBD1T. "Cash discount days 1
ELSE.
it_accvendap-DSCT_DAYS1 = T052-ZTAG1.
ENDIF.
IF IT_UPDATA-ZFBDT IS NOT INITIAL.
it_accvendap-BLINE_DATE = IT_UPDATA-ZFBDT. "Baseline Date for Due Date Calculation
ELSE.
it_accvendap-BLINE_DATE = IT_UPDATA-INV_DATE. "--SY-DATUM.
ENDIF.
* --- end
APPEND it_accvendap.
CLEAR it_accvendap.
WHEN 'D'. "CUSTOMER
* >>----it_acccustar(10)
it_acccustar-ITEMNO_ACC = 10.
it_acccustar-COMP_CODE = IT_UPDATA-CCDE.
it_acccustar-CUSTOMER = IT_UPDATA-ACCT1.
PERFORM ADD_PRE_ZERO USING it_acccustar-CUSTOMER. "前導加0
"-it_acccustar-GL_ACCOUNT = IT_UPDATA-ACCT1.
it_acccustar-SP_GL_IND = IT_UPDATA-SPGL.
it_acccustar-TAX_CODE = IT_UPDATA-TAXCODE.
IF TBSL-SHKZG = 'S'.
it_acccustar-BLINE_DATE = IT_UPDATA-DUEON.
ENDIF.
it_acccustar-ALLOC_NMBR = IT_UPDATA-ASSGN1.
it_acccustar-ITEM_TEXT = IT_UPDATA-ITEM_TXT1.
it_acccustar-BUS_AREA = IT_UPDATA-BUSAR1.
* --KNB1
select single * from KNB1 where kunnr = it_acccustar-CUSTOMER and
bukrs = IT_UPDATA-CCDE.
IF IT_UPDATA-ZTERM IS NOT INITIAL.
it_acccustar-PMNTTRMS = IT_UPDATA-ZTERM. "Payment Key
ELSE.
it_acccustar-PMNTTRMS = KNB1-ZTERM.
ENDIF.
select single * from T052 where zterm = KNB1-ZTERM.
IF IT_UPDATA-ZBD1T IS NOT INITIAL.
it_acccustar-DSCT_DAYS1 = IT_UPDATA-ZBD1T. "Cash discount days 1
ELSE.
it_acccustar-DSCT_DAYS1 = T052-ZTAG1.
ENDIF.
IF IT_UPDATA-ZFBDT IS NOT INITIAL.
it_acccustar-BLINE_DATE = IT_UPDATA-ZFBDT. "Baseline Date for Due Date Calculation
ELSE.
it_acccustar-BLINE_DATE = IT_UPDATA-INV_DATE. "--SY-DATUM.
ENDIF.
* -- end
APPEND it_acccustar.
CLEAR it_acccustar.
WHEN OTHERS. "STANDARD(40/50)
SELECT SINGLE * FROM SKB1 WHERE BUKRS = IT_UPDATA-CCDE AND
SAKNR = IT_UPDATA-ACCT1.
* >>----it_accountgl(10)
it_accountgl-ITEMNO_ACC = 10.
it_accountgl-GL_ACCOUNT = IT_UPDATA-ACCT1.
it_accountgl-ALLOC_NMBR = IT_UPDATA-ASSGN1.
it_accountgl-ITEM_TEXT = IT_UPDATA-ITEM_TXT1.
it_accountgl-COSTCENTER = IT_UPDATA-CCTR1.
it_accountgl-PROFIT_CTR = IT_UPDATA-PCTR1.
it_accountgl-BUS_AREA = IT_UPDATA-BUSAR1.
IF SKB1-MWSKZ IS NOT INITIAL. "會計科目需不需要Tax code
it_accountgl-TAX_CODE = IT_UPDATA-TAXCODE.
ENDIF.
IF SKB1-XINTB = 'X'.
CONCATENATE '[' IT_UPDATA-ACCT1 ']' TEXT-E02 INTO PF_AUTOMESS.
ENDIF.
APPEND it_accountgl.
CLEAR it_accountgl.
ENDCASE.
*ENDCASE1
* >>>>IT_UPDATA-PK1>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>END
* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
* >>>>IT_UPDATA-PK2>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>BEGIN
SELECT SINGLE * FROM TBSL WHERE BSCHL = IT_UPDATA-PK2. "求取post key的借or貸
IF TBSL-SHKZG = 'S'.
IT_UPDATA-FCAMT2 = ABS( IT_UPDATA-FCAMT2 ).
"IT_UPDATA-LCAMT2 = ABS( IT_UPDATA-LCAMT2 ).
ELSEIF TBSL-SHKZG = 'H'.
IT_UPDATA-FCAMT2 = ABS( IT_UPDATA-FCAMT2 ) * -1.
"IT_UPDATA-LCAMT2 = ABS( IT_UPDATA-LCAMT2 ) * -1.
ENDIF.
* ----it_currencyamount(20)
it_currencyamount-ITEMNO_ACC = 20.
it_currencyamount-CURRENCY = IT_UPDATA-CUR.
it_currencyamount-AMT_DOCCUR = IT_UPDATA-FCAMT2.
*----
IF T001-WAERS <> IT_UPDATA-CUR. "--不是本位幣時,求匯率(因參數問題,改為傳匯率)
IF IT_UPDATA-LCAMT2 IS NOT INITIAL.
it_currencyamount-EXCH_RATE = IT_UPDATA-LCAMT2.
ELSE. "如果用戶沒有錄入本位值,則取系統最近的匯率
PERFORM CONVERT_CURRENCY USING IT_UPDATA-FCAMT2 IT_UPDATA-CUR T001-WAERS it_currencyamount-EXCH_RATE.
ENDIF.
* IF IT_UPDATA-FCAMT2 <> 0 AND IT_UPDATA-LCAMT2 IS NOT INITIAL.
* it_currencyamount-EXCH_RATE = IT_UPDATA-LCAMT2 / IT_UPDATA-FCAMT2.
* ELSE. "如果用戶沒有錄入本位值,則取系統最近的匯率
* PERFORM CONVERT_CURRENCY USING IT_UPDATA-FCAMT2 IT_UPDATA-CUR T001-WAERS it_currencyamount-EXCH_RATE.
* ENDIF.
ENDIF.
*----
APPEND it_currencyamount.
CLEAR it_currencyamount.
* >>----it_ext2(20)
CLEAR: WA_ZEXTEN.
WA_ZEXTEN-POSNR = 20. "凭证行项目
WA_ZEXTEN-BSCHL = IT_UPDATA-PK2. "post key2
IF TBSL-XSONU = 'X'.
WA_ZEXTEN-UMSKZ = IT_UPDATA-SPGL. "Special G/L Indicator
ENDIF.
"--WA_ZEXTEN-DMBTR = IT_UPDATA-LCAMT2. "---07/05
it_ext2-STRUCTURE = 'ZEXTEN014'.
it_ext2-VALUEPART1 = WA_ZEXTEN.
APPEND it_ext2.
CLEAR it_ext2.
*CASE2
CASE TBSL-KOART.
WHEN 'K'. "VENDOR
* >>----it_accvendap(20)
it_accvendap-ITEMNO_ACC = 20.
it_accvendap-COMP_CODE = IT_UPDATA-CCDE.
it_accvendap-VENDOR_NO = IT_UPDATA-ACCT2.
PERFORM ADD_PRE_ZERO USING it_accvendap-VENDOR_NO. "前導加0
"-it_accvendap-GL_ACCOUNT = IT_UPDATA-ACCT2.
it_accvendap-SP_GL_IND = IT_UPDATA-SPGL.
it_accvendap-TAX_CODE = IT_UPDATA-TAXCODE.
IF TBSL-SHKZG = 'S'.
it_accvendap-BLINE_DATE = IT_UPDATA-DUEON.
ENDIF.
it_accvendap-ALLOC_NMBR = IT_UPDATA-ASSGN2.
it_accvendap-ITEM_TEXT = IT_UPDATA-ITEM_TXT2.
it_accvendap-BUS_AREA = IT_UPDATA-BUSAR2.
* ---LFB1
select single * from LFB1 where lifnr = it_accvendap-VENDOR_NO and
bukrs = IT_UPDATA-CCDE.
IF IT_UPDATA-ZTERM IS NOT INITIAL.
it_accvendap-PMNTTRMS = IT_UPDATA-ZTERM. "Payment Key
ELSE.
it_accvendap-PMNTTRMS = LFB1-ZTERM.
ENDIF.
select single * from T052 where zterm = LFB1-ZTERM.
IF IT_UPDATA-ZBD1T IS NOT INITIAL.
it_accvendap-DSCT_DAYS1 = IT_UPDATA-ZBD1T. "Cash discount days 1
ELSE.
it_accvendap-DSCT_DAYS1 = T052-ZTAG1.
ENDIF.
IF IT_UPDATA-ZFBDT IS NOT INITIAL.
it_accvendap-BLINE_DATE = IT_UPDATA-ZFBDT. "Baseline Date for Due Date Calculation
ELSE.
it_accvendap-BLINE_DATE = IT_UPDATA-INV_DATE. "--SY-DATUM.
ENDIF.
* --- end
APPEND it_accvendap.
CLEAR it_accvendap.
WHEN 'D'. "CUSTOMER
* >>----it_acccustar(20)
it_acccustar-ITEMNO_ACC = 20.
it_acccustar-COMP_CODE = IT_UPDATA-CCDE.
it_acccustar-CUSTOMER = IT_UPDATA-ACCT2.
PERFORM ADD_PRE_ZERO USING it_acccustar-CUSTOMER. "前導加0
"-it_acccustar-GL_ACCOUNT = IT_UPDATA-ACCT2.
it_acccustar-SP_GL_IND = IT_UPDATA-SPGL.
it_acccustar-TAX_CODE = IT_UPDATA-TAXCODE.
IF TBSL-SHKZG = 'S'.
it_acccustar-BLINE_DATE = IT_UPDATA-DUEON.
ENDIF.
it_acccustar-ALLOC_NMBR = IT_UPDATA-ASSGN2.
it_acccustar-ITEM_TEXT = IT_UPDATA-ITEM_TXT2.
it_acccustar-BUS_AREA = IT_UPDATA-BUSAR2.
* --KNB1
select single * from KNB1 where kunnr = it_acccustar-CUSTOMER and
bukrs = IT_UPDATA-CCDE.
IF IT_UPDATA-ZTERM IS NOT INITIAL.
it_acccustar-PMNTTRMS = IT_UPDATA-ZTERM. "Payment Key
ELSE.
it_acccustar-PMNTTRMS = KNB1-ZTERM.
ENDIF.
select single * from T052 where zterm = KNB1-ZTERM.
IF IT_UPDATA-ZBD1T IS NOT INITIAL.
it_acccustar-DSCT_DAYS1 = IT_UPDATA-ZBD1T. "Cash discount days 1
ELSE.
it_acccustar-DSCT_DAYS1 = T052-ZTAG1.
ENDIF.
IF IT_UPDATA-ZFBDT IS NOT INITIAL.
it_acccustar-BLINE_DATE = IT_UPDATA-ZFBDT. "Baseline Date for Due Date Calculation
ELSE.
it_acccustar-BLINE_DATE = IT_UPDATA-INV_DATE. "--SY-DATUM.
ENDIF.
* -- end
APPEND it_acccustar.
CLEAR it_acccustar.
WHEN OTHERS. "STANDARD(40/50)
SELECT SINGLE * FROM SKB1 WHERE BUKRS = IT_UPDATA-CCDE AND
SAKNR = IT_UPDATA-ACCT2.
* >>----it_accountgl(20)
it_accountgl-ITEMNO_ACC = 20.
it_accountgl-GL_ACCOUNT = IT_UPDATA-ACCT2.
it_accountgl-ALLOC_NMBR = IT_UPDATA-ASSGN2.
it_accountgl-ITEM_TEXT = IT_UPDATA-ITEM_TXT2.
it_accountgl-COSTCENTER = IT_UPDATA-CCTR2.
it_accountgl-PROFIT_CTR = IT_UPDATA-PCTR2.
it_accountgl-BUS_AREA = IT_UPDATA-BUSAR2.
IF SKB1-MWSKZ IS NOT INITIAL. "會計科目需不需要Tax code
it_accountgl-TAX_CODE = IT_UPDATA-TAXCODE.
ENDIF.
IF SKB1-XINTB = 'X'.
CONCATENATE PF_AUTOMESS '[' IT_UPDATA-ACCT2 ']' TEXT-E02 INTO PF_AUTOMESS.
ENDIF.
APPEND it_accountgl.
CLEAR it_accountgl.
ENDCASE.
*ENDCASE2
* >>>>IT_UPDATA-PK2>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>END
ENDFORM.
******************************************************************************
* FORM: AUTO_UPLOAD_DATA
* DESC: 執行BAPI上載數據
******************************************************************************
FORM AUTO_UPLOAD_DATA.
data: L_AUTOMESS TYPE C LENGTH 100.
LOOP AT IT_UPDATA.
* ---BAPI參數填充,並且判定是否為"post automatically only" ,如果是,則不能建立會計憑証
PERFORM FILL_IN_TABLES USING L_AUTOMESS.
if L_AUTOMESS <> ''.
IT_UPDATA-MTYPE = '1'.
IT_UPDATA-MESS = L_AUTOMESS.
MODIFY IT_UPDATA.
CONTINUE.
endif.
IF IT_UPDATA-CCDE <> '3999' AND
IT_UPDATA-CCDE <> '3360' AND
IT_UPDATA-CCDE <> '3361' AND
IT_UPDATA-CCDE <> '3250' AND
IT_UPDATA-CCDE <> '3180'.
IT_UPDATA-MTYPE = '1'.
IT_UPDATA-MESS = '限定此程序只可上传3999、3360、3361、3250、3180法人的会计凭证'.
MODIFY IT_UPDATA.
CONTINUE.
ENDIF.
* ---執行BAPI上載數據
IF P_TEST <> 'X'.
CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST' "--'BAPI_ACC_GL_POSTING_POST'
EXPORTING
documentheader = gd_documentheader
IMPORTING
obj_type = l_type
obj_key = l_key
obj_sys = l_sys
TABLES
accountgl = it_accountgl
currencyamount = it_currencyamount
accountpayable = it_accvendap
accountreceivable = it_acccustar
extension2 = it_ext2
return = it_return.
if sy-subrc = 0.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
endif.
ELSE. "For testing
CALL FUNCTION 'BAPI_ACC_DOCUMENT_CHECK'
EXPORTING
documentheader = gd_documentheader
TABLES
accountgl = it_accountgl
currencyamount = it_currencyamount
accountpayable = it_accvendap
accountreceivable = it_acccustar
extension2 = it_ext2
return = it_return.
ENDIF.
* ---取得錯誤信息
IF IT_RETURN[] IS NOT INITIAL.
READ TABLE IT_RETURN WITH KEY TYPE = 'E'.
IF SY-SUBRC = 0.
READ TABLE IT_RETURN INDEX 2. "真正返回錯誤信息
IT_UPDATA-MTYPE = '1'. "IT_RETURN-TYPE.
IT_UPDATA-MESS = IT_RETURN-MESSAGE.
ELSE.
READ TABLE IT_RETURN WITH KEY TYPE = 'S'.
IF SY-SUBRC = 0.
IT_UPDATA-MTYPE = '3'. "IT_RETURN-TYPE.
IT_UPDATA-AWKEY = IT_RETURN-MESSAGE_V2.
IT_UPDATA-BELNR = IT_RETURN-MESSAGE_V2. "Document Number{IT_RETURN-MESSAGE_V2+0(10)}
IT_UPDATA-MESS = IT_RETURN-MESSAGE.
ENDIF.
ENDIF.
ELSE.
IT_UPDATA-MTYPE = '1'.
IT_UPDATA-MESS = TEXT-E01. "Empty message
ENDIF.
* ---MODIFY
MODIFY IT_UPDATA.
ENDLOOP.
ENDFORM.
******************************************************************************
* FORM: AUTO_UPLOAD
* DESC: 記帳/沖銷記錄
******************************************************************************
FORM AUTO_UPLOAD.
DATA: L_INDEX LIKE SY-TABIX.
DATA: LT_REVER LIKE TABLE OF IT_UPDATA WITH HEADER LINE,
LT_UPDATA LIKE TABLE OF IT_UPDATA WITH HEADER LINE.
LT_REVER[] = IT_UPDATA[]. "IT_UPDATA先保存數據(沒有操作)
* ------(1)
PERFORM AUTO_UPLOAD_DATA. "--記帳 -->執行BAPI上載數據
* ------(2)
IF p_storno = 'X'.
LT_UPDATA[] = IT_UPDATA[]. "IT_UPDATA先保存起來(記帳操作)
IT_UPDATA[] = LT_REVER[]. "IT_UPDATA還原數據(沒有操作)
LOOP AT IT_UPDATA.
L_INDEX = SY-TABIX.
IT_UPDATA-PST_DATE = st_budat.
"修改記帳碼
SELECT SINGLE * FROM TBSL WHERE BSCHL = IT_UPDATA-PK1.
if sy-subrc = 0.
IT_UPDATA-PK1 = TBSL-STBSL.
else.
IT_UPDATA-PK1 = ''.
endif.
SELECT SINGLE * FROM TBSL WHERE BSCHL = IT_UPDATA-PK2.
if sy-subrc = 0.
IT_UPDATA-PK2 = TBSL-STBSL.
else.
IT_UPDATA-PK2 = ''.
endif.
MODIFY IT_UPDATA INDEX L_INDEX.
ENDLOOP.
PERFORM AUTO_UPLOAD_DATA. "--沖銷記帳 -->執行BAPI上載數據
LT_REVER[] = IT_UPDATA[].
IT_UPDATA[] = LT_UPDATA[].
APPEND LINES OF LT_REVER TO IT_UPDATA. "合並數據
ENDIF.
ENDFORM. "REVER_AUTO_UPLOAD
*-------------------------------ALV------------------------------------*
*&---------------------------------------------------------------------*
*& Form SUB_CALL_ALV_FUNCTION
*&---------------------------------------------------------------------*
*& Description: Show ALV Format
*----------------------------------------------------------------------*
FORM SUB_CALL_ALV_FUNCTION.
* Set ALV parameters for the program
PERFORM SUB_SET_PARAMETERS.
* add SORT
PERFORM SUB_SET_SORT.
* add event
PERFORM SUB_SET_EVENT.
** add the title
* PERFORM SUB_SET_REPORT_TITLE.
* Call ALV list function
PERFORM SUB_CALL_ALV_WITH_LIST TABLES IT_UPDATA.
ENDFORM. "SUB_CALL_ALV_FUNCTION
*&--------------------------------------------------------------------*
*& Form: SUB_SET_PARAMETERS *
*&--------------------------------------------------------------------*
*& Description:Set ALV parameters *
*&--------------------------------------------------------------------*
FORM SUB_SET_PARAMETERS.
* Set the fields which will be displayed into T_ FIELDCAT
PERFORM SUB_FIELD_DES USING 'INV_DATE' 'IT_UPDATA' '' '' '' TEXT-H01. "发票日期
PERFORM SUB_FIELD_DES USING 'DOC_TYPE' 'IT_UPDATA' '' '' '' TEXT-H02. "凭证类型
PERFORM SUB_FIELD_DES USING 'CCDE' 'IT_UPDATA' '' '' '' TEXT-H03. "公司代码
PERFORM SUB_FIELD_DES USING 'PST_DATE' 'IT_UPDATA' '' '' '' TEXT-H04. "过账日期
PERFORM SUB_FIELD_DES USING 'CUR' 'IT_UPDATA' '' '' '' TEXT-H05. "货币
PERFORM SUB_FIELD_DES USING 'REF_NO' 'IT_UPDATA' '' '' '' TEXT-H06. "参照
PERFORM SUB_FIELD_DES USING 'HD_TXT' 'IT_UPDATA' '' '' '' TEXT-H07. "抬头文本
PERFORM SUB_FIELD_DES USING 'PK1' 'IT_UPDATA' '' '' '' TEXT-H08. "过账码1
PERFORM SUB_FIELD_DES USING 'ACCT1' 'IT_UPDATA' '' '' '' TEXT-H09. "会计科目1
PERFORM SUB_FIELD_DES USING 'SPGL' 'IT_UPDATA' '' '' '' TEXT-H10. "特别总账标记
PERFORM SUB_FIELD_DES USING 'ZTERM' 'IT_UPDATA' '' '' '' TEXT-H29. "Payment Key(付款条件)
PERFORM SUB_FIELD_DES USING 'ZBD1T' 'IT_UPDATA' '' '' '' TEXT-H30. "Cash discount days 1(天数)
PERFORM SUB_FIELD_DES USING 'ZFBDT' 'IT_UPDATA' '' '' '' TEXT-H31. "Baseline Date for Due Date Calculation(付款基准日期)
PERFORM SUB_FIELD_DES USING 'TAXCODE' 'IT_UPDATA' '' '' '' TEXT-H25. "稅碼
PERFORM SUB_FIELD_DES USING 'DUEON' 'IT_UPDATA' '' '' '' TEXT-H26. "到期日
PERFORM SUB_FIELD_DES USING 'FCAMT1' 'IT_UPDATA' '' '' '' TEXT-H11. "外币金额1
PERFORM SUB_FIELD_DES USING 'LCAMT1' 'IT_UPDATA' '' '' '' TEXT-H12. "本币金额1(匯率1)
PERFORM SUB_FIELD_DES USING 'ASSGN1' 'IT_UPDATA' '' '' '' TEXT-H13. "分配1
PERFORM SUB_FIELD_DES USING 'ITEM_TXT1' 'IT_UPDATA' '' '' '' TEXT-H14. "项目文本1
PERFORM SUB_FIELD_DES USING 'CCTR1' 'IT_UPDATA' '' '' '' TEXT-H15. "成本中心1
PERFORM SUB_FIELD_DES USING 'PCTR1' 'IT_UPDATA' '' '' '' TEXT-H16. "利润中心1
PERFORM SUB_FIELD_DES USING 'BUSAR1' 'IT_UPDATA' '' '' '' TEXT-H27. "业务范围1
PERFORM SUB_FIELD_DES USING 'PK2' 'IT_UPDATA' '' '' '' TEXT-H17. "过账码2
PERFORM SUB_FIELD_DES USING 'ACCT2' 'IT_UPDATA' '' '' '' TEXT-H18. "会计科目2
PERFORM SUB_FIELD_DES USING 'FCAMT2' 'IT_UPDATA' '' '' '' TEXT-H19. "外币2
PERFORM SUB_FIELD_DES USING 'LCAMT2' 'IT_UPDATA' '' '' '' TEXT-H20. "本币2(匯率2)
PERFORM SUB_FIELD_DES USING 'ASSGN2' 'IT_UPDATA' '' '' '' TEXT-H21. "分配2
PERFORM SUB_FIELD_DES USING 'ITEM_TXT2' 'IT_UPDATA' '' '' '' TEXT-H22. "项目文本2
PERFORM SUB_FIELD_DES USING 'CCTR2' 'IT_UPDATA' '' '' '' TEXT-H23. "成本中心2
PERFORM SUB_FIELD_DES USING 'PCTR2' 'IT_UPDATA' '' '' '' TEXT-H24. "利润中心2
PERFORM SUB_FIELD_DES USING 'BUSAR2' 'IT_UPDATA' '' '' '' TEXT-H28. "业务范围2
* --OTHER MESSAGE
PERFORM SUB_FIELD_DES USING 'BELNR' 'IT_UPDATA' '' '' '' TEXT-H97. "Document Number(FB03)
PERFORM SUB_FIELD_DES USING 'MTYPE' 'IT_UPDATA' '' '' '' TEXT-H98.
PERFORM SUB_FIELD_DES USING 'MESS' 'IT_UPDATA' '' '' '' TEXT-H99.
ENDFORM. "SUB_SET_PARAMETERS
*&---------------------------------------------------------------------*
*& Form SUB_SET_SORT
*&---------------------------------------------------------------------*
FORM SUB_SET_SORT .
*** X_SORT-spos = '1'.
*** X_SORT-fieldname = 'FKTYP'.
**** X_SORT-UP = 'X'.
*** X_SORT-down = 'X'.
*** APPEND X_SORT TO T_SORT.
***
*** X_SORT-spos = '2'.
*** X_SORT-fieldname = 'VKORG'.
**** X_SORT-UP = 'X'.
*** X_SORT-down = 'X'.
*** APPEND X_SORT TO T_SORT.
ENDFORM. "SUB_SET_SORT
*&---------------------------------------------------------------------*
*& Form SUB_SET_EVENT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM SUB_SET_EVENT .
* DATA: C_FORMNAME_END_OF_PAGE TYPE SLIS_FORMNAME
* VALUE 'SUB_TOP_OF_PAGE' .
* CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
* EXPORTING
* I_LIST_TYPE = 0
* IMPORTING
* ET_EVENTS = T_EVENT.
* READ TABLE T_EVENT WITH KEY NAME = SLIS_EV_TOP_OF_PAGE
* INTO W_EVENT .
* IF SY-SUBRC = 0 .
* W_EVENT-FORM = C_FORMNAME_END_OF_PAGE .
* APPEND W_EVENT TO T_EVENT . "add form 'TOP_OF_PAGE' to the events,
* ENDIF. "perform the FORM 'to_of_page' .
ENDFORM. "SUB_SET_EVENT
FORM USER_COMMAND USING UCOMM LIKE SY-UCOMM SELFIELD TYPE SLIS_SELFIELD.
READ TABLE IT_UPDATA INDEX SELFIELD-TABINDEX.
CHECK SY-SUBRC = 0.
CASE UCOMM.
WHEN '&IC1'.
CASE SELFIELD-SEL_TAB_FIELD.
WHEN 'IT_UPDATA-BELNR'.
IF STRLEN( IT_UPDATA-BELNR ) >= 10.
SET PARAMETER ID 'BLN' FIELD IT_UPDATA-BELNR.
SET PARAMETER ID 'BUK' FIELD IT_UPDATA-AWKEY+10(4). "-010900002436112010
SET PARAMETER ID 'GJR' FIELD IT_UPDATA-AWKEY+14(4).
CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.
ENDIF.
ENDCASE.
ENDCASE.
ENDFORM.
*&--------------------------------------------------------------------*
*& Form: SUB_CALL_ALV_WITH_LIST *
*&--------------------------------------------------------------------*
*& Description:call ALV list function *
*&--------------------------------------------------------------------*
FORM SUB_CALL_ALV_WITH_LIST TABLES T_RESULT.
IF T_RESULT[] IS INITIAL."no data
* Display message 'no data
MESSAGE S000(ZBA) WITH 'NO Data!'.
ELSE.
* SORT IT_RESULT BY PRUEFLOS MATNR.
* You can call ALV list or ALV Grid list(one of the two functions)
* CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
* EXPORTING
** I_INTERFACE_CHECK = ' '
** I_BYPASSING_BUFFER =
** I_BUFFER_ACTIVE = ' '
* I_CALLBACK_PROGRAM = SY-REPID
** I_CALLBACK_PF_STATUS_SET = ' '
** I_CALLBACK_USER_COMMAND = ' '
** I_STRUCTURE_NAME =
** IS_LAYOUT =
* IT_FIELDCAT = T_FIELDCAT
** IT_EXCLUDING =
** IT_SPECIAL_GROUPS =
* IT_SORT = T_SORT
** IT_FILTER =
** IS_SEL_HIDE =
** I_DEFAULT = 'X'
* I_SAVE = 'A'
** IS_VARIANT =
** IT_EVENTS = T_EVENT
** IT_EVENT_EXIT =
** IS_PRINT =
** IS_REPREP_ID =
** I_SCREEN_START_COLUMN = 0
** I_SCREEN_START_LINE = 0
** I_SCREEN_END_COLUMN = 0
** I_SCREEN_END_LINE = 0
** IMPORTING
** E_EXIT_CAUSED_BY_CALLER =
** ES_EXIT_CAUSED_BY_USER =
* TABLES
* T_OUTTAB = T_RESULT
* EXCEPTIONS
* PROGRAM_ERROR = 1
* OTHERS = 2 .
* IF SY-SUBRC NE 0.
* ENDIF.
*------------------------------------------------
* The report will call ALV GRID list to display data
GT_LAYOUT-ZEBRA = 'X'.
GT_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
GT_LAYOUT-LIGHTS_FIELDNAME = 'MTYPE'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
* I_INTERFACE_CHECK = ' '
* I_BYPASSING_BUFFER = ' '
* I_BUFFER_ACTIVE = ' '
I_CALLBACK_PROGRAM = SY-REPID "--SY-CPROG
* I_CALLBACK_PF_STATUS_SET = ' '
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
* I_CALLBACK_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_END_OF_LIST = ' '
* I_STRUCTURE_NAME =
* I_BACKGROUND_ID = ' '
* I_GRID_TITLE =
* I_GRID_SETTINGS =
IS_LAYOUT = GT_LAYOUT
IT_FIELDCAT = T_FIELDCAT
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
IT_SORT = T_SORT
* IT_FILTER =
* IS_SEL_HIDE =
* I_DEFAULT = 'X'
I_SAVE = 'A'
* IS_VARIANT =
IT_EVENTS = T_EVENT
* IT_EVENT_EXIT =
* IS_PRINT =
* IS_REPREP_ID =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* IT_ALV_GRAPHICS =
* IT_HYPERLINK =
* IT_ADD_FIELDCAT =
* IT_EXCEPT_QINFO =
* I_HTML_HEIGHT_TOP =
* I_HTML_HEIGHT_END =
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
T_OUTTAB = T_RESULT
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDIF.
ENDFORM. "SUB_CALL_ALV_WITH_LIST
*&--------------------------------------------------------------------*
*& Form: SUB_FIELD_DES *
*&--------------------------------------------------------------------*
*& Description: Set the fields which will be displayed *
*&--------------------------------------------------------------------*
*& L_FIELDNAME---must upper case *
*& L_TABNAME ---internal table name *
*& L_KEY ---column with key-color AND frozen *
*& L_CHECKBOX ---the column is checkbox *
*& L_INPUT ---the column can be edited in ALV list *
*& L_SELTEX_L ---column Long description of title *
*&--------------------------------------------------------------------*
FORM SUB_FIELD_DES USING L_FIELDNAME TYPE C
L_TABNAME TYPE C
L_KEY TYPE C
L_CHECKBOX TYPE C
L_INPUT TYPE C
L_SELTEX_L TYPE C. "L_OUTPUTLEN TYPE I
CLEAR W_FILEDCAT.
W_FILEDCAT-FIELDNAME = L_FIELDNAME."must upper case
W_FILEDCAT-TABNAME = L_TABNAME. "internal table name
W_FILEDCAT-KEY = L_KEY. "column with key-color AND frozen
W_FILEDCAT-CHECKBOX = L_CHECKBOX. "the column is checkbox
W_FILEDCAT-INPUT = L_INPUT. "the column can be edited in ALV
W_FILEDCAT-SELTEXT_L = L_SELTEX_L. "column Long title
W_FILEDCAT-DDICTXT = 'L'. "to show long title
APPEND W_FILEDCAT TO T_FIELDCAT.
ENDFORM. "SUB_FIELD_DES
ZUFI014會計憑証(VENDOR.CUSTOMER,GL)
最新推荐文章于 2023-02-02 17:20:58 发布