当前位置: 首页 > news >正文

SAP MM采购对账功能分享

一、功能逻辑

二、功能展示

三、功能代码

*&---------------------------------------------------------------------*
*& Report ZRPMM0032
*&---------------------------------------------------------------------*
*& 采购对账功能
*& 20241101
*& xiaoweihua
*&
*&---------------------------------------------------------------------*
REPORT zrpmm0034.

TABLES: sscrfields,ekko,ekpo,marc,mseg.

INCLUDE fbgenmac.

*&---------------------------------------------------------------------*
*&  数据类型
*&---------------------------------------------------------------------*

TYPES: BEGIN OF ty_alv," 建一个内表保存数据 (需要展示的数据)
         zbox        TYPE c,    "序号
         bukrs       TYPE bukrs,  "公司代码
         ekorg       TYPE ekorg,    "采购组织
         ekgrp       TYPE ekgrp,    "采购组
         eknam       TYPE t024-eknam,   "采购组名称 "
         lifnr       TYPE lifnr,    "供应商
         name1       TYPE name1,    "供应商名称
         ebeln       TYPE ebeln,    "采购凭证编号
         ebelp       TYPE ebelp,    "采购凭证行项目编号

         matnr       TYPE matnr,         "物料编码
         txz01       TYPE ekpo-txz01,    "物料名称
         menge       TYPE bstmg,    "订单数量
         netpr       TYPE netpr,    "订单净价
         peinh       TYPE peinh,    "价格单位
         meins       TYPE meins,    "订单单位

         mwskz       TYPE ekpo-mwskz,      "税码
         kbetr       TYPE kbetr,      "税率
         text1       TYPE t007s-text1,    "税码描述
         waers       TYPE waers,          "订单货币
         mblnr       TYPE mblnr,          "物料凭证号
         zeile       TYPE mblpo,          "物料凭证行项目
         bwart       TYPE bwart,          "移动类型
         budat_mkpf  TYPE sy-datum,     "过账日期
         wemng       TYPE wemng,          "收货数量
         zwsdj(16)   TYPE p DECIMALS 6,          "未税单价

         wewrt       TYPE wewrt,    "收货金额(未税)
         zhsdj(16)   TYPE p DECIMALS 6,    "含税单价
         zshjehs     TYPE acgl_item-wrbtr,    "收货金额(含税)
         zzse        TYPE acgl_item-wrbtr,    "总税额
         zzyzsl      TYPE wemng,    "总发票数量
         zzyzje      TYPE acgl_item-wrbtr,    "总发票金额
         zse         TYPE acgl_item-wrbtr,    "税额
         zyzsl       TYPE wemng,    "发票数量
         zyzje       TYPE acgl_item-wrbtr,    "发票金额

         zykpsl      TYPE wemng,    "已开票数量
         zwkpsl      TYPE wemng,    "未开票数量

         gjahr       TYPE rbkp-gjahr,    "会计年度
         bldat       TYPE rbkp-bldat,    "凭证中的凭证日期
         budat       TYPE rbkp-budat,    "凭证中的过帐日期
         xrech       TYPE rbkp-xrech,    "凭证状态
         inv_tran    TYPE rbkp-inv_tran  ,    "事务
         blart       TYPE rbkp-blart,    "凭证类型
         kostl       TYPE vfkn-kostl,    "成本中心

         xmwst       TYPE rbkp-xmwst,    "计算税额标识
         wmwst       TYPE fwstev,    "税额
         hkont       TYPE acgl_item-hkont,    "总账科目
         shkzg       TYPE acgl_item-shkzg,    "借/贷标识
         wrbtr       TYPE acgl_item-wrbtr,    "凭证货币金额
         zterm       TYPE ekko-zterm,    "付款条件
         zterm_t     TYPE char60,         "付款条件描述
         anln1       TYPE ekkn-anln1,         "资产编号
         zthbs       TYPE c,         "退货标识
         msgtx       TYPE char255,  "返回消息
         field_style TYPE lvc_t_styl,  "控制字段可编辑的参数
         bprme       TYPE ekpo-bprme,
         infnr       TYPE ekpo-infnr,
         znum        TYPE wemng,
       END OF ty_alv.


TYPES:BEGIN OF ty_ftaxp,
        mwskz TYPE mwskz.
        INCLUDE STRUCTURE ftaxp.
