SAP FICO 第三节 BDC和LTMC导入S4财务科目

news/2024/12/20 1:52:01/

SAP FICO 第三节 BDC和LTMC导入S4财务科目

  • 1 BDC导入财务科目-字段
    • 1.1 总帐科目SKA1-SAKNR
    • 1.2 公司代码SKB1-BUKRS
    • 1.3 总账科目类别SKA1-glaccount_type
    • 1.4 科目组/账户组SKA1-KTOKS
    • 1.5 短文本 SKA1-TXT20_ML
    • 1.6 总帐科目长文本 SKA1-TXT50_ML
    • 1.7 科目货币SKB1-WAERS
    • 1.8 限本位币记余额SKB1-XSALH
    • 1.9 税务类型SKB1-MWSKZ
    • 1.10 允许含税/不含税过账SKB1-XMWNO
    • 1.11 统驭科目的科目类型SKB1-MITKZ
    • 1.12 排序码SKB1-ZUAWA
    • 1.13 成本要素类别SKB1- katyp
    • 1.14 字段状态组SKB1-FSTAG
    • 1.15 只能自动过账SKB1-XINTB
  • 2 SHDB准备录屏
    • 2.1 尽量将相关需要的字段都确保有值,然后少操作
    • 2.2 另存为一个工程
    • 2.3 参考源代码写自己的代码
    • 2.4 注意点
  • 3 再来看看LTMC是否有财务科目
    • 3.1 登录后台LTMC地址
    • 3.2 创建迁移项目
    • 3.3 填写一些内容
    • 3.4 上传导入
    • 3.5 总结:还挺好用

其实BDC与LSMW类似,不过好处是BDC在开发的加工下,可能更方便些;
LTMC是S4提供的最新的迁移控制台,但是限制有些多。

1 BDC导入财务科目-字段

在S4里面,字段是有些变化的。

表1:SKA1
总账科目主记录
科目表层数据,多了两列,分别是总账科目类型和总账科目子类型
在这里插入图片描述

表2:SKAT

总帐科目主记录(科目表:说明)
包括语言代码
在这里插入图片描述

表3:SKB1
总帐科目主记录
公司代码层数据
在这里插入图片描述

在这里插入图片描述

1.1 总帐科目SKA1-SAKNR

在SAP系统中,每一个总账科目(G/L Account)都有两个层次,首先必须在chart of accounts level维护共有的信息,然后再在company code level维护公司代码独有的信息。
公司代码所用的科目表叫operating chart of accounts(运营科目表)。一般在项目实施完了之后,会用批处理工具把所有的会计科目导入到SAP系统中。

①FS00–集中维护会计科目,同一个科目必须在科目表层和公司代码层下都做维护。
②FSP0–在科目表层维护会计科目;
③FSS0–在公司代码层维护会计科目;
备注:查询以1开头的科目:用“1*”搜索;

1.2 公司代码SKB1-BUKRS

1.3 总账科目类别SKA1-glaccount_type

总账科目类型 X:资产负债表科目;N:营业外收支;P:初级成本或收入;S:次级成本

1.4 科目组/账户组SKA1-KTOKS

在这里插入图片描述

1.5 短文本 SKA1-TXT20_ML

1.6 总帐科目长文本 SKA1-TXT50_ML

1.7 科目货币SKB1-WAERS

如果科目货币设为本位币以外的其他货币,则该科目只能用该货币过账;
如果科目货币设为本位币,则该科目可用任何货币过账。
比如:如果本位币是CNY,有一个“现金-USD”科目,则能限制“现金-USD”科目只能输入USD。
比如:如果本位币是CNY,有一个“现金-CNY”科目,则不能限制“现金-CNY”科目只能输入CNY。

1.8 限本位币记余额SKB1-XSALH

本项勾上后,科目余额将不能以其他货币显示,只能以本位币显示。
SAP系统中有一个特殊科目GR/IR,必须设为only balances in local currency,否则在过账时,系统会提示编号为F5672的错误。

1.9 税务类型SKB1-MWSKZ

对于一般纳税人来说:
采购–进项税;
销售–销项税;
如:销售商品(17%的税率)
(商品出库) 借:主营业务成本 100元 贷:库存商品 100元
(开发票) 借:应收账款 117元 贷:主营业务收入 100元
应交税金-应交增值税-销项税 17元
(收款) 借:银行存款 117 贷:应收账款 117元
也就是说:对于会计科目“主营业务收入”,一般在这里设为“仅允许销项税”。

1.10 允许含税/不含税过账SKB1-XMWNO

本项勾上之后,就表示此会计科目含不含税都可以过账。

1.11 统驭科目的科目类型SKB1-MITKZ

举例:公司卖给客户(三菱公司)300万元的商品,需要销售(SD)那边来记账(开发票),但是,销售人员在记账时不会像财务人员那样记:
GL:

销售人员只会记:
SD:

在实际的SAP系统中,销售那边一记账,系统就会自动在财务这边生成一笔凭证,为什么自动生成呢?
就是因为,我们把科目“应收账款”设为了客户“三菱公司”的统驭科目。设为统驭科目的会计科目就不能在手工记账了,只能通过其他的模块(如:AR、AP、SD、MM)自动记账。而这里的这个字段,是让我们选择这个科目属于什么类型的统驭科目的(是属于客户?属于供应商?属于资产?……)。
设置一个统驭科目的步骤:
1.新建一个科目(如:应收账款或应付账款),并指定它的“统驭科目类型”为“客户或供应商或资产……”
2.在创建客户或供应商主数据时,在其“统驭科目”字段中选择刚才新建的那个会计科目;这样,以后对这个客户或供应商进行记账的话,从AP、AP、SD或MM那边记“客户或供应商”的同时,也会自动在GL中记一笔,并记在“应收账款或应付账款”上。

1.12 排序码SKB1-ZUAWA

在这里插入图片描述

1.13 成本要素类别SKB1- katyp

