无法获得输出中所有GL相关文件的编号.. !!! 谢谢提前

2020-08-17 14:10发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中) *&-------------...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


 *&---------------------------------------------  ------------------------ *
 *&报告Z_FI_GLACC
 *&------------------------------------------------  --------------------- *
 *&
 *&------------------------------------------------  --------------------- *
 报告z_fi_glacc没有标准页标题。


 表格:bseg,bkpf,skat,lfa1。


 类型:开始于ty_final,
          sel,"用于alv的额外颜色
          TYPE PRCTR,利润中心
          hkont TYPE hkont,"总帐帐户
          belnr TYPE belnr_d,"会计凭证编号
          budat TYPE budat,"文档中的过帐日期
          bldat TYPE bldat,"文档中的文档日期
          TYPE augcp,"清除输入日期
          pswsl TYPE pswsl,"总帐中的更新量
          sgtxt TYPE sgtxt,"项目文本
          dzuonr TYPE dzuonr,"分配编号
          wrbtr TYPE wrbtr,"凭证货币金额
          lifnr TYPE lifnr,"卖方或债权人的帐号
          gsber TYPE gsber,"业务领域
          bupla TYPE bupla,营业地点
          xblnr TYPE xblnr,"参考文档编号
          bktxt TYPE bktxt,"文档标题文本
          cpudt TYPE cpudt,"输入会计凭证的日期
          saknr TYPE saknr," gl帐户
          txt50 TYPE txt50_skat,"总帐科目长文本
          name1 TYPE name1,"供应商Namae
        ty_final结束。


 数据:gt ty_final类型表,
       gwa TYPE ty_final,
       gt_fcat TYPE slis_t_fieldcat_alv,
       wa_fcat TYPE slis_fieldcat_alv,
       gs_layout TYPE slis_layout_alv,
       gs_varient TYPE变量,
       v_prog TYPE sy-repid,
       v_name TYPE sy-uname,
       rs_selfield TYPE slis_selfield,
       v_selfield TYPE slis_selfield值,
       r_ucomm TYPE sy-ucomm。


 初始化。
   v_prog = sy-repid。
   v_name = sy-uname。


   带有标题标题文本001的b1块的选择屏幕开始。
   选择选项:s_hkont for bseg-hkont," gl帐号
                    s_budat FOR bseg-h_budat,"发布数据
                    s_prctr FOR bseg-prctr。 利润中心
   块b的选择屏幕结束。


 选择开始。
   执行get_data。


 选择结束。
   执行fcat。
   执行alvcall。
   使用r_ucomm更改rs_selfield来执行usercmd。


 FORM get_data。


   选择
           prctr,
           赫康特
           belnr,
           h_budat,
           h_bldat,
           奥格,
           pswsl,
           sgtxt,
           zuonr,
           wrbtr,
           lifnr,
           gsber,
           布普拉
           从bseg到表@DATA(l_bseg)
           在@s_hkont的hkont
           AND h_budat IN @s_budat
           和prctr IN @s_prctr。


   检查sy-subrc EQ 0。




   选择xblnr,
           bktxt,
           cpudt,
           贝恩
           从bkpf到表@DATA(l_bkpf)中所有@l_bseg中的条目
           在哪里belnr EQ @ l_bseg-belnr
           和@@ s_budat中的好友。




     SELECT saknr,
            txt50
            从skat到表@DATA(l_skat)中所有@l_bseg中的条目
            在哪里saknr EQ @ l_bseg-hkont。


   万一。


   SELECT lifnr,
          从lfa1到表@DATA(l_lfa1)中的name1,用于@l_bseg中的所有条目
          lifnr EQ @ l_bseg-lifnr在哪里。


   排序:l_bseg BY belnr,
         l_bkpf BY belnr。


   循环到l_bseg INTO DATA(w_bseg)。
     gwa-prctr = w_bseg-prctr。
     gwa-hkont = w_bseg-hkont。
     gwa-belnr = w_bseg-belnr。
     gwa-budat = w_bseg-h_budat。
     gwa-bldat = w_bseg-h_bldat。
     gwa-augcp = w_bseg-augcp。
     gwa-pswsl = w_bseg-pswsl。
     gwa-sgtxt = w_bseg-sgtxt。
     gwa-dzuonr = w_bseg-zuonr。
     gwa-wrbtr = w_bseg-wrbtr。
     gwa-lifnr = w_bseg-lifnr。
     gwa-gsber = w_bseg-gsber。
     gwa-bupla = w_bseg-bupla。


     使用键belnr = w_bseg-belnr二进制搜索将表l_bkpf读入DATA(w_bkpf)。


     IF sy-subrc均衡器0。
       gwa-xblnr = w_bkpf-xblnr。
       gwa-bktxt = w_bkpf-bktxt。
       gwa-cpudt = w_bkpf-cpudt。
     万一。


     使用键saknr = w_bseg-hkont二进制搜索将表l_skat读入DATA(w_skat)。


     IF sy-subrc均衡器0。
       gwa-saknr = w_skat-saknr。
       gwa-txt50 = w_skat-txt50。
     万一。


     使用键lifnr = w_bseg-lifnr将表l_lfa1读入DATA(w_lfa1)中。


     IF sy-subrc均衡器0。
       gwa-name1 = w_lfa1-name1。
     万一。


     将gwa附加到gt。
     清除gwa。
   结局。


 ENDFORM。


 表格fcat。


   gs_layout-zebra ='X'。
   gs_layout-colwidth_optimize ='X'。
   gs_layout-box_fieldname ='SEL'。
   gs_varient-report = sy-repid。


   wa_fcat-fieldname ='BELNR'。
   wa_fcat-ref_tabname ='BSEG'。
   wa_fcat-seltext_m ='文件编号'。
   wa_fcat-hotspot ='X'。
   wa_fcat-outputlen ='15'。
   将wa_fcat附加到gt_fcat。
   清除wa_fcat。


   wa_fcat-fieldname ='SGTXT'。
   wa_fcat-ref_tabname ='BSEG'。
   wa_fcat-seltext_m ='文字'。
   将wa_fcat附加到gt_fcat。
   清除wa_fcat。


   wa_fcat-fieldname ='PRCTR'。
   wa_fcat-ref_tabname ='BSEG'。
   wa_fcat-seltext_m ='利润中心'。
   将wa_fcat附加到gt_fcat。
   清除wa_fcat。


   wa_fcat-fieldname ='BUDAT'。
   wa_fcat-ref_tabname ='BSEG'。
   wa_fcat-seltext_m ='发布日期'。
   wa_fcat-datatype ='DATS'。
   将wa_fcat附加到gt_fcat。
   清除wa_fcat。


   wa_fcat-fieldname ='AUGCP'。
   wa_fcat-ref_tabname ='BSEG'。
   wa_fcat-seltext_m ='清除输入日期'。
   wa_fcat-datatype ='DATS'。
   将wa_fcat附加到gt_fcat。
   清除wa_fcat。


   wa_fcat-fieldname ='BLDAT'。
   wa_fcat-ref_tabname ='BSEG'。
   wa_fcat-seltext_m ='文档日期'。
   wa_fcat-datatype ='DATS'。
   将wa_fcat附加到gt_fcat。
   清除wa_fcat。


   wa_fcat-fieldname ='CPUDT'。
   wa_fcat-ref_tabname ='BKPF'。
   wa_fcat-seltext_m ='输入日期'。
   将wa_fcat附加到gt_fcat。
   清除wa_fcat。


   wa_fcat-fieldname ='WRBTR'。
   wa_fcat-ref_tabname ='BSEG'。
   wa_fcat-seltext_m ='凭证货币金额'。
   将wa_fcat附加到gt_fcat。
   清除wa_fcat。


   wa_fcat-fieldname ='PSWSL'。
   wa_fcat-ref_tabname ='BSEG'。
   wa_fcat-seltext_m ='货币'。
   将wa_fcat附加到gt_fcat。
   清除wa_fcat。


   wa_fcat-fieldname ='LIFNR'。
   wa_fcat-ref_tabname ='LFA1'。
   wa_fcat-seltext_m ='供应商编号'。
   将wa_fcat附加到gt_fcat。
   清除wa_fcat。


   wa_fcat-fieldname ='NAME1'。
   wa_fcat-ref_tabname ='LFA1'。
   wa_fcat-seltext_m ='供应商名称'。
   将wa_fcat附加到gt_fcat。
   清除wa_fcat。


   wa_fcat-fieldname ='XBLNR'。
   wa_fcat-ref_tabname ='BKPF'。
   wa_fcat-seltext_m ='参考文件编号'。
   将wa_fcat附加到gt_fcat。
   清除wa_fcat。


   wa_fcat-fieldname ='DZUONR'。
   wa_fcat-ref_tabname ='BSEG'。
   wa_fcat-seltext_m ='指派人'。
   将wa_fcat附加到gt_fcat。
   清除wa_fcat。


   wa_fcat-fieldname ='BKTXT'。
   wa_fcat-ref_tabname ='BKPF'。
   wa_fcat-seltext_m ='标题文本'。
   将wa_fcat附加到gt_fcat。
   清除wa_fcat。


   wa_fcat-fieldname ='SAKNR'。
   wa_fcat-ref_tabname ='SKA1'。
   wa_fcat-seltext_m ='总账科目'。
   将wa_fcat附加到gt_fcat。
   清除wa_fcat。


   wa_fcat-fieldname ='TXT50'。
   wa_fcat-ref_tabname ='SKAT'。
   wa_fcat-seltext_m ='总帐说明'。
   将wa_fcat附加到gt_fcat。
   清除wa_fcat。


   wa_fcat-fieldname ='GSBER'。
   wa_fcat-ref_tabname ='BSEG'。
   wa_fcat-seltext_m ="业务区域"。
   wa_fcat-outputlen ='15'。
   将wa_fcat附加到gt_fcat。
   清除wa_fcat。




   wa_fcat-fieldname ='BUPLA'。
   wa_fcat-ref_tabname ='BSEG'。
   wa_fcat-seltext_m ="营业地点"。
   wa_fcat-outputlen ='15'。
   将wa_fcat附加到gt_fcat。
   清除wa_fcat。




 ENDFORM。




 FORM alvcall。


   通话功能'REUSE_ALV_GRID_DISPLAY'
     出口
       i_callback_program = v_prog
       i_callback_user_command ='USERCMD'
       i_grid_title ='总帐科目明细'
       is_layout = gs_layout
       it_fieldcat = gt_fcat
       is_variant = gs_varient
     桌子
       t_outtab = gt。


 ENDFORM。




 FORM usercmd使用r_ucoma TYPE sy-ucomm更改rs_selfield TYPE slis_selfield。
   案例r_ucoma。
     当"&IC1"时。
       案例rs_selfield-fieldname。
         当" BELNR"。
           设置参数ID'BLN'
           FIELD rs_selfield值。
           呼叫交易'FB03'。
           并跳过第一屏。
       结束。
   结束。
 ENDFORM。
 