TYPES END OF ty_ftaxp.

DATA: lt_ftaxp TYPE TABLE OF ftaxp,
      ls_ftaxp TYPE ftaxp.
*&---------------------------------------------------------------------*
*&  结构 内表
*&---------------------------------------------------------------------*

DATA:gt_alv TYPE TABLE OF ty_alv,
     gs_alv TYPE ty_alv.


*----------------------------------------------------------------------*
*       ALV层级关系定义
*----------------------------------------------------------------------*
DATA: gs_layout   TYPE lvc_s_layo, "ALV 控制: 布局结构
      gt_fieldcat TYPE lvc_t_fcat, "字段目录
      gs_fieldcat TYPE lvc_s_fcat,
      gv_repid    TYPE repid. "当前程序名
DATA: gr_grid TYPE REF TO cl_gui_alv_grid, "用于绑定ALV事件
      gs_stbl TYPE lvc_s_stbl. "用于列稳定刷新
DATA: gt_event TYPE slis_t_event WITH HEADER LINE.

DATA: gt_ddval TYPE lvc_t_drop,    "存下拉列表
      gs_ddval TYPE lvc_s_drop.

DATA: gs_style TYPE lvc_s_styl.

*&---------------------------------------------------------------------*
*&  选择屏幕
*&---------------------------------------------------------------------*

SELECTION-SCREEN: BEGIN OF BLOCK blk1 WITH FRAME TITLE TEXT-t01.

  SELECT-OPTIONS: s_werks FOR marc-werks.  "NO-EXTENSION NO INTERVALS
  SELECT-OPTIONS: s_lifnr FOR ekko-lifnr.
  SELECT-OPTIONS: s_ekorg FOR ekko-ekorg.
  SELECT-OPTIONS: s_ekgrp FOR ekko-ekgrp.
  SELECT-OPTIONS: s_matnr FOR ekpo-matnr.
  SELECT-OPTIONS: s_ebeln FOR ekpo-ebeln.
  SELECT-OPTIONS: s_ebelp FOR ekpo-ebelp.
  SELECT-OPTIONS: s_budat FOR mseg-budat_mkpf.
  PARAMETERS: p_srm TYPE c AS CHECKBOX.   "SRM供应商对账
  PARAMETERS: p_dis TYPE c AS CHECKBOX.   "查看


SELECTION-SCREEN: END OF BLOCK blk1.

AT SELECTION-SCREEN OUTPUT.

AT SELECTION-SCREEN.

START-OF-SELECTION.

  PERFORM frm_get_data.

  PERFORM frm_init_layout.
  PERFORM frm_init_fieldcat.
  PERFORM frm_display_alv.


END-OF-SELECTION.


*&---------------------------------------------------------------------*
*& Form frm_get_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_get_data.

  FIELD-SYMBOLS:<fs_alv_temp> TYPE ty_alv.

  SELECT ekorg,ekgrp,ekko~lifnr,ekko~ebeln,
         ebelp,matnr,menge,netpr,ekko~bukrs,
         peinh,meins,ekpo~mwskz,waers,
         txz01,name1,knttp,zterm,ekpo~infnr,ekpo~bprme
          "mblnr,zeile,budat_mkpf,wemng,wewrt
           FROM ekko
           LEFT JOIN ekpo
           ON ekko~ebeln = ekpo~ebeln
           LEFT JOIN but000
           ON ekko~lifnr = but000~partner
           LEFT JOIN lfa1
           ON ekko~lifnr = lfa1~lifnr
           INTO TABLE @DATA(gt_ekko)
           WHERE ekpo~werks IN @s_werks
           AND ekko~lifnr IN @s_lifnr
           AND ekorg IN @s_ekorg
           AND ekgrp IN @s_ekgrp
           AND matnr IN @s_matnr
           AND ekko~ebeln IN @s_ebeln
           AND ebelp IN @s_ebelp
           AND pstyp <> '2'       "排除寄售项目
           AND zsrm_supplier = @p_srm       "SRM供应商对账
           .

  IF gt_ekko IS NOT INITIAL.
    SELECT ekbe~ebeln,ekbe~ebelp,ekbe~zekkn,
           vgabe,ekbe~gjahr,ekbe~belnr,ekbe~menge,
           ekbe~wrbtr AS wewrt,mseg~mblnr,mseg~zeile,mseg~mjahr,
           mseg~erfmg AS wemng,mseg~dmbtr,budat_mkpf,mseg~bwart,
           mseg~lfbnr,mseg~lfpos,mseg~lfbja,mseg~shkzg,mseg~erfme,
           mseg~SJAHR,mseg~SMBLN,mseg~SMBLP
             FROM ekbe
             INNER JOIN mseg
             ON ekbe~belnr = mseg~mblnr AND ekbe~buzei = mseg~zeile
             INTO TABLE @DATA(lt_ekbe)
             FOR ALL ENTRIES IN @gt_ekko
             WHERE ekbe~ebeln = @gt_ekko-ebeln
             AND ekbe~ebelp = @gt_ekko-ebelp
             AND vgabe = '1' .

    SELECT ebeln,ebelp,zekkn,anln1
             FROM ekkn
             INTO TABLE @DATA(lt_ekkn)
             FOR ALL ENTRIES IN @gt_ekko
             WHERE ekkn~ebeln = @gt_ekko-ebeln
             AND ekkn~ebelp = @gt_ekko-ebelp
             AND loekz <> 'X'.

