生产日报表

来源:互联网 发布:淘宝店铺备份在哪里 编辑:程序博客网 时间:2024/04/26 21:45
*&---------------------------------------------------------------------*
*& 

    Form  ZFRM_GOODS_RECEIPT_DATA
*&---------------------------------------------------------------------*
     text
*----------------------------------------------------------------------*
--> p1       text
<-- p2       text
*----------------------------------------------------------------------*
FORM zfrm_goods_receipt_data .
  "取出查询月期间带销售订单号码有货物移动的生产订单
  SELECT * INTO CORRESPONDING FIELDS OF TABLElt_aufm
    FROMaufm
    WHERE matnrIN s_matnr AND werks EQ s_werks
     AND budat >= frist_day AND budat <=last_day
     AND ( bwart EQ '101' OR bwart EQ '102' )
     AND kdauf NE '' AND kdpos NE ''.
  CLEAR lt_aufm.
  "删除重复的生产订单号码
  LOOP AT lt_aufm.
    COLLECTlt_aufm INTO lf_aufm.
  ENDLOOP.
ENDFORM.                   " ZFRM_GOODS_RECEIPT_DATA
*&---------------------------------------------------------------------*
*&     Form  ZFRM_SALES_ORDER_DATA
*&---------------------------------------------------------------------*
     text
*----------------------------------------------------------------------*
--> p1       text
<-- p2       text
*----------------------------------------------------------------------*
FORM zfrm_sales_order_data .
  "与销售订单行项目对比那些生产订单属于成品
  CLEAR lf_aufm.
  LOOP AT lf_aufm.
    CLEARlt_matnr.
    SELECTSINGLE matnr INTO lt_matnr
     FROM vbap
     WHERE vbeln EQ lf_aufm-kdauf
       AND posnr EQ lf_aufm-kdpos
       AND matnr EQ lf_aufm-matnr.
    IF sy-subrc= 0.
     lt_afpo-matnr = lf_aufm-matnr.
     lt_afpo-werks = lf_aufm-werks.
     lt_afpo-aufnr = lf_aufm-aufnr.
     lt_afpo-kdauf = lf_aufm-kdauf.
     lt_afpo-kdpos = lf_aufm-kdpos.
     APPEND lt_afpo.
    ENDIF.
  ENDLOOP.
  "删除重复的生产订单号码
  CLEAR lt_afpo.
  LOOP AT lt_afpo.
    COLLECTlt_afpo INTO lm_afpo.
  ENDLOOP.
  "LM_AFPO数据交换给lt_vbap表
  CLEAR lm_afpo.
  LOOP AT lm_afpo.
   lt_vbap-matnr = lm_afpo-matnr.
   lt_vbap-werks = lm_afpo-werks.
   lt_vbap-kdauf = lm_afpo-kdauf.
   lt_vbap-kdpos = lm_afpo-kdpos.
   lt_vbap-kunnr = ''.
   lt_vbap-sortl = ''.
   lt_vbap-edatu = ''.
   lt_vbap-kwmeng = ''.
   lt_vbap-menge  = ''.
   lt_vbap-mng02 = ''.
    APPENDlt_vbap.
  ENDLOOP.
  "删除销售订单号码+行项目号重复的数据
  CLEAR lt_vbap.
  LOOP AT lt_vbap.
    COLLECTlt_vbap INTO lm_vbap.
  ENDLOOP.
  "取出销售订单的客户代码、交货日期、订单数量
  CLEAR lm_vbap.
  LOOP AT lm_vbap.
    SELECTSINGLE kunnr INTO lm_vbap-kunnr
     FROM vbpa
     WHERE vbeln EQ lm_vbap-kdauf
       AND parvw EQ 'WE'.
    SELECTSINGLE MAX( edatu ) INTO lm_vbap-edatu
     FROM vbep
     WHERE vbeln EQ lm_vbap-kdauf
       AND posnr EQ lm_vbap-kdpos.
    SELECTSINGLE kwmeng INTO lm_vbap-kwmeng
     FROM vbap
     WHERE vbeln EQ lm_vbap-kdauf
       AND posnr EQ lm_vbap-kdpos.
    MODIFYlm_vbap.
  ENDLOOP.
  "取出客户代码的检索词
  CLEAR lm_vbap.
  LOOP AT lm_vbap.
    SELECTSINGLE sortl INTO lm_vbap-sortl
     FROM kna1
     WHERE kunnr EQ lm_vbap-kunnr
       AND spras EQ '1'.
    MODIFYlm_vbap.
  ENDLOOP.
  "取出销售订单出货数量
  CLEAR lm_vbap.
  LOOP AT lm_vbap.
   CLEAR:lt_gmnga,lt_kwmeng.
    SELECTSINGLE SUM( mseg~menge ) INTO lt_gmnga
     FROM mseg
     WHERE ( bwart EQ '901' OR bwart EQ '903' OR
           bwart EQ '905' OR bwart EQ '601' OR
           bwart EQ 'Y01' OR bwart EQ 'Y03' OR
           bwart EQ 'Z21' )
       AND werks EQ lm_vbap-werks
       AND matnr EQ lm_vbap-matnr
       AND kdauf EQ lm_vbap-kdauf
       AND kdpos EQ lm_vbap-kdpos.
    SELECTSINGLE SUM( mseg~menge ) INTO lt_kwmeng
     FROM mseg
     WHERE ( bwart EQ '902' OR bwart EQ '904' OR
           bwart EQ '906' OR bwart EQ '602' OR
           bwart EQ 'Y02' OR bwart EQ 'Y04' OR
           bwart EQ 'Z22' )
       AND werks EQ lm_vbap-werks
       AND matnr EQ lm_vbap-matnr
       AND kdauf EQ lm_vbap-kdauf
       AND kdpos EQ lm_vbap-kdpos.
   lm_vbap-menge = lt_gmnga - lt_kwmeng.
    MODIFYlm_vbap.
  ENDLOOP.
  "取出销售订单库存数量
  CLEAR lm_vbap.
  LOOP AT lm_vbap.
    SELECTSINGLE SUM( kalab ) INTO lm_vbap-mng02
     FROM mska
     WHERE matnr EQ lm_vbap-matnr
       AND werks EQ lm_vbap-werks
       AND vbeln EQ lm_vbap-kdauf
       AND posnr EQ lm_vbap-kdpos.
    MODIFYlm_vbap.
  ENDLOOP.
