zoukankan      html  css  js  c++  java
  • SAP公司间采购订单关联交货单报表源代码(自己收藏)

    *&---------------------------------------------------------------------*
    *& Report  ZMMR023
    *&
    *&---------------------------------------------------------------------*
    *&by xiaochangye  20161010
    *&xiugai by dev02 20161226
    *&---------------------------------------------------------------------*

    report ztestxiao001.

    tables:vbkd,vbak,vbrp,vbrk,ekpo,vbap,lips.

    *定义ALV变量
    type-pools: slis.
    data: fieldcatalog   type slis_t_fieldcat_alv with header line,
          gd_tab_group   type slis_t_sp_group_alv,
          gd_layout      type slis_layout_alv,
          gd_repid       like sy-repid,
          gt_events      type slis_t_event,
          gd_prntparams  type slis_print_alv,
          gt_sort        type slis_t_sortinfo_alv,
          gs_sort        type slis_sortinfo_alv,
          g_title        type lvc_title.

    data:begin of gt_out occurs 0,
      ernam   like ekko-ernam,"负责人
      bstkd_e like vbkd-bstkd_e,"采购订单号
      menge   like ekpo-menge,"订单数量
      bpmng   like ekbe-bpmng,"收货数量
      werks   like ekpo-werks,"工厂
      matnr   like ekpo-matnr,"物料号
      txz01   like ekpo-txz01,"物料描述
      vbelnxs  like vbkd-vbeln,"销售订单号
      posnrxs like vbkd-posnr,"销售订单行项目号
      kwmeng   like vbep-wmeng,"销售订单数量
      lfimg   like lips-lfimg,"交货数量
      vkorg   like vbak-vkorg,"销售组织
      matwa   like vbap-matwa,"物料号
      arktx   like vbap-arktx,"物料描述
      vbelnjh  like vbkd-vbeln,"交互单号
      posnrjh like vbkd-posnr,"交货单行项目号
      vbelnfp  like vbkd-vbeln,"发票号
      posnrfp like vbkd-posnr,"发票行项目号
      fkdat   like vbrk-fkdat,"发票创建日期
      end of gt_out.

    data:begin of gt_huizong occurs 0,
      ernam   like ekko-ernam,"负责人
      bstkd_e like vbkd-bstkd_e,"采购订单号
      werks   like ekpo-werks,"工厂
      matnr   like ekpo-matnr,"物料号
      txz01   like ekpo-txz01,"物料描述
      vbelnxs  like vbkd-vbeln,"销售订单号
      posnrxs like vbkd-posnr,"销售订单行项目号
      lfimg   like lips-lfimg,"交货数量

      end of gt_huizong.

    data:begin of gt_vbkd occurs 0,
      bstkd_e like vbkd-bstkd_e,"采购订单号
      ebeln like vbkd-vbeln,"采购订单号
      vbelnxs  like vbkd-vbeln,"销售订单号
      posnrxs like vbkd-posnr,"销售订单行项目号
      vbeln    like vbkd-vbeln,"销售订单号
      posnr   like vbkd-posnr,"销售订单行项目号
      vbelnjh  like vbkd-vbeln,"交互单号
      posnrjh like vbkd-posnr,"交货单行项目号
      ERNAM like ekko-ERNAM,
      end of gt_vbkd.

    data:begin of gt_ekpo occurs 0,
      ebeln like vbkd-vbeln,"采购订单号
      werks   like ekpo-werks,"采购工厂
      matnr   like ekpo-matnr,"采购物料号
      txz01   like ekpo-txz01,"采购物料描述
      MENGE   LIKE EKPO-MENGE,"订单数量
      end of gt_ekpo.
    data gt_ekpo1 like gt_ekpo occurs with header line.

    data:begin of gt_ekbe occurs 0,
      ebeln like vbkd-vbeln,"采购订单号
      MENGE   like ekbe-MENGE,"收货数量
      BWART   like ekbe-BWART,"移动类型
      end of gt_ekbe.
    data gt_ekbe1 like gt_ekbe occurs with header line.

    data:begin of gt_vbrk occurs 0,
      vbelnxs like vbak-vbeln,"销售订单号
      vkorg   like vbak-vkorg,"销售组织
      matwa   like vbap-matwa,"销售物料号
      arktx   like vbap-arktx,"销售物料描述
      end of gt_vbrk.

    data:begin of gt_vbap occurs 0,
      vbeln   like vbap-vbeln,"销售订单号
      KWMENG  like vbap-KWMENG,"
      end of gt_vbap.
    data gt_vbap1 like gt_vbap occurs with header line.

    data:begin of gt_vbak occurs 0,
      bstkd_e like vbkd-bstkd_e,"交货单号
      posex_e like vbkd-posex_e,"交货单行项目号
      vbelnjh like vbkd-vbeln,"交互单号
      vbeln   like vbkd-vbeln,"销售订单号
      posnr   like vbkd-posnr,"销售订单行项目号
      end of gt_vbak.

    data:begin of gt_lips occurs 0,
      vbeln   like lips-vbeln,"交货单号
      vgbel like lips-vgbel,
      vgpos like  lips-vgpos,
      LFIMG   like lips-LFIMG,"
      end of gt_lips.
    data gt_lips1 like gt_lips occurs with header line.

    data:begin of gt_fp occurs 0,
      aubel  like vbrp-aubel,"销售订单号
      aupos like vbrp-aupos,"销售订单行项目号
      vbeln  like vbrp-vbeln,"发票号
      posnr like vbrp-posnr,"发票行项目号
      end of gt_fp.

    data:begin of gt_fpdata occurs 0,
      vbeln  like vbrp-vbeln,"发票号
      fkdat like vbrk-fkdat,"发票日期
      end of gt_fpdata.

    "定义选择屏幕(输入条件)
    selection-screen begin of block block1 with frame title text-001.
    select-options:   s_bstkd for vbkd-bstkd_e.  "采购订单号
    select-options:   s_aubel   for vbrp-aubel.  "销售订单号
    selection-screen end of block block1.

    start-of-selection.
      "取数
      perform get_data.
      "处理数据
      perform deal_data.
      "alv显示
      perform alv_dis.

    end-of-selection.
    *&---------------------------------------------------------------------*
    *&      Form  GET_DATA
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    form get_data .

      select
        a~bstkd_e
        a~vbeln as vbelnxs
        a~posnr as posnrxs
        b~vbeln as vbelnjh
        b~posnr as posnrjh
        c~ERNAM
        into corresponding fields of table gt_vbkd
        from vbkd as a
        inner join lips as b on b~vgbel = a~vbeln and b~vgpos = a~posnr
        inner join ekko as on c~EBELN = a~bstkd_e
        where  a~bstkd_e in s_bstkd
        and a~vbeln in s_aubel.
      if gt_vbkd[] is not initial"判断查出的数据是否为空,如果为空不再执行以下的程序(initial=空)
        select            "从表VBKD查出销售订单类型为ZWK1,售达方为公司间的全部数据放到临时表GT_VBAK里
          a~vbeln as vbeln
          a~posnr
          a~bstkd_e
          a~posex_e
          into corresponding fields of table gt_vbak
          from vbkd as a
          inner join vbak as b on  a~vbeln = b~vbeln
          where b~auart 'ZKE1'
          and ( b~kunnr '0000002300' or b~kunnr '0000002100'
          or b~kunnr '0000002200' or b~kunnr '0000003100'
          or b~kunnr '0000001000'  )
          and a~posex_e <> ''.

        loop at gt_vbak"更改自字符串长度格式
          gt_vbak-vbelnjh = gt_vbak-bstkd_e+0(10).
          modify gt_vbak.
          clear gt_vbak.
        endloop.
        loop at gt_vbkd"更改自字符串长度格式
          gt_vbkd-ebeln = gt_vbkd-bstkd_e+0(10).
          modify gt_vbkd.
          clear gt_vbkd.
        endloop.

        "删除gt_vbkd中交货单号及航项目在gt_vbak中找不到的行
    *   loop at gt_vbkd.
    *     read table gt_vbak with key vbelnjh = gt_vbkd-vbelnjh
    *                                 posex_e = gt_vbkd-posnrjh.
    *     if sy-subrc <> 0.
    *       delete gt_vbkd.
    *     endif.
    *   endloop.
    *对gt_vbkd中交货单号机航项目在gt_vbak中找到的行,
    *修改销售订单号及航项目=gt_vbak中的销售订单号及航项目
        loop at gt_vbkd.
          read table gt_vbak with key vbelnjh = gt_vbkd-vbelnjh
                                      posex_e = gt_vbkd-posnrjh.
          if sy-subrc 0.
            gt_vbkd-vbeln = gt_vbak-vbeln.
            gt_vbkd-posnr = gt_vbak-posnr.
          endif.
          modify gt_vbkd.
          clear gt_vbkd.
        endloop.
        "查出销售订单号,销售订单行项目,发票号,发票行项目,发票日期放到临时表 get_FP里
        select
          aubel
          aupos
          vbeln
          posnr
          into corresponding fields of table gt_fp
          from vbrp
          for all entries in gt_vbkd
          where aubel = gt_vbkd-vbeln and aupos = gt_vbkd-posnr.
        "查出发票的下达日期放到GT_FPDATA这个临时表里
        select
          vbeln
          fkdat
          into corresponding fields of table gt_fpdata
          from vbrk
          for all entries in gt_fp
          where vbeln = gt_fp-vbeln.

        "查出采购订单的工厂、物料号、采购数量、和物料描述放在临时表GT_EKPO里。
        select
          ebeln
          werks
          matnr
          txz01
          MENGE
          into corresponding fields of table gt_ekpo
          from ekpo
          for all entries in gt_vbkd
          where ebeln = gt_vbkd-ebeln
          and LOEKZ ''.
    *    收货数量
        select
          ebeln
          MENGE
          BWART
          into corresponding fields of table gt_ekbe
          from ekbe
          for all entries in gt_vbkd
          where ebeln = gt_vbkd-ebeln
          and BWART <> ''.
        "查出销售订单的销售组织、物料号和物料描述在临时表GT_VBRK
        select
          a~vbeln as vbelnxs
          a~vkorg
          b~matwa
          b~arktx
          into corresponding fields of table gt_vbrk
          from vbak as a
          inner join vbap as b on b~vbeln = a~vbeln
          for all entries in gt_vbkd
          where a~vbeln = gt_vbkd-vbelnxs.

    *    销售订单数量
        select
          vbeln
          KWMENG
          into corresponding fields of table gt_vbap
          from vbap
          for all entries in gt_vbkd
          where vbeln = gt_vbkd-vbelnxs.

    *    交货数量
        select
          vbeln
          LFIMG
          into corresponding fields of table gt_lips
          from lips
          for all entries in gt_vbkd
          where vbeln = gt_vbkd-vbelnjh and LGORT <> ''.

      endif.


    endform.                    " GET_DATA
    *&---------------------------------------------------------------------*
    *&      Form  DEAL_DATA
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    form deal_data .  "给需要输出的字段赋值
      loop at gt_ekbe.
        if gt_ekbe-BWART '102'.
          gt_ekbe-MENGE - gt_ekbe-MENGE.
        endif.
        gt_ekbe-BWART ''.
        modify gt_ekbe.
        clear gt_ekbe.
      endloop.
      sort gt_ekbe by ebeln.
      loop at gt_ekbe.
        collect gt_ekbe into gt_ekbe1.
      endloop.
      sort gt_vbap by VBELN.
      loop at gt_vbap.
        collect gt_vbap into gt_vbap1.
      endloop.
      sort gt_lips by VBELN.
      loop at gt_lips.
        collect gt_lips into gt_lips1.
      endloop.

      loop at gt_vbkd.
        gt_out-ernam   = gt_vbkd-ernam  .
        gt_out-bstkd_e = gt_vbkd-bstkd_e.
        gt_out-vbelnxs = gt_vbkd-vbelnxs.
        gt_out-posnrxs = gt_vbkd-posnrxs.
        gt_out-vbelnjh = gt_vbkd-vbelnjh.
        gt_out-posnrjh = gt_vbkd-posnrjh.
        read table gt_fp with key aubel = gt_vbkd-vbeln
                                  aupos = gt_vbkd-posnr.
        if sy-subrc 0.
          gt_out-vbelnfp = gt_fp-vbeln.
          gt_out-posnrfp = gt_fp-posnr.

        endif.

        read table gt_fpdata with key vbeln = gt_out-vbelnfp.
        if sy-subrc 0.
          gt_out-fkdat   = gt_fpdata-fkdat.
        endif.

        read table gt_ekpo with key ebeln = gt_vbkd-ebeln.
        if sy-subrc 0.
          gt_out-werks = gt_ekpo-werks."工厂
          gt_out-matnr = gt_ekpo-matnr."物料号
          gt_out-txz01 = gt_ekpo-txz01."物料描述
          gt_out-menge = gt_ekpo-menge."

        endif.

        read table gt_ekbe1 with key ebeln = gt_vbkd-ebeln.
        if sy-subrc 0.
          gt_out-bpmng = gt_ekbe1-MENGE."
        endif.

        read table gt_vbrk with key vbelnxs = gt_vbkd-vbelnxs.
        if sy-subrc 0.
          gt_out-vkorg = gt_vbrk-vkorg."销售组织
          gt_out-matwa = gt_vbrk-matwa."物料号
          gt_out-arktx = gt_vbrk-arktx."物料描述
        endif.

        read table gt_vbap1 with key vbeln = gt_vbkd-vbelnxs.
        if sy-subrc 0.
          gt_out-kwmeng  = gt_vbap1-kwmeng ."销售组织
        endif.

        read table gt_lips1 with key vbeln = gt_vbkd-vbelnjh.
        if sy-subrc 0.
          gt_out-lfimg   = gt_lips1-lfimg  ."销售组织
        endif.

        call function 'CONVERSION_EXIT_ALPHA_OUTPUT'
          exporting
            input  = gt_out-matnr
          importing
            output = gt_out-matnr.
        call function 'CONVERSION_EXIT_ALPHA_OUTPUT'
          exporting
            input  = gt_out-matwa
          importing
            output = gt_out-matwa.
        call function 'CONVERSION_EXIT_ALPHA_OUTPUT'
          exporting
            input  = gt_out-vbelnxs
          importing
            output = gt_out-vbelnxs.

        append gt_out.
        clear  gt_out.

      endloop.
      loop at gt_out.
        MOVE-CORRESPONDING gt_out TO GT_HUIZONG.
        collect gt_huizong.
      endloop.
      loop at gt_out.
        read table gt_huizong with key bstkd_e = gt_out-bstkd_e
                                       vbelnxs = gt_out-vbelnxs
                                       posnrxs = gt_out-posnrxs.
        if sy-subrc 0.
          gt_out-lfimg   = gt_huizong-lfimg  ."销售组织
        endif.
        modify gt_out.
        clear gt_out.
      endloop.
      sort gt_out by BSTKD_E VBELNXS POSNRXS.
      DELETE ADJACENT DUPLICATES FROM gt_out COMPARING BSTKD_E VBELNXS POSNRXS.


    endform.                    " DEAL_DATA
    *&---------------------------------------------------------------------*
    *&      Form  ALV_DIS
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    form alv_dis .

    *创建字段宏定义和输出字段赋值
      perform frm_build_fieldcatalog.

    *定义输出模式
      gd_layout-no_input           'X'.
      gd_layout-colwidth_optimize  'X'.
      gd_layout-f2code             '&IC1'.  "Sets fcode for when double click(press f2)
      "gd_layout-box_fieldname      = 'BOX'.
      gd_layout-cell_merge         'X'.
      gd_layout-zebra              'X'.

    *使用ALV输出函数
      gd_repid = sy-repid.
      call function 'REUSE_ALV_GRID_DISPLAY'
           exporting
                i_callback_program       = gd_repid
    **用户操作的参数
    *            I_CALLBACK_USER_COMMAND  = 'USER_COMMAND_4000' "自定义指向代码
    *ALV输出状态的参数
                i_callback_pf_status_set 'SET_PF_STATUS_3200' "菜单
    *输出模式参数
                is_layout                = gd_layout
                it_fieldcat              = fieldcatalog[]
                is_print                 = gd_prntparams
                i_grid_title             = g_title
                i_save                   'X'
                "it_sort                  = gt_sort[]
           tables
    *用于输出ALV的内表
                t_outtab                 = gt_out
           exceptions
    *定义输出异常时的信息,配合MESSAGE语句使用
                program_error            1
                others                   2.

    endform.                    " ALV_DIS
    *&---------------------------------------------------------------------*
    *&      Form  FRM_BUILD_FIELDCATALOG
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    form frm_build_fieldcatalog .

      "创建字段宏定义
      define add_field.
        fieldcatalog-fieldname =  &1.   "内表字段名称
        fieldcatalog-seltext_m =  &2.    "字段输出名称
        fieldcatalog-no_zero   =  &3.    "是否显示零
        fieldcatalog-just      =  &4.    "对齐方式
        fieldcatalog-emphasize =  &5.    "是否高亮
        fieldcatalog-checkbox    = &6.  "是否带单选框
        fieldcatalog-edit      =  &7.    "可编辑
        append fieldcatalog.
        clear fieldcatalog.
      end-of-definition.
    *输出字段赋值
      add_field 'ERNAM'                    '负责人'         '' 'L' '' '' ''.
      add_field 'BSTKD_E'                  '采购订单号'         '' 'L' '' '' ''.
      add_field 'MENGE'                    '订单数量'         '' 'L' '' '' ''.
      add_field 'BPMNG'                    '收货数量'         '' 'L' '' '' ''.
      add_field 'WERKS'                    '工厂'         '' 'L' '' '' ''.
      add_field 'MATNR'                    '物料号'         '' 'L' '' '' ''.
      add_field 'TXZ01'                    '物料描述'         '' 'L' '' '' ''.
      add_field 'VBELNXS'                  '销售订单号'         '' 'L' '' '' ''.
      add_field 'POSNRXS'                  '销售订单行项目号'         '' 'L' '' '' ''.
      add_field 'VKORG'                    '销售组织'         '' 'L' '' '' ''.
      add_field 'KWMENG'                   '订单数量'         '' 'L' '' '' ''.
      add_field 'LFIMG'                    '交货数量'         '' 'L' '' '' ''.
      add_field 'MATWA'                    '物料号'         '' 'L' '' '' ''.
      add_field 'ARKTX'                    '物料描述'         '' 'L' '' '' ''.
      add_field 'VBELNJH'                  '交货单号'         '' 'L' '' '' ''.
      add_field 'POSNRJH'                  '交货单行项目号'         '' 'L' '' '' ''.
      add_field 'VBELNFP'                  '发票号'         '' 'L' '' '' ''.
      add_field 'POSNRFP'                  '发票行项目号'         '' 'L' '' '' ''.
      add_field 'FKDAT'                    '发票下达日期'         '' 'L' '' '' ''.





    endform.                    " FRM_BUILD_FIELDCATALOG
    *&---------------------------------------------------------------------*
    *&      Form  set_pf_status_3200
    *&---------------------------------------------------------------------*
    *       GUI定义
    *----------------------------------------------------------------------*
    *      -->EXTAB      text
    *----------------------------------------------------------------------*
    form set_pf_status_3200 using  extab type slis_t_extab.
      data: r_ucomm like sy-ucomm.
      set pf-status 'MYSTATUS'.
    endform.

  • 相关阅读:
    移动端图片按比例裁剪
    bootstrap悬停下拉菜单显示
    videojs兼容ie8
    ie浏览器不支持多行隐藏显示省略号
    rem和px
    浏览器默认返回,页面刷新
    centos src compile gcc 7.3
    docker与gosu
    centos 安装 kernel
    docker proxy
  • 原文地址:https://www.cnblogs.com/275147378abc/p/6065736.html
Copyright © 2011-2022 走看看