成本要素类别 1是初级

1.14 字段状态组SKB1-FSTAG

后台设置路径:财务会计—财务会计全局设置—凭证—行项目—控制—定义字段状态变式(T-code:OBC4),它用来控制在做凭证时(记账界面、录入凭证的界面),该科目的辅助核算项目哪些是必输的,哪些是隐藏的,哪些是可选的;

1.15 只能自动过账SKB1-XINTB

勾上之后,此会计科目就只能自动记账,不能在GL模块中进行手工记账,即只能通过其他模块传递过来自动生成记账凭证(如:AR、AP、MM、SD);

2 SHDB准备录屏

2.1 尽量将相关需要的字段都确保有值,然后少操作

以建成本要素5001050010生产成本-技术成本-工资为例

在这里插入图片描述

录制内容如下:

在这里插入图片描述

2.2 另存为一个工程

在这里插入图片描述

形成源代码如下:

定义部分:

data: begin of record,
* data element: SAKNRSAKNR_001(010), "总账科目
* data element: BUKRSBUKRS_002(004), "公司代码
* data element: GLACCOUNT_TYPEGLACCOUNT_TYPE_003(001),"总账科目类型 X:资产负债表科目;N:营业外收支;P:初级成本或收入;S:次级成本
* data element: GLACCOUNT_TYPEGLACCOUNT_TYPE_004(001),"总账科目类型 X:资产负债表科目;N:营业外收支;P:初级成本或收入;S:次级成本
* data element: KTOKSKTOKS_005(004)," 科目组:ABST:非资产统御类科目;FIN:货币资金类;ERR:损益类MAT:物料管理类SAKO:一般总账类ANL:资产统驭类
* data element: GLACCOUNT_TYPEGLACCOUNT_TYPE_006(001),"总账科目类型 X:资产负债表科目;N:营业外收支;P:初级成本或收入;S:次级成本
* data element: KTOKSKTOKS_007(004)," 科目组:ABST:非资产统御类科目;FIN:货币资金类;ERR:损益类MAT:物料管理类SAKO:一般总账类ANL:资产统驭类
* data element: TXT20_SKATTXT20_ML_008(020), "科目短文本
* data element: TXT50_SKATTXT50_ML_009(050), "科目长文本
* data element: WAERS_SKB1WAERS_010(005),"科目货币
* data element: XSALHXSALH_011(001),"限本位币记余额 选择X
* data element: SMWSKMWSKZ_012(002)," 税务类型
* data element: XMWNOXMWNO_013(001)," 允许含/不含税过帐
* data element: MITKZMITKZ_014(001),"统驭科目的科目类型
* data element: DZUAWAZUAWA_015(003)," 排序码
* data element: KATYPKATYP_016(002),"
* data element: FSTAGFSTAG_017(004)," 成本要素类别 1是初级
* data element: XINTBXINTB_018(001),"字段状态组XINTB(1),"只能自动过账end of record.

循环调用部分:

do.read dataset dataset into record.
if sy-subrc <> 0. exit. endif.perform bdc_dynpro      using 'SAPLGL_ACCOUNT_MASTER_MAINTAIN' '2001'.
perform bdc_field       using 'BDC_OKCODE''=ACC_CRE'.
perform bdc_field       using 'BDC_CURSOR''GLACCOUNT_SCREEN_KEY-SAKNR'.
perform bdc_field       using 'GLACCOUNT_SCREEN_KEY-SAKNR'record-SAKNR_001.
perform bdc_field       using 'GLACCOUNT_SCREEN_KEY-BUKRS'record-BUKRS_002.
perform bdc_dynpro      using 'SAPLGL_ACCOUNT_MASTER_MAINTAIN' '2001'.
perform bdc_field       using 'BDC_OKCODE''=GLACC_TYPE'.
perform bdc_field       using 'BDC_CURSOR''GLACCOUNT_SCREEN_COA-GLACCOUNT_TYPE'.
perform bdc_field       using 'GLACCOUNT_SCREEN_COA-GLACCOUNT_TYPE'record-GLACCOUNT_TYPE_003.
perform bdc_dynpro      using 'SAPLGL_ACCOUNT_MASTER_MAINTAIN' '2001'.
perform bdc_field       using 'BDC_OKCODE''=2102_GROUP'.
perform bdc_field       using 'BDC_CURSOR''GLACCOUNT_SCREEN_COA-KTOKS'.
perform bdc_field       using 'GLACCOUNT_SCREEN_COA-GLACCOUNT_TYPE'record-GLACCOUNT_TYPE_004.
perform bdc_field       using 'GLACCOUNT_SCREEN_COA-KTOKS'record-KTOKS_005.
perform bdc_dynpro      using 'SAPLGL_ACCOUNT_MASTER_MAINTAIN' '2001'.
perform bdc_field       using 'BDC_OKCODE''=TAB02'.
perform bdc_field       using 'GLACCOUNT_SCREEN_COA-GLACCOUNT_TYPE'record-GLACCOUNT_TYPE_006.
perform bdc_field       using 'GLACCOUNT_SCREEN_COA-KTOKS'record-KTOKS_007.
perform bdc_field       using 'BDC_CURSOR''GLACCOUNT_SCREEN_COA-TXT50_ML'.
perform bdc_field       using 'GLACCOUNT_SCREEN_COA-TXT20_ML'record-TXT20_ML_008.
perform bdc_field       using 'GLACCOUNT_SCREEN_COA-TXT50_ML'record-TXT50_ML_009.
perform bdc_dynpro      using 'SAPLGL_ACCOUNT_MASTER_MAINTAIN' '2001'.
perform bdc_field       using 'BDC_OKCODE''=TAB03'.
perform bdc_field       using 'GLACCOUNT_SCREEN_CCODE-WAERS'record-WAERS_010.
perform bdc_field       using 'GLACCOUNT_SCREEN_CCODE-XSALH'record-XSALH_011.
perform bdc_field       using 'GLACCOUNT_SCREEN_CCODE-MWSKZ'record-MWSKZ_012.
perform bdc_field       using 'GLACCOUNT_SCREEN_CCODE-XMWNO'record-XMWNO_013.
perform bdc_field       using 'GLACCOUNT_SCREEN_CCODE-MITKZ'record-MITKZ_014.
perform bdc_field       using 'GLACCOUNT_SCREEN_CCODE-ZUAWA'record-ZUAWA_015.
perform bdc_field       using 'BDC_CURSOR''GLACCOUNT_SCREEN_CAREA-KATYP'.
perform bdc_field       using 'GLACCOUNT_SCREEN_CAREA-KATYP'record-KATYP_016.
perform bdc_dynpro      using 'SAPLGL_ACCOUNT_MASTER_MAINTAIN' '2001'.
perform bdc_field       using 'BDC_OKCODE''=SAVE'.
perform bdc_field       using 'BDC_CURSOR''GLACCOUNT_SCREEN_CCODE-XINTB'.
perform bdc_field       using 'GLACCOUNT_SCREEN_CCODE-FSTAG'record-FSTAG_017.
perform bdc_field       using 'GLACCOUNT_SCREEN_CCODE-XINTB'record-XINTB_018.
perform bdc_transaction using 'FS00'.enddo.