ENDFORM.                   " ZFRM_SALES_ORDER_DATA
*&---------------------------------------------------------------------*
*&     Form  ZFRM_PORDER_GOODS_RECEIPT_DATA
*&---------------------------------------------------------------------*
     text
*----------------------------------------------------------------------*
--> p1       text
<-- p2       text
*----------------------------------------------------------------------*
FORM zfrm_porder_goods_receipt_data .
  "将lm_afpo数据表的数据交换到lt_stock表中
  CLEAR lm_afpo.
  LOOP AT lm_afpo.
   lt_stock-matnr = lm_afpo-matnr.
   lt_stock-werks = lm_afpo-werks.
   lt_stock-aufnr = lm_afpo-aufnr.
   lt_stock-kdauf = lm_afpo-kdauf.
   lt_stock-kdpos = lm_afpo-kdpos.
   lt_stock-budat = ''.
   lt_stock-menge = ''.
    APPENDlt_stock.
  ENDLOOP.
  "取出每天生产订单的入库数量
  CLEAR lt_stock.
  LOOP AT lt_stock.
    SELECT *FROM aufm WHERE matnr EQ lt_stock-matnr
                        AND werks EQ lt_stock-werks
                        AND aufnr EQ lt_stock-aufnr
                        AND kdauf EQ lt_stock-kdauf
                        AND kdpos EQ lt_stock-kdpos
                        AND budat >= frist_day
                        AND budat <= last_day
                        AND ( bwart EQ '101' OR
                              bwart EQ '102' ).
     IF sy-subrc = 0.
       lm_stock-matnr = lt_stock-matnr.
       lm_stock-werks = lt_stock-werks.
       lm_stock-kdauf = lt_stock-kdauf.
       lm_stock-kdpos = lt_stock-kdpos.
       lm_stock-budat = aufm-budat.
       lm_stock-menge = aufm-menge.
       APPEND lm_stock.
     ENDIF.
   ENDSELECT.
  ENDLOOP.
  "按照销售订单号码+行项目号合计每天入库数量
  CLEAR lm_stock.
  LOOP AT lm_stock.
    COLLECTlm_stock INTO lf_stock.
  ENDLOOP.
  "将原始的销售订单号码LM_AFPO交换到LT_TOTAL内表中
  CLEAR lm_afpo.
  LOOP AT lm_afpo.
   lt_total-matnr = lm_afpo-matnr.
   lt_total-werks = lm_afpo-werks.
   lt_total-kdauf = lm_afpo-kdauf.
   lt_total-kdpos = lm_afpo-kdpos.
    APPENDlt_total.
  ENDLOOP.
  "删除重复的销售订单号码+行项目号码
  CLEAR lt_total.
  LOOP AT lt_total.
    COLLECTlt_total INTO ln_total.
  ENDLOOP.
  "从数据库取出所有与销售订单号码一一对应的生产订单
  CLEAR ln_total.
  LOOP AT ln_total.
    SELECT *FROM afpo WHERE matnr EQ ln_total-matnr
                        AND dwerk EQ ln_total-werks
                        AND kdauf EQ ln_total-kdauf
                        AND kdpos EQ ln_total-kdpos.
     IF sy-subrc = 0.
       lf_total-matnr = ln_total-matnr.
       lf_total-werks = ln_total-werks.
       lf_total-kdauf = ln_total-kdauf.
       lf_total-kdpos = ln_total-kdpos.
       lf_total-wemng = afpo-wemng.
       APPEND lf_total.
     ENDIF.
   ENDSELECT.
  ENDLOOP.
  "合计生产入库数量
  CLEAR lf_total.
  LOOP AT lf_total.
    COLLECTlf_total INTO lm_total.
  ENDLOOP.
  "数据交换到内表lp_total.
  CLEAR lm_total.
  LOOP AT lm_total.
   lp_total-matnr = lm_total-matnr.
   lp_total-werks = lm_total-werks.
   lp_total-kdauf = lm_total-kdauf.
   lp_total-kdpos = lm_total-kdpos.
   lp_total-wemng = lm_total-wemng.
   lp_total-kwmeng = ''.
   lp_total-zchayi = ''.
    APPENDlp_total.
  ENDLOOP.
  "读取内表lm_vbap销售订单+行项目的订单数量
  CLEAR:lm_vbap,lp_total.
  LOOP AT lp_total.
    READ TABLElm_vbap WITH KEY matnr = lp_total-matnr
                               werks = lp_total-werks
                               kdauf = lp_total-kdauf
                               kdpos = lp_total-kdpos.
    IF sy-subrc= 0.
     lp_total-kwmeng = lm_vbap-kwmeng.
     MODIFY lp_total.
    ENDIF.
  ENDLOOP.
  "计算生产欠数
  CLEAR lp_total.
  LOOP AT lp_total.
   lp_total-zchayi = lp_total-kwmeng - lp_total-wemng.
    MODIFYlp_total.
  ENDLOOP.
  "计算当月生产累计入库数量
  CLEAR lf_stock.
  LOOP AT lf_stock.
   lt_month-matnr = lf_stock-matnr.
   lt_month-werks = lf_stock-werks.
   lt_month-kdauf = lf_stock-kdauf.
   lt_month-kdpos = lf_stock-kdpos.
   lt_month-menge = lf_stock-menge.
    APPENDlt_month.
  ENDLOOP.
  "入库数量合计
  CLEAR lt_month.
  LOOP AT lt_month.
    COLLECTlt_month INTO lf_month.
  ENDLOOP.