6条回答
SC_Yao
2020-08-17 15:00 .采纳回答

您好 Manoj

在前面的评论中已经有不错的提示,但是有很多要修复的地方。

我对您进行了一些更改并评论了要点。 我没有固定获取数据的功能逻辑,因为这应该从FI顾问那里获取。

您的需求是一个很好的示例,为什么需要顾问来描述需求。 顾问应为此提供所有需要的表格。 开发人员必须注意使用正确的方式来连接表的关键字段。

报告zmanoj1。
 表格:bseg。
 类型:
   " STKOES:应在DDIC中创建输出结构,以防止使用不必要的代码,例如创建fcat
   " STKOES:第二个更重要的原因是:可重用性
   ty_final的开始,
     sel,"用于alv的额外颜色
     TYPE PRCTR,利润中心
     hkont TYPE hkont,"总帐帐户
     belnr TYPE belnr_d,"会计凭证编号
     h_budat TYPE budat,"文档STKOES中的过帐日期:使用与bseg中相同的变量名
     h_bldat TYPE bldat," STKOES文档中的文档日期:使用与bseg中相同的变量名
     TYPE augcp,"清除输入日期
     pswsl TYPE pswsl,"总帐中的更新量
     sgtxt TYPE sgtxt,"项目文本
     zuonr TYPE dzuonr,"分配号STKOES:使用与bseg中相同的变量名
     wrbtr TYPE wrbtr,"凭证货币金额
     lifnr TYPE lifnr,"卖方或债权人的帐号
     gsber TYPE gsber,"业务领域
     bupla TYPE bupla,营业地点
     xblnr TYPE xblnr,"参考文档编号
     bktxt TYPE bktxt,"文档标题文本
     cpudt TYPE cpudt,"输入会计凭证的日期
     txt50 TYPE txt50_skat,"总帐科目长文本
     name1 TYPE name1,"供应商Namae
     TYPE GJAHR,"财政年度
     TYPE Bukrs,"公司代码
   ty_final结束。

 数据:
   gt ty_final类型表,
 * gwa TYPE ty_final," STKOES:不需要全局结构"使用内联声明时不需要
   gt_fcat TYPE slis_t_fieldcat_alv,
 * wa_fcat TYPE slis_fieldcat_alv," STKOES:不需要全局结构"使用内联声明时不需要
   gs_layout TYPE slis_layout_alv,
   gs_variant TYPE变量,
   v_prog TYPE sy-repid。
 * v_name TYPE sy-uname," STKOES:如果不使用,则不要声明它
 * rs_selfield TYPE slis_selfield," STKOES:如果不使用,则不要声明它
 * v_selfield TYPE slis_selfield-value," STKOES:如果不使用,则不要声明它
 * r_ucomm TYPE sy-ucomm。  " STKOES:如果您不使用,请不要声明它

 初始化。
   v_prog = sy-repid。
 * v_name = sy-uname。

   带有标题标题文本001的b1块的选择屏幕开始。
     选择选项:
       " STKOES:更好地使用数据库表的关键字段,这更快。所以我添加了另外三个选择选项
       so_belnr FOR bseg-belnr,"会计凭证编号
       so_bukrs FOR bseg-bukrs,"公司代码
       so_gjahr FOR bseg-gjahr,"财政年度

       s_hkont FOR bseg-hkont," gl帐号
       s_budat FOR bseg-h_budat,"发布数据
       s_prctr FOR bseg-prctr。 利润中心
   块b的选择屏幕结束。

 选择开始。
   执行get_data。

 选择结束。
   执行fcat。
   执行alvcall。
 *使用r_ucomm更改rs_selfield来执行usercmd。  " STKOES:仅从ALV屏幕上调用

 FORM get_data。
   如果s_hkont不是INITIAL或s_prctr不是INITIAL或s_budat不是INITIAL。
     " STKOES:由于选择屏幕上的字段,需要获取所有匹配的文档编号
     从bseg到表@DATA(l_bseg_tmp)中选择bukrs,belnr,gjahr
                                 在@so_bukrs中的Bukrs
                                   和belnr IN @so_belnr
                                   AND gjahr IN @so_gjahr
                                   和hkont IN @s_hkont
                                   和prctr IN @s_prctr
                                   AND h_budat IN @s_budat
                                 通过主键订购。
     如果sy-subrc EQ 0。
       从l_bseg_tmp中删除相邻的重复项。  " STKOES:在临时表中仅将BUKRS,BELNR和GJAHR的所有组合保留一次
       SELECT bukrs,belnr,gjahr,buzei,augcp,gsber,wrbtr,pswsl,zuonr,sgtxt,hkont,lifnr,prctr,bupla,
               h_budat,h_bldat从bseg到表@DATA(l_bseg)
                                 对于@l_bseg_tmp中的所有条目
                                 在哪里Bukrs EQ @ l_bseg_tmp-bukrs
                                   和belnr EQ @ l_bseg_tmp-belnr
                                   AND gjahr EQ @ l_bseg_tmp-gjahr
                                 通过主键订购。
       清除:l_bseg_tmp。  " STKOES:不再需要数据
     万一。
   其他。
     SELECT bukrs,belnr,gjahr,buzei,augcp,gsber,wrbtr,pswsl,zuonr,sgtxt,hkont,lifnr,prctr,bupla,
             h_budat AS budat,h_bldat AS bldat从bseg到表@l_bseg
                                                 在@so_bukrs中的Bukrs
                                                   和belnr IN @so_belnr
                                                   AND gjahr IN @so_gjahr
                                                 通过主键订购。
   万一。
   如果sy-subrc EQ 0。
     " STKOES:在这里需要使用所有关键字段。我们从bseg中选择了它们
     从bkpf到表@DATA(l_bkpf)中选择bukrs,belnr,gjahr,cpudt,xblnr,bktxt
                                                     对于@l_bseg中的所有条目
                                                     哪里Bukrs EQ @ l_bseg-bukrs
                                                       和belnr EQ @ l_bseg-belnr
                                                       AND gjahr EQ @ l_bseg-gjahr
 * AND budat EQ @ l_bseg-h_budat
                                                     通过主键订购。

     " STKOES:数据库表包含语言键,因此我们必须使用它
     " STKOES:会计科目表也是关键字段,因此我们必须使用。会计科目表已分配给公司代码
     从skat AS s中选择t〜bukrs,s〜saknr,s〜txt50
                                       内接头t001 AS t
                                         ON t〜ktopl EQ s〜ktopl
                                       到表@DATA(l_skat)
                                       对于@l_bseg中的所有条目
                                       在哪里s〜spras EQ @ sy-langu
                                         与s〜saknr EQ @ l_bseg-hkont
                                         和t〜bukrs EQ @ l_bseg-bukrs。

     SELECT lifnr,name1从lfa1到表@DATA(l_lfa1)
                         对于@l_bseg中的所有条目
                         lifnr EQ @ l_bseg-lifnr在哪里。

     环回l_bkpf参考到数据(lr_bkpf)中。  " STKOES:引用的使用减少了内存的使用
       循环到l_bseg INTO DATA(w_bseg)
           在哪里Bukrs EQ lr_bkpf-> bukrs
             AND belnr EQ lr_bkpf-> belnr
             和gjahr EQ lr_bkpf-> gjahr。

         附加值#(基本对应#(w_bseg)xblnr = lr_bkpf-> xblnr
                                                        bktxt = lr_bkpf-> bktxt
                                                        cpudt = lr_bkpf-> cpudt
                                                        txt50 = VALUE#(l_skat [bukrs = lr_bkpf-> bukrs saknr = w_bseg-hkont] -txt50可选)
                                                        名称1 =值#(l_lfa1 [lifnr = w_bseg-lifnr] -name1可选))
       结局。
     结局。
     清除:l_bseg,l_bkpf,l_skat,l_lfa1。  " STKOES:可以清除数据
   其他。
     " STKOES:为防止显示空白的ALV列表,应保留处理
     消息"未选择数据",类型为" S",显示为" E"。
     离开清单处理。
   万一。
 ENDFORM。

 表格fcat。
   gs_layout = VALUE#(斑马='X'colwidth_optimize ='X'box_fieldname ='SEL')。
   gs_variant-report = sy-repid。

   STKOES:与其像这样创建字段目录,不如在DDIC中创建一个结构并使用它。
   附加值行slis_t_fieldcat_alv(
(fieldname ='BELNR'ref_tabname ='BSEG'seltext_m ='Document Number'outputlen ='15'hotspot ='X') (fieldname ='GJAHR'ref_tabname ='BSEG'seltext_m ='Fiscal Year'outputlen ='4') (字段名='BUKRS'ref_tabname ='BSEG'seltext_m ='公司代码'outputlen ='4') (字段名='SGTXT'ref_tabname ='BSEG'seltext_m ='文本') (fieldname ='PRCTR'ref_tabname ='BSEG'seltext_m ='Profit Centre') (fieldname ='H_BUDAT'ref_tabname ='BSEG'seltext_m ='Posting Date'数据类型='DATS') (fieldname ='AUGCP'ref_tabname ='BSEG'seltext_m ='Clearing Entry Date'数据类型='DATS') (fieldname ='H_BLDAT'ref_tabname ='BSEG'seltext_m ='Document Date'数据类型='DATS') (fieldname ='CPUDT'ref_tabname ='BKPF'seltext_m ='Entry Date') (字段名='WRBTR'ref_tabname ='BSEG'seltext_m ='凭证货币金额') (fieldname ='PSWSL'ref_tabname ='BSEG'seltext_m ='Currency') (字段名='LIFNR'ref_tabname ='LFA1'seltext_m ='供应商编号') (fieldname ='NAME1'ref_tabname ='LFA1'seltext_m ='Vendor Name') (fieldname ='WRBTR'ref_tabname ='BSEG'seltext_m ='Document Currency的金额'cfieldname ='PSWSL'ctabname ='GT') (fieldname ='ZUONR'ref_tabname ='BSEG'seltext_m ='Assignmeant') (fieldname ='BKTXT'ref_tabname ='BKPF'seltext_m ='Header Text') (字段名='HKONT'ref_tabname ='BSEG'seltext_m ='总账科目') (fieldname ='TXT50'ref_tabname ='SKAT'seltext_m ='G/L Discription') (fieldname ='GSBER'ref_tabname ='BSEG'seltext_m ='Business Area'outputlen ='15') (fieldname ='BUPLA'ref_tabname ='BSEG'seltext_m ='Business Place'outputlen ='15'))转到gt_fcat。 ENDFORM。 FORM alvcall。 " STKOES:您应该停止使用此功能模块。请改用cl_gui_custom_container和cl_gui_alv_grid 通话功能'REUSE_ALV_GRID_DISPLAY' 出口 i_callback_program = v_prog i_callback_user_command ='USERCMD' i_grid_title ='总帐科目明细' is_layout = gs_layout it_fieldcat = gt_fcat is_variant = gs_variant 桌子 t_outtab = gt。 ENDFORM。 FORM usercmd使用r_ucoma TYPE sy-ucomm更改rs_selfield TYPE slis_selfield。 案例r_ucoma。 当"&IC1"时。 案例rs_selfield-fieldname。 当" BELNR"。 " STKOES:获取所选的输出数据行 DATA(ls_output_line)= VALUE#(gt [rs_selfield-tabindex]可选)。 " STKOES:我们必须在FB03的输入屏幕上为必填字段设置每个参数ID 设置参数ID'BLN'字段ls_output_line-belnr。 设置参数ID'BUK'字段ls_output_line-bukrs。 设置参数ID" GJR"字段ls_output_line-gjahr。 呼叫交易" FB03"并跳过第一屏。 " STKOES:因为设置了每个参数ID,我们可以跳过第一个屏幕 结束。 结束。 ENDFORM。

问候
斯蒂芬

一周热门 更多>