2.3 参考源代码写自己的代码

*&---------------------------------------------------------------------*
*& Report ZLGZBDCFS00IMP
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zlgzbdcfs00imp    NO STANDARD PAGE HEADING LINE-SIZE 255.* For ALV display
TYPE-POOLS: slis.
DATA: gt_fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE,gs_layout   TYPE slis_layout_alv.* 处理Tab分割符TABLES:ska1, skb1, skat.* 定义全局日志信息,用来存储正常日志+错误日志
DATA: BEGIN OF gt_log OCCURS 0,saknr(010),  " G/L account numbertype(1),     " messange typetxt100(100), " message textEND OF gt_log.*1 第一步,定义对象TYPE-POOLS: truxs.TYPES: BEGIN OF ty_datas,saknr(010), "总账科目bukrs(004), "公司代码glaccount_type(001),"总账科目类型 X:资产负债表科目;N:营业外收支;P:初级成本或收入;S:次级成本ktoks(004)," 科目组:ABST:非资产统御类科目;FIN:货币资金类;ERR:损益类MAT:物料管理类SAKO:一般总账类ANL:资产统驭类txt20_ml(020), "科目短文本txt50_ml(050), "科目长文本waers(005),"科目货币xsalh(001),"限本位币记余额 选择Xmwskz(002)," 税务类型xmwno(001)," 允许含/不含税过帐mitkz(001),"统驭科目的科目类型zuawa(003)," 排序码katyp(002),"成本要素类别 1是初级fstag(004)," 字段状态组xintb(001),"只能自动过账END OF ty_datas."定义EXCEL的数据存储对象
DATA: gt_data TYPE TABLE OF ty_datas,record TYPE ty_datas."BDC的数据对象
DATA: gt_bdcdata TYPE TABLE OF bdcdata WITH HEADER LINE."BDC的数据对象
DATA: bdcdata TYPE TABLE OF bdcdata WITH HEADER LINE.*2 第二步,定义文件选择参数,并选择文件*----------------------------------------------------------------------*
*        定义默认框架、选择文件、选择后                                             *
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK lgz1 WITH FRAME TITLE text01.
* Parameter for file name
PARAMETERS: p_file TYPE rlgrap-filename OBLIGATORY DEFAULT 'E:\测试科目导入.xlsx'.
SELECTION-SCREEN END OF BLOCK lgz1.SELECTION-SCREEN BEGIN OF BLOCK lgz2 WITH FRAME TITLE text02.
* Parameters for update mode
PARAMETERS: mode_a  RADIOBUTTON GROUP rad TYPE c,  " 前台更新mode_n  RADIOBUTTON GROUP rad TYPE c,  " 后台更新moed_e  RADIOBUTTON GROUP rad TYPE c.  " 仅显示错误模式
SELECTION-SCREEN END OF BLOCK lgz2.INITIALIZATION.text01 = '选择导入文件'.text02 = '选择更新模式'."选择调用文件
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.PERFORM frm_get_filename.*3 第三步,获取文件数据
START-OF-SELECTION.PERFORM frm_get_data.PERFORM check_data.
END-OF-SELECTION.*4 第四步,调用BDC录入数据
*  "   调用方法一 By TransactionIF gt_log[] IS INITIAL.PERFORM frm_exec_transaction.PERFORM alv_show.ELSE.PERFORM alv_show.ENDIF."   调用方法二  By Session(把多个Transaction放到一个Session一起执行)"PERFORM FRM_EXEC_SESSION.**------------------------------------------FROM------------------------------------------**
"2.1调用文件的标准程序formFORM frm_get_filename ."调用文件的标准程序DATA: lv_rc TYPE i.DATA: lt_file_table TYPE filetable.CALL METHOD cl_gui_frontend_services=>file_open_dialogEXPORTINGwindow_title = '打开文件'CHANGINGfile_table   = lt_file_tablerc           = lv_rc.IF sy-subrc = 0.READ TABLE lt_file_table INTO DATA(wa_file_table) INDEX 1.p_file = wa_file_table-filename.ENDIF.ENDFORM."3.1 获取文件数据
FORM frm_get_data .DATA: lt_raw TYPE truxs_t_text_data.CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'EXPORTING
*     I_FIELD_SEPERATOR    =i_line_header        = 'X'i_tab_raw_data       = lt_rawi_filename           = p_fileTABLESi_tab_converted_data = gt_dataEXCEPTIONSconversion_failed    = 1OTHERS               = 2.IF sy-subrc <> 0.
* Implement suitable error handling hereENDIF.
ENDFORM.*&--------------------------------------------------------------------*
*&      3.2 检查数据form
*---------------------------------------------------------------------*
FORM check_data.DATA: l_ktopl LIKE ska1-ktopl.  " 定义变量,去公司代码表查询公司代码是否存在DATA: l_saknr LIKE skb1-saknr.  " 定义变量,去科目表查询科目是否存在DATA: message TYPE string. "定义消息,统一写错误日志* 删除科目ID为空的DELETE gt_data WHERE saknr = space.LOOP AT gt_data INTO record.
* 科目如果位数不足,可补前导0CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'EXPORTINGinput  = record-saknrIMPORTINGoutput = record-saknrEXCEPTIONSOTHERS = 1.* 检查公司代码是否为空IF record-bukrs = space .CONCATENATE record-saknr '公司代码未维护.' INTO message.PERFORM write_log_err USING record-saknr message.ENDIF.*   去公司代码表检查公司代码是否存在CLEAR l_ktopl.SELECT SINGLE ktopl INTO l_ktoplFROM t001WHERE bukrs = record-bukrs.*   判断公司代码是否维护IF l_ktopl = space .CONCATENATE record-saknr '公司代码不存在.' INTO message.PERFORM write_log_err USING record-saknr message.ENDIF.*   去科目表检查公司代码和科目是否都存在CLEAR l_saknr.SELECT SINGLE saknr INTO l_saknrFROM skb1WHERE bukrs = record-bukrs AND saknr = record-saknr.*   判断科目是否存在IF l_saknr > '0' .CONCATENATE record-saknr '科目已存在,不能再导入.' INTO message.PERFORM write_log_err USING record-saknr message.ENDIF.*   判断短文本是否维护IF record-txt20_ml = space .CONCATENATE record-saknr '短文本未维护.' INTO message.PERFORM write_log_err USING record-saknr message.ENDIF.*   判断长文本是否维护IF record-txt50_ml = space .CONCATENATE record-saknr '长文本未维护.' INTO message.PERFORM write_log_err USING record-saknr message.ENDIF.*   判断币种是否维护IF record-waers = space .CONCATENATE record-saknr '币别未维护.' INTO message.PERFORM write_log_err USING record-saknr message.ENDIF.*   判断字段状态组是否维护IF record-fstag EQ space .CONCATENATE record-saknr '字段状态组未维护.' INTO message.PERFORM write_log_err USING record-saknr message.ENDIF.ENDLOOP.
ENDFORM.                    "check_data"4.1 调用的FORM每读入一行,就执行一次
FORM frm_exec_transaction."定义消息的展示方式DATA: lt_message TYPE TABLE OF bdcmsgcoll WITH HEADER LINE.DATA: lv_message TYPE string.DATA: l_mode.* Determine ModeIF mode_a = 'X'.      " Display Alll_mode = 'A'.ELSEIF mode_n = 'X'.  " Display Nothingl_mode = 'N'.ELSE.l_mode = 'E'.       " Display errorsENDIF."循环文件内表LOOP AT gt_data INTO record."以下要根据不同的类别选择,调用不同的录屏程序。原因是业务上如果选择P的话,才能有初级成本要素的选项。如果科目组是ANST,那么税务类型和是否含税过账这2个字段不可选择。"这就是为什么这么反感BDC的原因,BDC的程序不太通用,一旦业务设置有变动,那么程序要进行适应性调整,还是BAPI香啊,不管前台输入限制。IF record-glaccount_type = 'P' .PERFORM frm_convert_data USING record.ELSEIF  record-ktoks = 'ANST' .PERFORM frm_convert_data_3 USING record.ELSE .PERFORM frm_convert_data_2 USING record.ENDIF.CALL TRANSACTION 'FS00' USING gt_bdcdata[]
*                            OPTIONS FROM GS_OPTIONS     "结构传参,参照结构:CTU_PARAMSMESSAGES INTO lt_message    "返回消息,参照结构:BDCMSGCOLLUPDATE 'S'                  "更新模式:S 同步 A 异步MODE l_mode.                   "显示模式:A 前台 N 后台 E 仅显示错误IF sy-subrc = 0.IF lt_message[] IS INITIAL.CLEAR gt_log.gt_log-saknr = record-saknr.CONCATENATE record-saknr '科目导入成功.' INTO gt_log-txt100.gt_log-type = 'S'.APPEND gt_log.ELSE." print all error messages using gt_bdcmsgcoll.LOOP AT lt_message WHERE msgtyp = 'E'.CLEAR lv_message.CALL FUNCTION 'MESSAGE_TEXT_BUILD'EXPORTINGmsgid               = lt_message-msgidmsgnr               = lt_message-msgnrmsgv1               = lt_message-msgv1msgv2               = lt_message-msgv2msgv3               = lt_message-msgv3msgv4               = lt_message-msgv4IMPORTINGmessage_text_output       = lv_message .PERFORM write_log_err USING record-saknr lv_message.CLEAR lt_message.ENDLOOP.ENDIF.ELSE.CLEAR gt_log.gt_log-saknr = record-saknr.CONCATENATE record-saknr 'BDC执行失败.' INTO gt_log-txt100.gt_log-type = 'E'.APPEND gt_log.ENDIF.ENDLOOP.ENDFORM.* 4.1.1 这个调用的是填充数据到gt_bdcdata的程序,可以原封不动的拷贝执行录屏时的代码,有些重复的可以注释掉
FORM frm_convert_data USING p_record.
* BDC_SUBSCR的项没有意义,可不填CLEAR: gt_bdcdata,gt_bdcdata[].PERFORM bdc_dynpro      USING 'SAPLGL_ACCOUNT_MASTER_MAINTAIN' '2001'.
PERFORM bdc_field       USING 'BDC_OKCODE''=ACC_CRE'.PERFORM bdc_field       USING 'BDC_CURSOR''GLACCOUNT_SCREEN_KEY-SAKNR'."总账科目
PERFORM bdc_field       USING 'GLACCOUNT_SCREEN_KEY-SAKNR'record-saknr.
"公司代码
PERFORM bdc_field       USING 'GLACCOUNT_SCREEN_KEY-BUKRS'record-bukrs."PERFORM bdc_dynpro      USING 'SAPLGL_ACCOUNT_MASTER_MAINTAIN' '2001'."PERFORM bdc_field       USING 'BDC_OKCODE'
"                              '=GLACC_TYPE'."PERFORM bdc_field       USING 'BDC_CURSOR'
"                              'GLACCOUNT_SCREEN_COA-GLACCOUNT_TYPE'."PERFORM bdc_field       USING 'GLACCOUNT_SCREEN_COA-GLACCOUNT_TYPE'
"                              record-glaccount_type.PERFORM bdc_dynpro      USING 'SAPLGL_ACCOUNT_MASTER_MAINTAIN' '2001'.
PERFORM bdc_field       USING 'BDC_OKCODE''=2102_GROUP'.PERFORM bdc_field       USING 'BDC_CURSOR''GLACCOUNT_SCREEN_COA-KTOKS'.
"总账科目类型 X:资产负债表科目;N:营业外收支;P:初级成本或收入;S:次级成本
PERFORM bdc_field       USING 'GLACCOUNT_SCREEN_COA-GLACCOUNT_TYPE'record-glaccount_type.
" 科目组:ABST:非资产统御类科目;FIN:货币资金类;ERR:损益类MAT:物料管理类SAKO:一般总账类ANL:资产统驭类
PERFORM bdc_field       USING 'GLACCOUNT_SCREEN_COA-KTOKS'record-ktoks.PERFORM bdc_dynpro      USING 'SAPLGL_ACCOUNT_MASTER_MAINTAIN' '2001'.PERFORM bdc_field       USING 'BDC_OKCODE''=TAB02'."PERFORM bdc_field       USING 'GLACCOUNT_SCREEN_COA-GLACCOUNT_TYPE'
"                              record-glaccount_type."PERFORM bdc_field       USING 'GLACCOUNT_SCREEN_COA-KTOKS'
"                              record-ktoks.PERFORM bdc_field       USING 'BDC_CURSOR''GLACCOUNT_SCREEN_COA-TXT50_ML'.
"科目短文本
PERFORM bdc_field       USING 'GLACCOUNT_SCREEN_COA-TXT20_ML'record-txt20_ml.
"科目长文本
PERFORM bdc_field       USING 'GLACCOUNT_SCREEN_COA-TXT50_ML'record-txt50_ml.PERFORM bdc_dynpro      USING 'SAPLGL_ACCOUNT_MASTER_MAINTAIN' '2001'.PERFORM bdc_field       USING 'BDC_OKCODE''=TAB03'."科目货币
PERFORM bdc_field       USING 'GLACCOUNT_SCREEN_CCODE-WAERS'record-waers.
"限本位币记余额 选择X
PERFORM bdc_field       USING 'GLACCOUNT_SCREEN_CCODE-XSALH'record-xsalh.
" 税务类型
PERFORM bdc_field       USING 'GLACCOUNT_SCREEN_CCODE-MWSKZ'record-mwskz.
" 允许含/不含税过帐
PERFORM bdc_field       USING 'GLACCOUNT_SCREEN_CCODE-XMWNO'record-xmwno.
"统驭科目的科目类型
PERFORM bdc_field       USING 'GLACCOUNT_SCREEN_CCODE-MITKZ'record-mitkz." 排序码
PERFORM bdc_field       USING 'GLACCOUNT_SCREEN_CCODE-ZUAWA'record-zuawa.PERFORM bdc_field       USING 'BDC_CURSOR''GLACCOUNT_SCREEN_CAREA-KATYP'.
" 成本要素类别 1是初级
PERFORM bdc_field       USING 'GLACCOUNT_SCREEN_CAREA-KATYP'record-katyp.PERFORM bdc_dynpro      USING 'SAPLGL_ACCOUNT_MASTER_MAINTAIN' '2001'.PERFORM bdc_field       USING 'BDC_OKCODE''=SAVE'.PERFORM bdc_field       USING 'BDC_CURSOR''GLACCOUNT_SCREEN_CCODE-XINTB'."字段状态组
PERFORM bdc_field       USING 'GLACCOUNT_SCREEN_CCODE-FSTAG'record-fstag."只能自动过账
PERFORM bdc_field       USING 'GLACCOUNT_SCREEN_CCODE-XINTB'record-xintb.ENDFORM.* 4.1.2 如果不是成本要素,那么初级成本要素字段是没法显示的
FORM frm_convert_data_2 USING p_record.
* BDC_SUBSCR的项没有意义,可不填CLEAR: gt_bdcdata,gt_bdcdata[].PERFORM bdc_dynpro      USING 'SAPLGL_ACCOUNT_MASTER_MAINTAIN' '2001'.
PERFORM bdc_field       USING 'BDC_OKCODE''=ACC_CRE'.PERFORM bdc_field       USING 'BDC_CURSOR''GLACCOUNT_SCREEN_KEY-SAKNR'."总账科目
PERFORM bdc_field       USING 'GLACCOUNT_SCREEN_KEY-SAKNR'record-saknr."公司代码
PERFORM bdc_field       USING 'GLACCOUNT_SCREEN_KEY-BUKRS'record-bukrs."PERFORM bdc_dynpro      USING 'SAPLGL_ACCOUNT_MASTER_MAINTAIN' '2001'."PERFORM bdc_field       USING 'BDC_OKCODE'
"                              '=GLACC_TYPE'."PERFORM bdc_field       USING 'BDC_CURSOR'
"                              'GLACCOUNT_SCREEN_COA-GLACCOUNT_TYPE'."PERFORM bdc_field       USING 'GLACCOUNT_SCREEN_COA-GLACCOUNT_TYPE'
"                              record-glaccount_type.PERFORM bdc_dynpro      USING 'SAPLGL_ACCOUNT_MASTER_MAINTAIN' '2001'.
PERFORM bdc_field       USING 'BDC_OKCODE''=2102_GROUP'.PERFORM bdc_field       USING 'BDC_CURSOR''GLACCOUNT_SCREEN_COA-KTOKS'."总账科目类型 X:资产负债表科目;N:营业外收支;P:初级成本或收入;S:次级成本
PERFORM bdc_field       USING 'GLACCOUNT_SCREEN_COA-GLACCOUNT_TYPE'record-glaccount_type.
" 科目组:ABST:非资产统御类科目;FIN:货币资金类;ERR:损益类MAT:物料管理类SAKO:一般总账类ANL:资产统驭类
PERFORM bdc_field       USING 'GLACCOUNT_SCREEN_COA-KTOKS'record-ktoks.PERFORM bdc_dynpro      USING 'SAPLGL_ACCOUNT_MASTER_MAINTAIN' '2001'.PERFORM bdc_field       USING 'BDC_OKCODE''=TAB02'."PERFORM bdc_field       USING 'GLACCOUNT_SCREEN_COA-GLACCOUNT_TYPE'
"                              record-glaccount_type."PERFORM bdc_field       USING 'GLACCOUNT_SCREEN_COA-KTOKS'
"                              record-ktoks.PERFORM bdc_field       USING 'BDC_CURSOR''GLACCOUNT_SCREEN_COA-TXT50_ML'.
"科目短文本
PERFORM bdc_field       USING 'GLACCOUNT_SCREEN_COA-TXT20_ML'record-txt20_ml.
"科目长文本
PERFORM bdc_field       USING 'GLACCOUNT_SCREEN_COA-TXT50_ML'record-txt50_ml.PERFORM bdc_dynpro      USING 'SAPLGL_ACCOUNT_MASTER_MAINTAIN' '2001'.PERFORM bdc_field       USING 'BDC_OKCODE''=TAB03'.
"科目货币
PERFORM bdc_field       USING 'GLACCOUNT_SCREEN_CCODE-WAERS'record-waers.
"限本位币记余额 选择X
PERFORM bdc_field       USING 'GLACCOUNT_SCREEN_CCODE-XSALH'record-xsalh.
" 税务类型
PERFORM bdc_field       USING 'GLACCOUNT_SCREEN_CCODE-MWSKZ'record-mwskz.
" 允许含/不含税过帐
PERFORM bdc_field       USING 'GLACCOUNT_SCREEN_CCODE-XMWNO'record-xmwno.
"统驭科目的科目类型
PERFORM bdc_field       USING 'GLACCOUNT_SCREEN_CCODE-MITKZ'record-mitkz.
" 排序码
PERFORM bdc_field       USING 'GLACCOUNT_SCREEN_CCODE-ZUAWA'record-zuawa."PERFORM bdc_field       USING 'BDC_CURSOR'
"                              'GLACCOUNT_SCREEN_CAREA-KATYP'.
" 成本要素类别 1是初级
"PERFORM bdc_field       USING 'GLACCOUNT_SCREEN_CAREA-KATYP'
"                              record-katyp.PERFORM bdc_dynpro      USING 'SAPLGL_ACCOUNT_MASTER_MAINTAIN' '2001'.PERFORM bdc_field       USING 'BDC_OKCODE''=SAVE'.PERFORM bdc_field       USING 'BDC_CURSOR''GLACCOUNT_SCREEN_CCODE-XINTB'.
"字段状态组
PERFORM bdc_field       USING 'GLACCOUNT_SCREEN_CCODE-FSTAG'record-fstag.
"只能自动过账
PERFORM bdc_field       USING 'GLACCOUNT_SCREEN_CCODE-XINTB'record-xintb.ENDFORM.* 4.1.3 如果选择了资产负债类科目,XMWNO_013(001)和mwskz," 这2个字段不允许选择
FORM frm_convert_data_3 USING p_record.
* BDC_SUBSCR的项没有意义,可不填CLEAR: gt_bdcdata,gt_bdcdata[].PERFORM bdc_dynpro      USING 'SAPLGL_ACCOUNT_MASTER_MAINTAIN' '2001'.
PERFORM bdc_field       USING 'BDC_OKCODE''=ACC_CRE'.PERFORM bdc_field       USING 'BDC_CURSOR''GLACCOUNT_SCREEN_KEY-SAKNR'."总账科目
PERFORM bdc_field       USING 'GLACCOUNT_SCREEN_KEY-SAKNR'record-saknr.
"公司代码
PERFORM bdc_field       USING 'GLACCOUNT_SCREEN_KEY-BUKRS'record-bukrs."PERFORM bdc_dynpro      USING 'SAPLGL_ACCOUNT_MASTER_MAINTAIN' '2001'."PERFORM bdc_field       USING 'BDC_OKCODE'
"                              '=GLACC_TYPE'."PERFORM bdc_field       USING 'BDC_CURSOR'
"                              'GLACCOUNT_SCREEN_COA-GLACCOUNT_TYPE'."PERFORM bdc_field       USING 'GLACCOUNT_SCREEN_COA-GLACCOUNT_TYPE'
"                              record-glaccount_type.PERFORM bdc_dynpro      USING 'SAPLGL_ACCOUNT_MASTER_MAINTAIN' '2001'.
PERFORM bdc_field       USING 'BDC_OKCODE''=2102_GROUP'.PERFORM bdc_field       USING 'BDC_CURSOR''GLACCOUNT_SCREEN_COA-KTOKS'.
"总账科目类型 X:资产负债表科目;N:营业外收支;P:初级成本或收入;S:次级成本
PERFORM bdc_field       USING 'GLACCOUNT_SCREEN_COA-GLACCOUNT_TYPE'record-glaccount_type.
" 科目组:ABST:非资产统御类科目;FIN:货币资金类;ERR:损益类MAT:物料管理类SAKO:一般总账类ANL:资产统驭类
PERFORM bdc_field       USING 'GLACCOUNT_SCREEN_COA-KTOKS'record-ktoks.PERFORM bdc_dynpro      USING 'SAPLGL_ACCOUNT_MASTER_MAINTAIN' '2001'.PERFORM bdc_field       USING 'BDC_OKCODE''=TAB02'."PERFORM bdc_field       USING 'GLACCOUNT_SCREEN_COA-GLACCOUNT_TYPE'
"                              record-glaccount_type."PERFORM bdc_field       USING 'GLACCOUNT_SCREEN_COA-KTOKS'
"                              record-ktoks.PERFORM bdc_field       USING 'BDC_CURSOR''GLACCOUNT_SCREEN_COA-TXT50_ML'.
"科目短文本
PERFORM bdc_field       USING 'GLACCOUNT_SCREEN_COA-TXT20_ML'record-txt20_ml.
"科目长文本
PERFORM bdc_field       USING 'GLACCOUNT_SCREEN_COA-TXT50_ML'record-txt50_ml.PERFORM bdc_dynpro      USING 'SAPLGL_ACCOUNT_MASTER_MAINTAIN' '2001'.PERFORM bdc_field       USING 'BDC_OKCODE''=TAB03'."科目货币
PERFORM bdc_field       USING 'GLACCOUNT_SCREEN_CCODE-WAERS'record-waers.
"限本位币记余额 选择X
PERFORM bdc_field       USING 'GLACCOUNT_SCREEN_CCODE-XSALH'record-xsalh.
"" 税务类型
"PERFORM bdc_field       USING 'GLACCOUNT_SCREEN_CCODE-MWSKZ'
"                              record-mwskz.
"" 允许含/不含税过帐
"PERFORM bdc_field       USING 'GLACCOUNT_SCREEN_CCODE-XMWNO'
"                              record-xmwno.
"统驭科目的科目类型
PERFORM bdc_field       USING 'GLACCOUNT_SCREEN_CCODE-MITKZ'record-mitkz." 排序码
PERFORM bdc_field       USING 'GLACCOUNT_SCREEN_CCODE-ZUAWA'record-zuawa."PERFORM bdc_field       USING 'BDC_CURSOR'
"                              'GLACCOUNT_SCREEN_CAREA-KATYP'.
*" 成本要素类别 1是初级
*PERFORM bdc_field       USING 'GLACCOUNT_SCREEN_CAREA-KATYP'
*                              record-katyp.PERFORM bdc_dynpro      USING 'SAPLGL_ACCOUNT_MASTER_MAINTAIN' '2001'.PERFORM bdc_field       USING 'BDC_OKCODE''=SAVE'.PERFORM bdc_field       USING 'BDC_CURSOR''GLACCOUNT_SCREEN_CCODE-XINTB'."字段状态组
PERFORM bdc_field       USING 'GLACCOUNT_SCREEN_CCODE-FSTAG'record-fstag."只能自动过账
PERFORM bdc_field       USING 'GLACCOUNT_SCREEN_CCODE-XINTB'record-xintb.ENDFORM.*----------------------------------------------------------------------*
*        4.1.1.1屏幕填充form,参考录屏的源码程序                                             *
*----------------------------------------------------------------------*
FORM bdc_dynpro USING program dynpro.CLEAR gt_bdcdata.gt_bdcdata-program  = program.gt_bdcdata-dynpro   = dynpro.gt_bdcdata-dynbegin = 'X'.APPEND gt_bdcdata.ENDFORM.*----------------------------------------------------------------------*
*          4.1.1.2字段填充form,参考录屏的源码程序                                              *
*----------------------------------------------------------------------*
FORM bdc_field USING fnam fval.CLEAR gt_bdcdata.gt_bdcdata-fnam = fnam.gt_bdcdata-fval = fval.APPEND gt_bdcdata.
ENDFORM.*写错误日志form
FORM write_log_err USING saknr message.CLEAR gt_log.gt_log-saknr = saknr.gt_log-type = 'E'.gt_log-txt100 = message.APPEND gt_log.ENDFORM.                    "write_Log_err*&---------------------------------------------------------------------*
*&      Form  fieldcat_init
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->FIELD_NAME    text
*      -->FIELD_TEXT    text
*      -->FIELD_LENGTH  text
*----------------------------------------------------------------------*
FORM fieldcat_init USING field_namefield_textfield_length TYPE i.DATA: ls_fieldcat TYPE slis_fieldcat_alv.CLEAR ls_fieldcat.ls_fieldcat-fieldname = field_name.ls_fieldcat-seltext_l = field_text.ls_fieldcat-seltext_m = field_text.ls_fieldcat-seltext_s = field_text.ls_fieldcat-outputlen = field_length.APPEND ls_fieldcat TO gt_fieldcat.
ENDFORM.                    "Fieldcat_init*&--------------------------------------------------------------------*
*&      Form  ALV_SHOW
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
FORM alv_show.
* Populate fieldcatalogPERFORM fieldcat_init USING : 'SAKNR' '总帐科目'  10 .PERFORM fieldcat_init USING : 'TYPE' '类型'  4 .PERFORM fieldcat_init USING : 'TXT100' '描述' 100.CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'EXPORTINGi_callback_program = sy-repidis_layout          = gs_layoutit_fieldcat        = gt_fieldcat[]TABLESt_outtab           = gt_logEXCEPTIONSprogram_error      = 1OTHERS             = 2.
ENDFORM.                    "output