ENDFORM.                   " ZFRM_PORDER_GOODS_RECEIPT_DATA
*&---------------------------------------------------------------------*
*&     Form  ZFRM_PORDER_CONFIRMATION_DATA
*&---------------------------------------------------------------------*
     text
*----------------------------------------------------------------------*
--> p1       text
<-- p2       text
*----------------------------------------------------------------------*
FORM zfrm_porder_confirmation_data .
  "取出工艺路线号和确认号码,提高报表运行速度,afru table通过订单号码关联
  "速度非常慢。
  CLEAR lm_afpo.
  LOOP AT lm_afpo.
    SELECT *FROM afko WHERE aufnr EQ lm_afpo-aufnr.
     IF sy-subrc = 0.
       lt_afru-matnr = lm_afpo-matnr.
       lt_afru-werks = lm_afpo-werks.
       lt_afru-aufnr = lm_afpo-aufnr.
       lt_afru-kdauf = lm_afpo-kdauf.
       lt_afru-kdpos = lm_afpo-kdpos.
       lt_afru-aufpl = afko-aufpl.
       lt_afru-vornr = ''.
       lt_afru-rueck = ''.
       APPEND lt_afru.
     ENDIF.
   ENDSELECT.
  ENDLOOP.
  CLEAR lt_afru.
  LOOP AT lt_afru.
    SELECT *FROM afvc WHERE aufpl EQ lt_afru-aufpl.
     IF sy-subrc = 0.
       ls_afru-matnr = lt_afru-matnr.
       ls_afru-werks = lt_afru-werks.
       ls_afru-aufnr = lt_afru-aufnr.
       ls_afru-kdauf = lt_afru-kdauf.
       ls_afru-kdpos = lt_afru-kdpos.
       ls_afru-aufpl = lt_afru-aufpl.
       ls_afru-vornr = afvc-vornr.
       ls_afru-rueck = afvc-rueck.
       APPEND ls_afru.
     ENDIF.
   ENDSELECT.
  ENDLOOP.
  "数据从ls_afru交换到lt_afvc
  CLEAR ls_afru.
  LOOP AT ls_afru.
   lt_afvc-matnr = ls_afru-matnr.
   lt_afvc-werks = ls_afru-werks.
   lt_afvc-aufnr = ls_afru-aufnr.
   lt_afvc-kdauf = ls_afru-kdauf.
   lt_afvc-kdpos = ls_afru-kdpos.
   lt_afvc-aufpl = ls_afru-aufpl.
   lt_afvc-vornr = ls_afru-vornr.
   lt_afvc-rueck = ls_afru-rueck.
    APPENDlt_afvc.
  ENDLOOP.
  "数据排序,最后一道工序排到最前面
  SORT lt_afvc ASCENDING BY aufnr vornrDESCENDING.
  "把唯一的生产订单号码数据从lm_afpo交货到lm_afvc表
  CLEAR lm_afpo.
  LOOP AT lm_afpo.
   lm_afvc-matnr = lm_afpo-matnr.
   lm_afvc-werks = lm_afpo-werks.
   lm_afvc-aufnr = lm_afpo-aufnr.
   lm_afvc-kdauf = lm_afpo-kdauf.
   lm_afvc-kdpos = lm_afpo-kdpos.
   lm_afvc-aufpl = ''.
   lm_afvc-vornr = ''.
   lm_afvc-rueck = ''.
    APPENDlm_afvc.
  ENDLOOP.
  "从lt_afvc表中取出最后一道工序赋值给LM_AFVC表
  CLEAR:lm_afvc,lt_afvc.
  LOOP AT lm_afvc.
    READ TABLElt_afvc WITH KEY matnr = lm_afvc-matnr
                               werks = lm_afvc-werks
                               aufnr = lm_afvc-aufnr
                               kdauf = lm_afvc-kdauf
                               kdpos = lm_afvc-kdpos.
    IF sy-subrc= 0.
     lm_afvc-aufpl = lt_afvc-aufpl.
     lm_afvc-vornr = lt_afvc-vornr.
     lm_afvc-rueck = lt_afvc-rueck.
     MODIFY lm_afvc.
    ENDIF.
  ENDLOOP.
  "取出在查询范围内生产订单每天的确认数量
  CLEAR lm_afvc.
  LOOP AT lm_afvc.
    SELECT *FROM afru WHERE rueck EQ lm_afvc-rueck
                        AND budat >= frist_day
                        AND budat <= last_day.
     IF sy-subrc = 0.
       lm_afru-matnr = lm_afvc-matnr.
       lm_afru-werks = lm_afvc-werks.
       lm_afru-kdauf = lm_afvc-kdauf.
       lm_afru-kdpos = lm_afvc-kdpos.
       lm_afru-budat = afru-budat.
       lm_afru-gmnga = afru-gmnga.
       lm_afru-stokz = afru-stokz.
       APPEND lm_afru.
     ENDIF.
   ENDSELECT.
  ENDLOOP.
  "将冲销标识字段为'X'的数据变为负数
  CLEAR lm_afru.
  LOOP AT lm_afru.
    IFlm_afru-stokz = 'X'.
     lm_afru-gmnga = - lm_afru-gmnga.
     MODIFY lm_afru.
    ENDIF.
  ENDLOOP.
  "数据从lm_afru内表交换到lp_afru为合计数量做过度
  CLEAR lm_afru.
  LOOP AT lm_afru.
   lp_afru-matnr = lm_afru-matnr.
   lp_afru-werks = lm_afru-werks.
   lp_afru-kdauf = lm_afru-kdauf.
   lp_afru-kdpos = lm_afru-kdpos.
   lp_afru-budat = lm_afru-budat.
   lp_afru-gmnga = lm_afru-gmnga.
    APPENDlp_afru.
  ENDLOOP.
  "合计每天订单确认数量
  CLEAR lp_afru.
  LOOP AT lp_afru.
    COLLECTlp_afru INTO lf_afru.
  ENDLOOP.
  "数据交换到lk_month内表,为合计数量打下基础
  CLEAR lf_afru.
  LOOP AT lf_afru.
   lk_month-matnr = lf_afru-matnr.
   lk_month-werks = lf_afru-werks.
   lk_month-kdauf = lf_afru-kdauf.
   lk_month-kdpos = lf_afru-kdpos.
   lk_month-gmnga = lf_afru-gmnga.
    APPENDlk_month.
  ENDLOOP.
  "合计当月确认数量
  CLEAR lk_month.
  LOOP AT lk_month.
    COLLECTlk_month INTO lj_month.
  ENDLOOP.
ENDFORM.                   " ZFRM_PORDER_CONFIRMATION_DATA


原创粉丝点击