目录
一、程序源代码
*&---------------------------------------------------------------------*
*& Report ZBAPI001
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZBAPI001.
TYPE-POOLS: ICON.
TYPE-POOLS SLIS.
TABLES SSCRFIELDS.
SELECTION-SCREEN BEGIN OF BLOCK SCR1 WITH FRAME TITLE TEXT-001.
PARAMETERS: P_PATH TYPE STRING DEFAULT 'D:\ZDATA.txt' OBLIGATORY.
SELECTION-SCREEN END OF BLOCK SCR1.
TYPES: BEGIN OF ST_TXT,
SAKNR TYPE CHAR10, "科目编码
BUKRS TYPE CHAR4, "公司代码
TXT TYPE CHAR20, "科目名称
TXT_LONG TYPE CHAR50, "科目名称
GLACCOUNT_TYPE TYPE CHAR1, "总账科目类型
KTOKS TYPE CHAR4, "科目组
WAERS TYPE CHAR5, "科目货币
ZUAWA TYPE CHAR3, "排序码
FSTAG TYPE CHAR4, "字段状态组
XINTB TYPE CHAR1, "自动记帐
MITKZ TYPE CHAR1, "统驭科目的科目类别
XOPVW TYPE CHAR1, "未清项目管理
MWSKZ TYPE CHAR2, "税务类型
XMWNO TYPE CHAR1, "允许含/不含税过帐
XSALH TYPE CHAR1, "仅限以本位币记的余额
KATYP TYPE CHAR2, "成本要素类别
ICON TYPE ICON-NAME,
ZSEL TYPE CHAR1,
TYPE TYPE CHAR1,
MESSAGE TYPE CHAR255,
END OF ST_TXT.
DATA: WA_TXT TYPE ST_TXT,
IT_TXT LIKE TABLE OF WA_TXT.
TYPE-POOLS: ICON.
TYPE-POOLS SLIS.
DATA: IS_LAYOUT TYPE SLIS_LAYOUT_ALV, "ALV输出样式
IT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV, "ALV输出的头项目(内表)
WA_FIELDCAT TYPE SLIS_FIELDCAT_ALV, "ALV输出的头项目(工作区)
WA_REPID LIKE SY-REPID. "程序名
DATA: G_TYPE TYPE C,
G_MSTRING(225) TYPE C.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_PATH.
PERFORM GET_PC_FILENAME.
START-OF-SELECTION.
PERFORM UPLOAD_FILE.
LOOP AT IT_TXT INTO WA_TXT.
WA_TXT-ZSEL = 'X'.
MODIFY IT_TXT FROM WA_TXT TRANSPORTING ZSEL.
ENDLOOP.
PERFORM FRM_DO_BDC.
END-OF-SELECTION.
PERFORM FRM_SHOW_DATA.
*&---------------------------------------------------------------------*
*& Form GET_PC_FILENAME
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_PC_FILENAME .
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
MASK = '文本文件,*.txt.'
MODE = 'O'
IMPORTING
FILENAME = P_PATH
EXCEPTIONS
INV_WINSYS = 1
NO_BATCH = 2
SELECTION_CANCEL = 3
SELECTION_ERROR = 4
OTHERS = 5.
IF SY-SUBRC NE 0 AND SY-SUBRC NE 3.
MESSAGE '请输入有效的文件名!' TYPE 'E'.
ENDIF.
ENDFORM. " GET_PC_FILENAME
*&---------------------------------------------------------------------*
*& Form UPLOAD_FILE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM UPLOAD_FILE .
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
FILENAME = P_PATH
FILETYPE = 'ASC'
HAS_FIELD_SEPARATOR = 'X'
* HEADER_LENGTH = 0
* READ_BY_LINE = 'X'
* DAT_MODE = ' '
* CODEPAGE = ' '
* IGNORE_CERR = ABAP_TRUE
* REPLACEMENT = '#'
* CHECK_BOM = ' '
* VIRUS_SCAN_PROFILE =
* IMPORTING
* FILELENGTH = UP_COUNT
* HEADER =
TABLES
DATA_TAB = IT_TXT
EXCEPTIONS
FILE_OPEN_ERROR = 1
FILE_READ_ERROR = 2
NO_BATCH = 3
GUI_REFUSE_FILETRANSFER = 4
INVALID_TYPE = 5
NO_AUTHORITY = 6
UNKNOWN_ERROR = 7
BAD_DATA_FORMAT = 8
HEADER_NOT_ALLOWED = 9
SEPARATOR_NOT_ALLOWED = 10
HEADER_TOO_LONG = 11
UNKNOWN_DP_ERROR = 12
ACCESS_DENIED = 13
DP_OUT_OF_MEMORY = 14
DISK_FULL = 15
DP_TIMEOUT = 16
OTHERS = 17.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSE.
IF IT_TXT IS INITIAL.
MESSAGE '上载数据为空' TYPE 'E'.
ELSE.
DELETE IT_TXT INDEX 1.
IF IT_TXT IS INITIAL.
MESSAGE '上载数据为空' TYPE 'E'.
ELSE.
ENDIF.
ENDIF.
ENDIF.
ENDFORM. " UPLOAD_FILE
*&---------------------------------------------------------------------*
*& Form FRM_SHOW_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_SHOW_DATA .
WA_REPID = SY-REPID. "得到程序名
IS_LAYOUT-ZEBRA = 'X'. "颜色相间显示
IS_LAYOUT-COLWIDTH_OPTIMIZE = 'X'. "优化列宽选项
IS_LAYOUT-BOX_FIELDNAME = 'ZSEL'.
DATA: DE_POS TYPE I.
DE_POS = DE_POS + 1.
CLEAR WA_FIELDCAT.
WA_FIELDCAT-COL_POS = DE_POS.
* WA_FIELDCAT-KEY = 'X'.
WA_FIELDCAT-FIELDNAME = 'ICON'.
WA_FIELDCAT-ICON = 'X'.
WA_FIELDCAT-SELTEXT_L = ''.
WA_FIELDCAT-SELTEXT_M = ''.
WA_FIELDCAT-SELTEXT_S = ''.
WA_FIELDCAT-DDICTXT = 'L'.
APPEND WA_FIELDCAT TO IT_FIELDCAT.
DE_POS = DE_POS + 1.
CLEAR WA_FIELDCAT.
WA_FIELDCAT-COL_POS = DE_POS.
* WA_FIELDCAT-KEY = 'X'.
WA_FIELDCAT-FIELDNAME = 'SAKNR'.
WA_FIELDCAT-REF_TABNAME = ''.
WA_FIELDCAT-REF_FIELDNAME = ''.
WA_FIELDCAT-SELTEXT_L = '科目编码'.
WA_FIELDCAT-SELTEXT_M = '科目编码'.
WA_FIELDCAT-SELTEXT_S = '科目编码'.
WA_FIELDCAT-DDICTXT = 'L'.
APPEND WA_FIELDCAT TO IT_FIELDCAT.
DE_POS = DE_POS + 1.
CLEAR WA_FIELDCAT.
WA_FIELDCAT-COL_POS = DE_POS.
* WA_FIELDCAT-KEY = 'X'.
WA_FIELDCAT-FIELDNAME = 'BUKRS'.
WA_FIELDCAT-REF_TABNAME = ''.
WA_FIELDCAT-REF_FIELDNAME = ''.
WA_FIELDCAT-SELTEXT_L = '公司代码'.
WA_FIELDCAT-SELTEXT_M = '公司代码'.
WA_FIELDCAT-SELTEXT_S = '公司代码'.
WA_FIELDCAT-DDICTXT = 'L'.
APPEND WA_FIELDCAT TO IT_FIELDCAT.
DE_POS = DE_POS + 1.
CLEAR WA_FIELDCAT.
WA_FIELDCAT-COL_POS = DE_POS.
* WA_FIELDCAT-KEY = 'X'.
WA_FIELDCAT-FIELDNAME = 'TXT'.
WA_FIELDCAT-REF_TABNAME = ''.
WA_FIELDCAT-REF_FIELDNAME = ''.
WA_FIELDCAT-SELTEXT_L = '科目名称(短)'.
WA_FIELDCAT-SELTEXT_M = '科目名称(短)'.
WA_FIELDCAT-SELTEXT_S = '科目名称(短)'.
WA_FIELDCAT-DDICTXT = 'L'.
APPEND WA_FIELDCAT TO IT_FIELDCAT.
DE_POS = DE_POS + 1.
CLEAR WA_FIELDCAT.
WA_FIELDCAT-COL_POS = DE_POS.
* WA_FIELDCAT-KEY = 'X'.
WA_FIELDCAT-FIELDNAME = 'TXT_LONG'.
WA_FIELDCAT-REF_TABNAME = ''.
WA_FIELDCAT-REF_FIELDNAME = ''.
WA_FIELDCAT-SELTEXT_L = '科目名称(长)'.
WA_FIELDCAT-SELTEXT_M = '科目名称(长)'.
WA_FIELDCAT-SELTEXT_S = '科目名称(长)'.
WA_FIELDCAT-DDICTXT = 'L'.
APPEND WA_FIELDCAT TO IT_FIELDCAT.
DE_POS = DE_POS + 1.
CLEAR WA_FIELDCAT.
WA_FIELDCAT-COL_POS = DE_POS.
* WA_FIELDCAT-KEY = 'X'.
WA_FIELDCAT-FIELDNAME = 'GLACCOUNT_TYPE'.
WA_FIELDCAT-REF_TABNAME = ''.
WA_FIELDCAT-REF_FIELDNAME = ''.
WA_FIELDCAT-SELTEXT_L = '总账科目类型'.
WA_FIELDCAT-SELTEXT_M = '总账科目类型'.
WA_FIELDCAT-SELTEXT_S = '总账科目类型'.
WA_FIELDCAT-DDICTXT = 'L'.
APPEND WA_FIELDCAT TO IT_FIELDCAT.
DE_POS = DE_POS + 1.
CLEAR WA_FIELDCAT.
WA_FIELDCAT-COL_POS = DE_POS.
* WA_FIELDCAT-KEY = 'X'.
WA_FIELDCAT-FIELDNAME = 'KTOKS'.
WA_FIELDCAT-REF_TABNAME = ''.
WA_FIELDCAT-REF_FIELDNAME = ''.
WA_FIELDCAT-SELTEXT_L = '科目组'.
WA_FIELDCAT-SELTEXT_M = '科目组'.
WA_FIELDCAT-SELTEXT_S = '科目组'.
WA_FIELDCAT-DDICTXT = 'L'.
APPEND WA_FIELDCAT TO IT_FIELDCAT.
DE_POS = DE_POS + 1.
CLEAR WA_FIELDCAT.
WA_FIELDCAT-COL_POS = DE_POS.
* WA_FIELDCAT-KEY = 'X'.
WA_FIELDCAT-FIELDNAME = 'WAERS'.
WA_FIELDCAT-REF_TABNAME = ''.
WA_FIELDCAT-REF_FIELDNAME = ''.
WA_FIELDCAT-SELTEXT_L = '科目货币'.
WA_FIELDCAT-SELTEXT_M = '科目货币'.
WA_FIELDCAT-SELTEXT_S = '科目货币'.
WA_FIELDCAT-DDICTXT = 'L'.
APPEND WA_FIELDCAT TO IT_FIELDCAT.
* DE_POS = DE_POS + 1.
* CLEAR WA_FIELDCAT.
* WA_FIELDCAT-COL_POS = DE_POS.
** WA_FIELDCAT-KEY = 'X'.
* WA_FIELDCAT-FIELDNAME = 'XKRES'.
* WA_FIELDCAT-REF_TABNAME = ''.
* WA_FIELDCAT-REF_FIELDNAME = ''.
* WA_FIELDCAT-SELTEXT_L = '显示行项目'.
* WA_FIELDCAT-SELTEXT_M = '显示行项目'.
* WA_FIELDCAT-SELTEXT_S = '显示行项目'.
* WA_FIELDCAT-DDICTXT = 'L'.
* APPEND WA_FIELDCAT TO IT_FIELDCAT.
DE_POS = DE_POS + 1.
CLEAR WA_FIELDCAT.
WA_FIELDCAT-COL_POS = DE_POS.
* WA_FIELDCAT-KEY = 'X'.
WA_FIELDCAT-FIELDNAME = 'ZUAWA'.
WA_FIELDCAT-REF_TABNAME = ''.
WA_FIELDCAT-REF_FIELDNAME = ''.
WA_FIELDCAT-SELTEXT_L = '排序码'.
WA_FIELDCAT-SELTEXT_M = '排序码'.
WA_FIELDCAT-SELTEXT_S = '排序码'.
WA_FIELDCAT-DDICTXT = 'L'.
APPEND WA_FIELDCAT TO IT_FIELDCAT.
DE_POS = DE_POS + 1.
CLEAR WA_FIELDCAT.
WA_FIELDCAT-COL_POS = DE_POS.
* WA_FIELDCAT-KEY = 'X'.
WA_FIELDCAT-FIELDNAME = 'FSTAG'.
WA_FIELDCAT-REF_TABNAME = ''.
WA_FIELDCAT-REF_FIELDNAME = ''.
WA_FIELDCAT-SELTEXT_L = '字段状态组'.
WA_FIELDCAT-SELTEXT_M = '字段状态组'.
WA_FIELDCAT-SELTEXT_S = '字段状态组'.
WA_FIELDCAT-DDICTXT = 'L'.
APPEND WA_FIELDCAT TO IT_FIELDCAT.
DE_POS = DE_POS + 1.
CLEAR WA_FIELDCAT.
WA_FIELDCAT-COL_POS = DE_POS.
* WA_FIELDCAT-KEY = 'X'.
WA_FIELDCAT-FIELDNAME = 'XINTB'.
WA_FIELDCAT-REF_TABNAME = ''.
WA_FIELDCAT-REF_FIELDNAME = ''.
WA_FIELDCAT-SELTEXT_L = '自动记帐'.
WA_FIELDCAT-SELTEXT_M = '自动记帐'.
WA_FIELDCAT-SELTEXT_S = '自动记帐'.
WA_FIELDCAT-DDICTXT = 'L'.
APPEND WA_FIELDCAT TO IT_FIELDCAT.
DE_POS = DE_POS + 1.
CLEAR WA_FIELDCAT.
WA_FIELDCAT-COL_POS = DE_POS.
* WA_FIELDCAT-KEY = 'X'.
WA_FIELDCAT-FIELDNAME = 'MITKZ'.
WA_FIELDCAT-REF_TABNAME = ''.
WA_FIELDCAT-REF_FIELDNAME = ''.
WA_FIELDCAT-SELTEXT_L = '统驭科目的科目类别'.
WA_FIELDCAT-SELTEXT_M = '统驭科目的科目类别'.
WA_FIELDCAT-SELTEXT_S = '统驭科目的科目类别'.
WA_FIELDCAT-DDICTXT = 'L'.
APPEND WA_FIELDCAT TO IT_FIELDCAT.
DE_POS = DE_POS + 1.
CLEAR WA_FIELDCAT.
WA_FIELDCAT-COL_POS = DE_POS.
* WA_FIELDCAT-KEY = 'X'.
WA_FIELDCAT-FIELDNAME = 'XOPVW'.
WA_FIELDCAT-REF_TABNAME = ''.
WA_FIELDCAT-REF_FIELDNAME = ''.
WA_FIELDCAT-SELTEXT_L = '未清项目管理'.
WA_FIELDCAT-SELTEXT_M = '未清项目管理'.
WA_FIELDCAT-SELTEXT_S = '未清项目管理'.
WA_FIELDCAT-DDICTXT = 'L'.
APPEND WA_FIELDCAT TO IT_FIELDCAT.
DE_POS = DE_POS + 1.
CLEAR WA_FIELDCAT.
WA_FIELDCAT-COL_POS = DE_POS.
* WA_FIELDCAT-KEY = 'X'.
WA_FIELDCAT-FIELDNAME = 'MWSKZ'.
WA_FIELDCAT-REF_TABNAME = ''.
WA_FIELDCAT-REF_FIELDNAME = ''.
WA_FIELDCAT-SELTEXT_L = '税务类型'.
WA_FIELDCAT-SELTEXT_M = '税务类型'.
WA_FIELDCAT-SELTEXT_S = '税务类型'.
WA_FIELDCAT-DDICTXT = 'L'.
APPEND WA_FIELDCAT TO IT_FIELDCAT.
DE_POS = DE_POS + 1.
CLEAR WA_FIELDCAT.
WA_FIELDCAT-COL_POS = DE_POS.
* WA_FIELDCAT-KEY = 'X'.
WA_FIELDCAT-FIELDNAME = 'XMWNO'.
WA_FIELDCAT-REF_TABNAME = ''.
WA_FIELDCAT-REF_FIELDNAME = ''.
WA_FIELDCAT-SELTEXT_L = '允许含/不含税过帐'.
WA_FIELDCAT-SELTEXT_M = '允许含/不含税过帐'.
WA_FIELDCAT-SELTEXT_S = '允许含/不含税过帐'.
WA_FIELDCAT-DDICTXT = 'L'.
APPEND WA_FIELDCAT TO IT_FIELDCAT.
DE_POS = DE_POS + 1.
CLEAR WA_FIELDCAT.
WA_FIELDCAT-COL_POS = DE_POS.
* WA_FIELDCAT-KEY = 'X'.
WA_FIELDCAT-FIELDNAME = 'XSALH'.
WA_FIELDCAT-REF_TABNAME = ''.
WA_FIELDCAT-REF_FIELDNAME = ''.
WA_FIELDCAT-SELTEXT_L = '仅限以本位币记的余额'.
WA_FIELDCAT-SELTEXT_M = '仅限以本位币记的余额'.
WA_FIELDCAT-SELTEXT_S = '仅限以本位币记的余额'.
WA_FIELDCAT-DDICTXT = 'L'.
APPEND WA_FIELDCAT TO IT_FIELDCAT.
DE_POS = DE_POS + 1.
CLEAR WA_FIELDCAT.
WA_FIELDCAT-COL_POS = DE_POS.
* WA_FIELDCAT-KEY = 'X'.
WA_FIELDCAT-FIELDNAME = 'KATYP'.
WA_FIELDCAT-REF_TABNAME = ''.
WA_FIELDCAT-REF_FIELDNAME = ''.
WA_FIELDCAT-SELTEXT_L = '成本要素类别'.
WA_FIELDCAT-SELTEXT_M = '成本要素类别'.
WA_FIELDCAT-SELTEXT_S = '成本要素类别'.
WA_FIELDCAT-DDICTXT = 'L'.
APPEND WA_FIELDCAT TO IT_FIELDCAT.
DE_POS = DE_POS + 1.
CLEAR WA_FIELDCAT.
WA_FIELDCAT-COL_POS = DE_POS.
* WA_FIELDCAT-KEY = 'X'.
WA_FIELDCAT-FIELDNAME = 'TYPE'.
WA_FIELDCAT-REF_TABNAME = ''.
WA_FIELDCAT-REF_FIELDNAME = ''.
WA_FIELDCAT-SELTEXT_L = '消息类型: S 成功,E 错误'.
WA_FIELDCAT-SELTEXT_M = '消息类型: S 成功,E 错误'.
WA_FIELDCAT-SELTEXT_S = '消息类型: S 成功,E 错误'.
WA_FIELDCAT-DDICTXT = 'L'.
APPEND WA_FIELDCAT TO IT_FIELDCAT.
DE_POS = DE_POS + 1.
CLEAR WA_FIELDCAT.
WA_FIELDCAT-COL_POS = DE_POS.
* WA_FIELDCAT-KEY = 'X'.
WA_FIELDCAT-FIELDNAME = 'MESSAGE'.
WA_FIELDCAT-REF_TABNAME = ''.
WA_FIELDCAT-REF_FIELDNAME = ''.
WA_FIELDCAT-SELTEXT_L = '消息文本'.
WA_FIELDCAT-SELTEXT_M = '消息文本'.
WA_FIELDCAT-SELTEXT_S = '消息文本'.
WA_FIELDCAT-DDICTXT = 'L'.
APPEND WA_FIELDCAT TO IT_FIELDCAT.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
* I_INTERFACE_CHECK = ' '
* I_BYPASSING_BUFFER = ' '
* I_BUFFER_ACTIVE = ' '
I_CALLBACK_PROGRAM = WA_REPID
* I_CALLBACK_PF_STATUS_SET = 'SET_STATUS'
* 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 = IS_LAYOUT
IT_FIELDCAT = IT_FIELDCAT
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
* IT_SORT =
* IT_FILTER =
* IS_SEL_HIDE =
* I_DEFAULT = 'X'
* I_SAVE = ' '
* IS_VARIANT =
* IT_EVENTS =
* 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
* I_HTML_HEIGHT_TOP = 0
* I_HTML_HEIGHT_END = 0
* IT_ALV_GRAPHICS =
* IT_HYPERLINK =
* IT_ADD_FIELDCAT =
* IT_EXCEPT_QINFO =
* IR_SALV_FULLSCREEN_ADAPTER =
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
T_OUTTAB = IT_TXT
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.
ENDFORM. " FRM_SHOW_DATA
*&---------------------------------------------------------------------*
*& Form FRM_DO_BDC
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_DO_BDC .
LOOP AT IT_TXT INTO WA_TXT WHERE ZSEL = 'X'.
CLEAR: G_TYPE,
G_MSTRING.
PERFORM FRM_CALL_BAPI USING WA_TXT
CHANGING G_TYPE
G_MSTRING.
WA_TXT-TYPE = G_TYPE.
WA_TXT-MESSAGE = G_MSTRING.
CASE G_TYPE.
WHEN 'S'.
WA_TXT-ICON = ICON_GREEN_LIGHT.
WHEN 'E'.
WA_TXT-ICON = ICON_RED_LIGHT.
WHEN OTHERS.
ENDCASE.
MODIFY IT_TXT FROM WA_TXT TRANSPORTING ICON TYPE MESSAGE.
ENDLOOP.
ENDFORM. " FRM_DO_BDC
*&---------------------------------------------------------------------*
*& Form FRM_CALL_BAPI
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
* -->P_WA_TXT text
* <--P_G_TYPE text
* <--P_G_MSTRING text
*&---------------------------------------------------------------------*
FORM FRM_CALL_BAPI USING UW_TXT LIKE WA_TXT
CHANGING C_TYPE LIKE G_TYPE
C_MSTRING LIKE G_MSTRING.
DATA: IT_ACCOUNT_NAMES TYPE GLACCOUNT_NAME_TABLE,
WA_ACCOUNT_NAMES LIKE LINE OF IT_ACCOUNT_NAMES.
DATA: IT_ACCOUNT_KEYWORDS TYPE GLACCOUNT_KEYWORD_TABLE,
WA_ACCOUNT_KEYWORDS LIKE LINE OF IT_ACCOUNT_KEYWORDS.
DATA: IT_ACCOUNT_CCODES TYPE GLACCOUNT_CCODE_TABLE,
WA_ACCOUNT_CCODES LIKE LINE OF IT_ACCOUNT_CCODES.
DATA: IT_ACCOUNT_CAREAS TYPE GLACCOUNT_CAREA_TABLE,
WA_ACCOUNT_CAREAS LIKE LINE OF IT_ACCOUNT_CAREAS.
DATA: WA_RETURN TYPE BAPIRET2,
IT_RETURN LIKE STANDARD TABLE OF WA_RETURN.
DATA: WA_ACCOUNT_COA TYPE GLACCOUNT_COA.
DATA: G_KTOPL TYPE T001-KTOPL.
DATA: G_KOKRS TYPE TKA01-KOKRS.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = WA_TXT-SAKNR
IMPORTING
OUTPUT = WA_TXT-SAKNR.
SELECT SINGLE KTOPL
FROM T001
INTO G_KTOPL
WHERE BUKRS EQ UW_TXT-BUKRS.
CLEAR: G_KOKRS.
SELECT SINGLE KOKRS
FROM TKA02
INTO G_KOKRS
WHERE BUKRS EQ UW_TXT-BUKRS.
CLEAR: WA_ACCOUNT_COA.
WA_ACCOUNT_COA-KEYY-KTOPL = G_KTOPL.
WA_ACCOUNT_COA-KEYY-SAKNR = UW_TXT-SAKNR.
WA_ACCOUNT_COA-DATA-GLACCOUNT_TYPE = WA_TXT-GLACCOUNT_TYPE.
WA_ACCOUNT_COA-DATA-KTOKS = WA_TXT-KTOKS.
CASE WA_TXT-GLACCOUNT_TYPE.
WHEN 'X'."资产负债表科目
WA_ACCOUNT_COA-DATA-XBILK = 'X'.
WHEN 'N'."营业外收支
WA_ACCOUNT_COA-DATA-GVTYP = 'X'.
WHEN 'P'."初级成本或收入
WA_ACCOUNT_COA-DATA-GVTYP = 'X'.
WHEN 'S'."次级成本
WA_ACCOUNT_COA-DATA-GVTYP = 'X'.
ENDCASE.
SELECT SINGLE SAKNR
FROM SKA1
INTO @DATA(LV_SAKNR)
WHERE KTOPL = @G_KTOPL
AND SAKNR = @UW_TXT-SAKNR.
IF SY-SUBRC = 0.
WA_ACCOUNT_COA-ACTION = 'U'.
ELSE.
WA_ACCOUNT_COA-ACTION = 'I'.
ENDIF.
CLEAR: IT_ACCOUNT_NAMES.
CLEAR: WA_ACCOUNT_NAMES.
WA_ACCOUNT_NAMES-KEYY-KTOPL = G_KTOPL.
WA_ACCOUNT_NAMES-KEYY-SAKNR = UW_TXT-SAKNR.
WA_ACCOUNT_NAMES-KEYY-SPRAS = SY-LANGU.
WA_ACCOUNT_NAMES-DATA-TXT20 = UW_TXT-TXT.
WA_ACCOUNT_NAMES-DATA-TXT50 = UW_TXT-TXT_LONG.
SELECT SINGLE SAKNR
FROM SKA1
INTO @LV_SAKNR
WHERE KTOPL = @G_KTOPL
AND SAKNR = @UW_TXT-SAKNR.
IF SY-SUBRC = 0.
WA_ACCOUNT_NAMES-ACTION = 'U'.
ELSE.
WA_ACCOUNT_NAMES-ACTION = 'I'.
ENDIF.
APPEND WA_ACCOUNT_NAMES TO IT_ACCOUNT_NAMES.
CLEAR: IT_ACCOUNT_CCODES.
CLEAR: WA_ACCOUNT_CCODES.
WA_ACCOUNT_CCODES-KEYY-BUKRS = UW_TXT-BUKRS.
WA_ACCOUNT_CCODES-KEYY-SAKNR = UW_TXT-SAKNR.
WA_ACCOUNT_CCODES-DATA-WAERS = UW_TXT-WAERS.
WA_ACCOUNT_CCODES-DATA-ZUAWA = UW_TXT-ZUAWA.
WA_ACCOUNT_CCODES-DATA-FSTAG = UW_TXT-FSTAG.
WA_ACCOUNT_CCODES-DATA-XINTB = UW_TXT-XINTB.
WA_ACCOUNT_CCODES-DATA-MITKZ = UW_TXT-MITKZ.
WA_ACCOUNT_CCODES-DATA-XOPVW = UW_TXT-XOPVW.
WA_ACCOUNT_CCODES-DATA-MWSKZ = UW_TXT-MWSKZ.
WA_ACCOUNT_CCODES-DATA-XMWNO = UW_TXT-XMWNO.
WA_ACCOUNT_CCODES-DATA-XSALH = UW_TXT-XSALH.
SELECT SINGLE SAKNR
FROM SKB1
INTO @LV_SAKNR
WHERE BUKRS = @UW_TXT-BUKRS
AND SAKNR = @UW_TXT-SAKNR.
IF SY-SUBRC = 0.
WA_ACCOUNT_CCODES-ACTION = 'U'.
ELSE.
WA_ACCOUNT_CCODES-ACTION = 'I'.
ENDIF.
APPEND WA_ACCOUNT_CCODES TO IT_ACCOUNT_CCODES.
CLEAR: IT_ACCOUNT_CAREAS.
IF WA_TXT-GLACCOUNT_TYPE = 'S' OR WA_TXT-GLACCOUNT_TYPE = 'P'.
CLEAR: WA_ACCOUNT_CAREAS.
WA_ACCOUNT_CAREAS-KEYY-KOKRS = G_KOKRS.
WA_ACCOUNT_CAREAS-KEYY-SAKNR = UW_TXT-SAKNR.
WA_ACCOUNT_CAREAS-DATA-KATYP = UW_TXT-KATYP.
WA_ACCOUNT_CAREAS-FROMTO-DATAB = '20230101'.
WA_ACCOUNT_CAREAS-FROMTO-DATBI = '99991231'.
SELECT SINGLE KOKRS
FROM CSKB
INTO @DATA(LV_CSKB)
WHERE KOKRS EQ @G_KOKRS
AND KSTAR EQ @UW_TXT-SAKNR.
IF SY-SUBRC = 0.
WA_ACCOUNT_CAREAS-ACTION = 'U'.
ELSE.
WA_ACCOUNT_CAREAS-ACTION = 'I'.
ENDIF.
APPEND WA_ACCOUNT_CAREAS TO IT_ACCOUNT_CAREAS.
ENDIF.
* BREAK-POINT.
CALL FUNCTION 'GL_ACCT_MASTER_SAVE'
* EXPORTING
* TESTMODE =
* NO_SAVE_AT_WARNING =
* NO_AUTHORITY_CHECK =
* STORE_DATA_ONLY =
TABLES
ACCOUNT_NAMES = IT_ACCOUNT_NAMES
ACCOUNT_KEYWORDS = IT_ACCOUNT_KEYWORDS
ACCOUNT_CCODES = IT_ACCOUNT_CCODES
ACCOUNT_CAREAS = IT_ACCOUNT_CAREAS
RETURN = IT_RETURN
CHANGING
ACCOUNT_COA = WA_ACCOUNT_COA.
LOOP AT IT_RETURN INTO WA_RETURN
WHERE TYPE = 'E' OR TYPE = 'A'.
IF C_MSTRING IS INITIAL.
C_MSTRING = WA_RETURN-MESSAGE.
ELSE.
CONCATENATE C_MSTRING
'//'
WA_RETURN-MESSAGE
INTO
C_MSTRING.
ENDIF.
ENDLOOP.
IF SY-SUBRC = 0.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
* IMPORTING
* RETURN =
.
C_TYPE = 'E'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'
* IMPORTING
* RETURN =
.
C_TYPE = 'S'.
LOOP AT IT_RETURN INTO WA_RETURN.
IF C_MSTRING IS INITIAL.
C_MSTRING = WA_RETURN-MESSAGE.
ELSE.
CONCATENATE C_MSTRING
'//'
WA_RETURN-MESSAGE
INTO
C_MSTRING.
ENDIF.
ENDLOOP.
ENDIF.
ENDFORM.
二、科目数据模版
科目编码 | 1001010000 | 1001010010 | 1002010000 |
公司代码 | CHEN | CHEN | CHEN |
科目名称(短) | 库存现金-人民币 | 库存现金-美元 | 银行存款-人民币 |
科目名称(长) | 库存现金-人民币 | 库存现金-美元 | 银行存款-人民币 |
总账科目类型 | X | X | X |
科目组 | 10 | 10 | 10 |
科目货币 | CNY | USD | CNY |
排序码 | 001 | 001 | 001 |
字段状态组 | Z110 | Z110 | Z110 |
只能自动记帐 | |||
统驭科目的科目类别 | |||
未清项目管理 | |||
税务类型 | |||
允许含/不含税过帐 | |||
仅限以本位币记的余额 | |||
成本要素类别 |