2.4 注意点

遇到的最大问题,就是前台界面因为配置的不同,会显示不同的字段必输等
例如只有成本要素类别的科目,才能有成本要素字段聚焦、成本要素字段录入等内容,所以要根据业务实际配置情况,做动态更新。
可以根据不同类型录屏多次,或者直接拷贝修改录屏的内容。
PS:其实录屏的内容非常简单,也就几类常用的,多接触了自然就熟悉了。

比如:

PERFORM bdc_dynpro USING ‘SAPLGL_ACCOUNT_MASTER_MAINTAIN’ ‘2001’. 就是选择屏幕
PERFORM bdc_field USING ‘BDC_OKCODE’ ‘=ACC_CRE’. 就是鼠标选择或者回车选择
PERFORM bdc_field USING ‘BDC_CURSOR’ ‘GLACCOUNT_SCREEN_KEY-SAKNR’. 就是聚焦字段
PERFORM bdc_field USING ‘GLACCOUNT_SCREEN_KEY-SAKNR’ record-saknr. 就是写字段等。

内容很简单的,就是用起来麻烦些,搞不好因为一些配置,就看不到该屏幕或者该字段了。

3 再来看看LTMC是否有财务科目

3.1 登录后台LTMC地址

跟fiori端口是一致的
https://mysap.goodsap.cn:44300/sap/bc/webdynpro/sap/dmc_wda?WDCONFIGURATIONID=DMC_WDA_APP&sap-client=100&sap-language=ZH

