*&---------------------------------------------------------------------*
*& Report ZFIR098
*&---------------------------------------------------------------------*
*& Author : NathanSun
*& Create Date : 2018-11-30
*& Program Type : Report
*& Description : 预收款
*&---------------------------------------------------------------------*
REPORT ZFIR098.
*&---------------------------------------------------------------------*
*& 包含 ZFIR092_TOP
*&---------------------------------------------------------------------*
TABLES:ACDOCA,BKPF,EKKN,VBAP,KNA1,VBAK.
TYPE-POOLS:SLIS ,ICON .
"OOALV-DEFINITION
DATA GO_ALV_GRID TYPE REF TO CL_GUI_ALV_GRID.
DATA GO_ALV_GRID_SUB TYPE REF TO CL_GUI_ALV_GRID.
DATA LO_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
DATA OK_CODE TYPE SY-UCOMM.
DATA OK_SAVE TYPE SY-UCOMM.
DATA CONTROLS_CREATED.
DATA: GT_RETURN LIKE BAPIRET2 OCCURS 0 WITH HEADER LINE.
TYPES: BEGIN OF GTS_DATA,
AFLAG TYPE C, "选择列
BUKRS_VF TYPE VBAK-BUKRS_VF, "公司代码
KUNNR TYPE VBAK-KUNNR, "客户
NAME1 TYPE KNA1-NAME1, "客户名称
VBELN TYPE VBAK-VBELN, "销售订单
WAERK TYPE VBAK-WAERK, "货币
UMSKZ TYPE T074-UMSKZ, "SGL标志
SKONT TYPE T074-SKONT, "预收科目
WRBYS TYPE BSEG-WRBTR, "预收款
SAKYH TYPE SKA1-SAKNR, "银行科目
TXT20 TYPE SKAT-TXT20, "银行科目描述
FSFNS TYPE C, "是否缴税
WRBXX TYPE BSEG-WRBTR, "销项税
SAKXX TYPE SKA1-SAKNR, "销项税科目
RACQT TYPE SKA1-SAKNR, "其他应收科目
GZDAT TYPE DATS, "过账日期
GJAHR TYPE GJAHR, "会计年度
ZKJQJ TYPE NUMC2, "期间
BELNR TYPE ACDOCA-BELNR, "会计凭证号码
AWKEY TYPE AWKEY, "对象键值
END OF GTS_DATA.
DATA: GLAG_N TYPE C .
DATA: GLAG_E TYPE C .
DATA: GT_DATA TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATA: GT_DATA_A TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATA: GT_DATA_C TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATA: GT_ZTIR098 TYPE TABLE OF ZTIR098 WITH HEADER LINE.
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME .
PARAMETERS: P_BUKRS LIKE ACDOCA-RBUKRS MODIF ID P1 OBLIGATORY . "公司代码
SELECT-OPTIONS: S_KUNNR FOR KNA1-KUNNR MODIF ID S1, "客户
S_VBELN FOR VBAK-VBELN MODIF ID S1. "销售订单
SELECTION-SCREEN END OF BLOCK B1.
SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME .
PARAMETERS: P_CBOX1 AS CHECKBOX DEFAULT '' MODIF ID 01. "已预收SO
SELECTION-SCREEN END OF BLOCK B2.
*&---------------------------------------------------------------------*
*& 包含 ZFIR098_CLASS
*&---------------------------------------------------------------------*
*----------------------------------------------------------------------*
* CLASS DEMO DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS DEMO DEFINITION.
PUBLIC SECTION.
CLASS-METHODS:
MAIN.
ENDCLASS.
CLASS DEMO IMPLEMENTATION.
METHOD MAIN.
DATA(OUT) = CL_DEMO_OUTPUT=>NEW( ).
OUT->BEGIN_SECTION( `报错信息回执`
)->WRITE( GT_RETURN[] ).
OUT->DISPLAY( ).
ENDMETHOD.
ENDCLASS.
*----------------------------------------------------------------------*
* CLASS cl_event_receiver DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS CL_EVENT_RECEIVER DEFINITION.
PUBLIC SECTION.
" 声明单击事件的方法
METHODS HANDLE_HOTSPOT_CLICK
FOR EVENT HOTSPOT_CLICK OF CL_GUI_ALV_GRID
IMPORTING E_ROW_ID E_COLUMN_ID.
" 声明双击事件方法
METHODS HANDLE_DOUBLE_CLICK
FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID
IMPORTING E_ROW E_COLUMN.
" 声明TOOLBAR事件方法
METHODS HANDLE_TOOLBAR
FOR EVENT TOOLBAR OF CL_GUI_ALV_GRID
IMPORTING E_OBJECT E_INTERACTIVE.
" 声明USER-COMMAND 事件方法
METHODS HANDLE_COMMAND
FOR EVENT USER_COMMAND OF CL_GUI_ALV_GRID
IMPORTING E_UCOMM.
" 修改时触发
METHODS HANDLE_DATA_CHANGED
FOR EVENT DATA_CHANGED OF CL_GUI_ALV_GRID
IMPORTING ER_DATA_CHANGED.
" ENTE时触发
METHODS HANDLE_ENTE
FOR EVENT DATA_CHANGED_FINISHED OF CL_GUI_ALV_GRID
IMPORTING E_MODIFIED ET_GOOD_CELLS.
PRIVATE SECTION.
ENDCLASS. "CL_EVENT_RECEIVER DEFINITION
*----------------------------------------------------------------------*
* CLASS cl_event_receiver IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS CL_EVENT_RECEIVER IMPLEMENTATION.
" 单击事件方法的实现
METHOD HANDLE_HOTSPOT_CLICK.
ENDMETHOD. "HANDLE_HOTSPOT_CLICK
" 双击事件方法的实现
METHOD HANDLE_DOUBLE_CLICK.
GO_ALV_GRID_SUB->REFRESH_TABLE_DISPLAY( ).
ENDMETHOD. "HANDLE_DOUBLE_CLICK
" 实现TOOLBAR事件方法
METHOD HANDLE_TOOLBAR.
DATA: LS_TOOLBAR TYPE STB_BUTTON.
DELETE E_OBJECT->MT_TOOLBAR WHERE FUNCTION = '&PRINT_BACK'.
CLEAR: LS_TOOLBAR.
LS_TOOLBAR-BUTN_TYPE = 3. " 分隔符
APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.
CLEAR: LS_TOOLBAR.
LS_TOOLBAR-FUNCTION = 'BT_4'. "功能码
* LS_TOOLBAR-ICON = ICON_SIMULATE. " 图标名称
LS_TOOLBAR-TEXT = '全选'. " 按钮上显示的文本
LS_TOOLBAR-QUICKINFO = '全选'. " 图标的提示信息
LS_TOOLBAR-BUTN_TYPE = 0. " 0表示正常按钮
LS_TOOLBAR-DISABLED = ''. " X表示灰色,不可用
APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.
CLEAR: LS_TOOLBAR.
LS_TOOLBAR-FUNCTION = 'BT_5'. "功能码
* LS_TOOLBAR-ICON = ICON_ACTIVITY. " 图标名称
LS_TOOLBAR-TEXT = '取消全选'. " 按钮上显示的文本
LS_TOOLBAR-QUICKINFO = '取消全选'. " 图标的提示信息
LS_TOOLBAR-BUTN_TYPE = 0. " 0表示正常按钮
LS_TOOLBAR-DISABLED = ''. " X表示灰色,不可用
APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.
* CLEAR: LS_TOOLBAR.
* LS_TOOLBAR-FUNCTION = 'BT_3'. "功能码
** LS_TOOLBAR-ICON = ICON_ACTIVITY. " 图标名称
* LS_TOOLBAR-TEXT = '自动计算销项税'. " 按钮上显示的文本
* LS_TOOLBAR-QUICKINFO = '自动计算销项税'. " 图标的提示信息
* LS_TOOLBAR-BUTN_TYPE = 0. " 0表示正常按钮
* LS_TOOLBAR-DISABLED = ''. " X表示灰色,不可用
* APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.
CLEAR: LS_TOOLBAR.
LS_TOOLBAR-FUNCTION = 'BT_1'. "功能码
LS_TOOLBAR-ICON = ICON_SIMULATE. " 图标名称
LS_TOOLBAR-TEXT = '模拟过账'. " 按钮上显示的文本
LS_TOOLBAR-QUICKINFO = '模拟过账'. " 图标的提示信息
LS_TOOLBAR-BUTN_TYPE = 0. " 0表示正常按钮
LS_TOOLBAR-DISABLED = ''. " X表示灰色,不可用
APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.
CLEAR: LS_TOOLBAR.
LS_TOOLBAR-FUNCTION = 'BT_2'. "功能码
LS_TOOLBAR-ICON = ICON_ACTIVITY. " 图标名称
LS_TOOLBAR-TEXT = '正式过账'. " 按钮上显示的文本
LS_TOOLBAR-QUICKINFO = '正式过账'. " 图标的提示信息
LS_TOOLBAR-BUTN_TYPE = 0. " 0表示正常按钮
LS_TOOLBAR-DISABLED = ''. " X表示灰色,不可用
APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.
ENDMETHOD. "HANDLE_TOOLBAR
" 实现USER-COMMAND 事件方法
METHOD HANDLE_COMMAND.
DATA : LV_STABLE TYPE LVC_S_STBL. "刷新稳定性
LV_STABLE-ROW = '1'.
LV_STABLE-COL = '1'.
CASE E_UCOMM.
WHEN 'BT_1'.
CLEAR GT_RETURN[] .
PERFORM FRM_DATA_POST_T .
WHEN 'BT_2'.
IF GT_DATA_C[] IS NOT INITIAL .
CLEAR GT_RETURN[] .
PERFORM FRM_DATA_POST .
ELSEIF GLAG_N IS NOT INITIAL .
MESSAGE '模拟过账时出错!' TYPE 'S' DISPLAY LIKE 'E' .
ELSE .
MESSAGE '请先进行模拟过账!' TYPE 'S' DISPLAY LIKE 'E' .
ENDIF.
* WHEN 'BT_3'.
WHEN 'BT_4'.
PERFORM FRM_SELECT_ALL .
CALL METHOD GO_ALV_GRID->REFRESH_TABLE_DISPLAY
EXPORTING
IS_STABLE = LV_STABLE.
WHEN 'BT_5'.
PERFORM FRM_UNSELECT_ALL .
CALL METHOD GO_ALV_GRID->REFRESH_TABLE_DISPLAY
EXPORTING
IS_STABLE = LV_STABLE.
WHEN OTHERS.
ENDCASE.
ENDMETHOD. "HANDLE_COMMAND
" 实现DATA_CHANGED 事件方法
METHOD HANDLE_DATA_CHANGED.
ENDMETHOD. "handle_data_changed
" 实现ENTE 事件方法
METHOD HANDLE_ENTE.
DATA GS_LAYOUT_ALV TYPE LVC_S_LAYO.
* GO_ALV_GRID_SUB->REFRESH_TABLE_DISPLAY( ).
DATA : LV_STABLE TYPE LVC_S_STBL. "刷新稳定性
PERFORM FOM_REFRESH .
LV_STABLE-ROW = '1'.
LV_STABLE-COL = '1'.
GS_LAYOUT_ALV-CWIDTH_OPT = 'X'. "优化列宽
CALL METHOD GO_ALV_GRID->SET_FRONTEND_LAYOUT
EXPORTING
IS_LAYOUT = GS_LAYOUT_ALV.
CALL METHOD GO_ALV_GRID->REFRESH_TABLE_DISPLAY
EXPORTING
IS_STABLE = LV_STABLE.
CALL METHOD CL_GUI_CONTROL=>SET_FOCUS
EXPORTING
CONTROL = GO_ALV_GRID.
CALL METHOD CL_GUI_CFW=>FLUSH.
ENDMETHOD. "HANDLE_MODIFY
ENDCLASS. "cl_event_receiver IMPLEMENTATION
**------------------------------------------------------------------------------*
** 类定义-定时刷新 *
**------------------------------------------------------------------------------*
*CLASS LCL_RECEIVER DEFINITION.
* PUBLIC SECTION.
* METHODS:
* HANDLE_FINISHED FOR EVENT FINISHED OF CL_GUI_TIMER.
*ENDCLASS.
* DATA: RECEIVER TYPE REF TO LCL_RECEIVER,
* TIMER TYPE REF TO CL_GUI_TIMER.
*CLASS LCL_RECEIVER IMPLEMENTATION.
* METHOD HANDLE_FINISHED.
** PERFORM FOM_REFRESH .
* CALL METHOD CL_GUI_CFW=>SET_NEW_OK_CODE "触发pai ,usercommand里有刷新alv的代码
* EXPORTING
* NEW_CODE = 'REFRESH'.
** MESSAGE ID 'MO' TYPE 'S' NUMBER 429 .
* CALL METHOD TIMER->RUN.
* ENDMETHOD.
*ENDCLASS.
*
*CREATE OBJECT TIMER.
*CREATE OBJECT RECEIVER.
*SET HANDLER RECEIVER->HANDLE_FINISHED FOR TIMER.
*TIMER->INTERVAL = 600. "10分钟刷新一次
*CALL METHOD TIMER->RUN.
*
*PERFORM P_DISPLAY.
*
*CALL METHOD TIMER->RUN.
**------------------------------------------------------------------------------*
** 类定义-定时刷新 *
**------------------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
SET PF-STATUS 'PF_0100'.
SET TITLEBAR 'TITLE_0100'.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module CREATE_ALV OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE CREATE_ALV OUTPUT.
CHECK CONTROLS_CREATED IS INITIAL.
CALL METHOD CL_GUI_CFW=>FLUSH."触发SAP GUI更新界面
PERFORM FORM_INIT_0101. "实例化ALV_GRID
CONTROLS_CREATED = 'X'.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module CANCEL INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE CANCEL INPUT.
LEAVE PROGRAM .
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
OK_SAVE = SY-UCOMM .
CLEAR SY-UCOMM .
CLEAR OK_CODE .
CASE OK_SAVE.
WHEN 'BACK' .
LEAVE TO SCREEN 0 .
* WHEN 'DL' .
* PERFORM ole_fom .
WHEN OTHERS .
ENDCASE .
ENDMODULE.
*&---------------------------------------------------------------------*
*& 包含 ZFIR098_FOM
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form FRM_EXCLUDE_OPTION
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_EXCLUDE_OPTION .
ENDFORM.
*&---------------------------------------------------------------------*
*& Form SCREEN_OUTPUT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM SCREEN_OUTPUT .
ENDFORM.
*&---------------------------------------------------------------------*
*& Form SCREEN_SETTING
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM SCREEN_SETTING .
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FOM_GETDATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FOM_GETDATA .
CLEAR GT_DATA[] .
SELECT
VBAK~BUKRS_VF
VBAK~KUNNR
VBAK~VBELN
VBAK~WAERK
INTO CORRESPONDING FIELDS OF TABLE GT_DATA[]
FROM VBAK
WHERE VBAK~BUKRS_VF = P_BUKRS
AND VBAK~KUNNR IN S_KUNNR
AND VBAK~VBELN IN S_VBELN
AND VBAK~ABSTK <> 'C'
AND VBAK~ZYSBS = 'A'
.
*如果屏幕没有勾选checkbox:根据公司代码、客户、销售订单取自建表数据,排除这些销售订单。
IF P_CBOX1 IS INITIAL.
CLEAR GT_ZTIR098[].
SELECT * INTO CORRESPONDING FIELDS OF TABLE GT_ZTIR098[] FROM ZTIR098
WHERE BUKRS_VF = P_BUKRS
AND KUNNR IN S_KUNNR
AND VBELN IN S_VBELN
.
LOOP AT GT_DATA.
LOOP AT GT_ZTIR098 WHERE BUKRS_VF = GT_DATA-BUKRS_VF AND KUNNR = GT_DATA-KUNNR AND VBELN = GT_DATA-VBELN.
DELETE GT_DATA .
EXIT .
ENDLOOP.
ENDLOOP.
ENDIF.
LOOP AT GT_DATA.
**------------------------------
* GT_DATA-SAKYH = '6603010100' .
* GT_DATA-WRBYS = '300' .
* GT_DATA-WRBXX = '36' .
* GT_DATA-GZDAT = '20181203' .
**------------------------------
GT_DATA-FSFNS = 'X' .
GT_DATA-UMSKZ = 'A' .
GT_DATA-SAKXX = '2221010300' .
GT_DATA-RACQT = '1221090000' .
SELECT SINGLE
T074~SKONT
INTO GT_DATA-SKONT
FROM T074
INNER JOIN KNB1 ON T074~HKONT = KNB1~AKONT
WHERE KNB1~KUNNR = GT_DATA-KUNNR
AND KNB1~BUKRS = GT_DATA-BUKRS_VF
AND T074~KTOPL = 'CP11'
AND T074~KOART = 'D'
AND T074~UMSKZ = GT_DATA-UMSKZ
.
SELECT SINGLE NAME1 INTO GT_DATA-NAME1 FROM KNA1
WHERE KUNNR = GT_DATA-KUNNR
* AND SPRAS = 1
.
MODIFY GT_DATA.
CLEAR GT_DATA.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FORM_INIT_0101
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FORM_INIT_0101 .
DATA L_FCAT_CACHE TYPE LVC_T_FCAT.
DATA WA_LAYOUT_CACHE TYPE LVC_S_LAYO.
DATA WA_FIELD TYPE LVC_S_FCAT.
DATA LO_EVENT TYPE REF TO CL_EVENT_RECEIVER.
CREATE OBJECT LO_CONTAINER
EXPORTING
CONTAINER_NAME = 'CONT01'.
CREATE OBJECT GO_ALV_GRID
EXPORTING
I_PARENT = LO_CONTAINER.
DEFINE FILL_FIELD.
wa_field-fieldname = &1.
wa_field-coltext = &2.
IF wa_field-fieldname = 'FSFNS'
OR wa_field-fieldname = 'AFLAG'
.
wa_field-checkbox = 'X'.
wa_field-edit = 'X'.
ENDIF.
IF wa_field-fieldname = 'UMSKZ'
OR wa_field-fieldname = 'WRBYS'
OR wa_field-fieldname = 'SAKYH'
OR wa_field-fieldname = 'WRBXX'
OR wa_field-fieldname = 'GZDAT'
.
wa_field-edit = 'X'.
ENDIF.
IF wa_field-fieldname = 'GZDAT'.
wa_field-ref_table = 'VBAK'.
wa_field-ref_field = 'ERDAT'.
ENDIF.
IF wa_field-fieldname = 'SAKYH'.
wa_field-ref_table = 'SKA1'.
wa_field-ref_field = 'SAKNR'.
ENDIF.
IF wa_field-fieldname = 'WRBYS'
OR wa_field-fieldname = 'WRBXX'.
wa_field-ref_table = 'BSEG'.
wa_field-REF_FIELD = 'WRBTR'.
ENDIF.
*BSEG-WRBTR
APPEND wa_field TO l_fcat_cache .
CLEAR wa_field.
END-OF-DEFINITION.
FILL_FIELD :
'AFLAG' '选择',
'BUKRS_VF' '公司代码',
'KUNNR' '客户',
'NAME1' '客户名称',
'VBELN' '销售订单',
'WAERK' '货币',
'UMSKZ' 'SGL标志',
'SKONT' '预收科目',
'WRBYS' '预收款',
'SAKYH' '银行科目',
'TXT20' '银行科目描述',
'FSFNS' '是否缴税',
'WRBXX' '销项税',
'SAKXX' '销项税科目',
'RACQT' '其他应收科目',
'GZDAT' '过账日期',
'GJAHR' '会计年度',
'ZKJQJ' '期间',
'BELNR' '会计凭证号码'.
* 设置enter事件
CALL METHOD GO_ALV_GRID->REGISTER_EDIT_EVENT
EXPORTING
I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_ENTER
EXCEPTIONS
ERROR = 1
OTHERS = 2.
CREATE OBJECT LO_EVENT.
SET HANDLER LO_EVENT->HANDLE_TOOLBAR FOR GO_ALV_GRID.
SET HANDLER LO_EVENT->HANDLE_COMMAND FOR GO_ALV_GRID.
SET HANDLER LO_EVENT->HANDLE_ENTE FOR GO_ALV_GRID.
* SET HANDLER LO_EVENT->HANDLE_DATA_CHANGED FOR GO_ALV_GRID.
WA_LAYOUT_CACHE-CWIDTH_OPT = 'X'. "优化列宽
CALL METHOD GO_ALV_GRID->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
IS_LAYOUT = WA_LAYOUT_CACHE
CHANGING
IT_FIELDCATALOG = L_FCAT_CACHE
IT_OUTTAB = GT_DATA[].
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FOM_REFRESH
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FOM_REFRESH .
LOOP AT GT_DATA.
SELECT SINGLE
T074~SKONT
INTO GT_DATA-SKONT
FROM T074
INNER JOIN KNB1 ON T074~HKONT = KNB1~AKONT
WHERE KNB1~KUNNR = GT_DATA-KUNNR
AND KNB1~BUKRS = GT_DATA-BUKRS_VF
AND T074~KTOPL = 'CP11'
AND T074~KOART = 'D'
AND T074~UMSKZ = GT_DATA-UMSKZ
.
IF SY-SUBRC <> 0.
CLEAR GT_DATA-SKONT .
ENDIF.
*根据银行科目自动更新:语言=ZH、账目表=CP11
SELECT SINGLE TXT20 INTO GT_DATA-TXT20 FROM SKAT
WHERE SAKNR = GT_DATA-SAKYH
AND KTOPL = 'CP11'
AND SPRAS = '1'
.
IF SY-SUBRC <> 0.
CLEAR GT_DATA-TXT20 .
ENDIF.
GT_DATA-GJAHR = GT_DATA-GZDAT(4).
GT_DATA-ZKJQJ = GT_DATA-GZDAT+4(2).
MODIFY GT_DATA.
CLEAR GT_DATA.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DATA_POST_T
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_DATA_POST_T .
DATA:
TEMP_MONTH(2), "输入月份
HEADER_TXT(25), "取会计年月+固定文本“制费及研发费分摊”
TEMP_AUT_MSG(30),
LAST_DATA LIKE SY-DATUM, "一个月的最后一天
TEMP_OBJ_KEY TYPE AWKEY, "是否生成
HEADER LIKE BAPIACHE09 OCCURS 0 WITH HEADER LINE,
WA_ACCOUNTGL LIKE BAPIACGL09 OCCURS 0 WITH HEADER LINE,
LT_ACCOUNTGL TYPE STANDARD TABLE OF BAPIACGL09,
WA_CURRENCY_AMOUNT LIKE BAPIACCR09 OCCURS 0 WITH HEADER LINE,
LT_CURRENCY_AMOUNT TYPE STANDARD TABLE OF BAPIACCR09 WITH HEADER LINE,
IT_EXTENSION2 TYPE STANDARD TABLE OF BAPIPAREX WITH HEADER LINE,
LT_RETURN LIKE BAPIRET2 OCCURS 0 WITH HEADER LINE,
GST_RETURN LIKE BAPIRET2 OCCURS 0 WITH HEADER LINE,
LS_ZFI002 TYPE ZFI002,
FT_FLAG , "= ‘X'表示分摊过
LV_ANSWER(1),
TEMP_BWTAR_AUFNR LIKE AFPO-AUFNR.
DATA: GS_EXTENSION2 TYPE ZSFI_EXTEN, "会计凭证过账增强extension2
LT_EXTENSION2 TYPE TABLE OF BAPIPAREX WITH HEADER LINE. "返回参数
DATA: LV_OBJ_TYPE LIKE BAPIACHE09-OBJ_TYPE,
LV_OBJ_KEY LIKE BAPIACHE09-OBJ_KEY,
LV_OBJ_SYS LIKE BAPIACHE09-OBJ_SYS.
DATA: LV_DMBTR TYPE BAPIWRBTR,
LV_LINES TYPE SY-TABIX,
ZCOUNT TYPE SY-TABIX,
LV_WRBTR TYPE BSEG-WRBTR,
DO_POST TYPE CHAR1,
LS_EXTEN TYPE ZSFI_EXTEN.
DATA: LS_BKPF TYPE BKPF,
LS_REVERSAL TYPE BAPIACREV.
DATA: GV_OBJ_TYPE TYPE BAPIACHE09-OBJ_TYPE, "参考过程
GV_OBJ_KEY TYPE BAPIACHE09-OBJ_KEY, "对象键值
GV_OBJ_SYS TYPE BAPIACHE09-OBJ_SYS.
DATA LV_BELNR_01 TYPE BKPF-BELNR.
DATA LV_WAERS TYPE T001-WAERS.
DATA LV_FLAG TYPE C.
CLEAR LV_FLAG .
LOOP AT GT_DATA WHERE AFLAG = 'X' .
IF GT_DATA-UMSKZ IS INITIAL
OR GT_DATA-WRBYS IS INITIAL
OR GT_DATA-SAKYH IS INITIAL
OR GT_DATA-WRBXX IS INITIAL
OR GT_DATA-GZDAT IS INITIAL
.
LV_FLAG = 'X'.
EXIT .
ENDIF.
ENDLOOP.
IF LV_FLAG IS INITIAL.
CLEAR GST_RETURN[] .
LOOP AT GT_DATA WHERE AFLAG = 'X' .
* 会计凭证抬头数据
CLEAR HEADER.
HEADER-HEADER_TXT = '预收开票: ' && GT_DATA-NAME1. "凭证抬头文本
HEADER-COMP_CODE = GT_DATA-BUKRS_VF. "公司代码
HEADER-DOC_DATE = GT_DATA-GZDAT. "凭证日期
HEADER-PSTNG_DATE = GT_DATA-GZDAT. "凭证中的过帐日期
HEADER-USERNAME = SY-UNAME. "用户名
HEADER-DOC_TYPE = 'SA'. "凭证类型
HEADER-FISC_YEAR = GT_DATA-GZDAT(4). "财年
HEADER-FIS_PERIOD = GT_DATA-GZDAT+4(2). "会计期间
* 分录1,借方行项目信息:
ADD 1 TO LV_LINES.
CLEAR WA_CURRENCY_AMOUNT.
WA_CURRENCY_AMOUNT-ITEMNO_ACC = LV_LINES. "会计凭证行项目编号
WA_CURRENCY_AMOUNT-CURRENCY = GT_DATA-WAERK. "货币码
WA_CURRENCY_AMOUNT-AMT_DOCCUR = GT_DATA-WRBYS. "金额
APPEND WA_CURRENCY_AMOUNT TO LT_CURRENCY_AMOUNT .
CLEAR WA_ACCOUNTGL.
WA_ACCOUNTGL-ITEMNO_ACC = LV_LINES . "会计凭证行项目编号
WA_ACCOUNTGL-GL_ACCOUNT = GT_DATA-SAKYH. "科目
WA_ACCOUNTGL-ITEM_TEXT = '预收开票: ' && GT_DATA-NAME1. "项目文本
WA_ACCOUNTGL-CUSTOMER = GT_DATA-KUNNR. "客户
WA_ACCOUNTGL-REF_KEY_1 = GT_DATA-KUNNR. "业务伙伴参考码
WA_ACCOUNTGL-REF_KEY_1 = GT_DATA-KUNNR. "业务伙伴参考码
* WA_ACCOUNTGL-SALES_ORD = GT_DATA-VBELN. "销售订单
WA_ACCOUNTGL-ALLOC_NMBR = GT_DATA-VBELN . "分配号
APPEND WA_ACCOUNTGL TO LT_ACCOUNTGL.
CLEAR GS_EXTENSION2.
CLEAR LT_EXTENSION2.
GS_EXTENSION2-POSNR = LV_LINES. "会计凭证行项目编号
GS_EXTENSION2-BSCHL = '40'. "过账码
GS_EXTENSION2-RSTGR = '101'. "付款原因代码
LT_EXTENSION2-STRUCTURE = 'ZSFI_EXTEN'.
LT_EXTENSION2-VALUEPART1 = GS_EXTENSION2.
APPEND LT_EXTENSION2.
* 分录2,贷方行项目信息:
ADD 1 TO LV_LINES.
CLEAR WA_CURRENCY_AMOUNT.
WA_CURRENCY_AMOUNT-ITEMNO_ACC = LV_LINES. "会计凭证行项目编号
WA_CURRENCY_AMOUNT-CURRENCY = GT_DATA-WAERK. "货币码
WA_CURRENCY_AMOUNT-AMT_DOCCUR = GT_DATA-WRBYS * -1. "金额
APPEND WA_CURRENCY_AMOUNT TO LT_CURRENCY_AMOUNT .
CLEAR WA_ACCOUNTGL.
WA_ACCOUNTGL-ITEMNO_ACC = LV_LINES . "会计凭证行项目编号
WA_ACCOUNTGL-GL_ACCOUNT = GT_DATA-SKONT. "科目
WA_ACCOUNTGL-ITEM_TEXT = '预收开票: ' && GT_DATA-NAME1. "项目文本
WA_ACCOUNTGL-CUSTOMER = GT_DATA-KUNNR. "客户
WA_ACCOUNTGL-REF_KEY_1 = GT_DATA-KUNNR. "业务伙伴参考码
* WA_ACCOUNTGL-SALES_ORD = GT_DATA-VBELN. "销售订单
WA_ACCOUNTGL-ALLOC_NMBR = GT_DATA-VBELN . "分配号
APPEND WA_ACCOUNTGL TO LT_ACCOUNTGL.
CLEAR GS_EXTENSION2.
CLEAR LT_EXTENSION2.
GS_EXTENSION2-POSNR = LV_LINES. "会计凭证行项目编号
GS_EXTENSION2-BSCHL = '19'. "过账码
GS_EXTENSION2-UMSKZ = GT_DATA-UMSKZ. "特别总账标识
LT_EXTENSION2-STRUCTURE = 'ZSFI_EXTEN'.
LT_EXTENSION2-VALUEPART1 = GS_EXTENSION2.
APPEND LT_EXTENSION2.
IF GT_DATA-FSFNS IS NOT INITIAL.
* 分录3,借方行项目信息:
ADD 1 TO LV_LINES.
CLEAR WA_CURRENCY_AMOUNT.
WA_CURRENCY_AMOUNT-ITEMNO_ACC = LV_LINES. "会计凭证行项目编号
WA_CURRENCY_AMOUNT-CURRENCY = GT_DATA-WAERK. "货币码
WA_CURRENCY_AMOUNT-AMT_DOCCUR = GT_DATA-WRBXX. "金额
APPEND WA_CURRENCY_AMOUNT TO LT_CURRENCY_AMOUNT .
CLEAR WA_ACCOUNTGL.
WA_ACCOUNTGL-ITEMNO_ACC = LV_LINES . "会计凭证行项目编号
WA_ACCOUNTGL-GL_ACCOUNT = GT_DATA-RACQT. "科目
WA_ACCOUNTGL-ITEM_TEXT = '预收开票: ' && GT_DATA-NAME1. "项目文本
WA_ACCOUNTGL-CUSTOMER = GT_DATA-KUNNR. "客户
WA_ACCOUNTGL-REF_KEY_1 = GT_DATA-KUNNR. "业务伙伴参考码
* WA_ACCOUNTGL-SALES_ORD = GT_DATA-VBELN. "销售订单
WA_ACCOUNTGL-ALLOC_NMBR = GT_DATA-VBELN . "分配号
APPEND WA_ACCOUNTGL TO LT_ACCOUNTGL.
CLEAR GS_EXTENSION2.
CLEAR LT_EXTENSION2.
GS_EXTENSION2-POSNR = LV_LINES. "会计凭证行项目编号
GS_EXTENSION2-BSCHL = '40'. "过账码
LT_EXTENSION2-STRUCTURE = 'ZSFI_EXTEN'.
LT_EXTENSION2-VALUEPART1 = GS_EXTENSION2.
APPEND LT_EXTENSION2.
* 分录4,贷方行项目信息:
ADD 1 TO LV_LINES.
CLEAR WA_CURRENCY_AMOUNT.
WA_CURRENCY_AMOUNT-ITEMNO_ACC = LV_LINES. "会计凭证行项目编号
WA_CURRENCY_AMOUNT-CURRENCY = GT_DATA-WAERK. "货币码
WA_CURRENCY_AMOUNT-AMT_DOCCUR = GT_DATA-WRBXX * -1. "金额
APPEND WA_CURRENCY_AMOUNT TO LT_CURRENCY_AMOUNT .
CLEAR WA_ACCOUNTGL.
WA_ACCOUNTGL-ITEMNO_ACC = LV_LINES . "会计凭证行项目编号
WA_ACCOUNTGL-GL_ACCOUNT = GT_DATA-SAKXX. "科目
WA_ACCOUNTGL-ITEM_TEXT = '预收开票: ' && GT_DATA-NAME1. "项目文本
WA_ACCOUNTGL-CUSTOMER = GT_DATA-KUNNR. "客户
WA_ACCOUNTGL-REF_KEY_1 = GT_DATA-KUNNR. "业务伙伴参考码
* WA_ACCOUNTGL-SALES_ORD = GT_DATA-VBELN. "销售订单
WA_ACCOUNTGL-ALLOC_NMBR = GT_DATA-VBELN . "分配号
APPEND WA_ACCOUNTGL TO LT_ACCOUNTGL.
CLEAR GS_EXTENSION2.
CLEAR LT_EXTENSION2.
GS_EXTENSION2-POSNR = LV_LINES. "会计凭证行项目编号
GS_EXTENSION2-BSCHL = '50'. "过账码
LT_EXTENSION2-STRUCTURE = 'ZSFI_EXTEN'.
LT_EXTENSION2-VALUEPART1 = GS_EXTENSION2.
APPEND LT_EXTENSION2.
ENDIF.
CLEAR LV_OBJ_KEY .
CALL FUNCTION 'BAPI_ACC_DOCUMENT_CHECK'
EXPORTING
DOCUMENTHEADER = HEADER
* IMPORTING
* OBJ_TYPE = LV_OBJ_TYPE
* OBJ_KEY = LV_OBJ_KEY
* OBJ_SYS = LV_OBJ_SYS
TABLES
ACCOUNTGL = LT_ACCOUNTGL "总帐科目项
CURRENCYAMOUNT = LT_CURRENCY_AMOUNT "货币项目
EXTENSION2 = LT_EXTENSION2
RETURN = LT_RETURN. "返回值
CLEAR LT_RETURN.
LOOP AT LT_RETURN .
APPEND LT_RETURN TO GST_RETURN .
CLEAR LT_RETURN .
ENDLOOP.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
FREE:LT_ACCOUNTGL,LT_CURRENCY_AMOUNT,LT_RETURN.
CLEAR LV_LINES .
ENDLOOP.
IF SY-SUBRC = 0.
SORT GST_RETURN[] BY MESSAGE .
DELETE ADJACENT DUPLICATES FROM GST_RETURN[] COMPARING MESSAGE.
LOOP AT GST_RETURN.
GST_RETURN-MESSAGE = '模拟过账: ' && GST_RETURN-MESSAGE .
APPEND GST_RETURN TO GT_RETURN .
CLEAR GST_RETURN .
ENDLOOP.
PERFORM FRM_DATA_POST_RT .
ELSE .
MESSAGE '您还未选择任何条目!' TYPE 'S' DISPLAY LIKE 'E' .
ENDIF.
ELSE .
MESSAGE '存在信息不全的条目,请检查!' TYPE 'S' DISPLAY LIKE 'E' .
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DATA_POST_RT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_DATA_POST_RT .
LOOP AT GT_RETURN WHERE TYPE = 'E'.
ENDLOOP.
IF SY-SUBRC = 0.
GLAG_N = 'X'.
DEMO=>MAIN( ).
ELSE .
CLEAR GT_DATA_C[] .
LOOP AT GT_DATA WHERE AFLAG = 'X' .
APPEND GT_DATA TO GT_DATA_C[] .
CLEAR GT_DATA .
ENDLOOP.
MESSAGE '模拟过账成功,可以进行正式过账' TYPE 'S' .
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DATA_POST
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_DATA_POST .
CLEAR GLAG_E .
LOOP AT GT_DATA WHERE AFLAG = 'X' .
READ TABLE GT_DATA_C WITH KEY BUKRS_VF = GT_DATA-BUKRS_VF
KUNNR = GT_DATA-KUNNR
VBELN = GT_DATA-VBELN
WAERK = GT_DATA-WAERK
UMSKZ = GT_DATA-UMSKZ
SKONT = GT_DATA-SKONT
WRBYS = GT_DATA-WRBYS
SAKYH = GT_DATA-SAKYH
TXT20 = GT_DATA-TXT20
FSFNS = GT_DATA-FSFNS
WRBXX = GT_DATA-WRBXX
SAKXX = GT_DATA-SAKXX
RACQT = GT_DATA-RACQT
GZDAT = GT_DATA-GZDAT
GJAHR = GT_DATA-GJAHR
ZKJQJ = GT_DATA-ZKJQJ
BELNR = GT_DATA-BELNR
.
IF SY-SUBRC <> 0.
GLAG_E = 'X'.
EXIT.
ENDIF.
ENDLOOP.
IF GLAG_E IS INITIAL.
DATA:
TEMP_MONTH(2), "输入月份
HEADER_TXT(25), "取会计年月+固定文本“制费及研发费分摊”
TEMP_AUT_MSG(30),
LAST_DATA LIKE SY-DATUM, "一个月的最后一天
TEMP_OBJ_KEY TYPE AWKEY, "是否生成
HEADER LIKE BAPIACHE09 OCCURS 0 WITH HEADER LINE,
WA_ACCOUNTGL LIKE BAPIACGL09 OCCURS 0 WITH HEADER LINE,
LT_ACCOUNTGL TYPE STANDARD TABLE OF BAPIACGL09,
WA_CURRENCY_AMOUNT LIKE BAPIACCR09 OCCURS 0 WITH HEADER LINE,
LT_CURRENCY_AMOUNT TYPE STANDARD TABLE OF BAPIACCR09 WITH HEADER LINE,
IT_EXTENSION2 TYPE STANDARD TABLE OF BAPIPAREX WITH HEADER LINE,
LT_RETURN LIKE BAPIRET2 OCCURS 0 WITH HEADER LINE,
GST_RETURN LIKE BAPIRET2 OCCURS 0 WITH HEADER LINE,
LS_ZFI002 TYPE ZFI002,
FT_FLAG , "= ‘X'表示分摊过
LV_ANSWER(1),
TEMP_BWTAR_AUFNR LIKE AFPO-AUFNR.
DATA: GS_EXTENSION2 TYPE ZSFI_EXTEN, "会计凭证过账增强extension2
LT_EXTENSION2 TYPE TABLE OF BAPIPAREX WITH HEADER LINE. "返回参数
DATA: LV_OBJ_TYPE LIKE BAPIACHE09-OBJ_TYPE,
LV_OBJ_KEY LIKE BAPIACHE09-OBJ_KEY,
LV_OBJ_SYS LIKE BAPIACHE09-OBJ_SYS.
DATA: LV_DMBTR TYPE BAPIWRBTR,
LV_LINES TYPE SY-TABIX,
ZCOUNT TYPE SY-TABIX,
LV_WRBTR TYPE BSEG-WRBTR,
DO_POST TYPE CHAR1,
LS_EXTEN TYPE ZSFI_EXTEN.
DATA: LS_BKPF TYPE BKPF,
LS_REVERSAL TYPE BAPIACREV.
DATA: GV_OBJ_TYPE TYPE BAPIACHE09-OBJ_TYPE, "参考过程
GV_OBJ_KEY TYPE BAPIACHE09-OBJ_KEY, "对象键值
GV_OBJ_SYS TYPE BAPIACHE09-OBJ_SYS.
DATA LV_BELNR_01 TYPE BKPF-BELNR.
DATA LV_WAERS TYPE T001-WAERS.
DATA LV_FLAG TYPE C.
CLEAR LV_FLAG .
LOOP AT GT_DATA WHERE AFLAG = 'X' .
IF GT_DATA-UMSKZ IS INITIAL
OR GT_DATA-WRBYS IS INITIAL
OR GT_DATA-SAKYH IS INITIAL
OR GT_DATA-WRBXX IS INITIAL
OR GT_DATA-GZDAT IS INITIAL
.
LV_FLAG = 'X'.
EXIT .
ENDIF.
ENDLOOP.
IF LV_FLAG IS INITIAL.
CLEAR GST_RETURN[] .
LOOP AT GT_DATA WHERE AFLAG = 'X' .
* 会计凭证抬头数据
CLEAR HEADER.
HEADER-HEADER_TXT = '预收开票: ' && GT_DATA-NAME1. "凭证抬头文本
HEADER-COMP_CODE = GT_DATA-BUKRS_VF. "公司代码
HEADER-DOC_DATE = GT_DATA-GZDAT. "凭证日期
HEADER-PSTNG_DATE = GT_DATA-GZDAT. "凭证中的过帐日期
HEADER-USERNAME = SY-UNAME. "用户名
HEADER-DOC_TYPE = 'SA'. "凭证类型
HEADER-FISC_YEAR = GT_DATA-GZDAT(4). "财年
HEADER-FIS_PERIOD = GT_DATA-GZDAT+4(2). "会计期间
* 分录1,借方行项目信息:
ADD 1 TO LV_LINES.
CLEAR WA_CURRENCY_AMOUNT.
WA_CURRENCY_AMOUNT-ITEMNO_ACC = LV_LINES. "会计凭证行项目编号
WA_CURRENCY_AMOUNT-CURRENCY = GT_DATA-WAERK. "货币码
WA_CURRENCY_AMOUNT-AMT_DOCCUR = GT_DATA-WRBYS. "金额
APPEND WA_CURRENCY_AMOUNT TO LT_CURRENCY_AMOUNT .
CLEAR WA_ACCOUNTGL.
WA_ACCOUNTGL-ITEMNO_ACC = LV_LINES . "会计凭证行项目编号
WA_ACCOUNTGL-GL_ACCOUNT = GT_DATA-SAKYH. "科目
WA_ACCOUNTGL-ITEM_TEXT = '预收开票: ' && GT_DATA-NAME1. "项目文本
WA_ACCOUNTGL-CUSTOMER = GT_DATA-KUNNR. "客户
WA_ACCOUNTGL-REF_KEY_1 = GT_DATA-KUNNR. "业务伙伴参考码
* WA_ACCOUNTGL-SALES_ORD = GT_DATA-VBELN. "销售订单
WA_ACCOUNTGL-ALLOC_NMBR = GT_DATA-VBELN . "分配号
APPEND WA_ACCOUNTGL TO LT_ACCOUNTGL.
CLEAR GS_EXTENSION2.
CLEAR LT_EXTENSION2.
GS_EXTENSION2-POSNR = LV_LINES. "会计凭证行项目编号
GS_EXTENSION2-BSCHL = '40'. "过账码
GS_EXTENSION2-RSTGR = '101'. "付款原因代码
LT_EXTENSION2-STRUCTURE = 'ZSFI_EXTEN'.
LT_EXTENSION2-VALUEPART1 = GS_EXTENSION2.
APPEND LT_EXTENSION2.
* 分录2,贷方行项目信息:
ADD 1 TO LV_LINES.
CLEAR WA_CURRENCY_AMOUNT.
WA_CURRENCY_AMOUNT-ITEMNO_ACC = LV_LINES. "会计凭证行项目编号
WA_CURRENCY_AMOUNT-CURRENCY = GT_DATA-WAERK. "货币码
WA_CURRENCY_AMOUNT-AMT_DOCCUR = GT_DATA-WRBYS * -1. "金额
APPEND WA_CURRENCY_AMOUNT TO LT_CURRENCY_AMOUNT .
CLEAR WA_ACCOUNTGL.
WA_ACCOUNTGL-ITEMNO_ACC = LV_LINES . "会计凭证行项目编号
WA_ACCOUNTGL-GL_ACCOUNT = GT_DATA-SKONT. "科目
WA_ACCOUNTGL-ITEM_TEXT = '预收开票: ' && GT_DATA-NAME1. "项目文本
WA_ACCOUNTGL-CUSTOMER = GT_DATA-KUNNR. "客户
WA_ACCOUNTGL-REF_KEY_1 = GT_DATA-KUNNR. "业务伙伴参考码
* WA_ACCOUNTGL-SALES_ORD = GT_DATA-VBELN. "销售订单
WA_ACCOUNTGL-ALLOC_NMBR = GT_DATA-VBELN . "分配号
APPEND WA_ACCOUNTGL TO LT_ACCOUNTGL.
CLEAR GS_EXTENSION2.
CLEAR LT_EXTENSION2.
GS_EXTENSION2-POSNR = LV_LINES. "会计凭证行项目编号
GS_EXTENSION2-BSCHL = '19'. "过账码
GS_EXTENSION2-UMSKZ = GT_DATA-UMSKZ. "特别总账标识
LT_EXTENSION2-STRUCTURE = 'ZSFI_EXTEN'.
LT_EXTENSION2-VALUEPART1 = GS_EXTENSION2.
APPEND LT_EXTENSION2.
IF GT_DATA-FSFNS IS NOT INITIAL.
* 分录3,借方行项目信息:
ADD 1 TO LV_LINES.
CLEAR WA_CURRENCY_AMOUNT.
WA_CURRENCY_AMOUNT-ITEMNO_ACC = LV_LINES. "会计凭证行项目编号
WA_CURRENCY_AMOUNT-CURRENCY = GT_DATA-WAERK. "货币码
WA_CURRENCY_AMOUNT-AMT_DOCCUR = GT_DATA-WRBXX. "金额
APPEND WA_CURRENCY_AMOUNT TO LT_CURRENCY_AMOUNT .
CLEAR WA_ACCOUNTGL.
WA_ACCOUNTGL-ITEMNO_ACC = LV_LINES . "会计凭证行项目编号
WA_ACCOUNTGL-GL_ACCOUNT = GT_DATA-RACQT. "科目
WA_ACCOUNTGL-ITEM_TEXT = '预收开票: ' && GT_DATA-NAME1. "项目文本
WA_ACCOUNTGL-CUSTOMER = GT_DATA-KUNNR. "客户
WA_ACCOUNTGL-REF_KEY_1 = GT_DATA-KUNNR. "业务伙伴参考码
* WA_ACCOUNTGL-SALES_ORD = GT_DATA-VBELN. "销售订单
WA_ACCOUNTGL-ALLOC_NMBR = GT_DATA-VBELN . "分配号
APPEND WA_ACCOUNTGL TO LT_ACCOUNTGL.
CLEAR GS_EXTENSION2.
CLEAR LT_EXTENSION2.
GS_EXTENSION2-POSNR = LV_LINES. "会计凭证行项目编号
GS_EXTENSION2-BSCHL = '40'. "过账码
LT_EXTENSION2-STRUCTURE = 'ZSFI_EXTEN'.
LT_EXTENSION2-VALUEPART1 = GS_EXTENSION2.
APPEND LT_EXTENSION2.
* 分录4,贷方行项目信息:
ADD 1 TO LV_LINES.
CLEAR WA_CURRENCY_AMOUNT.
WA_CURRENCY_AMOUNT-ITEMNO_ACC = LV_LINES. "会计凭证行项目编号
WA_CURRENCY_AMOUNT-CURRENCY = GT_DATA-WAERK. "货币码
WA_CURRENCY_AMOUNT-AMT_DOCCUR = GT_DATA-WRBXX * -1. "金额
APPEND WA_CURRENCY_AMOUNT TO LT_CURRENCY_AMOUNT .
CLEAR WA_ACCOUNTGL.
WA_ACCOUNTGL-ITEMNO_ACC = LV_LINES . "会计凭证行项目编号
WA_ACCOUNTGL-GL_ACCOUNT = GT_DATA-SAKXX. "科目
WA_ACCOUNTGL-ITEM_TEXT = '预收开票: ' && GT_DATA-NAME1. "项目文本
WA_ACCOUNTGL-CUSTOMER = GT_DATA-KUNNR. "客户
WA_ACCOUNTGL-REF_KEY_1 = GT_DATA-KUNNR. "业务伙伴参考码
* WA_ACCOUNTGL-SALES_ORD = GT_DATA-VBELN. "销售订单
WA_ACCOUNTGL-ALLOC_NMBR = GT_DATA-VBELN . "分配号
APPEND WA_ACCOUNTGL TO LT_ACCOUNTGL.
CLEAR GS_EXTENSION2.
CLEAR LT_EXTENSION2.
GS_EXTENSION2-POSNR = LV_LINES. "会计凭证行项目编号
GS_EXTENSION2-BSCHL = '50'. "过账码
LT_EXTENSION2-STRUCTURE = 'ZSFI_EXTEN'.
LT_EXTENSION2-VALUEPART1 = GS_EXTENSION2.
APPEND LT_EXTENSION2.
ENDIF.
CLEAR LV_OBJ_KEY .
CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
EXPORTING
DOCUMENTHEADER = HEADER
IMPORTING
OBJ_TYPE = LV_OBJ_TYPE
OBJ_KEY = LV_OBJ_KEY
OBJ_SYS = LV_OBJ_SYS
TABLES
ACCOUNTGL = LT_ACCOUNTGL "总帐科目项
CURRENCYAMOUNT = LT_CURRENCY_AMOUNT "货币项目
EXTENSION2 = LT_EXTENSION2
RETURN = LT_RETURN. "返回值
CLEAR LT_RETURN.
LOOP AT LT_RETURN .
APPEND LT_RETURN TO GST_RETURN .
CLEAR LT_RETURN .
ENDLOOP.
LOOP AT LT_RETURN WHERE TYPE = 'E'.
ENDLOOP.
IF SY-SUBRC = 0 .
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
ENDIF.
FREE:LT_ACCOUNTGL,LT_CURRENCY_AMOUNT,LT_RETURN.
CLEAR LV_LINES .
GT_DATA-AWKEY = LV_OBJ_KEY .
MODIFY GT_DATA .
CLEAR GT_DATA .
ENDLOOP.
IF SY-SUBRC = 0.
SORT GST_RETURN[] BY MESSAGE .
DELETE ADJACENT DUPLICATES FROM GST_RETURN[] COMPARING MESSAGE.
LOOP AT GST_RETURN.
GST_RETURN-MESSAGE = '正式过账: ' && GST_RETURN-MESSAGE .
APPEND GST_RETURN TO GT_RETURN .
CLEAR GST_RETURN .
ENDLOOP.
PERFORM FRM_DATA_POST_R .
ELSE .
MESSAGE '您还未选择任何条目!' TYPE 'S' DISPLAY LIKE 'E' .
ENDIF.
ELSE .
MESSAGE '存在信息不全的条目,请检查!' TYPE 'S' DISPLAY LIKE 'E' .
ENDIF.
ELSE .
MESSAGE '模拟过账的数据已发生变动,请重新提交模拟过账!' TYPE 'S' DISPLAY LIKE 'E' .
CLEAR GLAG_N .
CLEAR GT_DATA_C[] .
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DATA_POST_R
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_DATA_POST_R .
CLEAR GLAG_N .
CLEAR GT_DATA_C[] .
LOOP AT GT_RETURN WHERE TYPE = 'E'.
ENDLOOP.
IF SY-SUBRC = 0.
DEMO=>MAIN( ).
ELSE .
LOOP AT GT_DATA WHERE AFLAG = 'X' .
SELECT SINGLE BELNR INTO GT_DATA-BELNR FROM BSEG
WHERE AWKEY = GT_DATA-AWKEY
.
MODIFY GT_DATA .
CLEAR GT_DATA .
ENDLOOP.
CLEAR GT_ZTIR098[].
LOOP AT GT_DATA WHERE AFLAG = 'X' .
MOVE-CORRESPONDING GT_DATA TO GT_ZTIR098 .
APPEND GT_ZTIR098 .
CLEAR GT_ZTIR098 .
ENDLOOP.
MODIFY ZTIR098 FROM TABLE GT_ZTIR098[] .
COMMIT WORK .
DATA GS_LAYOUT_ALV TYPE LVC_S_LAYO.
DATA : LV_STABLE TYPE LVC_S_STBL. "刷新稳定性
LV_STABLE-ROW = '1'.
LV_STABLE-COL = '1'.
GS_LAYOUT_ALV-CWIDTH_OPT = 'X'. "优化列宽
CALL METHOD GO_ALV_GRID->SET_FRONTEND_LAYOUT
EXPORTING
IS_LAYOUT = GS_LAYOUT_ALV.
CALL METHOD GO_ALV_GRID->REFRESH_TABLE_DISPLAY
EXPORTING
IS_STABLE = LV_STABLE.
CALL METHOD CL_GUI_CONTROL=>SET_FOCUS
EXPORTING
CONTROL = GO_ALV_GRID.
CALL METHOD CL_GUI_CFW=>FLUSH.
MESSAGE '正式过账成功!' TYPE 'S' .
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SELECT_ALL
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_SELECT_ALL .
LOOP AT GT_DATA.
GT_DATA-AFLAG = 'X' .
MODIFY GT_DATA.
CLEAR GT_DATA.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_UNSELECT_ALL
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_UNSELECT_ALL .
LOOP AT GT_DATA.
CLEAR GT_DATA-AFLAG .
MODIFY GT_DATA.
CLEAR GT_DATA.
ENDLOOP.
ENDFORM.
INITIALIZATION.
PERFORM FRM_EXCLUDE_OPTION.
AT SELECTION-SCREEN OUTPUT.
PERFORM SCREEN_OUTPUT.
AT SELECTION-SCREEN.
PERFORM SCREEN_SETTING.
START-OF-SELECTION.
PERFORM FOM_GETDATA.
CALL SCREEN 100.
FI-预收款(开发笔记)
最新推荐文章于 2025-02-15 15:18:23 发布