"解决存在被冲销凭证不在用户前台界面选择的范围内过滤不掉被冲销的凭证  --hps20250925
    IF lt_ekbe IS NOT INITIAL.
      "被冲销单据
      SELECT * FROM m_mbmps
               INTO TABLE @DATA(lt_mbmps)
               FOR ALL ENTRIES IN @lt_ekbe
               WHERE m_mbmps~sjahr = @lt_ekbe-gjahr
               AND m_mbmps~smbln = @lt_ekbe-mblnr
               AND m_mbmps~smblp = @lt_ekbe-zeile.
    ENDIF.

    IF lt_ekbe[] IS NOT INITIAL.
      SELECT rseg~belnr,rseg~gjahr,rseg~buzei,menge,
             lfbnr,lfpos,lfgja,ivtyp,rbkp~bldat,rbkp~budat
               FROM rseg
               LEFT OUTER JOIN rbkp
               ON rbkp~belnr = rseg~belnr AND rbkp~gjahr = rseg~gjahr
               INTO TABLE @DATA(lt_rseg)
               FOR ALL ENTRIES IN @lt_ekbe
               WHERE lfbnr = @lt_ekbe-mblnr
               AND lfpos = @lt_ekbe-zeile
               AND lfgja = @lt_ekbe-gjahr
*             AND ivtyp = ''.
        .
    ENDIF.
  ENDIF.

  "取描述
  SELECT ekgrp,eknam FROM t024 INTO TABLE @DATA(lt_t024).

  SELECT mwskz,text1 FROM t007s INTO TABLE @DATA(lt_t007s) WHERE spras = @sy-langu AND kalsm = 'TAXCN'.

  SELECT *
    FROM t052u
    INTO TABLE @DATA(lt_t052u)
    WHERE spras = @sy-langu.

  SELECT *
    FROM eina
    INTO TABLE @DATA(LT_eina)
    .

  DATA:gs_alv TYPE ty_alv.

  LOOP AT gt_ekko INTO DATA(gs_ekko).
    CLEAR gs_alv.