3.2 创建迁移项目

在这里插入图片描述

选择总账科目
在这里插入图片描述

下载模板
在这里插入图片描述

3.3 填写一些内容

一般数据

在这里插入图片描述

公司代码数据

在这里插入图片描述

科目名称

在这里插入图片描述

科目关键字
在这里插入图片描述

3.4 上传导入

在这里插入图片描述

激活后开始传输,验证画面如下:

在这里插入图片描述

确认映射值,无法映射的会报错
在这里插入图片描述

在这里插入图片描述

建议资产负债表只使用本地货币
在这里插入图片描述

显示已完成

在这里插入图片描述

查看导入科目

在这里插入图片描述

3.5 总结:还挺好用

人家SAP业务玩的肯定比咱们溜,比用BDC舒服多了。至于每个字段代表的含义,要是能跟后台字段对应上最好了(主要是英文不好)

可以用英文环境登录se11查看相关表,就大约知道什么意思了

用多了就熟悉了。

但是有些限制,比如多个公司共用1个账目表,那么导入第二个公司时,会提示账目表已存在(不过如果共用账目表,直接复制科目就可以了)

当然,如果作为一个开发男,我还是喜欢BAPI>BDC>LTMC,毕竟LTMC是“通用的”。相比较来说,我是宁愿花个1天搞个导入,也比用别人的导入,研究没法改代码的好些。。。还是想有一些个性化或者说灵动性
在这里插入图片描述


