zoukankan      html  css  js  c++  java
  • SAP 订单状态跟踪

    *&---------------------------------------------------------------------
    *& Program name: 
    *& T-Code:
    *& Porgram Type: Report
    *& Description: 订单状
    *&----------------------------------------------------------------------
    *& Modification Log:
    *& Version     Date        Author       DESCRIPTION     CHANGE REQUEST
    *             2016/3/31   


    REPORT zsdr017 NO STANDARD PAGE HEADING MESSAGE-ID oo.


    *----------------------------------------------------------------------*
    * INCLUDE                                                              *
    *----------------------------------------------------------------------*
    "TYPES:vbfa.

    TYPE-POOLS: slis.



    *----------------------------------------------------------------------*
    * CONSTANTS                                                            *
    *----------------------------------------------------------------------*

    "CONSTANTS: c_s TYPE bapi_mtype VALUE 'S'.



    *----------------------------------------------------------------------*
    * TYPES                                                                *
    *----------------------------------------------------------------------*
    TYPESBEGIN OF typ_vbap ,
             erdat      TYPE vbak-erdat,
             vdatu      TYPE vbak-vdatu "交货日期
             vbeln      TYPE vbak-vbeln,
             kunnr      TYPE vbak-kunnr,
             vkorg      TYPE vbak-vkorg,
             vtweg      TYPE vbak-vtweg,
             spart      TYPE vbak-spart,
             spart2     TYPE vbap-spart,
             bzirk      TYPE  vbkd-bzirk"销售部
             "route      LIKE  vttk-route, "路线

             vkgrp      TYPE vbak-vkgrp,
             vkbur      TYPE vbak-vkbur,
             bstnk      TYPE vbak-bstnk,
             erzet      TYPE vbak-erzet,

             posnr      TYPE vbap-posnr,
             pstyv      TYPE vbap-pstyv"
             matnr      TYPE vbap-matnr,
             arktx      TYPE vbap-arktx,
             werks      TYPE vbap-werks,
    *          lgort type vbap-lgort ,
             kwmeng     TYPE vbap-kwmeng,
             vrkme      TYPE vbap-vrkme,
             netwr      TYPE vbap-netwr,
             mwsbp      TYPE vbap-mwsbp,
             umvkz      TYPE vbap-umvkz,
             umvkn      TYPE vbap-umvkn,
             meins      TYPE vbap-meins,
             klmeng     TYPE vbap-klmeng,

             kdmat      TYPE vbap-kdmat"客户物料编码
             kdmat_quan TYPE vbap-kwmeng,
             auart      TYPE vbak-auart"订单类型
             matkl      TYPE vbap-matkl"物料组
             ztext      TYPE string"行项目长文本
    *       ------20120312修改------
             vstel      TYPE vbap-vstel"装运点
    *         20120406修改
             rise_text  TYPE  tdline"抬头文本
             so_text    TYPE  tdline"抬头文本
             eannr      LIKE vbap-eannr,
             knumv      LIKE vbak-knumv,

           END OF typ_vbap .

    TYPESBEGIN OF typ_output.
            INCLUDE TYPE typ_vbap.
    TYPES: zsel          TYPE c"选择标识
           name1_kna1    TYPE kna1-name1"客户名称
           bzirk_txt     TYPE tvkbt-bezei"销售部描述
           route_txt     LIKE tvkbt-bezei,
           pstyv_txt     LIKE tvapt-vtext"行项目类型描述
           bezei_tvkbt   TYPE tvkbt-bezei"销售大区描述
           bezei_tvgrt   TYPE tvgrt-bezei"销售办事处描述
           kunnr_we      TYPE vbpa-kunnr"  送达方代码
           name1_we      TYPE adrc-name1"  送达方名称
           name1_t001w   TYPE t001w-name1"工厂名称
           lgobe         TYPE t001l-lgobe"库存名称
           zdj           TYPE   vbap-netwr"含税单价--销售单位
           zsl_base      TYPE   vbap-kwmeng"基本单位数量
           zdj_base      TYPE vbap-netwr"含税单价--基本单位
           absta         TYPE vbup-absta"so项目状态
           zabsta_des    TYPE char10"拒绝状态描述
           kdgrp         TYPE knvv-kdgrp"客户组
           ktext         TYPE t151t-ktext"客户组描述

           dmbtr         LIKE bseg-dmbtr"新增金额字段

           "PO采购订单信息
           ebeln_po      TYPE ekko-ebeln,
           aedat_po      TYPE ekko-aedat,
           ebelp_po      TYPE ekpo-ebelp,
           menge_po      TYPE ekpo-menge"数量
           netpr_po      TYPE ekpo-netpr"净价
           meins_po      TYPE ekpo-meins"单位
           "PO对应的收货单GR
           mblnr_po_gr   TYPE mseg-mblnr,
           zeile_po_gr   TYPE mseg-zeile,
           menge_po_gr   TYPE mseg-menge,
           meins_po_gr   TYPE mseg-meins,
           "PO对应的发票校验单
           belnr_po_ir   TYPE rseg-belnr,
           buzei_po_ir   TYPE rseg-buzei,
           menge_po_ir   TYPE rseg-menge,
           meins_po_ir   TYPE rseg-meins,
           "DN交货单信息
           vbeln_dn      TYPE lips-vbeln,
           route         LIKE  vttk-route"路线描述
           posnr_dn      TYPE lips-posnr,
           charg_dn      TYPE lips-charg,
           lgmng_dn      TYPE lips-lgmng,
           meins_dn      TYPE lips-meins,

           bolnr         TYPE likp-bolnr"车牌号
           bezei         TYPE tvakt-bezei"订单类型
           wgbez         TYPE t023t-wgbez"物料组
           devlv         TYPE lips-lgmng,  "交货率

    *        werks type lips-werks,
           lgort         TYPE lips-lgort,
           posnr_dn_chai TYPE lips-posnr"交货单拆分
           charg_dn_chai TYPE lips-charg,
           lgmng_dn_chai TYPE lips-lgmng,
           meins_dn_chai TYPE lips-meins,

           "DN对应的收货单GR
           mblnr_dn_gr   TYPE mseg-mblnr,
           zeile_dn_gr   TYPE mseg-zeile,
           menge_dn_gr   TYPE mseg-menge,
           meins_dn_gr   TYPE mseg-meins,
           "DN对应的开票凭证
           vbeln_dn_bl   TYPE vbrp-vbeln,
           posnr_dn_bl   TYPE vbrp-posnr,
           fkimg_dn_bl   TYPE vbrp-fkimg,
           vrkme_dn_bl   TYPE vbrp-vrkme,

           erdat_likp    LIKE likp-erdat"新加四个字段,用于过滤屏幕
           erzet_likp    LIKE likp-erzet,

           cpudt         LIKE mkpf-cpudt,
           cputm         LIKE mkpf-cputm,
           ddlx          TYPE string,

           erzet_fp      LIKE vbrk-erzet,
           erdat_fp      LIKE vbrk-erdat,

           zh_kwert      LIKE konv-kwert,
           zj_kwert      LIKE konv-kwert,
           fy_kwert      LIKE konv-kwert.
    TYPESEND OF typ_output.

    TYPESBEGIN OF typ_m_mbmps ,
             smbln TYPE m_mbmps-smbln,
             sjahr TYPE m_mbmps-sjahr,
             smblp TYPE m_mbmps-smblp,
             mjahr TYPE m_mbmps-mjahr,
             zeile TYPE m_mbmps-zeile,
             mblnr TYPE m_mbmps-mblnr,
           END OF typ_m_mbmps .

    TYPESBEGIN OF typ_kna1 ,
             kunnr TYPE kna1-kunnr,
             name1 TYPE kna1-name1,
           END OF typ_kna1 .
    TYPESBEGIN OF typ_tvkbt ,
             vkbur TYPE tvkbt-vkbur,
             bezei TYPE tvkbt-bezei,
           END OF typ_tvkbt .
    TYPESBEGIN OF typ_tvgrt ,
             vkgrp TYPE tvgrt-vkgrp,
             bezei TYPE tvgrt-bezei,
           END OF typ_tvgrt .
    TYPESBEGIN OF typ_t001w ,
             werks TYPE t001w-werks,
             name1 TYPE t001w-name1,
           END OF typ_t001w .
    TYPESBEGIN OF typ_t001l ,
             werks TYPE t001l-werks,
             lgort TYPE t001l-lgort,
             lgobe TYPE t001l-lgobe,
           END OF typ_t001l .
    TYPESBEGIN OF typ_vbup ,
             vbeln TYPE vbup-vbeln,
             posnr TYPE vbup-posnr,          absta 
    TYPE vbup-absta,        
    END OF typ_vbup .
    TYPESBEGIN OF typ_vbfa_so ,          vbelv   
    TYPE vbfa-vbelv,          posnv   
    TYPE vbfa-posnv,          vbeln   
    TYPE vbfa-vbeln,          posnn   
    TYPE vbfa-posnn,          posnn_5 
    TYPE ekpo-ebelp,          vbtyp_n 
    TYPE vbfa-vbtyp_n,          erdat   
    TYPE vbfa-erdat,          erzet   
    TYPE vbfa-erzet,          rfmng   
    TYPE vbfa-rfmng,          rfwrt   
    TYPE vbfa-rfwrt,          meins   
    TYPE vbfa-meins,        
    END OF typ_vbfa_so .
    TYPESBEGIN OF typ_ekbe ,          ebeln   
    TYPE ekbe-ebeln,          ebelp   
    TYPE ekbe-ebelp,          zekkn   
    TYPE ekbe-zekkn,          vgabe   
    TYPE ekbe-vgabe,          gjahr   
    TYPE ekbe-gjahr,          belnr   
    TYPE ekbe-belnr,          buzei   
    TYPE ekbe-buzei,          buzei_6 
    TYPE rseg-buzei,        
    END OF typ_ekbe .
    TYPESBEGIN OF typ_mseg_po ,          mblnr 
    TYPE mseg-mblnr,          mjahr 
    TYPE mseg-mjahr,          zeile 
    TYPE mseg-zeile,          menge 
    TYPE mseg-menge,          meins 
    TYPE mseg-meins,        
    END OF typ_mseg_po .
    TYPESBEGIN OF typ_rseg ,          belnr 
    TYPE rbkp-belnr,          gjahr 
    TYPE rbkp-gjahr,          buzei 
    TYPE rseg-buzei,          menge 
    TYPE rseg-menge,          meins 
    TYPE rseg-meins,        
    END OF typ_rseg .
    TYPESBEGIN OF typ_lips ,          vbeln      
    TYPE lips-vbeln,          posnr      
    TYPE lips-posnr,          charg      
    TYPE lips-charg,          lgmng      
    TYPE lips-lgmng,          meins      
    TYPE lips-meins,          uecha      
    TYPE lips-uecha,
    *          werks type lips-werks,          lgort      
    TYPE lips-lgort,

    * 车牌号          bolnr      
    TYPE likp-bolnr,          erdat_likp 

    LIKE likp-erdat"新加四个字段,用于过滤屏幕          erzet_likp 
    LIKE likp-erzet,        
    END OF typ_lips .
    TYPESBEGIN OF typ_vbfa_dn ,          vbelv   
    TYPE vbfa-vbelv,          posnv   
    TYPE vbfa-posnv,          vbeln   
    TYPE vbfa-vbeln,          posnn   
    TYPE vbfa-posnn,          posnn_4 
    TYPE mseg-zeile,          vbtyp_n 
    TYPE vbfa-vbtyp_n,          mjahr   
    TYPE vbfa-mjahr,          plmin   
    TYPE vbfa-plmin,        
    END OF typ_vbfa_dn .
    TYPESBEGIN OF typ_mseg_dn ,          mblnr 
    TYPE mseg-mblnr,          mjahr 
    TYPE mseg-mjahr,          zeile 
    TYPE mseg-zeile,          menge 
    TYPE mseg-menge,          meins 
    TYPE mseg-meins,          cpudt 
    LIKE mkpf-cpudt,          cputm 
    LIKE mkpf-cputm,        
    END OF typ_mseg_dn .
    TYPESBEGIN OF typ_vbrp ,          vkorg 
    TYPE vbrk-vkorg,          kunag 
    TYPE vbrk-kunag,          vbeln 
    TYPE vbrp-vbeln,          posnr 
    TYPE vbrp-posnr,          fkimg 
    TYPE vbrp-fkimg,          vrkme 
    TYPE vbrp-vrkme,          erzet 

    TYPE vbrk-erzet,          erdat 
    TYPE vbrk-erdat,        
    END OF typ_vbrp .
    TYPESBEGIN OF typ_vbpa ,          vbeln 
    TYPE vbpa-vbeln,          posnr 
    TYPE vbpa-posnr,          parvw 
    TYPE vbpa-parvw,          kunnr 
    TYPE vbpa-kunnr,          adrnr 
    TYPE vbpa-adrnr,        
    END OF typ_vbpa .
    TYPESBEGIN OF typ_adrc ,          addrnumber 
    TYPE adrc-addrnumber,          date_from  
    TYPE adrc-date_from,          nation     
    TYPE adrc-nation,          name1      
    TYPE adrc-name1,          street     
    TYPE adrc-street,        
    END OF typ_adrc .
    TYPESBEGIN OF typ_knvv ,          kunnr 
    TYPE knvv-kunnr,          vkorg 
    TYPE knvv-vkorg,          vtweg 
    TYPE knvv-vtweg,          spart 
    TYPE knvv-spart,          kdgrp 
    TYPE knvv-kdgrp,        
    END OF typ_knvv .
    TYPESBEGIN OF typ_t151t ,          kdgrp 
    TYPE t151t-kdgrp,          ktext 
    TYPE t151t-ktext,        
    END OF typ_t151t .

    DATABEGIN OF git_tvak OCCURS 0,         auart 
    LIKE tvakt-auart,         bezei 
    LIKE tvakt-bezei,       
    END OF git_tvak.

    DATABEGIN OF git_t023 OCCURS 0,         matkl 
    LIKE t023-matkl,         wgbez 
    LIKE t023t-wgbez,       
    END OF git_t023.

    DATA:BEGIN OF gwa_konv,        knumv 
    LIKE konv-knumv,        kposn 
    LIKE konv-kposn,        kwert 
    LIKE konv-kwert,        kschl 
    LIKE konv-kschl,      
    END OF gwa_konv.
    DATA:git_konv LIKE gwa_konv OCCURS WITH HEADER LINE.

    *----------------------------------------------------------------------*
    * DATA                                                                 *
    *----------------------------------------------------------------------*

    DATA: git_output      TYPE TABLE OF typ_output,       gwa_output      
    TYPE typ_output,       git_vbrp        
    TYPE TABLE OF typ_vbrp,       gwa_vbrp        
    TYPE typ_vbrp,       git_mseg_dn     
    TYPE TABLE OF typ_mseg_dn,       gwa_mseg_dn     
    TYPE typ_mseg_dn,       git_m_mbmps_po  
    TYPE TABLE OF typ_m_mbmps,       gwa_m_mbmps_po  
    TYPE typ_m_mbmps,       git_m_mbmps_dn  
    TYPE TABLE OF typ_m_mbmps,       gwa_m_mbmps_dn  
    TYPE typ_m_mbmps,       git_vbfa_dn     
    TYPE TABLE OF typ_vbfa_dn WITH HEADER LINE,       tmp_git_vbfa_dn 
    TYPE TABLE OF typ_vbfa_dn WITH HEADER LINE,       gwa_vbfa_dn     
    TYPE typ_vbfa_dn,       git_lips        
    TYPE TABLE OF typ_lips,       gwa_lips        
    TYPE typ_lips,       gwa_lips_chai   
    TYPE typ_lips,       git_rseg        
    TYPE TABLE OF typ_rseg,       gwa_rseg        
    TYPE typ_rseg,       git_mseg_po     
    TYPE TABLE OF typ_mseg_po,       gwa_mseg_po     
    TYPE typ_mseg_po,       git_ekbe        
    TYPE TABLE OF typ_ekbe,       gwa_ekbe        
    TYPE typ_ekbe,       git_vbfa_so     
    TYPE TABLE OF typ_vbfa_so WITH HEADER LINE,       gwa_vbfa_so     
    TYPE typ_vbfa_so,       git_vbup        
    TYPE TABLE OF typ_vbup,       gwa_vbup        
    TYPE typ_vbup,       git_t001l       
    TYPE TABLE OF typ_t001l,       gwa_t001l       
    TYPE typ_t001l,       git_t001w       
    TYPE TABLE OF typ_t001w,       gwa_t001w       
    TYPE typ_t001w,       git_tvgrt       
    TYPE TABLE OF typ_tvgrt,       gwa_tvgrt       
    TYPE typ_tvgrt,       git_tvkbt       
    TYPE TABLE OF typ_tvkbt,       gwa_tvkbt       
    TYPE typ_tvkbt,       git_kna1        
    TYPE TABLE OF typ_kna1,       gwa_kna1        
    TYPE typ_kna1,       git_vbap        
    TYPE TABLE OF typ_vbap,       gwa_vbap        
    TYPE typ_vbap,       git_adrc        
    TYPE TABLE OF typ_adrc,       gwa_adrc        
    TYPE typ_adrc,       git_vbpa        
    TYPE TABLE OF typ_vbpa,       gwa_vbpa        
    TYPE typ_vbpa,       git_t151t       
    TYPE TABLE OF typ_t151t,       gwa_t151t       
    TYPE typ_t151t,       git_knvv        
    TYPE TABLE OF typ_knvv,       gwa_knvv        
    TYPE typ_knvv.

    *---for selection-screen

    DATABEGIN OF gwa_screen,         erdat       
    TYPE   vbak-erdat"创建日期         vbeln       
    TYPE   vbak-vbeln"销售订单编号         auart       
    TYPE  vbak-auart"销售订单类型         kunnr       
    TYPE  vbak-kunnr"  客户代码         vkorg       
    TYPE  vbak-vkorg"  销售组织         vtweg       
    TYPE  vbak-vtweg"  分销渠道         spart       
    TYPE  vbak-spart"  产品组         bzirk       
    TYPE  vbkd-bzirk"销售部         route       
    LIKE  vttk-route"路线         route_txt   
    LIKE  tvrot-bezei"路线描述         vkbur       
    TYPE  vbak-vkbur"    销售大区         vkgrp       
    TYPE  vbak-vkgrp"    销售办事处         bstnk       
    TYPE vbak-bstnk"客户采购订单编号         matnr       
    TYPE  vbap-matnr"    物料号         pstyv       
    TYPE vbap-pstyv"行项目类型         werks       
    TYPE  vbap-werks"    交货工厂         lgort       
    TYPE  vbap-lgort"    库存地         vstel       
    TYPE  vbap-vstel"    装载点         matkl       
    TYPE vbap-matkl"物料组         vbeln_dn    
    TYPE lips-vbeln"交货单号         vbeln_dn_bl 
    TYPE vbrp-vbeln"开票号         audat       
    TYPE vbak-audat,  "订单日期       
    END OF gwa_screen.

    *---for alv

    DATA: gwa_layout      TYPE slis_layout_alv,       git_field       
    TYPE slis_t_fieldcat_alv,       gwa_field       
    LIKE LINE OF git_field,       git_sort        
    TYPE slis_t_sortinfo_alv,       gwa_sort        
    LIKE LINE OF git_sort,       g_grid_title    
    TYPE lvc_title,       go_gui_alv_grid 
    TYPE REF TO cl_gui_alv_grid.



    *----------------------------------------------------------------------*
    * SCREEN DECLARATION: PARAMETERS & SELECT-OPTIONS                      *
    *----------------------------------------------------------------------*
    TABLES: knvv,likp,mkpf,vbfa .
    SELECTION-SCREENBEGIN OF BLOCK b01 WITH FRAME TITLE text-t01.
    SELECT-OPTIONS:   s_erdat 
    FOR gwa_screen-erdat OBLIGATORY ,"订单创建日期
    "  s_audat FOR gwa_screen-audat, "单据日期   s_vbeln 
    FOR gwa_screen-vbeln,"销售订单编号   s_auart 
    FOR gwa_screen-auart,"销售订单类型   s_kunnr 
    FOR gwa_screen-kunnr,"客户代码   s_kunnr2 
    FOR gwa_screen-kunnr,"送达方代码   s_vkorg 
    FOR gwa_screen-vkorg,"销售组织   s_vtweg 
    FOR gwa_screen-vtweg,"分销渠道
    "  s_spart FOR gwa_screen-spart OBLIGATORY,"产品组
    "  s_kdgrp FOR knvv-kdgrp,"客户组   s_bzirk 
    FOR gwa_screen-bzirk,"销售部   s_vkbur 
    FOR gwa_screen-vkbur,"销售大区   s_vkgrp 
    FOR gwa_screen-vkgrp,"销售办事处   s_bstnk 
    FOR gwa_screen-bstnk,"客户采购订单编号   s_matnr 
    FOR gwa_screen-matnr,"物料号   s_pstyv 
    FOR gwa_screen-pstyv,"行项目类型   s_matkl 
    FOR gwa_screen-matkl,"物料组   s_werks 
    FOR gwa_screen-werks,"交货工厂
    "  s_lgort FOR gwa_screen-lgort,"库存地   s_vstel 
    FOR gwa_screen-vstel,"装载点 “20120312增加   s_vbeln2 
    FOR gwa_screen-vbeln_dn,"交货单号   s_vbeln3 
    FOR gwa_screen-vbeln_dn_bl,"开票凭证号   s_vbelns 
    FOR vbfa-vbeln,   erdat1 
    FOR likp-erdat,"交货单创建日期   erzet1 
    FOR likp-erzet,"交货单创建时间 cpudt 
    FOR mkpf-cpudt,"发货过账日期 cputm 
    FOR mkpf-cputm."发货过账时间

    PARAMETER: p_flag TYPE AS CHECKBOX DEFAULT 'X'."不显示采购订单

    "PARAMETER: p_bl TYPE c AS CHECKBOX."不显示公司间开票
    PARAMETER: p_del TYPE AS CHECKBOX DEFAULT 'X'."删除DN总数量是0的交货单
    "PARAMETER: p_th TYPE c AS CHECKBOX .                        "48小时订单
    "PARAMETER: p_one TYPE c AS CHECKBOX.
    SELECTION-SCREEN SKIP 1.

    PARAMETER: r_1 TYPE RADIOBUTTON GROUP rg1.
    PARAMETER: r_2 TYPE RADIOBUTTON GROUP rg1.
    PARAMETER: r_3 TYPE RADIOBUTTON GROUP rg1 DEFAULT 'X'.

    SELECTION-SCREENEND OF BLOCK b01.


    *----------------------------------------------------------------------*
    * DEFINE                                                               *
    *----------------------------------------------------------------------*

    DEFINE m_alv_fieldcat.   GWA_FIELD
    -FIELDNAME = &1."字段名称   GWA_FIELD
    -OUTPUTLEN = &2."输出长度   GWA_FIELD
    -REPTEXT_DDIC = &3.   GWA_FIELD
    -EDIT      = &4."是否编辑   GWA_FIELD
    -CHECKBOX    = &5."复选框   GWA_FIELD
    -REF_FIELDNAME = &6.   GWA_FIELD
    -REF_TABNAME   = &7.   GWA_FIELD
    -KEY = &8.   GWA_FIELD
    -NO_ZERO  = &9.



    *  WA_FIELD-EMPHASIZE = 'X'.
    *  WA_FIELD-just = ''.
    *  WA_FIELD-datatype = 'X'.
    *  WA_FIELD-REPTEXT_DDIC   = &9.
    *  WA_FIELD-NO_OUT         = &9.
    *  WA_FIELD-COL_POS   = &10.
    *  WA_FIELD-CHECKBOX  = &9.
    *  WA_FIELD-HOTSPOT   = &9.   



    APPEND GWA_FIELD TO GIT_FIELD.   
    CLEAR GWA_FIELD.
    END-OF-DEFINITION.
    *----------------------------------------------------------------------*
    * INITIALIZATION                                                       *
    *----------------------------------------------------------------------*
    INITIALIZATION.   
    PERFORM frm_initialization.


    *----------------------------------------------------------------------*
    * AT SELECTION-SCREEN OUTPUT                                           *
    *----------------------------------------------------------------------*
    AT SELECTION-SCREEN OUTPUT.   
    PERFORM frm_modify_screen.


    *----------------------------------------------------------------------*
    * AT SELECTION-SCREEN                                                  *
    *----------------------------------------------------------------------*
    AT SELECTION-SCREEN.   
    PERFORM frm_check_input.


    *----------------------------------------------------------------------*
    * START-OF-SELECTION                                                   *
    *----------------------------------------------------------------------*
    START-OF-SELECTION.   
    PERFORM frm_retrive_data."get data   
    PERFORM frm_process_data."process data   
    PERFORM frm_process_data1."process data


    *----------------------------------------------------------------------*
    * END-OF-SELECTION                                                     *
    *----------------------------------------------------------------------*
    END-OF-SELECTION.   
    PERFORM frm_output.


    *&---------------------------------------------------------------------*
    *&      Form  frm_initialization
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM frm_initialization .
    *---将订单日期初始化为当月   
    DATA: lwa_erdat LIKE LINE OF s_erdat.   lwa_erdat

    -sign 'I'.   lwa_erdat
    -option 'BT'.   
    "lwa_erdat-high = sy-datum.   
    CONCATENATE sy-datum+0(6'01' INTO lwa_erdat-low.   

    APPEND lwa_erdat TO s_erdat.
    ENDFORM" frm_initialization

    *&---------------------------------------------------------------------*
    *&      Form  frm_modify_screen
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM frm_modify_screen .
    ENDFORM" frm_modify_screen

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

    ENDFORM" frm_check_input

    *&---------------------------------------------------------------------*
    *&      Form  frm_retrive_data
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM frm_retrive_data .   
    DATA: lc_tabix TYPE sy-tabix.

    *---get 1. 销售订单信息   
    SELECT vbak~erdat          vbak
    ~vdatu           vbak
    ~vbeln           vbak
    ~kunnr           vbak
    ~vkorg"销售组织           vbak
    ~vtweg
    *          vbak~spart           vbak
    ~vkgrp"销售办事处           vbak
    ~vkbur           vbak
    ~bstnk"客户采购订单编号           vbak
    ~erzet "add by yk           vbap
    ~spart AS spart2           vbap
    ~posnr           vbap
    ~matnr           vbap
    ~arktx           vbap
    ~werks           
    "vbap~lgort           vbap
    ~kwmeng"数量           vbap
    ~vrkme           vbap
    ~netwr"总净值-item           vbap
    ~mwsbp"总税额-item           vbap
    ~umvkz"分子           vbap
    ~umvkn"分母           vbap
    ~meins           
    "2011-1-2 添加           vbap
    ~kdmat "红白条头数           vbak
    ~auart "订单类型           vbap
    ~matkl "物料组
    *     ------20120312修改--------------           vbap
    ~vstel "装载点           vbap
    ~eannr           vbap
    ~pstyv           vbak
    ~knumv           vbkd
    ~bzirk   
    INTO CORRESPONDING FIELDS OF TABLE git_vbap   
    FROM vbak   INNER 
    JOIN vbap ON vbak~vbeln = vbap~vbeln   INNER 
    JOIN vbkd ON vbak~vbeln = vbkd~vbeln" AND vbap~posnr = vbkd~posnr   
    WHERE vbak~erdat IN s_erdat     
    "AND vbak~audat IN s_audat     
    AND vbak~vbeln IN s_vbeln     
    AND vbak~auart IN s_auart     
    AND vbak~kunnr IN s_kunnr     
    AND vbak~vkorg IN s_vkorg     
    AND vbak~vtweg IN s_vtweg     
    "AND vbak~spart IN s_spart     
    AND vbak~vkbur IN s_vkbur     
    AND vbak~vkgrp IN s_vkgrp     
    AND vbak~bstnk IN s_bstnk     
    AND vbap~matnr IN s_matnr     
    AND vbap~pstyv IN s_pstyv     
    AND vbkd~bzirk IN s_bzirk     
    AND vbap~werks IN s_werks   
    "AND vbap~lgort IN s_lgort   
    AND vbap~matkl IN s_matkl   
    AND vbap~vstel IN s_vstel.   

    SORT git_vbap BY vbeln.   
    DELETE ADJACENT DUPLICATES FROM git_vbap.

    *---权限检查   
    DATABEGIN OF gt_t001w OCCURS 0,           werks 
    LIKE t001w-werks,           vkorg 
    LIKE t001w-vkorg,         
    END OF gt_t001w.   
    IF NOT git_vbap IS INITIAL.     
    SELECT werks vkorg INTO CORRESPONDING FIELDS OF TABLE gt_t001w       
    FROM t001w       
    FOR ALL ENTRIES IN git_vbap       
    WHERE werks = git_vbap-werks.     
    SORT gt_t001w BY werks.   
    ENDIF.

    *  LOOP AT git_vbap INTO gwa_vbap.
    *    lc_tabix = sy-tabix.
    *    "对销售办事处进行检查
    *    AUTHORITY-CHECK OBJECT 'Z_SD_VKGRP'
    *          ID 'VKGRP' FIELD gwa_vbap-vkgrp.
    *    IF sy-subrc <> 0.
    *      DELETE git_vbap INDEX lc_tabix.
    *      CONTINUE.
    *    ENDIF.
    *
    **---权限检查1.1
    *    AUTHORITY-CHECK OBJECT 'V_VBAK_VKO'
    *          ID 'VKORG' FIELD gwa_vbap-vkorg
    *          ID 'VTWEG' DUMMY
    *          ID 'SPART' DUMMY"FIELD "gwa_vbap-spart
    *          ID 'ACTVT' FIELD '03'.
    *    IF sy-subrc <> 0.
    *      DELETE git_vbap INDEX lc_tabix.
    *      CONTINUE.
    *    ENDIF.
    *
    *  ENDLOOP.
    **---权限检查1.2
    *      AUTHORITY-CHECK OBJECT 'V_VBAK_VKO'
    *            ID 'VKORG' FIELD gwa_vbap-vkorg
    *            ID 'VTWEG' DUMMY
    *            ID 'SPART' FIELD gwa_vbap-spart2 "行项目
    *            ID 'ACTVT' FIELD '03'.
    *      IF sy-subrc <> 0.
    **---权限检查2.1
    *        READ TABLE gt_t001w WITH KEY werks = gwa_vbap-werks BINARY SEARCH.
    *        IF sy-subrc = 0.
    *          AUTHORITY-CHECK OBJECT 'V_VBAK_VKO'
    *                ID 'VKORG' FIELD gt_t001w-vkorg
    *                ID 'VTWEG' DUMMY
    *                ID 'SPART' FIELD gwa_vbap-spart
    *                ID 'ACTVT' FIELD '03'.
    *          IF sy-subrc <> 0.
    **---权限检查2.2
    *            AUTHORITY-CHECK OBJECT 'V_VBAK_VKO'
    *                  ID 'VKORG' FIELD gt_t001w-vkorg
    *                  ID 'VTWEG' DUMMY
    *                  ID 'SPART' FIELD gwa_vbap-spart2 "行项目
    *                  ID 'ACTVT' FIELD '03'.
    *            IF sy-subrc <> 0.
    *              DELETE git_vbap INDEX lc_tabix.
    *              CONTINUE.
    *            ENDIF.
    *          ENDIF.
    *        ELSE.
    *          "没有读到数据,删除
    *          DELETE git_vbap INDEX lc_tabix.
    *          CONTINUE.
    *        ENDIF.
    *      ENDIF.
    *    ENDIF.   


    IF git_vbap IS NOT INITIAL.


    *--取折扣价值     
    SELECT knumv kposn kwert kschl INTO TABLE git_konv FROM konv FOR ALL ENTRIES IN git_vbap       
    WHERE knumv = git_vbap-knumv AND kposn = git_vbap-posnr AND kschl IN 'ZB03','ZB04','ZB07' ).

    *---物料组描述     
    SELECT matkl            wgbez       

    INTO CORRESPONDING FIELDS OF TABLE git_t023       
    FROM t023t        
    FOR ALL ENTRIES IN git_vbap      
    WHERE matkl = git_vbap-matkl        
    AND spras = sy-langu.

    *---订单类型     
    SELECT auart            bezei       

    INTO CORRESPONDING FIELDS OF TABLE git_tvak       
    FROM tvakt       
    FOR ALL ENTRIES IN git_vbap      
    WHERE auart = git_vbap-auart        
    AND spras = sy-langu.

    *---get 客户组     
    SELECT kunnr             vkorg             vtweg             spart             kdgrp       




    INTO CORRESPONDING FIELDS OF TABLE git_knvv       
    FROM knvv       
    FOR ALL ENTRIES IN git_vbap       
    WHERE kunnr = git_vbap-kunnr         
    AND vkorg = git_vbap-vkorg         
    AND vtweg = git_vbap-vtweg         
    AND spart '00'.     
    IF git_knvv IS NOT INITIAL.
    *---get 客户组描述       
    SELECT kdgrp               ktext         

    INTO CORRESPONDING FIELDS OF TABLE git_t151t         
    FROM t151t         
    WHERE spras = sy-langu.     
    ENDIF.
    *---get 送达方     
    SELECT vbeln             posnr             parvw             kunnr             adrnr        




    INTO CORRESPONDING FIELDS OF TABLE git_vbpa        
    FROM vbpa        
    FOR ALL ENTRIES IN git_vbap        
    WHERE vbeln = git_vbap-vbeln
    *         and POSNR = git_vbrp-posnr          
    AND parvw 'WE'.     
    IF git_vbpa IS NOT INITIAL.
    *---get 地址相关信息       
    SELECT addrnumber              date_from              nation              name1              street         




    INTO CORRESPONDING FIELDS OF TABLE git_adrc         
    FROM adrc         
    FOR ALL ENTRIES IN git_vbpa         
    WHERE addrnumber = git_vbpa-adrnr.     

    ENDIF.
    *---get 工厂名称     
    SELECT werks             name1       

    INTO CORRESPONDING FIELDS OF TABLE git_t001w       
    FROM t001w.
    *---get 客户名称     
    SELECT kunnr             name1       

    INTO CORRESPONDING FIELDS OF TABLE git_kna1       
    FROM kna1       
    FOR ALL ENTRIES IN git_vbap       
    WHERE kunnr = git_vbap-kunnr.
    *---get 销售大区描述     
    SELECT vkbur             bezei       

    INTO CORRESPONDING FIELDS OF TABLE git_tvkbt       
    FROM tvkbt       
    WHERE spras = sy-langu.
    *---get 销售办事处描述     
    SELECT vkgrp             bezei       

    INTO CORRESPONDING FIELDS OF TABLE git_tvgrt       
    FROM tvgrt       
    WHERE spras = sy-langu.
    *---get SO项目状态     
    SELECT vbeln             posnr             absta       


    INTO CORRESPONDING FIELDS OF TABLE git_vbup       
    FROM vbup       
    FOR ALL ENTRIES IN git_vbap       
    WHERE vbeln = git_vbap-vbeln         
    AND posnr = git_vbap-posnr.
    *---get 合并 1.1  1.2 SO对应的采购订单、交货单     
    SELECT vbelv             posnv             vbeln             posnn             posnn 



    AS posnn_5             vbtyp_n             erdat             rfmng             rfwrt             meins             erzet       






    INTO CORRESPONDING FIELDS OF TABLE git_vbfa_so       
    FROM vbfa       
    FOR ALL ENTRIES IN git_vbap       
    WHERE vbelv = git_vbap-vbeln         
    AND posnv = git_vbap-posnr         
    AND vbtyp_n IN ('V','J','T')."V 表示采购订单,J表示交货单,T表示订单的退货     

    IF git_vbfa_so[] IS NOT INITIAL.

    *---如果T类型前面含有J类型的情况,则删除T类型       

    SORT git_vbfa_so BY vbelv posnv  erdat erzet vbtyp_n.       
    DATA:tmp_type  TYPE vbtyp_n,            tmp_vbelv 
    TYPE vbeln_von,            tmp_posnv 
    TYPE posnr_von.       
    LOOP AT git_vbfa_so.         
    IF git_vbfa_so-vbtyp_n 'T' AND tmp_type 'J' AND  git_vbfa_so-vbelv = tmp_vbelv AND git_vbfa_so-posnv = tmp_posnv.           
    DELETE git_vbfa_so.         
    ELSEIF git_vbfa_so-vbtyp_n 'V'."排除类型V         
    ELSE.           tmp_type 
    = git_vbfa_so-vbtyp_n.           tmp_vbelv 
    = git_vbfa_so-vbelv.           tmp_posnv 
    = git_vbfa_so-posnv.         
    ENDIF.       
    ENDLOOP.

    *---get 合并1.1.1     1.1.2 PO对应的收货单、发票校验号       
    SELECT ebeln               ebelp               zekkn               vgabe               gjahr               belnr               buzei               buzei 






    AS buzei_6         
    INTO CORRESPONDING FIELDS OF TABLE git_ekbe         
    FROM ekbe         
    FOR ALL ENTRIES IN git_vbfa_so         
    WHERE ebeln = git_vbfa_so-vbeln           
    AND ebelp = git_vbfa_so-posnn_5           
    AND vgabe IN ('1','2')."1 表示收货,2 表示发票收据       

    IF git_ekbe IS NOT INITIAL.
    *---get 1.1.1 PO对应的物料凭证(收货)信息         
    SELECT mblnr                 mjahr                 zeile                 menge                 meins           




    INTO CORRESPONDING FIELDS OF TABLE git_mseg_po           
    FROM mseg           
    FOR ALL ENTRIES IN git_ekbe           
    WHERE mblnr = git_ekbe-belnr             
    AND mjahr = git_ekbe-gjahr             
    AND zeile = git_ekbe-buzei             
    AND smbln ''."冲销凭证为空,表示该物料凭证不是冲销凭证、         
    IF git_mseg_po IS NOT INITIAL.           
    "get 检查选择出来的物料凭证是否已经被冲销           
    SELECT smbln                   sjahr                   smblp                   mjahr                   zeile                   mblnr             





    INTO CORRESPONDING FIELDS OF TABLE git_m_mbmps_po             
    FROM m_mbmps             
    FOR ALL ENTRIES IN git_mseg_po             
    WHERE smbln = git_mseg_po-mblnr               
    AND sjahr = git_mseg_po-mjahr               
    AND smblp = git_mseg_po-zeile.         

    ENDIF.
    *---get 1.1.2 PO对应的发票校验信息         
    SELECT rbkp~belnr                 rbkp
    ~gjahr                 rseg
    ~buzei                 rseg
    ~menge                 rseg
    ~meins           
    INTO CORRESPONDING FIELDS OF TABLE git_rseg           
    FROM rbkp           INNER 
    JOIN rseg ON rseg~belnr = rbkp~belnr AND rseg~gjahr = rbkp~gjahr           
    FOR ALL ENTRIES IN git_ekbe           
    WHERE rbkp~belnr = git_ekbe-belnr             
    AND rbkp~gjahr = git_ekbe-gjahr             
    AND rseg~buzei = git_ekbe-buzei_6             
    AND rbkp~stblg ''."该字段为空,表示当前凭证既不是冲销凭证,也没有被冲销       


    ENDIF.

    *---get 1.2 交货单信息
    *2011-1-2
    *      SELECT  VBELN
    *              POSNR
    *              CHARG
    *              LGMNG
    *              MEINS
    *              UECHA"批次拆分项目的上层项目
    **              werks
    *              LGORT
    *        INTO CORRESPONDING FIELDS OF TABLE GIT_LIPS
    *        FROM LIPS
    *        FOR ALL ENTRIES IN GIT_VBFA_SO
    *        WHERE VBELN = GIT_VBFA_SO-VBELN
    *          AND POSNR = GIT_VBFA_SO-POSNN.       
    SELECT  a~vbeln               a
    ~posnr               a
    ~charg               a
    ~lgmng               a
    ~meins               a
    ~uecha"批次拆分项目的上层项目
    *              werks               a
    ~lgort
    *              b~bolnr  "车牌号               b
    ~erzet AS erzet_likp               b
    ~erdat AS erdat_likp         
    INTO CORRESPONDING FIELDS OF TABLE git_lips         
    FROM lips AS a INNER JOIN likp AS b           
    ON a~vbeln = b~vbeln         
    FOR ALL ENTRIES IN git_vbfa_so         
    WHERE a~vbeln = git_vbfa_so-vbeln           
    AND a~posnr = git_vbfa_so-posnn.       

    IF git_lips IS NOT INITIAL.

    *---get 库存描述         
    SELECT werks                 lgort                 lgobe           


    INTO CORRESPONDING FIELDS OF TABLE git_t001l           
    FROM t001l.
    *---get 1.2.1    1.2.2 交货单对应的物料凭证、开票凭证         
    SELECT vbelv                 posnv                 vbeln                 posnn                 posnn 



    AS posnn_4                 vbtyp_n                 mjahr

    "物料凭证年度                 plmin           

    INTO CORRESPONDING FIELDS OF TABLE git_vbfa_dn           
    FROM vbfa           
    FOR ALL ENTRIES IN git_lips           
    WHERE vbelv = git_lips-vbeln             
    AND posnv = git_lips-posnr             
    AND vbtyp_n IN ('R','M','5','O')             
    AND vbeln IN s_vbelns."R 表示过账发货,M表示开具发票,5表示公司间开具发票,O表示退货的一种凭证类型         
    "如果选中不显示公司间开票,那么删除公司开票记录
    *        IF p_bl = 'X'.
    *          DELETE git_vbfa_dn WHERE vbtyp_n = '5'.
    *        ENDIF.         

    IF git_vbfa_dn[] IS NOT INITIAL.
    *---(M,5,O)三种类型中,如果存在PLMIN字段是+的,则删除所有-值的条目,R类型,如果有PLMIN正值条目,删除所有-值条目           
    SORT git_vbfa_dn BY vbelv posnv vbtyp_n plmin DESCENDING.           tmp_git_vbfa_dn[] 
    = git_vbfa_dn[].           
    LOOP AT git_vbfa_dn WHERE vbtyp_n <> 'R' AND plmin '+'.             
    DELETE  tmp_git_vbfa_dn WHERE vbelv = git_vbfa_dn-vbelv AND posnv = git_vbfa_dn-posnv AND plmin '' AND  vbtyp_n <> 'R'.           
    ENDLOOP.           

    LOOP AT  git_vbfa_dn WHERE vbtyp_n 'R' AND plmin '+'.             
    DELETE tmp_git_vbfa_dn WHERE vbelv = git_vbfa_dn-vbelv AND posnv = git_vbfa_dn-posnv AND plmin '' AND vbtyp_n 'R'.           
    ENDLOOP.           

    CLEAR git_vbfa_dn[].           git_vbfa_dn[] 
    = tmp_git_vbfa_dn[].           
    CLEAR tmp_git_vbfa_dn[].

    *---get 1.2.1 交货单对应的物料凭证           
    SELECT mseg~mblnr                   mseg
    ~mjahr                   zeile                   menge                   meins             mkpf



    ~cpudt             mkpf
    ~cputm             
    INTO CORRESPONDING FIELDS OF TABLE git_mseg_dn             
    FROM mseg             INNER 
    JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr             
    FOR ALL ENTRIES IN git_vbfa_dn             
    WHERE mseg~mblnr = git_vbfa_dn-vbeln               
    AND mseg~mjahr = git_vbfa_dn-mjahr               
    AND zeile = git_vbfa_dn-posnn_4               
    AND smbln ''              
    ."冲销凭证为空,表示该物料凭证不是冲销凭证
    *              and LFBNR = ''."参考凭证为空,表示该物料凭证没有被冲销           
    IF git_mseg_dn IS NOT INITIAL.             
    "get 检查选择出来的物料凭证是否已经被冲销             
    SELECT smbln                     sjahr                     smblp                     mjahr                     zeile                     mblnr               





    INTO CORRESPONDING FIELDS OF TABLE git_m_mbmps_dn               
    FROM m_mbmps               
    FOR ALL ENTRIES IN git_mseg_dn               
    WHERE smbln = git_mseg_dn-mblnr                 
    AND sjahr = git_mseg_dn-mjahr                 
    AND smblp = git_mseg_dn-zeile.           

    ENDIF.
    *---get 1.2.2 交货单对应的开票凭证           
    SELECT vbrp~vbeln                   vbrp
    ~posnr                   vbrp
    ~fkimg                   vbrp
    ~vrkme                   vbrk
    ~erzet                   vbrk
    ~erdat             
    INTO CORRESPONDING FIELDS OF TABLE git_vbrp             
    FROM vbrp             INNER 
    JOIN vbrk ON vbrk~vbeln = vbrp~vbeln             
    FOR ALL ENTRIES IN git_vbfa_dn             
    WHERE vbrp~vbeln = git_vbfa_dn-vbeln               
    AND vbrp~posnr = git_vbfa_dn-posnn               
    AND vbrk~fksto <> 'X'."不为X,表示未取消         

    ENDIF.       

    ENDIF.     




    ENDIF.   


    ENDIF.





    ENDFORM" frm_retrive_data

    *&---------------------------------------------------------------------*
    *&      Form  frm_process_data
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM frm_process_data .   
    DATABEGIN OF lwa_flag,"判断是否已经输出           so    
    TYPE c"销售订单           po    
    TYPE c"采购订单           dn_gr 
    TYPE c"交货单DN对应的发货单GR
    *          dn type c,"交货单
    *          dn_chai type c,"交货单拆分         
    END OF lwa_flag.   
    DATA: lwa_output_so    TYPE typ_output,         lwa_output_so_po 
    TYPE typ_output,         lwa_output_so_dn 
    TYPE typ_output,         lc_name          
    TYPE thead-tdname,         lit_lines        
    TYPE TABLE OF tline,         lwa_lines        
    TYPE tline.
    *        lwa_output_so_dn_chai type typ_output.

    *---process 1. 销售订单相关信息   
    LOOP AT git_vbap INTO gwa_vbap.     
    CLEAR: gwa_output,lwa_flag,lc_name,lit_lines.     
    "process 销售订单     
    MOVE-CORRESPONDING gwa_vbap TO gwa_output.
    *    IF gwa_vbap-auart = 'ZORJ' OR gwa_vbap-auart = 'ZORS' OR gwa_vbap-auart = 'ZORW'.
    *      gwa_output-eannr = gwa_output-klmeng.
    *    ENDIF.
    *     gwa_output-kwmeng = gwa_vbap-kwmeng.
    *--取折扣价值     
    LOOP AT git_konv WHERE knumv = gwa_vbap-knumv AND kposn = gwa_output-posnr.       
    "gwa_output-zh_kwert = git_konv-kwert + gwa_output-zh_kwert.       
    CASE git_konv-kschl.         
    WHEN 'ZB03'.gwa_output-zh_kwert = git_konv-kwert * -1."显示正数         
    WHEN 'ZB04'.gwa_output-zj_kwert = git_konv-kwert * -1.         
    WHEN 'ZB07'.gwa_output-fy_kwert = git_konv-kwert * -1.       
    ENDCASE.     
    ENDLOOP.     



    "process 红白条数     
    TRY .
    *        gwa_output-kdmat_quan = gwa_vbap-kdmat.       
    CATCH cx_root.     

    ENDTRY.



    *---2011-1-2 hanlin s     
    READ TABLE git_t023 WITH KEY matkl = gwa_vbap-matkl.     

    IF sy-subrc 0.       gwa_output
    -wgbez = git_t023-wgbez.     
    ENDIF.     

    READ TABLE  git_tvak WITH KEY auart = gwa_vbap-auart.     
    IF sy-subrc 0.       gwa_output
    -bezei  = git_tvak-bezei.     
    ENDIF.     


    "process 客户组     
    READ TABLE git_knvv INTO gwa_knvv WITH KEY kunnr = gwa_vbap-kunnr vkorg = gwa_vbap-vkorg vtweg = gwa_vbap-vtweg.     
    IF sy-subrc 0.       gwa_output
    -kdgrp = gwa_knvv-kdgrp.       
    "process 客户组描述       
    READ TABLE git_t151t INTO gwa_t151t WITH KEY kdgrp = gwa_knvv-kdgrp.       
    IF sy-subrc 0.         gwa_output
    -ktext = gwa_t151t-ktext.       
    ENDIF.     
    ENDIF.     
    "process 送达方代码     
    READ TABLE git_vbpa INTO gwa_vbpa WITH KEY vbeln = gwa_vbap-vbeln  parvw 'WE'.     
    IF sy-subrc AND gwa_vbpa-kunnr IN s_kunnr2.       gwa_output
    -kunnr_we = gwa_vbpa-kunnr.       
    "process 送达方名称       
    READ TABLE git_adrc INTO gwa_adrc WITH KEY addrnumber = gwa_vbpa-adrnr.       
    IF sy-subrc 0.         gwa_output
    -name1_we = gwa_adrc-name1.       
    ENDIF.     
    ELSE.       
    DELETE TABLE git_output FROM gwa_output.       
    CONTINUE.     
    ENDIF.     
    "process 工厂名称     
    READ TABLE git_t001w INTO gwa_t001w WITH KEY werks = gwa_vbap-werks.     
    IF sy-subrc 0.       gwa_output
    -name1_t001w = gwa_t001w-name1.     
    ENDIF.     
    "process 客户名称     
    READ TABLE git_kna1 INTO gwa_kna1 WITH KEY kunnr = gwa_vbap-kunnr.     
    IF sy-subrc 0.       gwa_output
    -name1_kna1 = gwa_kna1-name1.     
    ENDIF.     
    "process 销售大区描述     
    READ TABLE git_tvkbt INTO gwa_tvkbt WITH KEY vkbur = gwa_vbap-vkbur.     
    IF sy-subrc 0.       gwa_output
    -bezei_tvkbt = gwa_tvkbt-bezei.     
    ENDIF.     
    "process 销售办事处描述     
    READ TABLE git_tvgrt INTO gwa_tvgrt WITH KEY vkgrp = gwa_vbap-vkgrp.     
    IF sy-subrc 0.       gwa_output
    -bezei_tvgrt = gwa_tvgrt-bezei.     
    ENDIF.     
    "process 含税单价--销售单位     
    IF gwa_output-kwmeng IS NOT INITIAL.       gwa_output
    -zdj ( gwa_output-netwr + gwa_output-mwsbp ) / gwa_output-kwmeng.     
    ENDIF.     
    "process 基本单位数量     
    IF gwa_output-umvkn IS NOT INITIAL.       gwa_output
    -zsl_base = gwa_output-kwmeng * gwa_output-umvkz / gwa_output-umvkn.     
    ENDIF.     
    "process 基本单位含税单价     
    IF gwa_output-zsl_base IS NOT INITIAL.       gwa_output
    -zdj_base ( gwa_output-netwr + gwa_output-mwsbp ) / gwa_output-zsl_base.     
    ENDIF.     
    "process SO项目状态     
    READ TABLE git_vbup INTO gwa_vbup WITH KEY vbeln = gwa_vbap-vbeln posnr = gwa_vbap-posnr.     
    IF sy-subrc 0.       gwa_output
    -absta = gwa_vbup-absta.       
    CASE gwa_vbup-absta.         
    WHEN 'A'.           gwa_output
    -zabsta_des '没有处理'.         
    WHEN 'B'.           gwa_output
    -zabsta_des '部分处理'.         
    WHEN 'C'.           gwa_output
    -zabsta_des '完全地处理 '.         
    WHEN OTHERS.       
    ENDCASE.     
    ENDIF.     
    "备份 SO数据     lwa_output_so 
    = gwa_output.     
    "process 1.1 SO对应的PO采购订单     
    IF p_flag ''."当flag为空时,才取采购订单       
    LOOP AT git_vbfa_so INTO gwa_vbfa_so WHERE vbelv = gwa_vbap-vbeln AND posnv = gwa_vbap-posnr AND vbtyp_n 'V'.         
    CLEAR: lwa_flag-po.         
    "还原 SO数据         gwa_output 
    = lwa_output_so.         
    "process PO相关信息         gwa_output
    -ebeln_po = gwa_vbfa_so-vbeln.         gwa_output
    -ebelp_po = gwa_vbfa_so-posnn.         gwa_output
    -aedat_po = gwa_vbfa_so-erdat."订单日期         gwa_output
    -menge_po = gwa_vbfa_so-rfmng."数量         
    IF gwa_vbfa_so-rfmng IS NOT INITIAL.           gwa_output
    -netpr_po = gwa_vbfa_so-rfwrt / gwa_vbfa_so-rfmng."净单价         
    ENDIF.         gwa_output
    -meins_po = gwa_vbfa_so-meins."单位         
    "process 1.1.1 PO对应的GR收货单         
    "备份 SO-PO数据         lwa_output_so_po 
    = gwa_output.         

    LOOP AT git_ekbe INTO gwa_ekbe WHERE ebeln = gwa_vbfa_so-vbeln AND ebelp = gwa_vbfa_so-posnn_5 AND vgabe '1'.           
    "process GR相关信息           
    READ TABLE git_mseg_po INTO gwa_mseg_po WITH KEY mblnr = gwa_ekbe-belnr mjahr = gwa_ekbe-gjahr zeile = gwa_ekbe-buzei.           
    IF sy-subrc 0.             
    "process 过滤掉已经被冲销的物料凭证             
    READ TABLE git_m_mbmps_po INTO gwa_m_mbmps_po WITH KEY smbln = gwa_mseg_po-mblnr sjahr = gwa_mseg_po-mjahr smblp = gwa_mseg_po-zeile.             
    IF sy-subrc <> 0.               gwa_output
    -mblnr_po_gr = gwa_mseg_po-mblnr.               gwa_output
    -zeile_po_gr = gwa_mseg_po-zeile.               gwa_output
    -menge_po_gr = gwa_mseg_po-menge.               gwa_output
    -meins_po_gr = gwa_mseg_po-meins.               

    APPEND gwa_output TO git_output.               lwa_flag
    -so 'X'."销售订单已经输出过               lwa_flag
    -po 'X'."采购订单已经输出过             
    ENDIF.           
    ENDIF.         
    ENDLOOP.         
    "还原 so-po数据         gwa_output 
    = lwa_output_so_po.         
    "process 1.1.2 PO对应的IR发票校验         
    LOOP AT git_ekbe INTO gwa_ekbe WHERE ebeln = gwa_vbfa_so-vbeln AND ebelp = gwa_vbfa_so-posnn_5 AND vgabe '2'.           
    "process IR相关信息           
    READ TABLE git_rseg INTO gwa_rseg WITH KEY belnr = gwa_ekbe-belnr gjahr = gwa_ekbe-gjahr buzei = gwa_ekbe-buzei_6.           
    IF sy-subrc 0.             gwa_output
    -belnr_po_ir = gwa_rseg-belnr.             gwa_output
    -buzei_po_ir = gwa_rseg-buzei.             gwa_output
    -menge_po_ir = gwa_rseg-menge.             gwa_output
    -meins_po_ir = gwa_rseg-meins.             

    APPEND gwa_output TO git_output.             lwa_flag
    -so 'X'."销售订单已经输出过             lwa_flag
    -po 'X'."采购订单已经输出过           
    ENDIF.         
    ENDLOOP.         

    "检查PO采购订单是否已经输出过         
    IF lwa_flag-po ''.           
    APPEND gwa_output TO git_output.           lwa_flag
    -so 'X'."销售订单已经输出过           lwa_flag
    -po 'X'."采购订单已经输出过         
    ENDIF.       
    ENDLOOP.     

    ENDIF.     

    "process 1.2 SO对应的交货单DN     
    LOOP AT git_vbfa_so INTO gwa_vbfa_so WHERE vbelv = gwa_vbap-vbeln AND posnv = gwa_vbap-posnr AND ( vbtyp_n 'J' OR vbtyp_n 'T' ).       
    "还原so数据       gwa_output 
    = lwa_output_so.       
    "process 交货单
    *      READ TABLE git_lips INTO gwa_lips WITH KEY vbeln = gwa_vbfa_so-vbeln posnr = gwa_vbfa_so-posnn uecha = ''.       
    READ TABLE git_lips INTO gwa_lips WITH KEY vbeln = gwa_vbfa_so-vbeln posnr = gwa_vbfa_so-posnn.       
    IF sy-subrc 0.         
    "process 交货单DN相关信息         gwa_output
    -vbeln_dn = gwa_lips-vbeln.         gwa_output
    -posnr_dn = gwa_lips-posnr.         gwa_output
    -charg_dn = gwa_lips-charg.         gwa_output
    -lgmng_dn = gwa_lips-lgmng.         gwa_output
    -meins_dn = gwa_lips-meins.
    *        gwa_output-werks = gwa_lips-werks.         gwa_output
    -lgort = gwa_lips-lgort.

    **2011-1-2 HANLIN         gwa_output
    -bolnr = gwa_lips-bolnr.
    **2011-1-2 HANLIN         gwa_output
    -erdat_likp = gwa_lips-erdat_likp.         gwa_output
    -erzet_likp = gwa_lips-erzet_likp.         

    "process 库存描述         
    READ TABLE git_t001l INTO gwa_t001l WITH KEY werks = gwa_vbap-werks lgort = gwa_lips-lgort.         
    IF sy-subrc 0.           gwa_output
    -lgobe = gwa_t001l-lgobe.         
    ENDIF.         

    "process 行项目文本         
    CONCATENATE gwa_output-vbeln_dn gwa_output-posnr_dn INTO lc_name.         
    CALL FUNCTION 'READ_TEXT'           
    EXPORTING
    *           CLIENT                  = SY-MANDT             
    id                      '0001'             
    language                = sy-langu             name                    
    = lc_name             object                  
    'VBBP'
    *           ARCHIVE_HANDLE          = 0
    *           LOCAL_CAT               = ' '
    *     IMPORTING
    *           HEADER                  =           
    TABLES             
    lines                   = lit_lines           
    EXCEPTIONS             
    id                      1             
    language                2             name                    
    3             not_found               
    4             object                  
    5             reference_check         
    6             wrong_access_to_archive 
    7             
    OTHERS                  8.         

    IF sy-subrc 4.           
    CALL FUNCTION 'READ_TEXT'             
    EXPORTING
    *             CLIENT                  = SY-MANDT               
    id                      '0001'               
    language                = sy-langu               name                    
    = lc_name               object                  
    'VBBP'
    *             ARCHIVE_HANDLE          = 0
    *             LOCAL_CAT               = ' '
    *     IMPORTING
    *             HEADER                  =             
    TABLES               
    lines                   = lit_lines             
    EXCEPTIONS               
    id                      1               
    language                2               name                    
    3               not_found               
    4               object                  
    5               reference_check         
    6               wrong_access_to_archive 
    7               
    OTHERS                  8.         
    ENDIF.         

    LOOP AT lit_lines INTO lwa_lines.           
    CONCATENATE gwa_output-ztext lwa_lines-tdline INTO gwa_output-ztext.         
    ENDLOOP.         


    "process 抬头文本         
    CLEAR: lit_lines ,            lc_name
    ,            lwa_lines
    .         lc_name 
    = gwa_output-vbeln_dn.         
    CALL FUNCTION 'READ_TEXT'           
    EXPORTING
    *           CLIENT                  = SY-MANDT             
    id                      '0001'             
    language                = sy-langu             name                    
    = lc_name             object                  
    'VBBK'
    *           ARCHIVE_HANDLE          = 0
    *           LOCAL_CAT               = ' '
    *     IMPORTING
    *           HEADER                  =           
    TABLES             
    lines                   = lit_lines           
    EXCEPTIONS             
    id                      1             
    language                2             name                    
    3             not_found               
    4             object                  
    5             reference_check         
    6             wrong_access_to_archive 
    7             
    OTHERS                  8.         

    IF sy-subrc 4.           
    CALL FUNCTION 'READ_TEXT'             
    EXPORTING
    *             CLIENT                  = SY-MANDT               
    id                      '0001'               
    language                = sy-langu               name                    
    = lc_name               object                  
    'VBBK'
    *             ARCHIVE_HANDLE          = 0
    *             LOCAL_CAT               = ' '
    *     IMPORTING
    *             HEADER                  =             
    TABLES               
    lines                   = lit_lines             
    EXCEPTIONS               
    id                      1               
    language                2               name                    
    3               not_found               
    4               object                  
    5               reference_check         
    6               wrong_access_to_archive 
    7               
    OTHERS                  8.         
    ENDIF.         

    LOOP AT lit_lines INTO lwa_lines.
    *      GWA_OUTPUT-RISE_TEXT = LWA_LINES-TDLINE .           
    CONCATENATE gwa_output-rise_text lwa_lines-tdline INTO gwa_output-rise_text.         
    ENDLOOP.         

    CLEAR: lit_lines ,             lc_name
    ,             lwa_lines
    .         lc_name 
    = gwa_output-vbeln.         
    CALL FUNCTION 'READ_TEXT'           
    EXPORTING
    *           CLIENT                  = SY-MANDT             
    id                      '0001'             
    language                = sy-langu             name                    
    = lc_name             object                  
    'VBBK'
    *           ARCHIVE_HANDLE          = 0
    *           LOCAL_CAT               = ' '
    *     IMPORTING
    *           HEADER                  =           
    TABLES             
    lines                   = lit_lines           
    EXCEPTIONS             
    id                      1             
    language                2             name                    
    3             not_found               
    4             object                  
    5             reference_check         
    6             wrong_access_to_archive 
    7             
    OTHERS                  8.         

    IF sy-subrc 4.           
    CALL FUNCTION 'READ_TEXT'             
    EXPORTING
    *             CLIENT                  = SY-MANDT               
    id                      '0001'               
    language                = sy-langu               name                    
    = lc_name               object                  
    'VBBK'
    *             ARCHIVE_HANDLE          = 0
    *             LOCAL_CAT               = ' '
    *     IMPORTING
    *             HEADER                  =             
    TABLES               
    lines                   = lit_lines             
    EXCEPTIONS               
    id                      1               
    language                2               name                    
    3               not_found               
    4               object                  
    5               reference_check         
    6               wrong_access_to_archive 
    7               
    OTHERS                  8.         
    ENDIF.         

    LOOP AT lit_lines INTO lwa_lines.
    *      GWA_OUTPUT-RISE_TEXT = LWA_LINES-TDLINE .           
    CONCATENATE gwa_output-so_text lwa_lines-tdline INTO gwa_output-so_text.         
    ENDLOOP.         



    "备份 so-dn数据         lwa_output_so_dn 
    = gwa_output.         
    "判断当前交货单是否被拆分过:1.如果被拆分,那么多条;2.如果未被拆分,一条数据         
    READ TABLE git_lips INTO gwa_lips_chai WITH KEY vbeln = gwa_lips-vbeln uecha = gwa_lips-posnr.         
    IF sy-subrc 0.           
    "process 交货单DN的拆分项目           
    LOOP AT git_lips INTO gwa_lips_chai WHERE vbeln = gwa_lips-vbeln AND uecha = gwa_lips-posnr.             
    "还原 so-dn数据             gwa_output 
    = lwa_output_so_dn.             gwa_output

    -posnr_dn_chai = gwa_lips_chai-posnr.             gwa_output
    -charg_dn_chai = gwa_lips_chai-charg.             gwa_output
    -lgmng_dn_chai = gwa_lips_chai-lgmng.             gwa_output
    -meins_dn_chai = gwa_lips_chai-meins.             
    "process 交货单DN拆分的发货单GR             
    LOOP AT git_vbfa_dn INTO gwa_vbfa_dn WHERE vbelv = gwa_lips_chai-vbeln AND posnv = gwa_lips_chai-posnr AND vbtyp_n 'R'.               
    "process DN拆分对应的发货单信息               
    READ TABLE git_mseg_dn INTO gwa_mseg_dn WITH KEY mblnr = gwa_vbfa_dn-vbeln mjahr = gwa_vbfa_dn-mjahr zeile = gwa_vbfa_dn-posnn_4.               
    IF sy-subrc 0.                 
    "process 过滤掉已经被冲销的物料凭证                 
    READ TABLE git_m_mbmps_dn INTO gwa_m_mbmps_dn WITH KEY smbln = gwa_mseg_dn-mblnr sjahr = gwa_mseg_dn-mjahr smblp = gwa_mseg_dn-zeile.                 
    IF sy-subrc <> 0.                   gwa_output
    -mblnr_dn_gr = gwa_mseg_dn-mblnr.                   gwa_output
    -zeile_dn_gr = gwa_mseg_dn-zeile.                   gwa_output
    -menge_dn_gr = gwa_mseg_dn-menge.                   gwa_output
    -meins_dn_gr = gwa_mseg_dn-meins.                 

    ENDIF.               
    ENDIF.             
    ENDLOOP.             
    "process 交货单DN拆分的开票凭证BL             
    LOOP AT git_vbfa_dn INTO gwa_vbfa_dn WHERE vbelv = gwa_lips_chai-vbeln AND posnv = gwa_lips_chai-posnr AND ( vbtyp_n 'M' OR vbtyp_n '5' OR vbtyp_n 'O').               
    "process DN拆分对应的开票凭证               
    READ TABLE git_vbrp INTO gwa_vbrp WITH KEY vbeln = gwa_vbfa_dn-vbeln posnr = gwa_vbfa_dn-posnn.               
    IF sy-subrc 0.                 gwa_output
    -vbeln_dn_bl = gwa_vbrp-vbeln.                 gwa_output
    -posnr_dn_bl = gwa_vbrp-posnr.                 gwa_output
    -fkimg_dn_bl = gwa_vbrp-fkimg.                 gwa_output
    -vrkme_dn_bl = gwa_vbrp-vrkme.                 

    "process 交货单拆分是否输出过.                 
    APPEND gwa_output TO git_output.                 lwa_flag
    -so 'X'."销售订单已经输出过                 lwa_flag
    -dn_gr 'X'."交货单DN的发货单GR已经输出过               
    ENDIF.             
    ENDLOOP.             

    "判断交货单DN的发货单GR是否输出过             
    IF lwa_flag-dn_gr ''.               
    APPEND gwa_output TO git_output.               lwa_flag
    -so 'X'."销售订单已经输出过             
    ENDIF.           

    ENDLOOP.         
    ELSE.                                               "2.未被拆分           
    "process 交货单DN的发货单GR           
    LOOP AT git_vbfa_dn INTO gwa_vbfa_dn WHERE vbelv = gwa_lips-vbeln AND posnv = gwa_lips-posnr AND vbtyp_n 'R'.             
    "process DN对应的发货单信息             
    READ TABLE git_mseg_dn INTO gwa_mseg_dn WITH KEY mblnr = gwa_vbfa_dn-vbeln mjahr = gwa_vbfa_dn-mjahr zeile = gwa_vbfa_dn-posnn_4.             
    IF sy-subrc 0.               
    "process 过滤掉已经被冲销的物料凭证               
    READ TABLE git_m_mbmps_dn INTO gwa_m_mbmps_dn WITH KEY smbln = gwa_mseg_dn-mblnr sjahr = gwa_mseg_dn-mjahr smblp = gwa_mseg_dn-zeile.               
    IF sy-subrc <> 0.                 gwa_output
    -mblnr_dn_gr = gwa_mseg_dn-mblnr.                 gwa_output
    -zeile_dn_gr = gwa_mseg_dn-zeile.                 gwa_output
    -menge_dn_gr = gwa_mseg_dn-menge.                 gwa_output
    -meins_dn_gr = gwa_mseg_dn-meins.                 gwa_output

    -cpudt = gwa_mseg_dn-cpudt.                 gwa_output
    -cputm = gwa_mseg_dn-cputm.               
    ENDIF.             
    ENDIF.           
    ENDLOOP.           
    "process 交货单DN的开票凭证BL           
    LOOP AT git_vbfa_dn INTO gwa_vbfa_dn WHERE vbelv = gwa_lips-vbeln AND posnv = gwa_lips-posnr AND ( vbtyp_n 'M' OR vbtyp_n '5' OR vbtyp_n 'O').             
    "process DN对应的开票凭证             
    READ TABLE git_vbrp INTO gwa_vbrp WITH KEY vbeln = gwa_vbfa_dn-vbeln posnr = gwa_vbfa_dn-posnn.             
    IF sy-subrc 0.               gwa_output
    -vbeln_dn_bl = gwa_vbrp-vbeln.               gwa_output
    -posnr_dn_bl = gwa_vbrp-posnr.               gwa_output
    -fkimg_dn_bl = gwa_vbrp-fkimg.               gwa_output
    -vrkme_dn_bl = gwa_vbrp-vrkme.               gwa_output
    -erzet_fp = gwa_vbrp-erzet.               gwa_output
    -erdat_fp = gwa_vbrp-erdat.               

    "process 交货单DN是否输出过               
    APPEND gwa_output TO git_output.               lwa_flag
    -so 'X'."销售订单已经输出过               lwa_flag
    -dn_gr 'X'."交货单DN的发货单GR已经输出过             
    ENDIF.           
    ENDLOOP.           

    "判断交货单DN的发货单GR是否输出过           
    IF lwa_flag-dn_gr ''.             
    APPEND gwa_output TO git_output.             lwa_flag
    -so 'X'."销售订单已经输出过           
    ENDIF.         

    ENDIF.       
    ENDIF.     
    ENDLOOP.     

    "判断销售订单SO是否输出过     
    IF lwa_flag-so ''.       
    APPEND gwa_output TO git_output.     
    ENDIF.   

    ENDLOOP.
    *---按照库存地点 过滤数据
    *  IF s_lgort IS NOT INITIAL.
    *    DELETE git_output WHERE lgort NOT IN s_lgort.
    *  ENDIF.
    *---按照送达方编码 过滤数据
    *  IF s_kunnr2 IS NOT INITIAL.
    *    DELETE git_output WHERE kunnr_we NOT IN s_kunnr2.
    *  ENDIF.
    *---按照是否审批,过滤数据:1.已审批,则删除交货单为空的;2.未审批,则删除交货单不为空的   
    IF r_1 'X'.     
    DELETE git_output WHERE vbeln_dn IS INITIAL.   
    ELSEIF r_2 'X'.     
    DELETE git_output WHERE vbeln_dn IS NOT INITIAL.   
    ENDIF.
    *---按照交货单号、开票凭证号进行过滤   
    IF s_vbeln2 IS NOT INITIAL."交货单号     
    DELETE git_output WHERE vbeln_dn NOT IN s_vbeln2.   
    ENDIF.   
    IF s_vbeln3 IS NOT INITIAL."开票凭证号     
    DELETE git_output WHERE vbeln_dn_bl NOT IN s_vbeln3.   
    ENDIF.
    **---按照客户组过滤数据
    *  IF s_kdgrp IS NOT INITIAL.
    *    DELETE git_output WHERE kdgrp NOT IN s_kdgrp.
    *  ENDIF.
    **---判断是否存在相应的选择数据   
    IF git_output IS INITIAL.     
    MESSAGE text-001 TYPE 'S'.     
    LEAVE  LIST-PROCESSING.   
    ENDIF.   
    "--------------修改使销售单位数量、基本单位数量不重复显示---add by sxl 2011.01.08-------------   
    DATA: gwa_output_temp TYPE typ_output.   
    LOOP AT git_output INTO gwa_output.
    *    IF gwa_output-vbeln = gwa_output_temp-vbeln AND gwa_output-posnr = gwa_output_temp-posnr.
    *      CLEAR: gwa_output-kwmeng , gwa_output-zdj , gwa_output-zsl_base, gwa_output-zdj_base.
    *      MODIFY git_output FROM gwa_output.
    *    ELSE.
    *      gwa_output_temp = gwa_output.
    *    ENDIF.     

    "-------------退货订单加负----add by sxl-----2011.06.13-------     
    IF gwa_output-auart  'ZKA1' OR gwa_output-auart 'ZKR1' OR gwa_output-auart 'ZRE1' OR gwa_output-auart 'ZRE2'.       gwa_output
    -kwmeng = gwa_output-kwmeng * -).       gwa_output
    -zsl_base = gwa_output-zsl_base * -).     
    ENDIF.     
    "-------------增加金额计算----add by sxl-----2011.01.10-------     
    " gwa_output-dmbtr = gwa_output-kwmeng * gwa_output-zdj.     gwa_output
    -dmbtr =  gwa_output-netwr + gwa_output-mwsbp.     
    SELECT SINGLE bztxt INTO gwa_output-bzirk_txt       
    FROM t171t       
    WHERE bzirk EQ gwa_output-bzirk.     

    SELECT SINGLE vtext INTO gwa_output-pstyv_txt       
    FROM tvapt       
    WHERE pstyv EQ gwa_output-pstyv.     

    SELECT SINGLE route INTO gwa_output-route       
    FROM likp      
    WHERE vbeln EQ gwa_output-vbeln_dn.     

    SELECT SINGLE bezei INTO gwa_output-route_txt       
    FROM tvrot       
    WHERE route EQ gwa_output-route.     
    MODIFY git_output FROM gwa_output.   
    ENDLOOP.
    ENDFORM" frm_process_data

    *&---------------------------------------------------------------------*
    *&      Form  frm_output
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM frm_output .   gwa_layout

    -colwidth_optimize 'X'."宽度自动优化   gwa_layout
    -zebra             'X'."斑马线


    *  GWA_LAYOUT-F2CODE            = '&ETA'.   gwa_layout

    -box_fieldname     'ZSEL'.   gwa_sort

    -fieldname 'VBELN'."销售订单   gwa_sort
    -up 'X'.   
    APPEND gwa_sort TO git_sort.   

    SORT git_output BY vbeln posnr vbeln_dn posnr_dn.   
    DELETE ADJACENT DUPLICATES FROM git_output.   

    DATA:luecha  LIKE lips-uecha.   
    DATA:lpstyv  LIKE lips-pstyv.   
    DATA:ls_output TYPE typ_output.

    **  LOOP AT git_output INTO gwa_output.
    **    SELECT SINGLE pstyv uecha INTO ( lpstyv ,luecha )
    **      FROM lips
    **      WHERE vbeln EQ gwa_output-vbeln_dn AND posnr EQ gwa_output-posnr_dn.
    **
    **    IF lpstyv EQ 'ZMN'.
    **      READ TABLE git_output INTO ls_output
    **            WITH KEY vbeln = gwa_output-vbeln vbeln_dn = gwa_output-vbeln_dn posnr_dn = luecha.
    **      ls_output-kwmeng = ls_output-kwmeng + gwa_output-kwmeng.
    **      ls_output-lgmng_dn = ls_output-lgmng_dn + gwa_output-lgmng_dn.
    **      ls_output-menge_dn_gr = ls_output-menge_dn_gr + gwa_output-menge_dn_gr.
    **      MODIFY TABLE git_output FROM ls_output.
    **      DELETE TABLE git_output FROM gwa_output.
    **    ENDIF.
    **    CLEAR:luecha,lpstyv,ls_output.
    **  ENDLOOP.   
    DATA:lv_output TYPE  typ_output.   
    LOOP AT git_output INTO gwa_output WHERE posnr_dn_chai IS NOT INITIAL .     
    "IF gwa_output-posnr_dn_chai IS NOT INITIAL.     
    READ TABLE git_output INTO lv_output WITH KEY vbeln = gwa_output-vbeln                                                   vbeln_dn 
    = gwa_output-vbeln_dn                                                   posnr_dn 
    = gwa_output-posnr_dn_chai.

    *    CLEAR gwa_output-menge_dn_gr .
    *    CLEAR gwa_output-dmbtr.     
    IF sy-subrc EQ 0.       gwa_output
    -lgmng_dn  =  lv_output-lgmng_dn.       gwa_output
    -menge_dn_gr  =  lv_output-menge_dn_gr.       gwa_output
    -dmbtr  =  lv_output-dmbtr.       gwa_output
    -cpudt  =  lv_output-cpudt.       gwa_output
    -cputm  =  lv_output-cputm.       gwa_output
    -erzet_fp  =  lv_output-erzet_fp.       gwa_output
    -erdat_fp  =  lv_output-erdat_fp.       
    DELETE TABLE git_output FROM lv_output.     
    ENDIF.     

    MODIFY git_output FROM gwa_output.     
    "ENDIF.     
    CLEAR lv_output.   
    ENDLOOP.   

    LOOP AT git_output INTO gwa_output WHERE posnr_dn_chai IS NOT INITIAL .     
    LOOP AT git_output INTO lv_output WHERE vbeln EQ gwa_output-vbeln                                          
    AND vbeln_dn EQ gwa_output-vbeln_dn                                          
    AND posnr_dn EQ gwa_output-posnr_dn                                          
    AND posnr_dn_chai <> gwa_output-posnr_dn_chai .       gwa_output

    -lgmng_dn = gwa_output-lgmng_dn + lv_output-lgmng_dn.       gwa_output
    -menge_dn_gr = gwa_output-menge_dn_gr + lv_output-menge_dn_gr.       
    DELETE TABLE git_output FROM lv_output.     
    ENDLOOP.     
    CLEAR gwa_output-posnr_dn_chai.     

    READ TABLE git_vbfa_dn INTO gwa_vbfa_dn WITH KEY vbelv = gwa_output-vbeln_dn  posnv = gwa_output-posnr_dn vbtyp_n 'M' .     
    IF sy-subrc 0.       
    READ TABLE git_vbrp INTO gwa_vbrp WITH KEY vbeln = gwa_vbfa_dn-vbeln posnr = gwa_vbfa_dn-posnn.       
    IF sy-subrc 0.         gwa_output
    -vbeln_dn_bl = gwa_vbrp-vbeln.         gwa_output
    -posnr_dn_bl = gwa_vbrp-posnr.         gwa_output
    -fkimg_dn_bl = gwa_vbrp-fkimg.         gwa_output
    -vrkme_dn_bl = gwa_vbrp-vrkme.         gwa_output
    -erzet_fp = gwa_vbrp-erzet.         gwa_output
    -erdat_fp = gwa_vbrp-erdat.       
    ENDIF.     
    ENDIF.     

    MODIFY git_output FROM gwa_output.   
    ENDLOOP.   m_alv_fieldcat
    :

    *                  'ZSEL' 4 text-f01 'X' 'X' '' '' '' 'X',                   

    'ERDAT' text-f02 '' '' '' '' 'X' 'X',                   
    'ERZET' '创建时间' '' '' '' '' 'X' 'X',                   
    'VDATU' '交货日期' '' '' '' '' 'X' 'X',                   
    'VBELN' text-f03 '' '' '' '' 'X' 'X',                   
    'KUNNR' text-f04 '' '' '' '' 'X' 'X',                   
    'NAME1_KNA1' text-f05 '' '' '' '' 'X' 'X',                   
    'KUNNR_WE' 30 text-f59 '' '' '' '' '' 'X',                   
    'NAME1_WE' 30 text-f60 '' '' '' '' '' 'X',                   
    'VKORG' 30 text-f06 '' '' '' '' '' 'X',                   
    'VTWEG' 30 text-f07 '' '' '' '' '' 'X',                   
    "'SPART' 10 text-f08 '' '' '' '' '' '',                   
    'KDGRP' 10 text-f61 '' '' '' '' '' '',                   
    'KTEXT' 10 text-f62 '' '' '' '' '' '',                   
    'BZIRK' 10 '销售部' '' '' '' '' '' '',                   
    'BZIRK_TXT' 10 '销售部描述' '' '' '' '' '' '',                   
    'VKBUR' 10 text-f09 '' '' '' '' '' '',                   
    'BEZEI_TVKBT' 25 text-f10 '' '' '' '' '' 'X',                   
    'VKGRP' 25 text-f11 '' '' '' '' '' '',                   
    'BEZEI_TVGRT' 25 text-f12 '' '' '' '' '' 'X',                   
    'BSTNK' '' text-f58 '' '' '' '' '' '',                   
    'POSNR' 25 text-f13 '' '' '' '' '' 'X',                   
    'PSTYV' 25 '行项目类型' '' '' '' '' '' 'X',                   
    'PSTYV_TXT' 25 '行项目类型描述' '' '' '' '' '' 'X',                   
    'MATNR' 25 text-f14 '' '' '' '' '' 'X',                   
    'ARKTX' 25 text-f15 '' '' '' '' '' 'X',                   
    'WERKS' 25 text-f16 '' '' '' '' '' 'X',                   
    'NAME1_T001W' '' text-f17 '' '' '' '' '' 'X',                   
    'KWMENG' '' text-f20 '' '' '' '' '' 'X',                   
    "'ZDJ' '' text-f21 '' '' '' '' '' 'X',                   
    'DMBTR' '' '销售订单行项目金额' '' '' '' '' '' 'X',                   
    'ZH_KWERT' '' '折扣金额'  '' '' '' '' '' 'X',                   
    'ZJ_KWERT' '' '折价金额'  '' '' '' '' '' 'X',                   
    'FY_KWERT' '' '费用折扣'  '' '' '' '' '' 'X',                   
    'VRKME' '' text-f22 '' '' '' '' '' 'X',                   
    "'ZSL_BASE' '' text-f23 '' '' '' '' '' 'X',                   
    'ZDJ_BASE' '' text-f24 '' '' '' '' '' 'X',                   
    'MEINS' '' text-f25 '' '' '' '' '' 'X',                   
    'ZABSTA_DES' '' text-f26 '' '' '' '' '' 'X',                   

    "'KDMAT_QUAN' '' '红白条头数' '' '' '' '' '' 'X',                   
    "'BOLNR' '' '车牌号'  '' '' '' '' '' 'X',                   
    'AUART' '' '订单类型'  '' '' '' '' '' 'X',                   
    'BEZEI' '' '订单类型描述'  '' '' '' '' '' 'X',                   
    'MATKL' '' '物料组'  '' '' '' '' '' 'X',                   
    'WGBEZ' '' '物料组描述'  '' '' '' '' '' 'X',                   

    'ERDAT_LIKP' '' '交货单创建日期'  '' '' '' '' '' 'X',                   
    'ERZET_LIKP' '' '交货单创建时间'  '' '' '' '' '' 'X',                   
    "'DDLX' '' '时间订单'  '' '' '' '' '' 'X',
    *-----------------------------ADD BY YK                   
    'CPUDT' '' '物料凭证创建日期'  '' '' '' '' '' 'X',                   
    'CPUTM' '' '物料凭证创建时间'  '' '' '' '' '' 'X',                   
    'ERZET_FP' '' '发票创建时间'  '' '' '' '' '' 'X',                   
    'ERDAT_FP' '' '发票创建日期'  '' '' '' '' '' 'X'.   
    "erdat_likp   




    IF p_flag 'X'."当flag为空的时候,不显示跟采购订单有关的列     m_alv_fieldcat
    :  'EBELN_PO' '' text-f27 '' '' '' '' '' 'X',                     
    'AEDAT_PO' '' text-f28 '' '' '' '' '' 'X',                     
    'EBELP_PO' '' text-f29 '' '' '' '' '' 'X',                     
    'MENGE_PO' '' text-f30 '' '' '' '' '' 'X',                     
    'NETPR_PO' '' text-f31 '' '' '' '' '' 'X',                     
    'MEINS_PO' '' text-f32 '' '' '' '' '' 'X',                     
    'MBLNR_PO_GR' '' text-f33 '' '' '' '' '' 'X',                     
    'ZEILE_PO_GR' '' text-f34 '' '' '' '' '' 'X',                     
    'MENGE_PO_GR' '' text-f35 '' '' '' '' '' 'X',                     
    'MEINS_PO_GR' '' text-f36 '' '' '' '' '' 'X',                     
    'BELNR_PO_IR' '' text-f37 '' '' '' '' '' 'X',                     
    'BUZEI_PO_IR' '' text-f38 '' '' '' '' '' 'X',                     
    'MENGE_PO_IR' '' text-f39 '' '' '' '' '' 'X',                     
    'MEINS_PO_IR' '' text-f40 '' '' '' '' '' 'X'.   
    ENDIF.   m_alv_fieldcat

    :                    
    'VBELN_DN' '' text-f41 '' '' '' '' '' 'X',                    
    'POSNR_DN' '' text-f42 '' '' '' '' '' 'X',                    
    'ROUTE' '' '路线代码' '' '' '' '' '' 'X',                    
    'ROUTE_TXT' '' '路线描述' '' '' '' '' '' 'X',                    

    'ZTEXT' '' '交货单行项目长文本'  '' '' '' '' '' 'X',                    
    'RISE_TEXT' '' '交货单抬头文本'  '' '' '' '' '' 'X',                    
    'SO_TEXT' '' '订单抬头文本'  '' '' '' '' '' 'X',                    
    'LGORT' '' text-f18 '' '' '' '' '' 'X',                    
    'LGOBE' '' text-f19 '' '' '' '' '' 'X',                    
    'VSTEL' '' text-f63 '' '' '' '' '' 'X',  "20120312增加                    

    'CHARG_DN' '' text-f43 '' '' '' '' '' 'X',                    
    'LGMNG_DN' '' text-f44 '' '' '' '' '' 'X',                    
    'MEINS_DN' '' text-f45 '' '' '' '' '' 'X',                    
    'POSNR_DN_CHAI' '' text-f46 '' '' '' '' '' 'X',                    
    'CHARG_DN_CHAI' '' text-f47 '' '' '' '' '' 'X',                    
    'LGMNG_DN_CHAI' '' text-f48 '' '' '' '' '' 'X',                    
    'MEINS_DN_CHAI' '' text-f49 '' '' '' '' '' 'X',                    

    'MBLNR_DN_GR' '' text-f50 '' '' '' '' '' 'X',                    
    'ZEILE_DN_GR' '' text-f51 '' '' '' '' '' 'X',                    
    'MENGE_DN_GR' '' text-f52 '' '' '' '' '' 'X',                    
    'MEINS_DN_GR' '' text-f53 '' '' '' '' '' 'X',                    
    'VBELN_DN_BL' '' text-f54 '' '' '' '' '' 'X',                    
    'POSNR_DN_BL' '' text-f55 '' '' '' '' '' 'X',                    
    'FKIMG_DN_BL' '' text-f56 '' '' '' '' '' 'X',                    
    'VRKME_DN_BL' '' text-f57 '' '' '' '' '' 'X',                    
    'EANNR' '' '  ' '' '' '' '' '' 'X'.

    **********************************************************************
    * 删除交货单数量为0的条目   
    IF p_del 'X'.
    *    delete git_output where vbeln_dn <> '' and lgmng_dn = 0.     
    DATABEGIN OF lt_filter OCCURS 10,             vbeln_dn 
    LIKE likp-vbeln,             lgmng_dn 
    LIKE lips-lgmng,           
    END OF lt_filter.     

    LOOP AT git_output INTO gwa_output.       

    MOVE-CORRESPONDING gwa_output TO lt_filter.       
    COLLECT lt_filter.     
    ENDLOOP.     

    DELETE lt_filter WHERE lgmng_dn <> OR vbeln_dn ''.     

    RANGES: lr_filter FOR likp-vbeln.     
    LOOP AT lt_filter.       lr_filter
    -sign 'I'.       lr_filter
    -option 'EQ'.       lr_filter
    -low = lt_filter.       
    APPEND lr_filter.     
    ENDLOOP.     
    IF NOT lr_filter IS INITIAL.       
    DELETE git_output WHERE vbeln_dn IN lr_filter.     
    ENDIF.   
    ENDIF.
    **********************************************************************   
    IF NOT erdat1 IS INITIAL.     
    DELETE git_output WHERE erdat_likp NOT IN erdat1.   
    ENDIF.   

    IF NOT erzet1 IS INITIAL.     
    DELETE git_output WHERE erzet_likp NOT IN erzet1.   
    ENDIF.   

    IF NOT cpudt IS INITIAL.     
    DELETE git_output WHERE cpudt NOT IN cpudt.   
    ENDIF.   

    IF NOT cputm IS INITIAL.     
    DELETE git_output WHERE cputm NOT IN cputm.   
    ENDIF.
    **********************************************************************
    * 删除不是48小时的订单
    *  IF p_th = 'X'.
    *    DATA: temp_date TYPE dats.
    *    LOOP AT git_output INTO gwa_output.
    *      CLEAR temp_date.
    *      temp_date = gwa_output-vdatu - gwa_output-erdat.
    *      IF temp_date <> 1."add by yk 原来的两天改为一天.
    *        DELETE git_output.
    *      ENDIF.
    *    ENDLOOP.
    *  ENDIF.
    **********************************************************************

    **********************************************************************
    * 删除不是24小时的订单 ADD BY YK
    *  IF p_one = 'X'.
    *    DATA: temp_date_one TYPE dats.
    *    LOOP AT git_output INTO gwa_output.
    *      CLEAR temp_date_one.
    *      temp_date_one = gwa_output-vdatu - gwa_output-erdat.
    *      IF temp_date_one <> 0."add by y
    *        DELETE git_output.
    *      ENDIF.
    *    ENDLOOP.
    *  ENDIF.
    **********************************************************************


    *---加上订单描述   
    DATA: temp_date_ddlx TYPE dats.   
    DATA: temp_date_one TYPE dats.   
    LOOP AT git_output INTO gwa_output.     
    CLEAR temp_date_one.     temp_date_ddlx 
    = gwa_output-vdatu - gwa_output-erdat.     
    IF temp_date_ddlx 0."add by y
    *      gwa_output-ddlx = '24小时订单'.       
    MODIFY git_output FROM gwa_output.     
    ENDIF.     
    IF temp_date_ddlx 1.
    *      gwa_output-ddlx = '48小时订单'.       
    MODIFY git_output FROM gwa_output.     
    ENDIF.   
    ENDLOOP.   


    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'     
    EXPORTING       i_callback_program 
    = sy-repid
    *     I_CALLBACK_PF_STATUS_SET    = 'FRM_SET_STATUS'
    *     I_CALLBACK_USER_COMMAND     = 'FRM_USER_COMMAND'       is_layout          
    = gwa_layout       it_fieldcat        
    = git_field       it_sort            
    = git_sort       i_default          
    'X'       i_save             
    'A'     
    TABLES       t_outtab           
    = git_output     
    EXCEPTIONS       program_error      
    1       
    OTHERS             2.
    *  IF sy-subrc <> 0.
    *    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    *            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    *  ENDIF.

    ENDFORM" frm_output

    *&---------------------------------------------------------------------*
    *&      Form  frm_set_status
    *&---------------------------------------------------------------------*
    *
    *----------------------------------------------------------------------*
    FORM frm_set_status USING rt_extab TYPE slis_t_extab.

    *  SET PF-STATUS 'GS_1000' EXCLUDING RT_EXTAB.

    ENDFORM"FRM_SET_STATUS

    *&---------------------------------------------------------------------*
    *&      Form  frm_user_command
    *&---------------------------------------------------------------------*
    *
    *----------------------------------------------------------------------*
    FORM frm_user_command USING rf_ucomm LIKE sy-ucomm rs_selfield TYPE slis_selfield.
    *  DATA: l_ok_code TYPE sy-ucomm,
    *        l_valid(1) TYPE c.
    *  l_ok_code = rf_ucomm.
    *  CLEAR: rf_ucomm.
    *
    ***---screen=>internal table
    **  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    **    IMPORTING
    **      E_GRID = go_gui_alv_grid.
    **  CALL METHOD go_gui_alv_grid->CHECK_CHANGED_DATA
    **    IMPORTING
    **      E_VALID = L_VALID.
    **
    **---get 双击行的相关数据
    *
    *  read table git_PLAF into gwa_PLAF index RS_SELFIELD-TABINDEX.
    *
    **
    ***---PAI
    **
    *
    *  CASE l_ok_code.
    *    WHEN '&IC1'."双击
    *      case rs_selfield-FIELDNAME.
    *        when 'KDAUF'."双击销售订单字段
    *          CHECK gwa_PLAF-KDAUF IS NOT INITIAL.
    *          "跳转到销售订单显示
    *          SET PARAMETER ID 'AUN' FIELD gwa_PLAF-KDAUF.
    *          CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
    *        when others."默认情况
    *          CHECK gwa_PLAF-plnum IS NOT INITIAL.
    *          "跳转到计划订单显示
    *          SET PARAMETER ID 'PAF' FIELD gwa_PLAF-plnum.
    *          CALL TRANSACTION 'MD13' AND SKIP FIRST SCREEN.
    *      endcase.
    *
    *    WHEN OTHERS.
    *  ENDCASE.
    *
    **
    **
    ***---PBO
    **
    ***  LOOP AT git_output INTO gwa_output.
    ***
    ***  ENDLOOP.
    **
    ***---internal table=>screen
    **  RS_SELFIELD-REFRESH = 'X'.


    ENDFORM"USER_COMMAND
    *&---------------------------------------------------------------------*
    *&      Form  FRM_PROCESS_DATA1
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM frm_process_data1 .   
    DATABEGIN OF v_itab OCCURS 0,           vbeln_dn 
    TYPE lips-vbeln,           lgmng_dn 
    TYPE lips-lgmng,         
    END OF v_itab.   
    DATA: vw_itab LIKE LINE OF v_itab.   
    DATA: v_itab1 LIKE TABLE OF v_itab WITH HEADER LINE.   
    LOOP AT git_output INTO  gwa_output WHERE vbeln_dn <> ''.      "取出交货单号不为空数据     vw_itab
    -vbeln_dn = gwa_output-vbeln_dn.     vw_itab
    -lgmng_dn = gwa_output-lgmng_dn.     
    APPEND vw_itab TO v_itab.   
    ENDLOOP.   
    SORT v_itab BY vbeln_dn ASCENDING.   
    LOOP AT v_itab.   " 汇总数据     
    COLLECT v_itab INTO v_itab1.   
    ENDLOOP.   
    RANGES: v_rangs FOR vbrk-vbeln.   

    LOOP AT  v_itab1.    "将数据为0的存入rangs     
    IF v_itab1-lgmng_dn 0.       v_rangs
    -sign 'I'.       v_rangs
    -option 'EQ'.       v_rangs
    -low = v_itab1-vbeln_dn.       
    APPEND v_rangs.     
    ENDIF.   
    ENDLOOP.   
    IF v_rangs[] IS NOT INITIAL.     
    DELETE git_output WHERE vbeln_dn IN v_rangs.            "删除数据为0的数据   
    ENDIF.
    ENDFORM.                    " FRM_PROCESS_DATA1

    INCLUDE zsdr017_inc.

  • 相关阅读:
    45、linux shell命令,ldconfig
    47、linux shell,ln链接
    43、linux shell命令,chmod
    39、linux 进程管理
    46、linux shell命令,chkconfig
    40、linux shell常用函数mkdir,rmdir,mount
    26、linux 几个C函数,nanosleep,lstat,unlink
    38、linux shell常用函数,nice
    44、linux shell命令,ldd
    41、linux shell常用函数,lsof
  • 原文地址:https://www.cnblogs.com/eagle-dtq/p/5527117.html
Copyright © 2011-2022 走看看