*    READ TABLE lt_eina
*    INTO DATA(ls_eina)
*    WITH KEY infnr = gs_ekko-infnr.
*    IF sy-subrc = 0.
*      IF ls_eina-lmein <> gs_ekko-bprme.
*        gs_ekko-meins = gs_ekko-bprme .
*        gs_ekko-menge = gs_ekko-menge / ls_eina-umrez.
*      ENDIF.
*    ENDIF.
    MOVE-CORRESPONDING gs_ekko TO gs_alv.

    AUTHORITY-CHECK OBJECT 'M_BEST_EKG'
    ID 'ACTVT' FIELD '03'
    ID 'EKGRP' FIELD gs_alv-ekgrp.
    IF sy-subrc <> 0 .
      CONTINUE.
    ENDIF.

    "采购组描述
    READ TABLE lt_t024 INTO DATA(ls_t024) WITH KEY ekgrp = gs_alv-ekgrp.
    IF sy-subrc = 0.
      gs_alv-eknam = ls_t024-eknam.
    ENDIF.

    "税码
    READ TABLE lt_t007s INTO DATA(ls_t007s) WITH KEY mwskz = gs_alv-mwskz.
    IF sy-subrc = 0.
      gs_alv-text1 = ls_t007s-text1.
    ENDIF.

    "赋值给默认值
    gs_alv-gjahr = sy-datum+0(4).
    gs_alv-bldat = sy-datum.
    gs_alv-budat = sy-datum.
    gs_alv-xrech = 'A'.
    gs_alv-inv_tran = '1'.
    gs_alv-blart = 'RE'.
    gs_alv-xmwst = 'X'.
    gs_alv-wmwst = gs_alv-zse.
    gs_alv-hkont = '8000160000'.
    gs_alv-shkzg = 'H'.
    gs_alv-wrbtr = 0.

    READ TABLE lt_t052u
      INTO DATA(lwa_t052u)
      WITH KEY zterm = gs_alv-zterm.

    IF sy-subrc = 0.
      gs_alv-zterm_t = lwa_t052u-text1 .
    ENDIF.

    "资产编号
    READ TABLE lt_ekkn INTO DATA(ls_ekkn) WITH KEY  ebeln = gs_alv-ebeln ebelp = gs_alv-ebelp.
    IF sy-subrc = 0.
      gs_alv-anln1 = ls_ekkn-anln1.
    ENDIF.


    CLEAR:lt_ftaxp.
    "税率转换
    CALL FUNCTION 'GET_TAX_PERCENTAGE'
      EXPORTING
        aland   = 'CN'
        datab   = sy-datum
        mwskz   = gs_alv-mwskz
        txjcd   = '*'
*       EXPORT  = ' '
      TABLES
        t_ftaxp = lt_ftaxp.

    READ TABLE lt_ftaxp INTO ls_ftaxp INDEX 1.
    IF sy-subrc = 0.
      gs_alv-kbetr = ( 1 + ls_ftaxp-kbetr / 1000 ).
    ENDIF.

    LOOP AT lt_ekbe INTO DATA(ls_ekbe) WHERE ebeln = gs_alv-ebeln
                                     

http://www.dtcms.com/a/499032.html

相关文章:

  • 网页设计与网站建设考试名词解释2019网站建设工作的作用
  • 【有源码】基于Python与Spark的火锅店数据可视化分析系统-基于机器学习的火锅店综合竞争力评估与可视化分析-基于用户画像聚类的火锅店市场细分与可视化研究
  • Linux: perf: sched latency,周期性抓取看趋势,做对比
  • 统计学重要思想
  • Android 本地存储方案深度解析:SharedPreferences、DataStore、MMKV 全面对比
  • 网站开发前后端中山做外贸网站
  • ElastiCache Redis 内存告警深度分析与运维实战指南
  • Spring5.3.10源码编译和调试(IDEA+Gradle)的过程
  • JS | 知识点总结 - 原型链
  • 【Docker】Docker镜像仓库
  • EEException: Geometry.area: Unable to perform this geometry operation.
  • 逻辑和共情
  • linux安装输入法
  • git连接远程仓库并拉去推送以及克隆命令
  • steam新品节游戏推荐!手机怎么玩steam游戏!
  • OpenHarmony Stage模型深度解剖:从Ability Kit到沙箱隔离的全链路底层原理
  • 基于 GEE 的 MODIS 昼夜地表温度数据可视化与导出全流程解决方案
  • 【Docker】记录一次使用docker部署dify网段冲突的问题
  • 缓存三剑客问题
  • 构建AI智能体:六十七、超参数如何影响大模型?通俗讲解原理、作用与实战示例
  • timm教程翻译:(一)Overview
  • 手写Spring第5弹:告别项目混乱:用Maven构建标准Java项目目录结构
  • Vue3 表单输入绑定
  • 手机app制作网站网站后台尺寸一般做多大的
  • C程序中的选择语句
  • OpenCV进阶:图像变换、增强与特征检测实战
  • 自己做的网站怎样对接支付宝php餐饮美食店网站源码 生成html
  • 【大数据技术实战】Kafka 认证机制全解析
  • Android14源码移植到Android16的应用报错分析说明
  • 13万枚比特币被没收。。。