http://www.ppmy.cn/news/275922.html

相关文章

SAP-FICO LSMW批量导财务凭证批量导固定资产主数据-AS91

一、LSMW运用场景 1、主数据导入 科目主数据 FS00 供应商主数据 XK01 客户主数据 XD01 资产主数据(历史) AS91 银行主数据 FI01 2、交易数据导入 总账余额导入 供应商未清项 客户未清项 二、操作步骤&#xff1a; 创建项目-子项目-对象 录屏&#xff08;主数据导入需要录屏&…

EAS BOS:科目余额表、辅助账余额表

T_GL_AccountBalance 科目余额视图 T_GL_AccountBalance_1F 科目余额表 未过账已过账的原币余额 T_GL_AccountBalance_1L 科目余额表 未过账已过账的本位币余额 T_GL_AccountBalance_1R 科目余额表 未过账已过账的报告币余额 T_GL_AccountBalance_5F 科目余额表 已过账的原币…

SAP FI 系列 (031) - 允许在会计凭证中修改统驭科目

会计凭证调整统驭科目一般通过 SGL&#xff0c;也就是特别总账标记。SAP也允许在会计凭证中修改统驭科目。但这个方法存在一些缺点。 配置 科目组中放开 Recon. Account ready for input 字段 在定义科目组的时候&#xff08;T-code: OBD4) 放开 recon. account ready for i…

