统驭科目+特别总账标记 → 总账科目
主要SAP 会计凭证 BAPI
1、检查凭证参数是否有问题 BAPI_ACC_DOCUMENT_CHECK
2、产生凭证编号并占用 BAPI_ACC_DOCUMENT_POST
注意:不及时commit的情况下 不会产生会计凭证
3、BAPI_TRANSACTION_COMMIT
Excel分页签导入格式
抬头页签:
总账页签:
客商页签
税页签
执行结果
双击会计凭照号 用FB03打开会计凭证
上代码
*&---------------------------------------------------------------------*
*& Report ZDIA_FIDOC_C_FROM_XLS_F_02
*&
*&---------------------------------------------------------------------*
*& date : 20220830
*& author: gavin
*& tcode:ZF-02
*&---------------------------------------------------------------------*
REPORT ZDIA_FIDOC_C_FROM_XLS_F_02.
TABLES:SSCRFIELDS,MKPF,MSEG.
FIELD-SYMBOLS: <FS>.
INCLUDE OLE2INCL. " FOR OLE
DATA: EXCEL TYPE OLE2_OBJECT,
BOOKS TYPE OLE2_OBJECT,
SHEET TYPE OLE2_OBJECT,
CELL TYPE OLE2_OBJECT.
DATA:L_FILENAME TYPE STRING,L_MUBAN TYPE STRING.
DATA:GV_FULLPATH TYPE STRING,GV_PATH TYPE STRING,GV_NAME TYPE STRING.
DATA: IT_FIELDCAT TYPE LVC_T_FCAT,
WA_LAYOUT TYPE LVC_S_LAYO.
DATA: IT_OUTPUT TYPE REF TO DATA,
PPFILE TYPE RLGRAP-FILENAME,
WA_OUTPUT TYPE REF TO DATA.
FIELD-SYMBOLS: <IT_OUTPUT> TYPE STANDARD TABLE,
<WA_OUTPUT>.
DATA:
STDATUM LIKE SY-DATUM,
STUZEIT LIKE SY-UZEIT,
GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
GS_FIELDCAT TYPE SLIS_FIELDCAT_ALV,
GS_LAYOUT TYPE SLIS_LAYOUT_ALV.
*head
DATA:BEGIN OF HEADWTAB,
HEADTXT LIKE BKPF-BKTXT,"凭证日期
BUKRS LIKE BKPF-BUKRS,"过账日期
DOCDATE LIKE BKPF-BLDAT, "抬头文本
PSTDATE LIKE BKPF-BUDAT,"GMCODE
DOCTYPE like BKPF-BLART,"会计凭证类型
NETPST LIKE BAPIACHE09-NEG_POSTNG,"反记账
GLITEMS TYPE I,"总账开始
GLITEME TYPE I, "总账结束
CVITEMS TYPE I,"客户供应商 开始
CVITEME TYPE I,"客户供应商 结束
TAXITEMS TYPE I, "税开始
TAXITEME TYPE I, "税结束
BELNR TYPE BKPF-BELNR," 会计凭证
STATUS TYPE C,"状态
MSGTXT(255) TYPE C, " 失败文本描述
END OF HEADWTAB.
DATA:BEGIN OF GLITEMWTAB,
itemacc LIKE BAPIACGL09-ITEMNO_ACC,"行序号
BSCHL LIKE ZFIDOCEXT-BSCHL,"记账码
GL_ACCOUNT LIKE BAPIACGL09-GL_ACCOUNT,"科目
ITEM_TEXT LIKE BAPIACGL09-ITEM_TEXT,"行项目文本
BUS_AREA LIKE BAPIACGL09-BUS_AREA,"业务范围
ALLOC_NMBR like BAPIACGL09-ALLOC_NMBR,"分配
TAXCODE LIKE BAPIACTX09-TAX_CODE,"税码
ACCT_TYPE LIKE BAPIACGL09-ACCT_TYPE,"科目类型 资产 = A
CS_TRANS_T LIKE BAPIACGL09-CS_TRANS_T,"事务类型 资产必输
DOC_TYPE LIKE BAPIACGL09-DOC_TYPE, "凭证类型
COSTCENTER LIKE BAPIACGL09-COSTCENTER,"成本中心
ASSET_NO like BAPIACGL09-ASSET_NO, " 主资产编号
SUB_NUMBER LIKE BAPIACGL09-SUB_NUMBER,"次资产编号
CURRENCY LIKE BAPIACCR09-CURRENCY,"货币
AMOUNT like BAPIACCR09-AMT_DOCCUR, "金额
RSTGR like ZFIDOCEXT-RSTGR, "原因代码
END OF GLITEMWTAB.
DATA:BEGIN OF VCITEMWTAB,
itemacc LIKE BAPIACGL09-ITEMNO_ACC,"行序号
BSCHL LIKE ZFIDOCEXT-BSCHL,"记账码
KNRVOR LIKE kna1-KUNNR,"客户或者供应商
BUKRS LIKE BAPIACAR09-COMP_CODE,"公司
BUS_AREA LIKE BAPIACGL09-BUS_AREA,"业务范围
ITEM_TEXT LIKE BAPIACGL09-ITEM_TEXT,"行项目文本
ALLOC_NMBR like BAPIACGL09-ALLOC_NMBR,"分配
DORK TYPE C,"客户/供应商 D客户/K供应商
SP_GL_IND TYPE C,"特别总账标识
CURRENCY LIKE BAPIACCR09-CURRENCY,"货币
AMOUNT LIKE BAPIACCR09-AMT_DOCCUR, "金额
RSTGR LIKE ZFIDOCEXT-RSTGR, "原因代码
END OF VCITEMWTAB.
DATA:BEGIN OF TAXITEMWTAB,
itemacc LIKE BAPIACGL09-ITEMNO_ACC,"行序号
BSCHL LIKE ZFIDOCEXT-BSCHL,"记账码
GL_ACCOUNT LIKE BAPIACGL09-GL_ACCOUNT,"科目
TAXCODE LIKE BAPIACTX09-TAX_CODE,"税码
CURRENCY LIKE BAPIACCR09-CURRENCY,"货币
AMOUNT LIKE BAPIACCR09-AMT_DOCCUR, "金额
RSTGR LIKE ZFIDOCEXT-RSTGR, "原因代码
END OF TAXITEMWTAB.
DATA:SHEADITAB LIKE STANDARD TABLE OF HEADWTAB.
data:WHead like HEADWTAB.
DATA:SGLITEMITAB LIKE STANDARD TABLE OF GLITEMWTAB.
DATA:SUBGLITEMTAB LIKE STANDARD TABLE OF GLITEMWTAB.
DATA:GLWITEM LIKE GLITEMWTAB.
DATA:SVCITEMITAB LIKE STANDARD TABLE OF VCITEMWTAB.
DATA:SUBVCITEMTAB LIKE STANDARD TABLE OF VCITEMWTAB.
DATA:VCWITEM LIKE VCITEMWTAB.
DATA:STAXITEMITAB LIKE STANDARD TABLE OF TAXITEMWTAB.
DATA:SUBTAXITEMTAB LIKE STANDARD TABLE OF TAXITEMWTAB.
DATA:TAXWITEM LIKE TAXITEMWTAB.
DATA:
FILETAB TYPE FILETABLE WITH HEADER LINE.
*import
data:lst TYPE i,lend TYPE i,RC TYPE I.
DATA:runnercnt TYPE I,
sumrcnt TYPE I.
DATA:pdate TYPE sy-datum.
DATA: ll_lines(10),"行数
ll_tabix(10),"循环标号
ll_pecnt TYPE p LENGTH 6 DECIMALS 2,"百分比
ll_pecet(6),"百分数
ll_text(40)."消息
CLEAR: ll_lines,ll_tabix,ll_pecnt,ll_pecet,ll_text.
*&---------------------------------------------------------------------*
*& 选择界面
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK BLK1 WITH FRAME TITLE TXT1 .
PARAMETER: P_FILE TYPE STRING DEFAULT ''.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN PUSHBUTTON 5(20) but1 USER-COMMAND bt1.
*SELECTION-SCREEN PUSHBUTTON 30(20) but2 USER-COMMAND bt2.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK BLK1.
SELECTION-SCREEN BEGIN OF BLOCK BLK2 WITH FRAME TITLE TXT2 .
PARAMETER: PHCOLST TYPE I DEFAULT 1,
PHCOLED TYPE I DEFAULT 12,
PHROWST TYPE I DEFAULT 2,
PHROWED TYPE I DEFAULT 20.
SELECTION-SCREEN END OF BLOCK BLK2.
SELECTION-SCREEN BEGIN OF BLOCK BLK3 WITH FRAME TITLE TXT3 .
PARAMETER: PGLCOLST TYPE I DEFAULT 2,
PGLCOLED TYPE I DEFAULT 16,
PGLROWST TYPE I DEFAULT 2,
PGLROWED TYPE I DEFAULT 100.
SELECTION-SCREEN END OF BLOCK BLK3.
SELECTION-SCREEN BEGIN OF BLOCK BLK4 WITH FRAME TITLE TXT4 .
PARAMETER: PCVCOLST TYPE I DEFAULT 2,
PCVCOLED TYPE I DEFAULT 13,
PCVROWST TYPE I DEFAULT 2,
PCVROWED TYPE I DEFAULT 100.
SELECTION-SCREEN END OF BLOCK BLK4.
SELECTION-SCREEN BEGIN OF BLOCK BLK5 WITH FRAME TITLE TXT5 .
PARAMETER: PTXCOLST TYPE I DEFAULT 2,
PTXCOLED TYPE I DEFAULT 8,
PTXROWST TYPE I DEFAULT 2,
PTXROWED TYPE I DEFAULT 100.
SELECTION-SCREEN END OF BLOCK BLK5.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN BEGIN OF BLOCK DESC WITH FRAME TITLE BLKTEXT1.
SELECTION-SCREEN COMMENT 1(78) TXT11.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN COMMENT 1(78) TXT21.
SELECTION-SCREEN SKIP.
* SELECTION-SCREEN COMMENT 1(78) TXT3.
* SELECTION-SCREEN SKIP.
* SELECTION-SCREEN COMMENT 1(78) TXT4.
* SELECTION-SCREEN SKIP.
SELECTION-SCREEN COMMENT 1(78) TXT6.
SELECTION-SCREEN END OF BLOCK DESC.
INITIALIZATION.
TXT1 = '请输入条件'.
TXT2 = '请检查模板抬头行列开始结束'.
TXT3 = '请检查模板总账行项目行列开始结束'.
TXT4 = '请检查模板客户/供应商行项目行列开始结束'.
TXT5 = '请检查模板税行项目行列开始结束'.
CALL FUNCTION 'ICON_CREATE'
EXPORTING
name = ICON_BW_REF_STRUCTURE_SAP
TEXT = '模板下载'
INFO = '模板下载'
IMPORTING
result = but1
EXCEPTIONS
icon_not_found = 1
outputfield_too_short = 2
OTHERS = 3.
BLKTEXT1 = '使用场景和逻辑简介'.
TXT11 = '需求来源:田德诗 功能:通过Excel模板批量生成F-02物料凭证,'.
TXT21 = ''.
pdate = 20220830.CLEAR sumrcnt.
PERFORM getrunstatic(ZPRT_FI_SCCB1L) USING pdate sy-REPID CHANGING runnercnt sumrcnt.
TXT6 = '运行情况:总共' && runnercnt && '用户运行了' && sumrcnt && '次,'.
pdate = sy-datum.pdate+4(4) = '0101'.CLEAR sumrcnt.
PERFORM getrunstatic(ZPRT_FI_SCCB1L) USING pdate sy-REPID CHANGING runnercnt sumrcnt.
TXT6 = TXT6 && '本年度总共' && runnercnt && '用户运行了' && sumrcnt && '次,'.
pdate = sy-datum.pdate+6(2) = '01'.CLEAR sumrcnt.
PERFORM getrunstatic(ZPRT_FI_SCCB1L) USING pdate sy-REPID CHANGING runnercnt sumrcnt.
TXT6 = TXT6 && '本月度总共' && runnercnt && '用户运行了' && sumrcnt && '次'.
*&---------------------------------------------------------------------
AT SELECTION-SCREEN.
CASE SSCRFIELDS-UCOMM.
WHEN 'BT1'.
PERFORM DOWNLOAD_DATA.
ENDCASE.
* 选择文件
AT selection-SCREEN ON VALUE-request FOR P_FILE.
* 选择文件
* PERFORM GET_FILENAME USING P_FILE.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
EXPORTING
DEFAULT_FILENAME = P_FILE
CHANGING
RC = RC
FILE_TABLE = FILETAB[].
READ TABLE FILETAB INDEX 1.
IF SY-SUBRC EQ 0.
P_FILE = FILETAB-FILENAME.
ENDIF.
PPFILE = P_FILE.
start-of-selection.
*--取得销售订单抬头数据
PERFORM UPOLOAD_FILE TABLES SHEADITAB USING 'HEAD' PHCOLST PHROWST PHCOLED PHROWED .
PERFORM UPOLOAD_FILE TABLES SGLITEMITAB USING 'ACCOUNTGL' PGLCOLST PGLROWST PGLCOLED PGLROWED.
PERFORM UPOLOAD_FILE TABLES SVCITEMITAB USING 'CUST_VENDOR' PCVCOLST PCVROWST PCVCOLED PCVROWED.
PERFORM UPOLOAD_FILE TABLES STAXITEMITAB USING 'TAX' PTXCOLST PTXROWST PTXCOLED PTXROWED.
PERFORM WRITERPTRUNRECORD(ZDIA_SO_C_FROM_XLSMODEL) USING sy-TCODE SY-CPROG sy-datum sy-UZEIT '20220831' 'FICO-'.
PERFORM DISALV .
*&---------------------------------------------------------------------*
*& Form fillresult2file
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->COL text
* -->LOW text
* -->VALUE text
*----------------------------------------------------------------------*
FORM FILLRESULT2FILE TABLES TABLEITEM TYPE STANDARD TABLE.
DATA: lv_string TYPE TZONREF-TSTAMPS.", TZONREF-TSTAMPL".
GET TIME STAMP FIELD lv_string.
data:lfilename TYPE STRING.
data:lext TYPE String.
SPLIT P_file at '.' into lfilename lext.
lfilename = lfilename && lv_string && '.txt'.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
* BIN_FILESIZE =
filename = lfilename
FILETYPE = 'DAT' "'ASC'
APPEND = ' '
WRITE_FIELD_SEPARATOR = ' '
HEADER = '00'
TRUNC_TRAILING_BLANKS = ' '
WRITE_LF = 'X'
COL_SELECT = ' '
COL_SELECT_MASK = ' '
DAT_MODE = ' '
CONFIRM_OVERWRITE = ' '
NO_AUTH_CHECK = ' '
CODEPAGE = '4110'
IGNORE_CERR = ABAP_TRUE
REPLACEMENT = '#'
WRITE_BOM = ' '
TRUNC_TRAILING_BLANKS_EOL = 'X'
WK1_N_FORMAT = ' '
WK1_N_SIZE = ' '
WK1_T_FORMAT = ' '
WK1_T_SIZE = ' '
*IMPORTING
* FILELENGTH =
TABLES
data_tab = TABLEITEM
* FIELDNAMES = GT_FIELDCAT
EXCEPTIONS
file_write_error = 1
no_batch = 2
gui_refuse_filetransfer = 3
invalid_type = 4
no_authority = 5
unknown_error = 6
header_not_allowed = 7
separator_not_allowed = 8
filesize_not_allowed = 9
header_too_long = 10
dp_error_create = 11
dp_error_send = 12
dp_error_write = 13
unknown_dp_error = 14
access_denied = 15
dp_out_of_memory = 16
disk_full = 17
dp_timeout = 18
file_not_found = 19
dataprovider_exception = 20
control_flush_error = 21
OTHERS = 22
.
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. "FILLRESULT2FILE
*&---------------------------------------------------------------------*
*& Form fill_cell
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_I text
* -->P_J text
* -->P_VAL text
*----------------------------------------------------------------------*
FORM FILL_CELL USING P_I
P_J
P_VAL.
CALL METHOD OF
EXCEL
'CELLS' = CELL
EXPORTING
#1 = P_I
#2 = P_J.
SET PROPERTY OF CELL 'VALUE' = P_VAL.
ENDFORM. " FILL_CELL
**&--------------------------------------------------------------------*
**& FORM USER_COMMAND
**&--------------------------------------------------------------------*
** TEXT
**---------------------------------------------------------------------*
** -->RF_UCOMM TEXT
** -->RS_SELFIELDTEXT
**---------------------------------------------------------------------*
FORM USER_COMMAND USING RF_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD. "#EC CALLED
CASE RF_UCOMM.
WHEN '&IC1'.
DATA: LR_GRID TYPE REF TO CL_GUI_ALV_GRID.
DATA L_TABIX LIKE SY-TABIX.
IF RS_SELFIELD-FIELDNAME = 'BELNR'.
READ TABLE SHEADITAB INDEX RS_SELFIELD-TABINDEX INTO WHEAD.
IF WHEAD-BELNR IS NOT INITIAL AND WHEAD-BELNR NE SPACE.
SET PARAMETER ID 'BLN' FIELD WHEAD-BELNR.
SET PARAMETER ID 'GJR' FIELD sy-datum+0(4).
SET PARAMETER ID 'BUK' FIELD WHEAD-BUKRS.
CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.
ENDIF.
ENDIF.
WHEN '&SOC'.
*****插入数据
DESCRIBE TABLE SHEADITAB LINES ll_lines."获取内表行数
LOOP AT SHEADITAB INTO WHEAD.
CLEAR SUBGLITEMTAB[].CLEAR SUBVCITEMTAB[].CLEAR SUBTAXITEMTAB[].
"$. Region 总账
lst = WHEAD-GLITEMS - PGLROWST + 1.
lend = WHEAD-GLITEME - PGLROWST + 1.
lend = lend - lst + 1.
* INSERT LINES OF SITEMITAB[] FROM lst TO lend INTO SUBITEMTAB[].
DO LEND TIMES.
LST = LST + 1.
READ TABLE SGLITEMITAB INTO GLWITEM INDEX LST.
APPEND GLWITEM TO SUBGLITEMTAB.
ENDDO.
"$. Endregion 总账
"$. Region 客商
IF WHEAD-CVITEMS > 0 AND WHEAD-CVITEME > 0.
LST = WHEAD-CVITEMS - PCVROWST + 1 .
LEND = WHEAD-CVITEME - PCVROWST + 1.
LEND = LEND - LST + 1.
* INSERT LINES OF SITEMITAB[] FROM LST TO LEND INTO SUBITEMTAB[].
DO LEND TIMES.
LST = LST + 1.
READ TABLE SVCITEMITAB INTO VCWITEM INDEX LST.
APPEND VCWITEM TO SUBVCITEMTAB.
ENDDO.
ENDIF.
"$. Endregion 总账
"$. Region 税TAX
IF WHEAD-TAXITEMS > 0 AND WHEAD-TAXITEME > 0.
LST = WHEAD-TAXITEMS - PTXROWST + 1 .
LEND = WHEAD-TAXITEME - PTXROWST + 1.
LEND = LEND - LST + 1.
* INSERT LINES OF SITEMITAB[] FROM LST TO LEND INTO SUBITEMTAB[].
DO LEND TIMES.
LST = LST + 1.
READ TABLE STAXITEMITAB INTO TAXWITEM INDEX LST.
APPEND TAXWITEM TO SUBTAXITEMTAB.
ENDDO.
ENDIF.
"$. Endregion 总账
PERFORM CREATEFIDOC TABLES SUBGLITEMTAB SUBVCITEMTAB SUBTAXITEMTAB USING WHEAD CHANGING WHEAD-BELNR WHEAD-MSGTXT WHEAD-STATUS.
MODIFY SHEADITAB FROM WHEAD.
ll_tabix = sy-tabix.
CONCATENATE '第' ll_tabix '条/,' ll_lines '条' 'BELNR:' WHEAD-BELNR ' MSG:' WHEAD-MSGTXT ' 状态:'WHEAD-STATUS INTO ll_text.
CONDENSE ll_text."整理格式,去掉多余空格,格式更整齐
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'"调用进度条函数,传入百分比和消息
EXPORTING
percentage = ll_pecnt
TEXT = ll_text.
ENDLOOP.
RS_SELFIELD-REFRESH = 'X'.
ENDCASE.
ENDFORM. "USER_COMMAND
*&---------------------------------------------------------------------*
*& Form CREATESD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->ITEM text
* -->PHEAD text
* -->PVEBLN text
* -->PMSG text
*----------------------------------------------------------------------*
FORM CREATEFIDOC TABLES GLITEM TYPE STANDARD TABLE
CVITEM TYPE STANDARD TABLE
TAXITEM TYPE STANDARD TABLE USING
PHEAD LIKE WHEAD CHANGING PBELNR TYPE BKPF-BELNR
PMSG TYPE CHAR255 PSTATUS TYPE C.
DATA: L_EXTNAME TYPE STRING VALUE 'ZFIDOCEXT',
F_OBJ_TYPE LIKE BAPIACHE09-OBJ_TYPE,
F_OBJ_KEY LIKE BAPIACHE09-OBJ_KEY,
F_OBJ_SYS LIKE BAPIACHE09-OBJ_SYS,
ERRMSG LIKE TABLE OF BAPIRET2 WITH HEADER LINE.
IF PBELNR IS INITIAL AND PSTATUS NE 'S'.
CLEAR PSTATUS. CLEAR PMSG.
DATA:
DOCHEAD LIKE BAPIACHE09,
TACCOUNTGL LIKE BAPIACGL09 OCCURS 0 WITH HEADER LINE,
TACCOUNTRECEIVABLE LIKE BAPIACAR09 OCCURS 0 WITH HEADER LINE,
TACCOUNTPAYABLE LIKE BAPIACAP09 OCCURS 0 WITH HEADER LINE,
TACCOUNTTAX LIKE BAPIACTX09 OCCURS 0 WITH HEADER LINE,
TCURRENCYAMOUNT LIKE BAPIACCR09 OCCURS 0 WITH HEADER LINE,
TEXTENSION1 LIKE BAPIACEXTC OCCURS 0 WITH HEADER LINE,
TRETURN LIKE BAPIRET2 OCCURS 0 WITH HEADER LINE,
TZFIDOCEXT like ZFIDOCEXT OCCURS 0 WITH HEADER LINE.
DATA: IT_EXTENSION2 TYPE STANDARD TABLE OF BAPIPAREX WITH HEADER LINE.
DATA: WA_ZEXTEN LIKE ZFIDOCEXT. "ZFIDOCEXT就是刚才SE11创建的那个结构
DATA: Wshkzg LIKE tbsl-SHKZG.
"$. Region head
DOCHEAD-USERNAME = sy-UNAME."凭证中的过账日期
DOCHEAD-HEADER_TXT = PHEAD-HEADTXT."凭证抬头文本(出库单号)
DOCHEAD-COMP_CODE = phead-BUKRS."公司代码
DOCHEAD-DOC_DATE = PHEAD-DOCDATE."凭证日期
DOCHEAD-DOC_TYPE = PHEAD-DOCTYPE."凭证类型
DOCHEAD-PSTNG_DATE = PHEAD-PSTDATE."过账日期
DOCHEAD-TRANS_DATE = sy-datum.
DOCHEAD-FISC_YEAR = PHEAD-PSTDATE+0(4)."财年
DOCHEAD-FIS_PERIOD = PHEAD-PSTDATE+4(2)."期间
DOCHEAD-NEG_POSTNG = PHEAD-NETPST."反记账
"$. Endregion 客户供应商
"$. Region 总账/资产
LOOP AT GLITEM INTO GLWITEM.
clear TACCOUNTGL.clear TCURRENCYAMOUNT.clear TZFIDOCEXT.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = GLWITEM-ITEMACC
IMPORTING
OUTPUT = GLWITEM-ITEMACC.
TACCOUNTGL-ITEMNO_ACC = GLWITEM-ITEMACC.
TCURRENCYAMOUNT-AMT_BASE = '100'.
TCURRENCYAMOUNT-CURR_TYPE = '00'.
TCURRENCYAMOUNT-ITEMNO_ACC = GLWITEM-ITEMACC.
TCURRENCYAMOUNT-CURRENCY = GLWITEM-CURRENCY.
SELECT SINGLE SHKZG INTO wshkzg FROM tbsl
WHERE BSCHL = GLWITEM-BSCHL.
if wshkzg = 'H'.
GLWITEM-AMOUNT = -1 * GLWITEM-AMOUNT.
endif.
TCURRENCYAMOUNT-AMT_DOCCUR = GLWITEM-AMOUNT.
APPEND TCURRENCYAMOUNT.
TZFIDOCEXT-POSNR = GLWITEM-ITEMACC.
TZFIDOCEXT-BSCHL = GLWITEM-BSCHL.
TZFIDOCEXT-RSTGR = GLWITEM-RSTGR.
APPEND TZFIDOCEXT.
TACCOUNTGL-GL_ACCOUNT = GLWITEM-GL_ACCOUNT.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = TACCOUNTGL-GL_ACCOUNT
IMPORTING
OUTPUT = TACCOUNTGL-GL_ACCOUNT.
TACCOUNTGL-ITEM_TEXT = GLWITEM-ITEM_TEXT.
TACCOUNTGL-ALLOC_NMBR = GLWITEM-ALLOC_NMBR.
TACCOUNTGL-ACCT_TYPE = GLWITEM-ACCT_TYPE.
TACCOUNTGL-DOC_TYPE = GLWITEM-DOC_TYPE.
TACCOUNTGL-TAX_CODE = GLWITEM-TAXCODE.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = GLWITEM-COSTCENTER
IMPORTING
OUTPUT = GLWITEM-COSTCENTER.
TACCOUNTGL-COSTCENTER = GLWITEM-COSTCENTER.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = GLWITEM-BUS_AREA
IMPORTING
OUTPUT = GLWITEM-BUS_AREA.
TACCOUNTGL-BUS_AREA = GLWITEM-BUS_AREA.
TACCOUNTGL-COMP_CODE = phead-BUKRS.
IF TACCOUNTGL-ACCT_TYPE = 'A'. "资产
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = GLWITEM-ASSET_NO
IMPORTING
OUTPUT = GLWITEM-ASSET_NO.
TACCOUNTGL-ASSET_NO = GLWITEM-ASSET_NO.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = GLWITEM-SUB_NUMBER
IMPORTING
OUTPUT = GLWITEM-SUB_NUMBER.
TACCOUNTGL-SUB_NUMBER = GLWITEM-SUB_NUMBER.
SELECT SINGLE T095~KTANSW INTO TACCOUNTGL-GL_ACCOUNT
FROM ANLA
JOIN T095 ON ANLA~KTOGR = T095~KTOGR
WHERE ANLA~BUKRS = PHEAD-BUKRS AND
ANLA~ANLN1 = GLWITEM-ASSET_NO AND
ANLA~ANLN2 = GLWITEM-SUB_NUMBER AND
T095~KTOPL = 'T001'.
TACCOUNTGL-CS_TRANS_T = GLWITEM-CS_TRANS_T.
ENDIF.
APPEND TACCOUNTGL.
clear WA_ZEXTEN.
WA_ZEXTEN-POSNR = GLWITEM-ITEMACC.. "凭证行项目
WA_ZEXTEN-RSTGR = GLWITEM-RSTGR.
WA_ZEXTEN-BSCHL = GLWITEM-BSCHL.
IF GLWITEM-BSCHL = '70'.
WA_ZEXTEN-ANBWA = GLWITEM-CS_TRANS_T.
ENDIF.
IT_EXTENSION2-STRUCTURE = L_EXTNAME.
IT_EXTENSION2-VALUEPART1 = WA_ZEXTEN.
APPEND IT_EXTENSION2.
ENDLOOP.
"$. Endregion 总账/资产
"$. Region 客户供应商
LOOP AT CVITEM INTO VCWITEM.
clear TACCOUNTPAYABLE.clear TACCOUNTRECEIVABLE .clear TCURRENCYAMOUNT.clear TZFIDOCEXT.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = VCWITEM-ITEMACC
IMPORTING
OUTPUT = VCWITEM-ITEMACC.
TCURRENCYAMOUNT-ITEMNO_ACC = VCWITEM-ITEMACC.
TCURRENCYAMOUNT-AMT_BASE = '100'.
TCURRENCYAMOUNT-CURR_TYPE = '00'.
TCURRENCYAMOUNT-CURRENCY = VCWITEM-CURRENCY.
SELECT SINGLE SHKZG INTO wshkzg FROM tbsl
WHERE BSCHL = VCWITEM-BSCHL.
IF wshkzg = 'H'.
VCWITEM-AMOUNT = -1 * VCWITEM-AMOUNT.
ENDIF.
TCURRENCYAMOUNT-AMT_DOCCUR = VCWITEM-AMOUNT.
APPEND TCURRENCYAMOUNT.
TZFIDOCEXT-POSNR = VCWITEM-ITEMACC.
TZFIDOCEXT-BSCHL = VCWITEM-BSCHL.
TZFIDOCEXT-RSTGR = VCWITEM-RSTGR.
APPEND TZFIDOCEXT.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = VCWITEM-KNRVOR
IMPORTING
OUTPUT = VCWITEM-KNRVOR.
IF VCWITEM-DORK = 'D'." 客户
TACCOUNTRECEIVABLE-ITEMNO_ACC = VCWITEM-ITEMACC.
TACCOUNTRECEIVABLE-CUSTOMER = VCWITEM-KNRVOR.
TACCOUNTRECEIVABLE-COMP_CODE = phead-BUKRS.
TACCOUNTRECEIVABLE-BUS_AREA = VCWITEM-BUS_AREA.
TACCOUNTRECEIVABLE-SP_GL_IND = VCWITEM-SP_GL_IND.
TACCOUNTRECEIVABLE-ITEM_TEXT = VCWITEM-ITEM_TEXT.
TACCOUNTRECEIVABLE-ALLOC_NMBR = VCWITEM-ALLOC_NMBR.
IF TACCOUNTRECEIVABLE-GL_ACCOUNT IS INITIAL OR TACCOUNTRECEIVABLE-GL_ACCOUNT = SPACE.
SELECT SINGLE AKONT INTO TACCOUNTRECEIVABLE-GL_ACCOUNT FROM KNB1
WHERE KUNNR = VCWITEM-KNRVOR AND BUKRS = PHEAD-BUKRS.
if TACCOUNTRECEIVABLE-SP_GL_IND is not INITIAL and TACCOUNTRECEIVABLE-SP_GL_IND <> space.
SELECT SINGLE SKONT INTO TACCOUNTRECEIVABLE-GL_ACCOUNT FROM T074
WHERE KOART = 'D' AND UMSKZ = TACCOUNTRECEIVABLE-SP_GL_IND and HKONT = TACCOUNTRECEIVABLE-GL_ACCOUNT.
endif.
ENDIF.
append TACCOUNTRECEIVABLE.
ELSEIF VCWITEM-DORK = 'K'." 客户."D" 供应商
TACCOUNTPAYABLE-ITEMNO_ACC = VCWITEM-ITEMACC.
TACCOUNTPAYABLE-VENDOR_NO = VCWITEM-KNRVOR.
TACCOUNTPAYABLE-COMP_CODE = phead-BUKRS.
TACCOUNTPAYABLE-BUS_AREA = VCWITEM-BUS_AREA.
TACCOUNTPAYABLE-SP_GL_IND = VCWITEM-SP_GL_IND.
TACCOUNTPAYABLE-ITEM_TEXT = VCWITEM-ITEM_TEXT.
TACCOUNTPAYABLE-ALLOC_NMBR = VCWITEM-ALLOC_NMBR.
IF TACCOUNTPAYABLE-GL_ACCOUNT IS INITIAL OR TACCOUNTPAYABLE-GL_ACCOUNT = SPACE.
SELECT SINGLE AKONT INTO TACCOUNTPAYABLE-GL_ACCOUNT FROM LFB1
WHERE LIFNR = VCWITEM-KNRVOR AND BUKRS = PHEAD-BUKRS.
IF TACCOUNTRECEIVABLE-SP_GL_IND IS NOT INITIAL AND TACCOUNTRECEIVABLE-SP_GL_IND <> space.
SELECT SINGLE SKONT INTO TACCOUNTPAYABLE-GL_ACCOUNT FROM T074
WHERE KOART = 'D' AND UMSKZ = TACCOUNTRECEIVABLE-SP_GL_IND AND HKONT = TACCOUNTRECEIVABLE-GL_ACCOUNT.
ENDIF.
ENDIF.
append TACCOUNTPAYABLE.
ENDIF.
CLEAR WA_ZEXTEN.
WA_ZEXTEN-POSNR = VCWITEM-ITEMACC.. "凭证行项目
WA_ZEXTEN-RSTGR = VCWITEM-RSTGR.
WA_ZEXTEN-BSCHL = VCWITEM-BSCHL.
IT_EXTENSION2-STRUCTURE = L_EXTNAME.
IT_EXTENSION2-VALUEPART1 = WA_ZEXTEN.
APPEND IT_EXTENSION2.
ENDLOOP.
"$. Endregion 客户供应商
* data:ptaxflg TYPE C.
* ptaxflg = '' ."space'.
* "$. Region 税
* IF PTAXFLG = 'X'.
LOOP AT TAXITEM INTO TAXWITEM.
CLEAR TACCOUNTTAX .CLEAR TCURRENCYAMOUNT.CLEAR TZFIDOCEXT.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = TAXWITEM-ITEMACC
IMPORTING
OUTPUT = TAXWITEM-ITEMACC.
TZFIDOCEXT-POSNR = GLWITEM-ITEMACC.
TZFIDOCEXT-BSCHL = GLWITEM-BSCHL.
TZFIDOCEXT-RSTGR = GLWITEM-RSTGR.
APPEND TZFIDOCEXT.
DATA: LT_TAX_INFO LIKE TABLE OF RTAX1U15.
DATA: LS_TAX_INFO LIKE LINE OF LT_TAX_INFO.
DATA: LWRBTR LIKE BSEG-WRBTR.
LWRBTR = TAXWITEM-AMOUNT.
REFRESH LT_TAX_INFO[].
CALL FUNCTION 'CALCULATE_TAX_FROM_GROSSAMOUNT'
EXPORTING
I_BUKRS = PHEAD-BUKRS
I_MWSKZ = TAXWITEM-TAXCODE
I_WAERS = TAXWITEM-CURRENCY
I_WRBTR = LWRBTR
TABLES
T_MWDAT = LT_TAX_INFO.
READ TABLE LT_TAX_INFO INTO LS_TAX_INFO INDEX 1.
IF LS_TAX_INFO IS NOT INITIAL.
TACCOUNTTAX-ACCT_KEY = LS_TAX_INFO-KTOSL.
TACCOUNTTAX-COND_KEY = LS_TAX_INFO-KSCHL.
TACCOUNTTAX-GL_ACCOUNT = LS_TAX_INFO-HKONT.
TACCOUNTTAX-TAX_CODE = TAXWITEM-TAXCODE.
TACCOUNTTAX-TAXJURCODE = LS_TAX_INFO-TXJCD.
TACCOUNTTAX-TAXJURCODE_DEEP = LS_TAX_INFO-TXJCD_DEEP.
TACCOUNTTAX-TAXJURCODE_LEVEL = LS_TAX_INFO-TXJLV.
TACCOUNTTAX-ITEMNO_ACC = TAXWITEM-ITEMACC.
APPEND TACCOUNTTAX.
TCURRENCYAMOUNT-ITEMNO_ACC = TAXWITEM-ITEMACC.
TCURRENCYAMOUNT-AMT_BASE = '100'.
TCURRENCYAMOUNT-CURR_TYPE = '00'.
TCURRENCYAMOUNT-CURRENCY = TAXWITEM-CURRENCY.
SELECT SINGLE SHKZG INTO wshkzg FROM tbsl
WHERE BSCHL = TAXWITEM-BSCHL.
IF wshkzg = 'H'.
TAXWITEM-AMOUNT = -1 * TAXWITEM-AMOUNT.
LS_TAX_INFO-WMWST = -1 * LS_TAX_INFO-WMWST.
ENDIF.
TCURRENCYAMOUNT-AMT_DOCCUR = TAXWITEM-AMOUNT.
TCURRENCYAMOUNT-TAX_AMT = LS_TAX_INFO-WMWST.
APPEND TCURRENCYAMOUNT.
ENDIF.
CLEAR WA_ZEXTEN.
WA_ZEXTEN-POSNR = TAXWITEM-ITEMACC. "凭证行项目
WA_ZEXTEN-RSTGR = TAXWITEM-RSTGR.
WA_ZEXTEN-BSCHL = TAXWITEM-BSCHL.
IT_EXTENSION2-STRUCTURE = L_EXTNAME.
IT_EXTENSION2-VALUEPART1 = WA_ZEXTEN.
APPEND IT_EXTENSION2.
ENDLOOP.
* ENDIF.
"$. Endregion 税
"$. Region check 不产生会计凭证
CALL FUNCTION 'BAPI_ACC_DOCUMENT_CHECK'
EXPORTING
DOCUMENTHEADER = Dochead
TABLES
ACCOUNTGL = TACCOUNTGL[]
ACCOUNTRECEIVABLE = TACCOUNTRECEIVABLE[]
ACCOUNTPAYABLE = TACCOUNTPAYABLE[]
ACCOUNTTAX = TACCOUNTTAX[]
CURRENCYAMOUNT = TCURRENCYAMOUNT[]
EXTENSION2 = IT_EXTENSION2[]
return = ERRMSG[].
"$. Endregion check
data:ichk TYPE C.
loop at ERRMSG where type eq 'E'.
ichk = 'X'.
endloop.
"IF ICHK <> 'X'. "产生会计凭证 直接过帐
CLEAR ERRMSG[].
CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
EXPORTING
DOCUMENTHEADER = DOCHEAD
IMPORTING
OBJ_TYPE = F_OBJ_TYPE "传出得
OBJ_KEY = F_OBJ_KEY
OBJ_SYS = F_OBJ_SYS
TABLES
ACCOUNTGL = TACCOUNTGL[]
ACCOUNTRECEIVABLE = TACCOUNTRECEIVABLE[]
ACCOUNTPAYABLE = TACCOUNTPAYABLE[]
ACCOUNTTAX = TACCOUNTTAX[]
CURRENCYAMOUNT = TCURRENCYAMOUNT[]
EXTENSION2 = IT_EXTENSION2[]
RETURN = ERRMSG[].
clear ichk.
LOOP AT ERRMSG WHERE TYPE EQ 'E' or TYPE EQ 'A'.
ichk = 'X'.
ENDLOOP.
IF F_OBJ_KEY IS NOT INITIAL.
PBELNR = F_OBJ_KEY+0(10).
ENDIF.
"ENDIF.
IF ichk = 'X'.
DATA:logfile TYPE RLGRAP-FILENAME.
CONCATENATE P_FILE PHEAD-HEADTXT '.log' INTO logfile.
CALL FUNCTION 'WS_DOWNLOAD'
EXPORTING
* BIN_FILESIZE = ' '
CODEPAGE = '8400'
FILENAME = logfile
FILETYPE = 'DAT'
TABLES
DATA_TAB = ERRMSG.
CALL FUNCTION 'GUI_EXEC'
EXPORTING
command = 'cmd /c'
PARAMETER = logfile.
pSTATUS = 'E'.
PMSG = '请参考' && logfile && '文件修改后再提交'.
ENDIF.
IF ERRMSG-TYPE = 'E' OR ERRMSG-TYPE = 'A'.
PSTATUS = ERRMSG-TYPE.
PMSG = PMSG && ERRMSG-MESSAGE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ELSE.
PSTATUS = 'S'.
PMSG = '会计凭证创建成功,凭证号:' && PBELNR.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
ENDIF.
ENDIF.
ENDFORM. "CREATESD
*&---------------------------------------------------------------------*
*& Form DOWNLOAD_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM DOWNLOAD_DATA .
l_filename = 'ZF_02.xlsx'.
l_muban = 'ZF_02'.
*&---下载模板
PERFORM frm_get_fullpath CHANGING gv_fullpath gv_path gv_name.
*&---路径为空则退出
IF gv_fullpath IS INITIAL.
MESSAGE '用户取消操作' TYPE 'S'.
RETURN.
ENDIF.
PERFORM frm_down USING gv_fullpath.
ENDFORM. " DOWNLOAD_DATA
*&---------------------------------------------------------------------*
*& Form UPOLOAD_FILE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->LT_INPUT text
* -->SHEET_NAME text
*----------------------------------------------------------------------*
FORM UPOLOAD_FILE TABLES LTSTADTBL TYPE STANDARD TABLE USING SHEET_NAME TYPE ALSMEX_TABLINE-VALUE
BEGINCOL TYPE i beginrow TYPE i encol TYPE i endrow TYPE i.
DATA GT_UPLOAD LIKE TABLE OF ALSMEX_TABLINE WITH HEADER LINE.
DATA: LS_I TYPE I.
FIELD-symbols <F>.
CALL FUNCTION 'ZALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
FILENAME = PPFILE
I_BEGIN_COL = BEGINCOL
I_BEGIN_ROW = BEGINROW
I_END_COL = ENCOL
I_END_ROW = ENDROW
SHEET_NAME = SHEET_NAME"指定SHEET名
TABLES
INTERN = GT_UPLOAD
EXCEPTIONS
INCONSISTENT_PARAMETERS = 1
UPLOAD_OLE = 2
OTHERS = 3.
IF SY-SUBRC = 0 OR SY-SUBRC = 2.
*--->处理读取出的数据
SORT GT_UPLOAD BY ROW COL.
LOOP AT GT_UPLOAD.
LS_I = GT_UPLOAD-COL.
ASSIGN COMPONENT LS_I OF STRUCTURE LTSTADTBL TO <F>.
<F> = GT_UPLOAD-VALUE.
AT END OF ROW.
APPEND LTSTADTBL to LTSTADTBL.
CLEAR:LTSTADTBL.
ENDAT.
ENDLOOP.
free GT_UPLOAD[].
ELSE.
WRITE: / 'EXCEL UPLOAD FAILED ', PPFILE , SY-SUBRC.
ENDIF.
ENDFORM. " UPOLOAD_FILE
*&---------------------------------------------------------------------*
*& Form GETFILECAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->LT_INPUT text
* -->SHEET_NAME text
* -->BEGINCOL text
* -->BEGINROW text
* -->ENCOL text
* -->ENDROW text
*----------------------------------------------------------------------*
FORM GETFILECAT TABLES ITFIELDCAT TYPE LVC_T_FCAT USING SHEET_NAME TYPE ALSMEX_TABLINE-VALUE
BEGINCOL TYPE i beginrow TYPE i encol TYPE i endrow TYPE i.
DATA GT_UPLOAD LIKE TABLE OF ALSMEX_TABLINE WITH HEADER LINE.
DATA: LS_I TYPE I.
FIELD-symbols <F>.
CALL FUNCTION 'ZALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
FILENAME = P_FILE
I_BEGIN_COL = BEGINCOL
I_BEGIN_ROW = BEGINROW
I_END_COL = ENCOL
I_END_ROW = ENDROW
SHEET_NAME = SHEET_NAME"指定SHEET名
TABLES
INTERN = GT_UPLOAD
EXCEPTIONS
INCONSISTENT_PARAMETERS = 1
UPLOAD_OLE = 2
OTHERS = 3.
CLEAR IT_FIELDCAT[].
IF SY-SUBRC = 0.
*--->处理读取出的数据
SORT GT_UPLOAD BY ROW COL.
LOOP AT GT_UPLOAD.
PERFORM SET_FIELDCAT TABLES ITFIELDCAT USING GT_UPLOAD-VALUE '' '' '' '' '' '' '' ''.
ENDLOOP.
ELSE.
WRITE: / 'EXCEL UPLOAD FAILED ', P_FILE, SY-SUBRC.
ENDIF.
ENdform. "GETFILECAT
*&---------------------------------------------------------------------*
*& Form FRM_GET_FULLPATH
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_GV_FULLPATH text
* <--P_GV_PATH text
* <--P_GV_NAME text
*----------------------------------------------------------------------*
FORM frm_get_fullpath CHANGING pv_fullpath TYPE string
pv_path TYPE string
pv_name TYPE string.
DATA: lv_init_path TYPE string,
lv_init_fname TYPE string,
lv_path TYPE string,
lv_filename TYPE string,
lv_fullpath TYPE string.
*&---初始名称(输出的文件名称)
* concatenate 'Material_Doc_' SY-DATUM '.xslx' into L_INIT_FNAME.
lv_init_fname = l_filename.
* 获取桌面路径
CALL METHOD cl_gui_frontend_services=>get_desktop_directory
CHANGING
desktop_directory = lv_init_path
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4.
IF sy-subrc <> 0.
EXIT.
ENDIF.
*&---用户选择名称、路径
CALL METHOD cl_gui_frontend_services=>file_save_dialog
EXPORTING
* window_title = '指定保存文件名'
* default_extension = 'DOC'
default_file_name = lv_init_fname
* FILE_FILTER = CL_GUI_FRONTEND_SERVICES=>FILETYPE_EXCEL
* FILE_FILTER = CL_GUI_FRONTEND_SERVICES=>FILETYPE_WORD
initial_directory = lv_init_path
prompt_on_overwrite = 'X'
CHANGING
filename = lv_filename
path = lv_path
fullpath = lv_fullpath
* USER_ACTION =
* FILE_ENCODING =
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4.
IF sy-subrc = 0.
pv_fullpath = lv_fullpath.
pv_path = lv_path.
ENDIF.
ENDFORM. " FRM_GET_FULLPATH
*--------------------------------------------------------------------*
* 下载文件
*--------------------------------------------------------------------*
FORM frm_down USING pr_filename.
DATA: lv_objdata LIKE wwwdatatab,
lv_mime LIKE w3mime,
lv_destination LIKE rlgrap-filename,
lv_objnam TYPE string,
lv_rc LIKE sy-subrc,
lv_errtxt TYPE string.
DATA: lv_filename TYPE string,
lv_result,
lv_subrc TYPE sy-subrc.
DATA: lv_objid TYPE wwwdatatab-objid .
lv_objid = l_muban. "上传的模版名称
*&---查找文件是否存在。
SELECT SINGLE relid objid
FROM wwwdata
INTO CORRESPONDING FIELDS OF lv_objdata
WHERE srtf2 = 0
AND relid = 'MI'
AND objid = lv_objid.
*&---判断模版不存在则报错
IF sy-subrc NE 0 OR lv_objdata-objid EQ space.
CONCATENATE '模板文件:' lv_objid '不存在,请用TCODE:SMW0进行加载'
INTO lv_errtxt.
MESSAGE lv_errtxt TYPE 'E'.
ENDIF.
lv_filename = pr_filename.
"判断本地地址是否已经存在此文件。
CALL METHOD cl_gui_frontend_services=>file_exist
EXPORTING
file = lv_filename
RECEIVING
result = lv_result
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
wrong_parameter = 3
not_supported_by_gui = 4
OTHERS = 5.
IF sy-subrc <> 0.
CASE sy-subrc.
WHEN 1.
WHEN 2.
WHEN OTHERS.
ENDCASE.
ENDIF.
IF lv_result EQ 'X'. "如果存在则删除原始文件,重新覆盖
CALL METHOD cl_gui_frontend_services=>file_delete
EXPORTING
filename = lv_filename
CHANGING
rc = lv_subrc
EXCEPTIONS
file_delete_failed = 1
cntl_error = 2
error_no_gui = 3
file_not_found = 4
access_denied = 5
unknown_error = 6
not_supported_by_gui = 7
wrong_parameter = 8
OTHERS = 9.
IF sy-subrc <> 0.
CASE sy-subrc.
WHEN 1.
WHEN 2.
WHEN OTHERS.
ENDCASE.
ENDIF.
IF lv_subrc <> 0. "如果删除失败,则报错。
CONCATENATE '同名EXCEL文件已打开' '请关闭该EXCEL后重试。'
INTO lv_errtxt.
MESSAGE lv_errtxt TYPE 'E'.
ENDIF.
ENDIF.
lv_destination = pr_filename.
*&---下载模版。
CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
EXPORTING
KEY = lv_objdata
destination = lv_destination
IMPORTING
rc = lv_rc.
IF lv_rc NE 0.
CONCATENATE '模板文件' '下载失败' INTO lv_errtxt.
MESSAGE lv_errtxt TYPE 'E'.
ENDIF.
ENDFORM. "frm_down
*&---------------------------------------------------------------------*
*& Form SET_FIELDCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->CT_FIELDCAT text
* -->UV_FIELDNAME text
* -->UV_REF_FIELD text
* -->UV_REF_TABLE text
* -->UV_EDIT_MASK text
* -->UV_TEXT text
* -->UV_TEXTS text
* -->UV_EMPHASIZE text
* -->UV_FIX_COLUMN text
* -->UV_HIER_CPOS text
*----------------------------------------------------------------------*
FORM SET_FIELDCAT TABLES CT_FIELDCAT
USING UV_FIELDNAME
UV_REF_FIELD
UV_REF_TABLE
UV_EDIT_MASK
UV_TEXT
UV_TEXTS
UV_EMPHASIZE
UV_FIX_COLUMN
UV_HIER_CPOS.
DATA: LW_FIELD TYPE LVC_S_FCAT.
CLEAR: LW_FIELD.
LW_FIELD-HIER_CPOS = UV_HIER_CPOS.
LW_FIELD-FIX_COLUMN = UV_FIX_COLUMN.
LW_FIELD-FIELDNAME = UV_FIELDNAME.
LW_FIELD-REF_FIELD = UV_REF_FIELD.
LW_FIELD-REF_TABLE = UV_REF_TABLE.
LW_FIELD-EDIT_MASK = UV_EDIT_MASK.
LW_FIELD-EMPHASIZE = UV_EMPHASIZE.
LW_FIELD-COLTEXT = UV_TEXT.
LW_FIELD-SELTEXT = UV_TEXT.
LW_FIELD-SCRTEXT_L = UV_TEXT.
LW_FIELD-SCRTEXT_M = UV_TEXT.
LW_FIELD-SCRTEXT_S = UV_TEXTS.
APPEND LW_FIELD TO CT_FIELDCAT.
ENDFORM. " F_SET_FIELDCAT
*&---------------------------------------------------------------------*
*& Form DISALV
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM DISALV .
PERFORM BUILD_FIELDCAT USING 'HEADTXT' '抬头文本' ''.
PERFORM BUILD_FIELDCAT USING 'BUKRS' '公司代码' ''.
PERFORM BUILD_FIELDCAT USING 'DOCDATE' '过账日期' ''.
PERFORM BUILD_FIELDCAT USING 'PSTDATE' '抬头文本' ''.
PERFORM BUILD_FIELDCAT USING 'DOCTYPE' '凭证类型' ''.
PERFORM BUILD_FIELDCAT USING 'NETPST' '反冲' ''.
PERFORM BUILD_FIELDCAT USING 'GLITEMS' '总账行项目起始行' ''.
PERFORM BUILD_FIELDCAT USING 'GLITEME' '总账行项目结束行' ''.
PERFORM BUILD_FIELDCAT USING 'CVITEMS' '客商行项目起始行' ''.
PERFORM BUILD_FIELDCAT USING 'CVITEME' '客商行项目结束行' ''.
PERFORM BUILD_FIELDCAT USING 'TAXITEMS' '税行项目起始行' ''.
PERFORM BUILD_FIELDCAT USING 'TAXITEME' '税行项目结束行' ''.
PERFORM BUILD_FIELDCAT USING 'BELNR' '会计凭证' 'X'.
PERFORM BUILD_FIELDCAT USING 'STATUS' '状态' ''.
PERFORM BUILD_FIELDCAT USING 'MSGTXT' '文本' ''.
* gs_layout-cwidth_opt = 'X'.
gs_layout-zebra = 'X'.
DATA:I_GRID_SETTINGS TYPE LVC_S_GLAY,
TITLE TYPE LVC_TITLE,
IT_EVENTS TYPE SLIS_T_EVENT,
IS_LAYOUT TYPE SLIS_LAYOUT_ALV,
I_CALLBACK_PROGRAM TYPE SY-REPID.
I_GRID_SETTINGS-EDT_CLL_CB = 'X'. "更改数据后更新表数据
PERFORM LAYOUT_INIT USING IS_LAYOUT.
I_CALLBACK_PROGRAM = SY-REPID.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = I_CALLBACK_PROGRAM
I_GRID_TITLE = TITLE
I_GRID_SETTINGS = I_GRID_SETTINGS
IS_LAYOUT = IS_LAYOUT
I_CALLBACK_PF_STATUS_SET = 'SET_PF_STATUS'
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
IT_FIELDCAT = GT_FIELDCAT
IT_EVENTS = IT_EVENTS
TABLES
T_OUTTAB = SHEADITAB[]
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
ENDFORM. " DISALV
*&---------------------------------------------------------------------*
*& Form BUILD_FIELDCAT
*&---------------------------------------------------------------------*
* TEXT
*----------------------------------------------------------------------*
FORM BUILD_FIELDCAT USING P_FIELDNAME TYPE FIELDNAME
P_REPTEXT TYPE LVC_QFNAME
P_NO_ZERO TYPE XFLAG.
GS_FIELDCAT-FIELDNAME = P_FIELDNAME.
GS_FIELDCAT-REPTEXT_DDIC = P_REPTEXT.
GS_FIELDCAT-NO_ZERO = P_NO_ZERO.
APPEND GS_FIELDCAT TO GT_FIELDCAT.
CLEAR: GS_FIELDCAT.
ENDFORM. "BUILD_FIELDCAT
" FIELDCAT_INIT
*&---------------------------------------------------------------------*
*& FORM LAYOUT_INIT
*&---------------------------------------------------------------------*
* TEXT LAYOUT属性设置,双击响应字段设置
*----------------------------------------------------------------------*
* -->P_IS_LAYOUT TEXT
*----------------------------------------------------------------------*
FORM LAYOUT_INIT USING IS_LAYOUT TYPE SLIS_LAYOUT_ALV.
IS_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
ENDFORM. " LAYOUT_INIT
*&--------------------------------------------------------------------- *
*& FORM G_STATUS_FORM 调用自定义屏幕
*&---------------------------------------------------------------------
FORM SET_PF_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB.
SET PF-STATUS 'STANDARD' EXCLUDING RT_EXTAB.
ENDFORM. "SET_PF_STATUS
客户供应商付款 如果特别总账标记加上过账码可能会不匹配 报 F5761 错误
增强代码
method IF_EX_ACC_DOCUMENT~CHANGE.
data: WA_EXTENSION type BAPIPAREX,
ZEXT_DATA type ZFIDOCEXT.
field-symbols: <ACCIT> type ACCIT.
if C_EXTENSION2[] is not initial.
loop at C_EXTENSION2 into WA_EXTENSION
where STRUCTURE = 'ZFIDOCEXT'.
ZEXT_DATA = WA_EXTENSION-VALUEPART1.
read table C_ACCIT assigning <ACCIT> with key POSNR = ZEXT_DATA-POSNR.
if SY-SUBRC = 0.
<ACCIT>-BSCHL = ZEXT_DATA-BSCHL.
if <ACCIT>-BSCHL = '70'.
<ACCIT>-ANBWA = ZEXT_DATA-ANBWA.
endif.
<ACCIT>-RSTGR = ZEXT_DATA-RSTGR.
endif.
ENDLOOP.
" PARK 预制凭证
READ TABLE C_EXTENSION2 INTO WA_EXTENSION WITH KEY STRUCTURE = 'PARK'.
IF SY-SUBRC = 0.
MOVE '2' TO C_ACCHD-STATUS_NEW.
DELETE C_EXTENSION2 INDEX SY-TABIX.
ENDIF.
endif.
endmethod.
那就在客户供应商 哪个页签把 特别总账标记去掉 让系统依据过账码自己生成总账