【财务】FMS财务管理系统---应收管理

笔者前面介绍了FMS财务管理系统相关逻辑结构&#xff0c;本篇文章继续对应收管理进行了系统的介绍&#xff0c;希望通过此文能够加深你对FMS财务管理系统的认识。 上一篇主要介绍了财务进销存系统的数据流与模块组成&#xff0c;知道了FMS系统中数据的来源并从系统结构上说明了…

【财务】FMS财务管理系统---对账平台

人工进行对账工作是非常繁杂的&#xff0c;此时&#xff0c;就非常有必要建设一个对账平台。笔者在本文介绍了对账平台的相关内容&#xff0c;分享给大家。 前面介绍过应收对账、财务应付结算两部分内容&#xff1b;应收对账主要是调用第三方支付的接口获取支付流水信息与我司的…

会计报表版本OB58 编辑功能

编辑会计报表版本FSV&#xff08;ob58&#xff09;有多种功能&#xff1a; 展开子树&#xff08;expand a subtree&#xff09;:你能通过把光标放在需要的节点并选择展开子树(expand a subtree)展开一个节点的所有的子节点. 选中节点&#xff08;select nodes&#xff09;:你能…

【财务】FMS财务管理系统---费用管理

在FMS财务管理系统中&#xff0c;和公司主营业务收入相关的费用有哪些&#xff1f;本篇文章中&#xff0c;笔者对具体分类和流程进行了系统的分析和总结&#xff0c;与大家分享。 财务中的费用管理主要包括销售费用、财务费用、管理费用等几大部分&#xff0c;看到费用大家首先…

Faiss PQ 乘积量化

Approximate Nearest Neighbor搜索简称ANN。 从宏观上看ANN brute-force搜索的方式是在全空间进行搜索&#xff0c;为了加快查找的速度&#xff0c;几乎所有的ANN方法都是通过对全空间分割&#xff0c;将其分割成很多小的子空间&#xff0c;在搜索的时候&#xff0c;通过某种…