• ABAP 订单转交货单


    *& Report  ZSDR025
    *&
    *&---------------------------------------------------------------------*
    *&程序名称:销售订单转交货单
    *&事物代码:
    *&导入模板:无
    *&作
    *&时间:
    *&更新时间:
    REPORT zsdr025.

    TYPE-POOLS: slis.
    TABLES : vbak,vbap,vbep,ztsd024,t171t.
    SELECTION-SCREEN BEGIN OF BLOCK sc3 WITH FRAME TITLE text-003.
    SELECT-OPTIONS : vkorg FOR vbak-vkorg  MEMORY ID vko,
                              werks FOR  vbap-werks,
    *PARAMETERS : "vkorg LIKE vbak-vkorg OBLIGATORY MEMORY ID vko,
                             vtweg FOR  vbak-vtweg  MEMORY ID vtw,
                             "spart FOR  vbak-spart  MEMORY ID spa,
                             "spart2 FOR  vbap-spart  MEMORY ID spa1,
                             bzrik FOR  t171t-bzirk,
                             vkbur FOR  vbak-vkbur ,
                             vkgrp FOR  vbak-vkgrp

    .
    SELECTION-SCREEN END OF BLOCK sc3.

    SELECTION-SCREEN BEGIN OF BLOCK sc1 WITH FRAME TITLE text-001.
    SELECT-OPTIONS : auart FOR vbak-auart.

    *kunnr_y LIKE  vbpa-kunnr,
    SELECT-OPTIONS :
    kunnr FOR  vbak-kunnr,
    *werks FOR  vbap-werks,
    lgort FOR  vbap-lgort,
    vstel FOR  vbap-vstel,
    ernam FOR  vbak-ernam,
    vbeln FOR  vbak-vbeln,
      erdat FOR vbak-erdat.
    SELECT-OPTIONS :
     edatu FOR vbep-edatu,
      ezeit FOR vbep-ezeit.
    *PARAMETERS : ck_audit AS CHECKBOX. "已审核
    SELECTION-SCREEN END OF BLOCK sc1.

    SELECTION-SCREEN BEGIN OF BLOCK sc2 WITH FRAME TITLE text-002.
    *SKIP 2.
    PARAMETERS : ck_audit AS CHECKBOX"已审核
    *SKIP 2.
    SELECT-OPTIONS:
               p_vl_s  FOR ztsd024-vbeln_vl,
               p_vbn_s FOR ztsd024-vbeln,
              p_erdat FOR ztsd024-erdat,
              p_ernam FOR ztsd024-ernam .
    SELECTION-SCREEN END OF BLOCK sc2.

    DATA : gs_layout  TYPE  slis_layout_alv.
    DATA: gt_fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE.  "抬头
    DATA: gt_fieldcat_d TYPE slis_t_fieldcat_alv WITH HEADER LINE.  "明细
    DATA: gt_fieldcat_s TYPE slis_t_fieldcat_alv WITH HEADER LINE.  "审核取消
    DATA : is_keyinfo TYPE  slis_keyinfo_alv.

    TYPESBEGIN OF ty_vbap ,
             ck,
             auart          LIKE vbak-auart,
             vbeln          LIKE   vbak-vbeln,
             vstel          LIKE vbap-vstel,
             spart1         LIKE vbak-spart,
             spart2         LIKE vbap-spart,


             bezei          LIKE v_tvak-bezei,

             kunnr          LIKE vbak-kunnr,
             name4          TYPE ad_name1,
             kunnr_s        LIKE vbpa-kunnr,
             name5          TYPE ad_name1,
             kunnr_j        LIKE vbpa-kunnr,
             name6          TYPE ad_name1,

             bzirk          LIKE t171t-bzirk,
             adrnr          LIKE vbpa-adrnr,
             vkbur          LIKE vbak-vkbur,
             vkgrp          LIKE vbak-vkgrp,  "办事处
             name7          TYPE ad_name1,
             bzirk_txt      LIKE  t171t-bztxt,
             telf1          LIKE kna1-telf1,
             erdat          LIKE vbak-erdat,
             erzet          LIKE vbak-erzet,
    *  配送方式
             stype(10),
             street         LIKE adrc-street,
             edatu          LIKE vbep-edatu,
             ezeit          LIKE vbep-ezeit,
             posnr          LIKE vbap-posnr,


             matnr          LIKE vbap-matnr,
             arktx          LIKE vbap-arktx,
             werks          LIKE vbap-werks,
             lgort          LIKE vbap-lgort,

             kwmeng_j       LIKE vbap-kwmeng"计价数量
             meins          LIKE vbep-meins,
             kwmeng         LIKE vbap-kwmeng,
             vrkme          LIKE vbap-vrkme,
             kpein          LIKE vbap-kpein,
             kmein          LIKE vbap-kmein,
             netwr_d        LIKE vbap-netwr,  "单价
             mwsbp          LIKE vbap-mwsbp,
             umvkz          LIKE vbap-umvkz,
             netwr_s        LIKE vbap-netwr,  "销售单价
             kdmat          LIKE vbap-kdmat "头数  ++++++++++
             umvkn          LIKE vbap-umvkn,
             netwr          LIKE vbap-netwr,  "金额

             name1          LIKE t001w-name1"工厂描述'
             name2          LIKE t001l-lgobe"仓库描述' 8 'GT_VBAP'.
             name3          LIKE  tvstt-vtext"装运点描述' 8 'GT_VBAP'.
             datbi          LIKE lv50c-datbi"KETDAT
             kzwi1          LIKE vbap-kzwi1"单价(合计)
             taxk1          LIKE vbak-taxk1,
             taxm1          LIKE vbap-taxm1,
             netpr          LIKE vbap-netpr,

             prsdt          TYPE prsdt"定价日期
             bstkd          LIKE vbkd-bstkd,
             txt_posnr(100TYPE c"行文本(工艺描述)

             knumv          LIKE konv-knumv,
             zh_kwert       LIKE konv-kwert,

           END OF ty_vbap.


    DATA : wa_vbap TYPE ty_vbap,
           gt_vbap TYPE TABLE OF ty_vbap  WITH HEADER LINE.

    DATA : wa_vbap_vl TYPE ty_vbap,
           gt_vbap_vl TYPE TABLE OF ty_vbap WITH HEADER LINE.

    DATA : wa_vbap_sel TYPE ty_vbap,
           gt_vbap_sel TYPE TABLE OF ty_vbap.

    TYPES BEGIN OF ty_vbak,
              ck,
              vbeln          LIKE   vbak-vbeln,
              kunnr          LIKE vbak-kunnr,
              name4          TYPE ad_name1,
              kunnr_s        LIKE vbpa-kunnr,
              name5          TYPE ad_name1,
              kunnr_j        LIKE vbpa-kunnr,
              name6          TYPE ad_name1,
              bzirk          LIKE t171t-bzirk,
              vkbur          LIKE vbak-vkbur,
              vkgrp          LIKE vbak-vkgrp,  "办事处
              name7          TYPE ad_name1,
              bzirk_txt      LIKE  t171t-bztxt,
              telf1          LIKE kna1-telf1,

              erdat          LIKE vbak-erdat,
              erzet          LIKE vbak-erzet,
              auart          LIKE vbak-auart,
              bezei          LIKE v_tvak-bezei,
              street         LIKE adrc-street,
              edatu          LIKE vbep-edatu,
              ezeit          LIKE vbep-ezeit,
              datbi          LIKE lv50c-datbi"KETDAT
              klimk          LIKE knkk-klimk"信贷余额

              cmgst          LIKE vbuk-cmgst,
              cmgst_text(10),
              vkbur_text     TYPE bezei20,
              txt30          LIKE tj30t-txt30"审批文本
              bstkd          LIKE vbkd-bstkd,
              hdtxt(100)     TYPE c,             "抬头文本

              zh_kwert       LIKE konv-kwert,
              knumv          LIKE konv-knumv,
            END OF ty_vbak.
    DATA : wa_vbak TYPE ty_vbak,        gt_vbak 
    TYPE TABLE OF ty_vbak.

    *"---------------add by ymq---------------------------
    *DATA: BEGIN OF l_s066  ,                    "取清销售订单信贷值
    *      knkli LIKE s066-knkli,
    *      oeikw LIKE s066-oeikw,
    *      END OF l_s066.
    *data: lt_s066 like l_s066 occurs 0 with header line.
    *data: begin of l_s067 occurs 0,                     " 未清交货单信贷值
    *      knkli like s067-knkli,
    *      olikw like s067-olikw,
    *      ofakw like s067-ofakw,
    *      end of l_s067.
    *data: lt_s067 like l_s067 occurs  0 with header line.
    *data: begin of l_knkk occurs 0 ,                    "未清开票信贷值
    *      knkli like knkk-knkli,
    *      skfor like knkk-skfor,
    *      klimk like knkk-klimk,
    *      ctlpc like knkk-ctlpc,
    *      end of l_knkk .
    *data: lt_knkk like l_knkk occurs 0 with header line.
    *
    *types: BEGIN OF type_detail,                           "用户所有信贷值结构
    *      kunnr  like  vbak-kunnr,    "客户编号
    *      oeikw  LIKE  s066-oeikw,    "未清销售订单信贷值
    *      olikw  LIKE  s067-olikw,    "未清交货单信贷值
    *      ofakw  LIKE  s067-ofakw,    "未清开票信贷值
    *      skfor  LIKE  knkk-skfor,    "客户往来余额 ,如果为负,表示由余款,为其绝对值
    *      klimk  LIKE  knkk-klimk,    "客户信用额度
    *      klimks LIKE  knkk-klimk,    "当前客户信用额度
    *      ctlpc  LIKE  knkk-ctlpc,    "是否检查信用额
    *      END OF  type_detail.
    *DATA: wa_detail  TYPE type_detail.
    *
    *DATA: BEGIN OF itab ,
    *    vbeln LIKE vbak-vbeln,                                        "无用
    *    erdat LIKE vbak-erdat,
    *    auart LIKE vbak-auart,
    *    cmgst LIKE vbuk-cmgst,
    *     END OF itab.
    *DATA: gt_itab TYPE  itab OCCURS 0 WITH HEADER LINE.   " add by ymq  2014.11.23  更新信贷状态通过

    *BDC定义
    DATA: c_update  TYPE VALUE 'S'.
    DATA: bdcdata    TYPE TABLE OF  bdcdata WITH HEADER LINE.
    DATA: messtab    TYPE TABLE OF  bdcmsgcoll WITH HEADER LINE.
    DATA: gt_msg    TYPE TABLE OF  bdcmsgcoll WITH HEADER LINE.

    *审核
    TYPES BEGIN OF ty_ztsd003.
    TYPES : ck.         
    INCLUDE STRUCTURE ztsd024.
    TYPES:    adrnr     LIKE vbpa-adrnr,           kunnr     
    LIKE vbak-kunnr,           name4     
    TYPE ad_name1,           kunnr_s   
    LIKE vbpa-kunnr,           name5     
    TYPE ad_name1,           vkgrp     
    LIKE vbak-vkgrp,  "办事处           name7     
    TYPE ad_name1,           bzirk     
    LIKE  t171t-bzirk,           bzirk_txt 
    LIKE  t171t-bztxt,           erdat_c   
    LIKE vbak-erdat,           erzet_c   
    LIKE vbak-erzet,           auart     
    LIKE vbak-auart,           bezei     
    LIKE v_tvak-bezei,           name_text 
    TYPE ad_namtext.
    TYPES END OF ty_ztsd003.
    DATA : wa_ztsd003 TYPE ty_ztsd003,        gt_ztsd003 
    TYPE TABLE OF ty_ztsd003.


    TYPES:BEGIN OF ty_konv,         kwert 
    LIKE konv-kwert,         knumv 
    LIKE konv-knumv,       
    END OF ty_konv.
    DATA:git_konv TYPE ty_konv OCCURS WITH HEADER LINE.
    DATA:gwa_konv TYPE ty_konv.

    RANGES : lt_spart FOR vbak-spart.
    RANGES : lt_spart2 FOR vbak-spart.


    *&---------------------------------------------------------------------*
    *&      Form  alpha_input
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *      <--P_P  text
    *----------------------------------------------------------------------*
    FORM alpha_input  CHANGING p_p.   
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'     
    EXPORTING       
    input  = p_p     
    IMPORTING       
    output = p_p.
    ENDFORM.                    " alpha_input
    *&---------------------------------------------------------------------*
    *&      Form  frm_build_fieldcat
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    FORM frm_build_fieldcat .   
    CLEAR : gt_fieldcat,gt_fieldcat[].   
    CLEAR : gt_fieldcat_d,gt_fieldcat_d[].   
    DEFINE alv_head.     
    clear gt_fieldcat.     
    if &1 'CK'.       gt_fieldcat
    -checkbox 'X'.       gt_fieldcat
    -edit 'X'.     
    else.       gt_fieldcat
    -edit ''.     
    endif.     gt_fieldcat
    -fieldname = &1.     gt_fieldcat
    -tabname = &4.     gt_fieldcat
    -seltext_s = &2 .     gt_fieldcat
    -seltext_m = &2 .     gt_fieldcat
    -seltext_l = &2 .     gt_fieldcat
    -outputlen = &3.     gt_fieldcat
    -just  = &5.     gt_fieldcat
    -key   = &6.     gt_fieldcat
    -no_zero 'X'.
    *      gt_fieldcat-decimals_out = 2.     
    if &1 'DATBI'.       gt_fieldcat
    -edit 'X'.     
    endif.     
    append gt_fieldcat.   
    END-OF-DEFINITION.   
    DEFINE alv_head_d.     
    clear gt_fieldcat_d.     
    if &1 'CK'.       gt_fieldcat_d
    -checkbox 'X'.       gt_fieldcat_d
    -edit 'X'.     
    else.       gt_fieldcat_d
    -edit ''.     
    endif.     gt_fieldcat_d
    -fieldname = &1.     gt_fieldcat_d
    -tabname = &4.     gt_fieldcat_d
    -seltext_s = &2 .     gt_fieldcat_d
    -seltext_m = &2 .     gt_fieldcat_d
    -seltext_l = &2 .     gt_fieldcat_d
    -outputlen = &3.     gt_fieldcat_d
    -just  = &5.     gt_fieldcat_d
    -KEY  = &6.     gt_fieldcat_d
    -no_zero 'X'.     

    if &1 'KWMENG_J' or &1 'KWMENG' or &1 'NETWR'.       gt_fieldcat_d
    -do_sum 'X'.     
    endif.

    *      gt_fieldcat-decimals_out = 2.     
    append gt_fieldcat_d.   
    END-OF-DEFINITION.

    *头  R)ight (L)eft (C)ent.   alv_head 
    'CK' 'SEL' 'GT_VBAK'  'L' 'X'.   alv_head 
    'VBELN' '订单号' 'GT_VBAK' 'L' 'X'.
    *  alv_head 'KUNNR' '售达方' 10 'GT_VBAK'.   alv_head 
    'NAME4' '售达方名称' 10 'GT_VBAK'  'L' ''.
    *  alv_head 'KUNNR_S' '送达方' 10 'GT_VBAK'.   alv_head 
    'NAME5' '送达方名称' 10 'GT_VBAK' 'L' ''.
    *  alv_head 'KUNNR_J' '经办人' 10 'GT_VBAK'.
    *  alv_head 'VKBUR' '销售大区' 10 'GT_VBAK'.
    *  alv_head 'VKGRP' '办事处' 10 'GT_VBAK'.   alv_head 
    'BZIRK_TXT' '销售部' 10 'GT_VBAK' 'L' ''.   alv_head 
    'VKBUR_TEXT' '销售区域' 10 'GT_VBAK' 'L' ''.   alv_head 
    'NAME7' '销售片区' 10 'GT_VBAK' 'L' ''.

    *  alv_head 'TELF1' '客户联系方式' 10 'GT_VBAK'.   alv_head 
    'ERDAT' '订单日期' 10 'GT_VBAK' 'L' ''.   alv_head 
    'ERZET' '订单时间' 10 'GT_VBAK' 'L' ''.
    *  alv_head 'AUART' '订单类型' 10 'GT_VBAK' 'L'.   alv_head 
    'BEZEI' '订单描述' 10 'GT_VBAK' 'L' ''.
    *  alv_head 'STREET' '配送地址' 10 'GT_VBAK'.
    *  alv_head 'EDATU' '到货日期' 10 'GT_VBAK' 'L'.
    *  alv_head 'EZEIT' '到货时间' 10 'GT_VBAK' 'L'.   alv_head 
    'DATBI' '缺省交货日期' 12 'GT_VBAK' 'L' ''.
    *  alv_head 'TXT30' '审批状态' 10 'GT_VBAK' 'L'.   alv_head 
    'CMGST_TEXT' '信贷状态' 'GT_VBAK' 'L' ''.   alv_head 
    'KLIMK' '可用信贷' 15 'GT_VBAK' 'L' ''.   alv_head 
    'BSTKD' '采购订单编号' 15 'GT_VBAK' 'L' ''.   alv_head 
    'HDTXT' '采购订单抬头文本'  100 'GT_VBAK' 'L' ''.
    *明细
    *  alv_head_d 'CK' '行号' 8 'GT_VBAP' 'R'.   alv_head_d 
    'POSNR' '行号' 'GT_VBAP' 'R' ''.   alv_head_d 
    'MATNR' '物料号' 'GT_VBAP'  'L' ''.   alv_head_d 
    'ARKTX' '物料描述' 18 'GT_VBAP'  'L' ''.
    *   alv_head_d 
    'KWMENG_J' '  计价数量' 'GT_VBAP' 'L' ''.   alv_head_d 
    'NETWR_D' ' 单价' 'GT_VBAP' 'L' ''.   alv_head_d 
    'MEINS' '  计价单位' 'GT_VBAP' 'C' ''.

    *  alv_head_d 'KPEIN' '  定价单位' 8 'GT_VBAP' 'L'.   alv_head_d 

    'KWMENG' '  销售数量' 'GT_VBAP' 'L' ''.   
    "alv_head_d 'KDMAT' '  头数' 8 'GT_VBAP' 'L'.   alv_head_d 

    'NETWR_S' ' 销售单价' 'GT_VBAP' 'L' ''.   alv_head_d 
    'VRKME' '  销售单位' 'GT_VBAP' 'C' ''.   alv_head_d 
    'NETWR' '  金额' 'GT_VBAP' 'L' ''.
    *   alv_head_d 
    'WERKS' '工厂' 'GT_VBAP' 'L' ''.   alv_head_d 
    'NAME1' '工厂描述' 'GT_VBAP' 'L' ''.   alv_head_d 
    'LGORT' '仓库' 'GT_VBAP' 'L' ''.   alv_head_d 
    'NAME2' '仓库描述' 'GT_VBAP' 'L' ''.   alv_head_d 

    'VSTEL' '  装运点' 'GT_VBAP' 'L' ''.   alv_head_d 
    'NAME3' '  装运点描述' 'GT_VBAP' 'L' ''.   alv_head_d 

    'PRSDT' '  定价日期' 'GT_VBAP' 'L' ''.   
    "alv_head_d 'TXT_POSNR' '  工艺描述' 8 'GT_VBAP' 'L'.   


    "  alv_head 'ZH_KWERT' '  总共折扣金额' 8 'GT_VBAK' 'L'.
    *

    ENDFORM.                    " frm_build_fieldcat

    *&---------------------------------------------------------------------*
    *&      Form  frm_display_data
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    FORM frm_display_data .   gs_layout
    -box_fieldname 'CK'.   gs_layout
    -box_tabname 'GT_VBAK'.   gs_layout

    -colwidth_optimize 'X'.   

    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'     
    EXPORTING       i_callback_program       
    = sy-repid       i_callback_pf_status_set 
    'SET_STATUS'       i_callback_user_command  
    'USER_COMMAND'       is_layout                
    = gs_layout       it_fieldcat              
    = gt_fieldcat[]       i_save                   
    'A'     
    TABLES       t_outtab                 
    = gt_vbak[]     
    EXCEPTIONS       program_error            
    1       
    OTHERS                   2.
    *  is_keyinfo-header01 = 'VBELN'.
    *  is_keyinfo-item01   = 'VBELN'.
    *  CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
    *      EXPORTING
    *        i_callback_program       = sy-repid
    *        i_callback_pf_status_set = 'SET_STATUS'
    *        i_callback_user_command  = 'USER_COMMAND'
    *      is_layout                = gs_layout
    *        it_fieldcat              = gt_fieldcat[]
    *        i_default                = 'X'
    *        i_save                   = 'A'
    **      is_variant               = alv_variant
    **      it_events                = gt_events[]                "n777869
    *        i_tabname_header         = 'GT_VBAK'
    *        i_tabname_item           = 'GT_VBAP'
    *      is_keyinfo               = is_keyinfo
    *      TABLES
    *        t_outtab_header          = gt_vbak[]
    *        t_outtab_item            = gt_vbap[]
    *      EXCEPTIONS
    *        program_error            = 1
    *        OTHERS                   = 2.
    *  IF sy-subrc <> 0.
    *  ENDIF.
    ENDFORM.                    " frm_display_data

    *&---------------------------------------------------------------------*
    *&      Form  user_command
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *      -->RF_UCOMM   text
    *      -->RS         text
    *----------------------------------------------------------------------*
    FORM user_command   USING     rf_ucomm  LIKE sy-ucomm                                                  rs        
    TYPE slis_selfield.   

    DATA : wa_vbak_tmp TYPE ty_vbak,          gt_vbak_tmp 
    TYPE TABLE OF ty_vbak.   
    DATA: lr_grid TYPE REF TO cl_gui_alv_grid.
    *------------------------记录表---------------------------------------------   
    DATA : wa_ztsd003_tmp TYPE ztsd024,          gt_ztsd003_tmp 
    TYPE TABLE OF ztsd024.
    *---------------------------------------------------------------------
    *Begin SO   
    DATA : salesdocument      TYPE  bapivbeln-vbeln,          order_header_in    
    TYPE  bapisdh1,          order_header_inx   
    TYPE  bapisdh1x,          wa_return          
    TYPE  bapiret2,          lt_return          
    TYPE  TABLE OF bapiret2,          wa_order_item_in   
    TYPE  bapisditm,          lt_order_item_in   
    TYPE  TABLE OF bapisditm,          wa_order_item_inx  
    TYPE  bapisditmx,          lt_order_item_inx  
    TYPE  TABLE OF  bapisditmx,          wa_schedule_lines  
    TYPE  bapischdl,          lt_schedule_lines  
    TYPE  TABLE OF bapischdl,          wa_schedule_linesx 
    TYPE  bapischdlx,          lt_schedule_linesx 
    TYPE  TABLE OF bapischdlx.   
    DATA : ls_msg(220),          ls_msg_s
    (220),          ls_msg_e
    (220).
    *End
    *Begin DN   
    DATA : l_ship_point TYPE  bapidlvcreateheader-ship_point,          l_due_date   
    TYPE  bapidlvcreateheader-due_date,          l_delivery   
    TYPE  bapishpdelivnumb-deliv_numb.   
    DATA :  wa_sales_order_items TYPE  bapidlvreftosalesorder,           lt_sales_order_items 
    TYPE TABLE OF  bapidlvreftosalesorder.
    *         lt_RETURN LIKE  BAPIRET2 .   
    DATA : ls_abgru LIKE vbap-abgru.
    *End
    *  BREAK-POINT.   
    CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'     
    IMPORTING       e_grid 
    = lr_grid.   
    CALL METHOD lr_grid->check_changed_data.   rs
    -col_stable 'X'.   rs
    -row_stable 'X'.   rs
    -refresh 'X'.   gt_vbak_tmp[] 
    = gt_vbak[].   
    DELETE gt_vbak_tmp WHERE ck <> 'X'.
    *  BREAK-POINT.   

    DATA:count TYPE VALUE 0.   
    CASE rf_ucomm.     
    WHEN '&CREA'" 创建       
    CALL TRANSACTION 'VA01'.     
    WHEN '&COPY'.   "复制       
    CLEAR : bdcdata,bdcdata[].       
    IF lines( gt_vbak_tmp ) > 1.         
    MESSAGE '一次只能参考一张销售订单!' TYPE 'E'.       
    ENDIF.       
    READ TABLE gt_vbak_tmp INTO  wa_vbak_tmp INDEX 1.       
    IF sy-subrc 0.         
    PERFORM bdc_dynpro USING 'SAPMV45A'  '0101'.         
    PERFORM bdc_field       USING 'BDC_CURSOR'  'VBAK-AUART'.         
    PERFORM bdc_field       USING 'BDC_OKCODE'  '=COPY'.         
    PERFORM bdc_field       USING 'VBAK-AUART'  wa_vbak_tmp-auart.         
    PERFORM bdc_dynpro USING 'SAPLV45C'  '0100'.         

    PERFORM bdc_field       USING 'BDC_OKCODE'  '=RAUF'.         
    PERFORM bdc_field       USING 'BDC_SUBSCR'  'SAPLV45C'.         
    PERFORM bdc_field       USING 'BDC_CURSOR'  'LV45C-VBELN'.         
    PERFORM bdc_dynpro USING 'SAPLV45C'  '0100'.         

    PERFORM bdc_field       USING 'BDC_OKCODE'  '=UEBR'.         
    PERFORM bdc_field       USING 'BDC_SUBSCR'  'SAPLV45C'.         
    PERFORM bdc_field       USING 'BDC_CURSOR'  'LV45C-VBELN'.         

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'           
    EXPORTING             
    input  = wa_vbak_tmp-vbeln           
    IMPORTING             
    output = wa_vbak_tmp-vbeln.         

    PERFORM bdc_field       USING 'LV45C-VBELN'  wa_vbak_tmp-vbeln.         

    PERFORM call_transaction_form USING 'VA01'.       
    ENDIF.     
    WHEN '&MODI'.   "修改       
    IF lines( gt_vbak_tmp ) > 1.         
    MESSAGE '一次只能修改一张销售订单!' TYPE 'E'.       
    ENDIF.       
    READ TABLE gt_vbak_tmp INTO  wa_vbak_tmp INDEX 1.       
    IF sy-subrc 0.         
    SET PARAMETER ID 'AUN'  FIELD wa_vbak_tmp-vbeln.         
    CALL TRANSACTION 'VA02' AND SKIP FIRST SCREEN.       
    ENDIF.     
    WHEN '&REA'.     "拒绝       
    LOOP AT gt_vbak INTO wa_vbak WHERE  ck 'X'.  "选择行
    *检查是否已经拒绝         
    CLEAR : ls_abgru.         
    SELECT SINGLE   abgru           
    INTO ls_abgru           
    FROM vbap WHERE vbeln =  wa_vbak-vbeln.         
    IF sy-subrc AND ls_abgru 'Z1'.           
    MESSAGE '该销售单已拒绝!' TYPE 'E'.         
    ENDIF.         

    "ADD BY YMQ 2015.11.10 新增拒绝警告信息         
    TYPE-POOLS:icon.         
    TYPESBEGIN OF  typ_pop,                  iconbox     
    TYPE  icon_d ,   "警告图标                  
    message(30TYPE ,   "警告信息                  msgtype
    (1)  TYPE ,   "消息类型                
    END OF typ_pop.         
    DATA: lt_pop TYPE typ_pop OCCURS WITH HEADER LINE .         

    DATA: e_exit(1TYPE .         
    DATA: tmp_msg(30TYPE .         

    DATA: pop_field  TYPE slis_t_fieldcat_alv WITH HEADER LINE,               pop_layout 
    TYPE  slis_layout_alv.         lt_pop

    -iconbox = icon_led_yellow.         
    CONCATENATE ' 是否拒绝订单:' wa_vbak-vbeln  '' INTO tmp_msg.         lt_pop
    -message = tmp_msg.         lt_pop
    -msgtype 'W'.         
    APPEND lt_pop.         pop_field

    -fieldname 'ICONBOX'.         pop_field
    -tabname   'LT_POP'.         pop_field
    -seltext_m '消息类型'.         pop_field
    -col_pos   .         pop_field
    -outputlen .         
    APPEND pop_field.         pop_field

    -fieldname 'MESSAGE'.         pop_field
    -tabname   'LT_POP'.         pop_field
    -seltext_m '消息文本'.         pop_field
    -col_pos   .         pop_field
    -outputlen 55 .         
    APPEND pop_field.         pop_field

    -fieldname 'MSGTYPE'.         pop_field
    -tabname   'LT_POP'.         pop_field
    -seltext_m 'Type'.         pop_field
    -col_pos   .         pop_field
    -outputlen .         
    APPEND pop_field.         

    CALL FUNCTION 'REUSE_ALV_POPUP_TO_SELECT'           
    EXPORTING             i_title              
    '消息'             i_selection          
    'X'
    *           I_ALLOW_NO_SELECTION =             i_zebra              
    ' '
    *           I_SCREEN_START_COLUMN         = 0
    *           I_SCREEN_START_LINE  = 0
    *           I_SCREEN_END_COLUMN  = 0
    *           I_SCREEN_END_LINE    = 0
    *           I_CHECKBOX_FIELDNAME = tmp_chose
    *           I_LINEMARK_FIELDNAME =             i_scroll_to_sel_line 
    'X'             i_tabname            
    'LT_POP'
    *           I_STRUCTURE_NAME     =             it_fieldcat          
    = pop_field[]
    *           IT_EXCLUDING         =             i_callback_program   
    = sy-repid
    *           I_CALLBACK_USER_COMMAND       =
    *           IS_PRIVATE           =           
    IMPORTING
    *           ES_SELFIELD          =             e_exit               
    = e_exit           
    TABLES             t_outtab             
    = lt_pop[]           
    EXCEPTIONS             program_error        
    1             
    OTHERS               2.         
    IF sy-subrc AND   e_exit 'X'"取消           
    RETURN.         
    ENDIF.   "add by tractor 2015.11.17         

    LOOP AT gt_vbap INTO wa_vbap WHERE vbeln = wa_vbak-vbeln.  "SO对应的所有行           
    CLEAR : salesdocument,                   wa_return
    ,                   lt_return
    ,                   wa_order_item_in
    ,                   lt_order_item_in
    ,                   wa_order_item_inx
    ,                   lt_order_item_inx
    ,                   wa_schedule_lines
    ,                   lt_schedule_lines
    ,                   wa_schedule_linesx
    ,                   lt_schedule_linesx
    .           wa_order_item_in

    -itm_number = wa_vbap-posnr.           wa_order_item_in
    -reason_rej 'Z1'.           
    APPEND wa_order_item_in TO lt_order_item_in.           wa_order_item_inx

    -itm_number = wa_vbap-posnr.           wa_order_item_inx
    -updateflag 'U'.           wa_order_item_inx
    -reason_rej 'X'.           
    APPEND wa_order_item_inx TO lt_order_item_inx.           order_header_inx

    -updateflag 'U'.           
    WAIT UP TO 2 SECONDS.                             "等待2秒           
    CALL FUNCTION 'BAPI_SALESORDER_CHANGE'             
    EXPORTING               salesdocument     
    = wa_vbap-vbeln               order_header_in   
    = order_header_in               order_header_inx  
    = order_header_inx               behave_when_error 
    'P'             
    TABLES               
    return            = lt_return               order_item_in     
    = lt_order_item_in               order_item_inx    
    = lt_order_item_inx
    *             schedule_lines    = lt_schedule_lines
    *             schedule_linesx   = lt_schedule_linesx.             
    .           
    READ TABLE lt_return INTO wa_return WITH KEY type 'S'.           
    IF sy-subrc 0.             
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'               
    EXPORTING                 
    wait 'X'.             
    IF ls_msg_s IS INITIAL.               ls_msg_s 
    = wa_vbap-posnr.             
    ELSE.               
    CONCATENATE ls_msg_s ',' wa_vbap-posnr INTO ls_msg_s.             
    ENDIF.           
    ELSE.
    *          CLEAR : ls_msg.             
    LOOP AT lt_return INTO  wa_return.               
    CALL FUNCTION 'MESSAGE_TEXT_BUILD'                 
    EXPORTING                   msgid               
    = wa_return-id                   msgnr               
    = wa_return-number                   msgv1               
    = wa_return-message_v1                   msgv2               
    = wa_return-message_v2                   msgv3               
    = wa_return-message_v3                   msgv4               
    = wa_return-message_v4                 
    IMPORTING                   message_text_output 
    = ls_msg_e.             
    ENDLOOP.             
    IF ls_msg_s IS INITIAL.               ls_msg_e 
    = wa_vbap-posnr.             
    ELSE.               
    CONCATENATE ls_msg_e ',' wa_vbap-posnr INTO ls_msg_e.             
    ENDIF.           
    ENDIF.         
    ENDLOOP.       
    ENDLOOP.       
    IF ls_msg_e IS INITIAL.         
    CONCATENATE '销售订单'  wa_vbap-vbeln ':行项目' ls_msg_s ' 未发货数量已拒绝!' INTO ls_msg.       
    ELSEIF ls_msg_s IS INITIAL.         
    CONCATENATE '销售订单'  wa_vbap-vbeln ':行项目' ls_msg_e ' 未发货数量拒绝失败,请手工更改!' INTO ls_msg.
    *      ELSE.
    *        CONCATENATE '销售订单'  wa_vbap-vbeln ':行项目' ls_msg_s ' 未发货数量已拒绝,行项目:' ls_msg_e '未发货数量拒绝失败,请手工更改!' INTO ls_msg.       
    ENDIF.       
    MESSAGE ls_msg TYPE 'I'.       
    CLEAR : ls_msg.       
    CLEAR : ls_msg_e.       
    CLEAR : ls_msg_s.     
    WHEN '&TUR'.     "转交货单
    *      IF sy-uname <> 'XH003'.
    *        MESSAGE '正在修改,不能使用此功能' TYPE 'I'.
    *        EXIT.
    *      ENDIF.       

    DATA:BEGIN OF gwa_lips,              vgbel 
    LIKE lips-vgbel,            
    END OF gwa_lips.       
    DATA:git_lips LIKE gwa_lips OCCURS WITH HEADER LINE.       

    "LOOP AT gt_vbak INTO wa_vbak WHERE ck = 'X'.       
    "select vgbel into table git_lips from lips  where vgbel = wa_vbak-vbeln and vgpos = wa_vbak-posnr.       
    "if git_lips[] is not initial.       
    "message '不允许同一张订单,同一行项目二次发货' type 'I'.       
    "leave to screen 0.       
    "endif.       
    "endloop.       



    CLEAR : l_ship_point,l_due_date,wa_sales_order_items,lt_sales_order_items.       
    SORT gt_vbap BY vbeln ASCENDING                              vstel 
    ASCENDING.       
    CLEAR : wa_vbap_vl , gt_vbap_vl.       
    LOOP AT gt_vbap INTO wa_vbap .         wa_vbap_vl
    -vbeln = wa_vbap-vbeln.         wa_vbap_vl
    -vstel = wa_vbap-vstel.         
    COLLECT wa_vbap_vl INTO gt_vbap_vl.       
    ENDLOOP.       
    SORT gt_vbap_vl BY vbeln ASCENDING                                  vstel 
    ASCENDING.       
    LOOP AT gt_vbak INTO wa_vbak WHERE ck 'X'.         

    CLEAR :  wa_sales_order_items , lt_sales_order_items,bdcdata,bdcdata[].         
    LOOP AT gt_vbap_vl INTO wa_vbap_vl WHERE vbeln =  wa_vbak-vbeln.
    *-----------------------------------------------           
    AT NEW vstel.             l_ship_point 
    = wa_vbap_vl-vstel.    "装运点             l_due_date  
    = wa_vbak-datbi.             

    PERFORM bdc_dynpro USING 'SAPMV50A'  '4001'.             


    PERFORM bdc_field       USING 'BDC_CURSOR'  'LV50C-VBELN'.             
    PERFORM bdc_field       USING 'BDC_OKCODE' '/00'.             
    PERFORM bdc_field       USING 'LIKP-VSTEL'  l_ship_point.             
    PERFORM bdc_field       USING 'LV50C-DATBI'  l_due_date.             
    PERFORM bdc_field       USING 'LV50C-VBELN'  wa_vbak-vbeln.             

    PERFORM bdc_dynpro USING 'SAPMV50A'  '1000'.             
    PERFORM bdc_field       USING 'BDC_OKCODE'  '=SICH_T'.             

    PERFORM call_transaction_form_vl01n USING 'VL01N' CHANGING l_delivery .
    *            BREAK-POINT.             
    IF  NOT l_delivery IS INITIAL.               
    CLEAR : wa_ztsd003_tmp , gt_ztsd003_tmp.               
    CONCATENATE '成功生成交货单:' l_delivery  '!' INTO ls_msg_s .               wa_ztsd003_tmp
    -vbeln_vl = l_delivery.               
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'                 
    EXPORTING                   
    input  = wa_ztsd003_tmp-vbeln_vl                 
    IMPORTING                   
    output = wa_ztsd003_tmp-vbeln_vl.

    *--------记录成功消息---------------------               
    DATA : l_posnr_vl TYPE posnr_vl.               l_posnr_vl 
    10.               
    LOOP AT gt_vbap INTO wa_vbap WHERE vstel = wa_vbap_vl-vstel AND vbeln = wa_vbap_vl-vbeln.                 wa_ztsd003_tmp
    -mandt = sy-mandt.                 wa_ztsd003_tmp
    -vbeln = wa_vbap-vbeln.                 wa_ztsd003_tmp
    -posnr = wa_vbap-posnr.                 

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'                   
    EXPORTING                     
    input  = l_posnr_vl                   
    IMPORTING                     
    output = l_posnr_vl.                 wa_ztsd003_tmp

    -posnr_vl = l_posnr_vl.                 wa_ztsd003_tmp
    -erdat = sy-datum.                 wa_ztsd003_tmp
    -erzet = sy-uzeit.                 wa_ztsd003_tmp
    -ernam = sy-uname.                 
    APPEND wa_ztsd003_tmp TO gt_ztsd003_tmp.                 l_posnr_vl 
    = l_posnr_vl + 10.               
    ENDLOOP.               
    MODIFY ztsd024 FROM TABLE gt_ztsd003_tmp.               
    COMMIT WORK.               
    CLEAR : wa_ztsd003_tmp,gt_ztsd003_tmp.
    *              MESSAGE  ls_msg_s TYPE 'I'.               
    DELETE gt_vbak WHERE vbeln = wa_vbak-vbeln.             
    ELSE.               
    CLEAR : wa_ztsd003,gt_ztsd003.               
    CLEAR : ls_msg.               
    LOOP AT lt_return INTO  wa_return.                 
    CALL FUNCTION 'MESSAGE_TEXT_BUILD'                   
    EXPORTING                     msgid               
    = wa_return-id                     msgnr               
    = wa_return-number                     msgv1               
    = wa_return-message_v1                     msgv2               
    = wa_return-message_v2                     msgv3               
    = wa_return-message_v3                     msgv4               
    = wa_return-message_v4                   
    IMPORTING                     message_text_output 
    = ls_msg_e.                 
    CONCATENATE ls_msg '/' ls_msg_e INTO ls_msg.               
    ENDLOOP.               
    MESSAGE '销售订单转交未成功,检查数据完整性!' TYPE 'E'.               
    CONTINUE.             
    ENDIF.           

    ENDAT.         
    ENDLOOP.       
    ENDLOOP.       
    IF sy-subrc EQ 0.         
    MESSAGE '转交成功!' TYPE 'I'.       
    ELSE.         
    MESSAGE '部分转交成功或转交失败!' TYPE 'E'.       
    ENDIF.     
    WHEN '&IC1'.  "双击
    *      READ TABLE gt_vbak INTO  wa_vbak_tmp INDEX rs-tabindex.
    *      IF sy-subrc = 0.
    *        SET PARAMETER ID 'AUN'  FIELD wa_vbak_tmp-vbeln.
    *        CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
    *      ENDIF.       
    IF rs-tabname EQ 'GT_VBAK'.         
    READ TABLE gt_vbak INTO wa_vbak INDEX rs-tabindex.         
    IF sy-subrc 0.           gt_vbap_sel[] 
    = gt_vbap[].           
    DELETE gt_vbap_sel WHERE vbeln <> wa_vbak-vbeln.           
    DELETE ADJACENT DUPLICATES FROM gt_vbap_sel.           
    PERFORM frm_display_data_d.         
    ENDIF.       
    ENDIF.
    *    WHEN '&F03'.
    *      count = count - 1.
    *      LEAVE TO SCREEN 0.     

    WHEN '&CHG'.                  " add by ymq  2014.11.23  更新信贷状态       
    DATA: lc_tabix  TYPE sy-tabix.       
    DATA  l_cmgst LIKE TABLE OF vbuk WITH HEADER LINE.       
    DATA: lt_cmgst LIKE LINE OF l_cmgst.       

    LOOP AT gt_vbak INTO wa_vbak WHERE ck 'X'.         
    CALL FUNCTION 'SD_ORDER_CREDIT_RECHECK'           
    EXPORTING             flg_update    
    'X'             vbeln         
    = wa_vbak-vbeln           
    EXCEPTIONS             error_message 
    4.       
    ENDLOOP.       
    COMMIT WORK AND WAIT.       

    LOOP AT gt_vbak INTO wa_vbak WHERE ck 'X'.         lc_tabix 
    = sy-tabix.         
    SELECT SINGLE * INTO CORRESPONDING FIELDS OF  lt_cmgst         
    FROM  vbuk WHERE vbeln = wa_vbak-vbeln AND cmgst ='A'.         
    IF sy-subrc 0.           
    CASE lt_cmgst-cmgst.             
    WHEN ''.               wa_vbak
    -cmgst_text '未执行'.             
    WHEN 'A'.               wa_vbak
    -cmgst_text '通过'.             
    WHEN 'B'.               wa_vbak
    -cmgst_text '不通过'.             
    WHEN 'C'.               wa_vbak
    -cmgst_text '部分通过'.             
    WHEN 'D'.               wa_vbak
    -cmgst_text '批准后通过'.           
    ENDCASE.           
    MODIFY  gt_vbak[] INDEX lc_tabix FROM wa_vbak.         
    ENDIF.       

    ENDLOOP.       
    CALL METHOD lr_grid->refresh_table_display.       

    MESSAGE '订单状态已更新!' TYPE 'S'.
    *         data: lc_tabix type sy-tabix.
    *      select  vbak~vbeln       "取所有未通过信用状态
    *             vbak~erdat
    *            vbak~auart
    *             vbuk~cmgst
    *          into corresponding fields of table gt_itab
    *          from vbak
    *          inner join vbuk on vbuk~vbeln = vbak~vbeln
    *          where vbuk~cmgst <> 'A'.
    *      select  s066~knkli  s066~oeikw into corresponding fields of table  lt_s066   "取所有未清销售订单信贷
    *          from s066.
    *          sort lt_s066.
    *      select knkli olikw ofakw  into corresponding fields of table lt_s067   "取所有未清交货单信贷
    *          from s067.
    *          sort lt_s067.
    *      select knkli skfor klimk  ctlpc into corresponding fields of table lt_knkk  "取所有开票信贷额
    *          from knkk.
    *          sort lt_knkk.
    *         LOOP AT gt_vbak INTO wa_vbak WHERE ck = 'X'.  "循环选择内表
    *               lc_tabix = sy-tabix.
    *               clear wa_detail.
    *             loop at gt_itab.
    *                wa_detail-kunnr = wa_vbak-kunnr.
    *                if  wa_detail-kunnr is not initial.
    * "-----process : 未清销售订单信贷
    *                   read table lt_s066 with  key knkli = wa_detail-kunnr binary search.
    *                   if sy-subrc  = 0.
    *                    wa_detail-oeikw = lt_s066-oeikw.
    *                    endif.
    * "-----process : 未清交货信贷
    *                   read table lt_s067 with  key knkli = wa_detail-kunnr binary search.
    *                   if sy-subrc = 0.
    *                     wa_detail-olikw = lt_s067-olikw.
    *                    endif.
    *                   wa_detail-ofakw = wa_detail-oeikw + wa_detail-olikw + lt_s067-ofakw.
    *                   clear lt_s067.
    * "-----process : 未清开票信贷
    *                   read table lt_knkk with  key knkli = wa_detail-kunnr binary search.
    *                   if sy-subrc = 0.
    *                     wa_detail-skfor = lt_knkk-skfor.  "客户往来余额
    *                     wa_detail-klimk = lt_knkk-klimk.  "客户信用额度
    *                     wa_detail-ctlpc = lt_knkk-ctlpc.  "是否检查信贷
    *                   endif.
    *                   wa_detail-klimks = wa_detail-klimk - wa_detail-skfor - wa_detail-ofakw.
    *             if wa_detail-klimks > 0.
    *               update vbuk set cmgst = 'A' where vbeln = wa_vbak-vbeln.
    *              wa_vbak-cmgst_text = '通过'.
    *             modify  gt_vbak[] index lc_tabix from wa_vbak.
    *             endif.
    *            endif.  "kunnr is not initial.
    *             endloop.
    *        endloop.
    *        commit work and wait.
    *        message  '订单状态已更新' type 'S'.
    *                       " add by ymq  2014.11.23
    *     

    WHEN OTHERS.       
    EXIT.   
    ENDCASE.
    ENDFORM.                    "user_command

    *&---------------------------------------------------------------------*
    *&      Form  set_status
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *      -->RT_EXTAB   text
    *----------------------------------------------------------------------*
    FORM set_status  USING     rt_extab  TYPE slis_t_extab.   
    SET PF-STATUS 'STANDARD'    EXCLUDING rt_extab .
    ENDFORM.                    "set_status
    *&---------------------------------------------------------------------*
    *&      Form  FRM_READ_VBAP
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM frm_read_vbap .   
    TYPESBEGIN OF ty_vl02,            vbelv 
    LIKE vbfa-vbelv,   "销售单 J            posnv 
    TYPE posnr_von,            vbeln 
    LIKE vbfa-vbeln,    "交货单            posnn 
    TYPE posnr_nach,          
    END OF ty_vl02.   
    DATA : wa_vl02 TYPE ty_vl02,          lt_vl02 
    TYPE TABLE OF ty_vl02.   
    SELECT   b~auart                b
    ~vbeln "LIKE   vbak-vbeln,               b
    ~kunnr "LIKE vbak-kunnr,               b
    ~spart AS spart1               a
    ~spart AS spart2
    *               kunnr_s "LIKE vbpa-kunnr,
    *               kunnr_j "LIKE vbpa-kunnr,                vkbur 
    "LIKE vbak-vkbur,                vkgrp 
    "LIKE vbak-vkgrp,
    *               telf1 "LIKE kna1-telf1,                b
    ~erdat "LIKE vbak-erdat,                b
    ~erzet "LIKE vbak-erzet,               a

    ~posnr "LIKE vbap-posnr,               a
    ~meins "LIKE vbap-meins,               a
    ~kdmat "红白条头数               matnr 
    "LIKE vbap-matnr,               arktx 
    "LIKE vbap-arktx,               werks 
    "LIKE vbap-werks,               lgort 
    "LIKE vbap-lgort,               vstel 
    "LIKE vbap-vstel,               kwmeng 
    "LIKE vbap-kwmeng,               a
    ~vrkme "LIKE vbap-vrkme,               kpein 
    "LIKE vbap-kpein,               kmein 
    "LIKE vbap-kmein,
    *              netwr_d "LIKE vbap-netwr,  "单价               mwsbp 
    "LIKE vbap-mwsbp,               a
    ~umvkz "LIKE vbap-umvkz,               a
    ~umvkn "LIKE vbap-umvkn,               a
    ~netwr "LIKE vbap-netwr,  "金额

    *              kwmeng_j "LIKE vbap-kwmeng, "计价数量
    *  配送方式
    *              stype(10),
    *              street "LIKE adrc-street,               edatu 
    "LIKE vbep-edatu,               ezeit 
    "LIKE vbep-ezeit,              
    c~edatu AS  datbi "like LV50C-DATBI, "KETDAT  VBAK-VDATU              kzwi1              taxk1               taxm1               netpr               knumv               e





    ~bzirk               e
    ~prsdt
    INTO CORRESPONDING FIELDS OF TABLE gt_vbap
    FROM vbap AS a INNER 
    JOIN vbak AS b
    ON a~vbeln = b~vbeln INNER 
    JOIN vbep AS c
    ON a~vbeln c~vbeln AND a~posnr c~posnr INNER 
    JOIN vbup AS d
    ON a~vbeln = d~vbeln AND a~posnr = d~posnr INNER 
    JOIN vbkd AS e
    ON b~vbeln = e~vbeln "AND a~posnr = e~posnr
    WHERE auart IN auart  
    AND vkorg IN vkorg
    AND vtweg IN vtweg
    "AND b~spart IN spart
    "AND a~spart IN spart2

    AND vkbur IN vkbur
    AND vkgrp IN vkgrp
    AND wmeng <> 0

    AND kunnr IN kunnr
    AND werks IN werks
    AND lgort IN lgort
    AND vstel IN vstel
    AND b~ernam IN ernam
    AND b~vbeln IN vbeln
    AND  b~erdat IN erdat
    AND  edatu IN edatu
    AND   ezeit IN ezeit
    *AND d~lfgsk <> 'C'
    AND d~lfgsa <> 'C'
    AND d~absta <> 'C'
    AND e~bzirk IN bzrik                 "add by trator  2015.08.21
    .   

    LOOP AT gt_vbap INTO wa_vbap .     
    AUTHORITY-CHECK OBJECT 'V_VBAK_VKO'                                          
    ID 'VKORG' DUMMY                                          
    ID 'VTWEG' DUMMY                                          
    ID 'SPART' FIELD wa_vbap-spart1                                          
    ID 'ACTVT' DUMMY.     
    IF sy-subrc <> 0"抬头       
    READ TABLE lt_spart WITH KEY low = wa_vbap-spart1.       
    IF sy-subrc <> 0.         
    DELETE gt_vbap.       
    ENDIF.     
    ENDIF.   
    ENDLOOP.

    *--取销售订单的折扣金额的值   
    SELECT kwert knumv INTO TABLE git_konv FROM konv FOR ALL ENTRIES IN gt_vbap WHERE knumv = gt_vbap-knumv AND kschl 'ZP85'.


    *取得已交货的SO
    *  CLEAR :   wa_vl02,lt_vl02.
    *  SELECT vbelv    "销售单 J
    *    posnv
    *           vbeln
    *    posnn
    *  INTO CORRESPONDING FIELDS OF TABLE lt_vl02
    *    FROM vbfa
    *    FOR ALL ENTRIES IN gt_vbap
    *    WHERE vbelv = gt_vbap-vbeln
    *       AND vbtyp_n = 'J'
    *    .
    *  DELETE ADJACENT DUPLICATES FROM lt_vl02 .
    *  SORT lt_vl02 ASCENDING BY vbelv.   
    DATA BEGIN OF lt_cmgst OCCURS 0,            vbeln 
    LIKE vbuk-vbeln,            cmgst 
    LIKE vbuk-cmgst,          
    END OF lt_cmgst.   
    IF NOT gt_vbap[] IS INITIAL.     
    SELECT vbeln cmgst       
    INTO TABLE lt_cmgst       
    FROM vbuk       
    FOR ALL ENTRIES IN gt_vbap       
    WHERE vbeln = gt_vbap-vbeln        
    .     
    SORT lt_cmgst BY vbeln  ASCENDING.   
    ENDIF.   
    DATA BEGIN OF lt_tvkbt OCCURS 0,            vkbur 
    LIKE tvkbt-vkbur,            bezei 
    LIKE tvkbt-bezei,          
    END OF lt_tvkbt.   

    SELECT vkbur bezei     
    INTO TABLE lt_tvkbt     
    FROM tvkbt     
    WHERE spras 1.   

    SORT lt_tvkbt BY vkbur  ASCENDING.   

    DATA BEGIN OF lt_vbkd OCCURS 0,            vbeln 
    LIKE vbkd-vbeln,            posnr 
    LIKE vbkd-posnr,            prsdt 
    LIKE vbkd-prsdt,            bstkd 
    LIKE vbkd-bstkd,          
    END OF lt_vbkd.   
    IF NOT gt_vbap[] IS INITIAL.     
    SELECT  vbeln posnr prsdt bstkd       
    INTO TABLE lt_vbkd       
    FROM vbkd       
    FOR ALL ENTRIES IN gt_vbap       
    WHERE vbeln =  gt_vbap-vbeln        
    AND ( posnr = gt_vbap-posnr  "行          
    OR posnr '000000' )"抬头     

    SORT lt_vbkd BY vbeln  ASCENDING                              posnr 
    ASCENDING.   
    ENDIF.   
    DATA BEGIN OF lt_tvgrt OCCURS 0,            vkgrp 
    LIKE tvgrt-vkgrp,            bezei 
    LIKE tvgrt-bezei,          
    END OF lt_tvgrt.   

    SELECT vkgrp bezei     
    INTO TABLE lt_tvgrt   
    FROM tvgrt   
    WHERE vkgrp IN vkgrp       
    AND spras 1.   
    SORT lt_tvgrt BY vkgrp ASCENDING.   

    DATA BEGIN OF lt_vstel OCCURS 0,            vstel 
    LIKE tvstt-vstel,            vtext 
    LIKE tvstt-vtext,          
    END OF lt_vstel.   

    SELECT vstel vtext     
    INTO TABLE lt_vstel     
    FROM tvstt WHERE spras 1   ."装运点描述' 8 'GT_VBAP'.   
    SORT lt_vstel BY vstel ASCENDING.   

    DATA BEGIN OF lt_lgort OCCURS 0,            werks 
    TYPE werks_d,            lgort 
    TYPE lgort_d,            lgobe 
    TYPE lgobe,          
    END OF lt_lgort.   

    SELECT werks lgort lgobe     
    INTO TABLE lt_lgort     
    FROM t001l WHERE werks IN werks ."仓库描述'   
    SORT lt_lgort BY werks ASCENDING lgort ASCENDING.   
    DATA BEGIN OF lt_werks OCCURS 0,            werks 
    LIKE t001w-werks,            name1 
    LIKE t001w-name1,          
    END OF lt_werks.   
    SELECT werks name1     
    INTO TABLE lt_werks     
    FROM t001w WHERE werks IN werks.   
    SORT lt_werks BY werks ASCENDING.   
    DATA :  lt_tvakt LIKE TABLE OF tvakt WITH HEADER LINE .   
    CLEAR : lt_tvakt,lt_tvakt[].   
    SELECT   *        INTO TABLE lt_tvakt  FROM tvakt WHERE spras '1'.   
    SORT lt_tvakt BY auart ASCENDING.   

    DATA BEGIN OF lt_name OCCURS 0,            vbeln 
    LIKE vbpa-vbeln,            parvw 
    LIKE vbpa-parvw,            name  
    LIKE adrc-name1,          
    END OF lt_name .   
    IF NOT gt_vbap[] IS INITIAL.     
    CLEAR :  lt_name, lt_name[].     
    SELECT vbeln parvw name1 AS name       
    INTO TABLE lt_name       
    FROM vbpa AS a       INNER 
    JOIN adrc AS b ON a~adrnr = b~addrnumber       
    FOR ALL ENTRIES IN gt_vbap       
    "WHERE parvw IN ('AG','WE')          
    WHERE vbeln = gt_vbap-vbeln.     
    SORT lt_name BY vbeln ASCENDING                            parvw 
    ASCENDING.   
    ENDIF.   

    LOOP AT gt_vbap INTO wa_vbap.     

    SELECT SINGLE bztxt INTO wa_vbap-bzirk_txt       
    FROM t171t       
    WHERE bzirk EQ wa_vbap-bzirk.
    *    READ TABLE lt_vl02 INTO wa_vl02 WITH KEY vbelv = wa_vbap-vbeln
    *                                                                      posnv = wa_vbap-posnr.
    *    sy-subrc = 4.   "不删除
    *    IF sy-subrc = 0.  "已有交货
    *      DELETE gt_vbap WHERE vbeln = wa_vbap-vbeln
    *                                    AND posnr = wa_vbap-posnr.
    *      CONTINUE.
    *    ENDIF.
    *    break: xh003.



    *售达方
    *    SELECT SINGLE kunnr adrnr
    *      INTO (wa_vbap-kunnr , wa_vbap-adrnr)
    *      FROM vbpa
    *      WHERE   vbeln = wa_vbap-vbeln
    **          AND posnr = wa_vbap-posnr
    *          AND parvw = 'AG'.
    *    IF NOT wa_vbap-adrnr IS INITIAL.
    *      SELECT SINGLE name1 INTO wa_vbap-name4
    *     FROM   adrc
    *        WHERE addrnumber = wa_vbap-adrnr.
    *    ENDIF.     
    READ TABLE  lt_name WITH KEY vbeln = wa_vbap-vbeln parvw 'AG' BINARY SEARCH.     
    IF sy-subrc 0.       wa_vbap
    -name4 = lt_name-name.     
    ENDIF.
    *送达方
    *    SELECT SINGLE kunnr adrnr
    *      INTO (wa_vbap-kunnr_s , wa_vbap-adrnr)
    *      FROM vbpa
    *      WHERE   vbeln = wa_vbap-vbeln
    **          AND posnr = wa_vbap-posnr
    *          AND parvw = 'WE'
    *                    .
    *    IF NOT wa_vbap-adrnr IS INITIAL.
    *      SELECT SINGLE name1 INTO wa_vbap-name5
    *     FROM   adrc
    *        WHERE addrnumber = wa_vbap-adrnr.
    *    ENDIF.     
    READ TABLE  lt_name WITH KEY vbeln = wa_vbap-vbeln parvw 'WE' BINARY SEARCH.     
    IF sy-subrc 0.       wa_vbap
    -name5 = lt_name-name.     
    ENDIF.

    *经办人
    *    SELECT SINGLE kunnr
    *      INTO wa_vbap-kunnr_j
    *      FROM vbpa
    *      WHERE   vbeln = wa_vbap-vbeln
    **          AND posnr = wa_vbap-posnr
    *          AND parvw = 'Z1'
    *      .
    *    SELECT SINGLE telf1
    *      INTO wa_vbap-telf1
    *      FROM kna1 WHERE kunnr =  wa_vbap-kunnr.

    *      STYPE
    *    CASE wa_vbap-auart.
    *      WHEN 'ZBV' .
    *        wa_vbap-stype = '现金自提'.
    *      WHEN 'ZBV1'.
    *        wa_vbap-stype = '客户自提'.
    *      WHEN 'ZOR'.
    *        IF vbak-augru = 'Z01'.
    *          wa_vbap-stype = '客户自提'.
    *        ELSE.
    *          wa_vbap-stype = '其他 公司配送'.
    *        ENDIF.
    *    ENDCASE.
    *    SELECT SINGLE  street
    *      INTO wa_vbap-street
    *      FROM adrc
    *      WHERE addrnumber = wa_vbap-adrnr.     wa_vbap

    -kwmeng_j =   wa_vbap-umvkz / wa_vbap-umvkn * wa_vbap-kwmeng.

    *    wa_vbap-netwr_d = wa_vbap-mwsbp +  wa_vbap-netwr / wa_vbap-kwmeng.
    *单价
    *    BREAK-POINT.     wa_vbap
    -netwr_d  0.
    *    IF  wa_vbap-taxk1 = '0'.
    *      wa_vbap-netwr_d = wa_vbap-netpr.
    *    ELSE.
    *      CASE wa_vbap-taxm1.
    *        WHEN '0'.
    *          wa_vbap-netwr_d = wa_vbap-netpr.
    *        WHEN '1'.
    *          wa_vbap-netwr_d = wa_vbap-netpr * '1.04'.
    *        WHEN '2'.
    *          wa_vbap-netwr_d = wa_vbap-netpr * '1.13'.
    *        WHEN '3'.
    *          wa_vbap-netwr_d = wa_vbap-netpr * '1.17'.
    *      ENDCASE.
    *    ENDIF.     wa_vbap

    -netwr_d = wa_vbap-umvkn * ( wa_vbap-netwr + wa_vbap-mwsbp ) / ( wa_vbap-kwmeng * wa_vbap-umvkz ).
    *    BREAK-POINT.     wa_vbap
    -netwr_s ( wa_vbap-netwr + wa_vbap-mwsbp ) /  wa_vbap-kwmeng .     wa_vbap

    -netwr = wa_vbap-mwsbp + wa_vbap-netwr.

    *    SELECT SINGLE  name1  "工厂描述'
    *      INTO wa_vbap-name1
    *      FROM t001w WHERE werks = wa_vbap-werks.     
    READ TABLE lt_werks WITH KEY werks = wa_vbap-werks BINARY SEARCH.     
    IF sy-subrc 0.       wa_vbap
    -name1 = lt_werks-name1.     
    ENDIF.

    *    SELECT SINGLE lgobe
    *      INTO wa_vbap-name2
    *      FROM t001l WHERE werks = wa_vbap-werks AND lgort = wa_vbap-lgort."仓库描述'     
    READ TABLE lt_lgort WITH KEY werks = wa_vbap-werks  lgort = wa_vbap-lgort BINARY SEARCH.     
    IF sy-subrc 0.       wa_vbap
    -name2 = lt_lgort-lgobe.     
    ENDIF.

    *    DATA : BEGIN OF lt_vstel OCCURS 0,
    *                       vstel LIKE tvstt-vstel,
    *                       vtext LIKE tvstt-vtext,
    *             END OF lt_vstel.
    *
    *    SELECT SINGLE vtext
    *      INTO wa_vbap-name3
    *      FROM tvstt WHERE spras = 1
    *                    AND vstel = wa_vbap-vstel."装运点描述' 8 'GT_VBAP'.     
    READ TABLE lt_vstel WITH KEY vstel =  wa_vbap-vstel BINARY SEARCH.     
    IF sy-subrc 0.       wa_vbap
    -name3 = lt_vstel-vtext.     
    ENDIF.
    *办事处
    *    DATA : BEGIN OF lt_tvgrt OCCURS 0,
    *               vkgrp LIKE tvgrt-vkgrp,
    *                bezei LIKE tvgrt-bezei,
    *       END OF lt_tvgrt.
    *
    *    SELECT SINGLE bezei
    *      INTO wa_vbap-name7
    *    FROM tvgrt
    *    WHERE vkgrp = wa_vbap-vkgrp
    *        AND spras = 1.     
    READ TABLE lt_tvgrt WITH KEY vkgrp =  wa_vbap-vkgrp BINARY SEARCH.     
    IF sy-subrc 0.       wa_vbap
    -name7 =  lt_tvgrt-bezei.     
    ENDIF.
    *定价日期
    *    DATA : BEGIN OF lt_vbkd OCCURS 0,
    *                   vbeln LIKE vbkd-vbeln,
    *                   posnr LIKE vbkd-posnr,
    *                  prsdt LIKE vbkd-prsdt,
    *                   bstkd LIKE vbkd-bstkd,
    *               END OF lt_vbkd.
    *
    *    SELECT SINGLE prsdt bstkd
    *      INTO (wa_vbap-prsdt,wa_vbak-bstkd)
    *      FROM vbkd
    *      WHERE vbeln =  wa_vbap-vbeln
    *       AND ( posnr = wa_vbap-posnr  "行
    *         OR posnr = '000000' ). "抬头
    *    READ TABLE lt_vbkd WITH KEY vbeln =  wa_vbap-vbeln posnr = wa_vbap-posnr BINARY SEARCH.
    *    IF sy-subrc = 0.
    *      wa_vbap-prsdt = lt_vbkd-prsdt.
    *    ENDIF.     
    READ TABLE lt_vbkd WITH KEY vbeln =  wa_vbap-vbeln posnr '000000' BINARY SEARCH.     
    IF sy-subrc 0.       wa_vbap
    -bstkd = lt_vbkd-bstkd.     
    ENDIF.
    *工艺描述     
    DATA BEGIN OF lt_line_txt OCCURS 0,              vbeln    
    LIKE vbap-vbeln,              posnr    
    LIKE vbap-posnr,              txt
    (100),            
    END OF lt_line_txt.
    *---------------取抬头--------------------------------------     
    DATA : ls_tdname LIKE rstxt-tdname.     
    DATA : lt_lines  LIKE TABLE OF tline WITH HEADER LINE.     
    "$ Region add by zhouliangliang on 2010.11.29     
    CLEAR: lt_lines[].     
    "$ Endregion add by zhouliangliang on 2010.11.29     

    CONCATENATE wa_vbap-vbeln wa_vbap-posnr INTO ls_tdname .     
    CALL FUNCTION 'READ_TEXT'       
    EXPORTING         
    client                  = sy-mandt         
    id                      '0001'         
    language                '1'         name                    
    = ls_tdname         object                  
    'VBBP'       
    TABLES         
    lines                   = lt_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 <> 0.
    *          MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    *                  WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.     
    ENDIF.     
    LOOP AT lt_lines.       
    CONCATENATE  wa_vbap-txt_posnr  lt_lines-tdline  INTO  wa_vbap-txt_posnr.     
    ENDLOOP.     


    MODIFY gt_vbap FROM wa_vbap.
    *添加到表头     
    CLEAR : wa_vbak.     wa_vbak
    -vbeln  =  wa_vbap-vbeln."'订单号' 8 'GT_VBAK'.     wa_vbak
    -kunnr  =  wa_vbap-kunnr ."售达方' 10 'GT_VBAK'.     wa_vbak
    -name4  =   wa_vbap-name4."送达方' 10 'GT_VBAK'.     wa_vbak
    -kunnr_s  =   wa_vbap-kunnr_s."送达方' 10 'GT_VBAK'.     wa_vbak
    -name5  =   wa_vbap-name5."送达方' 10 'GT_VBAK'.     wa_vbak
    -kunnr_j  =   wa_vbap-kunnr_j."经办人' 10 'GT_VBAK'.     wa_vbak
    -vkbur  =   wa_vbap-vkbur."销售大区' 10 'GT_VBAK'.     wa_vbak
    -vkgrp  =   wa_vbap-vkgrp."办事处' 10 'GT_VBAK'.     wa_vbak
    -name7  =   wa_vbap-name7."办事处' 10 'GT_VBAK'     wa_vbak
    -bzirk_txt  =   wa_vbap-bzirk_txt."办事处' 10 'GT_VBAK'     
    .     wa_vbak
    -telf1  =   wa_vbap-telf1."客户联系方式' 10 'VBAK'.     wa_vbak
    -erdat  =   wa_vbap-erdat."订单日期' 10 'GT_VBAK'.     wa_vbak
    -erzet  =   wa_vbap-erzet."订单时间' 10 'GT_VBAK'.     wa_vbak
    -auart  =   wa_vbap-auart."订单类型' 10 'GT_VBAK'.     wa_vbak
    -bezei  =   wa_vbap-bezei.     wa_vbak
    -street  =   wa_vbap-street."配送地址' 10 'GT_VBAK'.
    *    wa_vbak-edatu  =   wa_vbap-edatu."到货日期' 10 'GT_VBAK'.
    *    wa_vbak-ezeit  =   wa_vbap-ezeit."到货时间' 10 'GT_VBAK'.     
    IF wa_vbap-datbi < sy-datum.  "如果交货时间小于当天就置换为当天       wa_vbap
    -datbi = sy-datum.     
    ENDIF.     
    IF wa_vbak-datbi < wa_vbap-datbi.         wa_vbak
    -datbi = wa_vbap-datbi.     
    ENDIF.     
    "wa_vbak-datbi = wa_vbap-datbi.     wa_vbak
    -bstkd = wa_vbap-bstkd.     
    "--抬头文本     
    DATA: ls_hdname  LIKE rstxt-tdname.     
    CLEAR: lt_lines[] .     ls_hdname 
    = wa_vbak-vbeln .     
    CALL FUNCTION 'READ_TEXT'       
    EXPORTING         
    client                  = sy-mandt         
    id                      '0001'         
    language                '1'         name                    
    = ls_hdname         object                  
    'VBBK'
    *       ARCHIVE_HANDLE          = 0
    *       LOCAL_CAT               = ' '
    *     IMPORTING
    *       HEADER                  =       
    TABLES         
    lines                   = lt_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 0.       
    READ TABLE  lt_lines INDEX  .       wa_vbak
    -hdtxt = lt_lines-tdline .       
    CLEAR lt_lines[].     
    ENDIF.     wa_vbak

    -knumv = wa_vbap-knumv.
    *---------
    *    DATA : BEGIN OF lt_tvkbt OCCURS 0,
    *                       vkbur LIKE tvkbt-vkbur,
    *                       bezei LIKE tvkbt-bezei,
    *      END OF lt_tvkbt.
    *
    *    SELECT SINGLE bezei
    *      INTO wa_vbak-vkbur_text
    *      FROM tvkbt
    *      WHERE spras = 1
    *         AND vkbur = wa_vbak-vkbur.     
    READ TABLE lt_tvkbt WITH KEY vkbur = wa_vbak-vkbur BINARY SEARCH.     
    IF sy-subrc 0.       wa_vbak
    -vkbur_text = lt_tvkbt-bezei.     
    ENDIF.
    *--------
    *    data : BEGIN OF lt_cmgst OCCURS 0,
    *                      vbeln like vbuk-vbeln,
    *                      cmgst like vbuk-cmgst,
    *             end of lt_cmgst.
    *    SELECT SINGLE cmgst
    *      INTO wa_vbak-cmgst
    *      FROM vbuk
    *      WHERE vbeln = wa_vbak-vbeln
    *       .     
    READ TABLE lt_cmgst WITH KEY vbeln =   wa_vbak-vbeln BINARY SEARCH.     
    IF sy-subrc 0.       
    CASE lt_cmgst-cmgst.         
    WHEN ''.           wa_vbak
    -cmgst_text '未执行'.         
    WHEN 'A'.           wa_vbak
    -cmgst_text '通过'.         
    WHEN 'B'.           wa_vbak
    -cmgst_text '不通过'.         
    WHEN 'C'.           wa_vbak
    -cmgst_text '部分通过'.         
    WHEN 'D'.           wa_vbak
    -cmgst_text '批准后通过'.       
    ENDCASE.     
    ENDIF.     
    COLLECT wa_vbak INTO gt_vbak.   
    ENDLOOP.
    *信贷余额   
    DATA :  l_waerk LIKE vbak-waerk,           l_skfor 
    LIKE knkk-skfor,           l_oeikw 
    LIKE s066-oeikw,           l_olikw 
    LIKE s067-olikw,           l_ofakw 
    LIKE s067-ofakw.   


    DATA BEGIN OF lt_waerk OCCURS 0,            vbeln 
    LIKE vbak-vbeln,            kunnr 
    LIKE vbak-kunnr,            waerk 
    LIKE vbak-waerk,          
    END OF lt_waerk.   
    IF NOT gt_vbak[] IS INITIAL.     
    SELECT vbeln kunnr waerk       
    INTO TABLE lt_waerk       
    FROM vbak       
    FOR ALL ENTRIES IN gt_vbak       
    WHERE vbeln = gt_vbak-vbeln.     
    SORT lt_waerk BY vbeln.     

    DATA BEGIN OF lt_knkk OCCURS 0,              kunnr 
    LIKE knkk-kunnr,              klimk 
    LIKE knkk-klimk,              skfor 
    LIKE knkk-skfor,            
    END OF lt_knkk.     
    DATA : lt_knkk_tmp LIKE TABLE OF lt_knkk WITH HEADER LINE .     
    SELECT kunnr  a~klimk   skfor     
    INTO TABLE lt_knkk_tmp     
    FROM knkk AS a       INNER 
    JOIN t014 AS b ON a~kkber = b~kkber       
    FOR ALL ENTRIES IN lt_waerk     
    WHERE kunnr = lt_waerk-kunnr AND a~kkber '1000' AND waers = lt_waerk-waerk       
    .     
    SORT lt_knkk_tmp BY kunnr ASCENDING.     
    CLEAR : lt_knkk,lt_knkk[].     
    LOOP AT  lt_knkk_tmp.       
    MOVE-CORRESPONDING lt_knkk_tmp TO lt_knkk.       
    COLLECT lt_knkk.     
    ENDLOOP.     
    SORT lt_knkk BY kunnr ASCENDING.     
    DATA BEGIN OF lt_s066 OCCURS 0,              kunnr 
    LIKE s066-knkli,              oeikw 
    LIKE s066-oeikw,            
    END OF lt_s066.     
    DATA : lt_s066_tmp LIKE TABLE OF lt_s066 WITH HEADER LINE .     

    SELECT knkli AS kunnr  oeikw       
    INTO TABLE lt_s066_tmp       
    FROM s066     
    FOR ALL ENTRIES IN lt_waerk   
    WHERE knkli = lt_waerk-kunnr AND kkber '1000' AND cmwae = lt_waerk-waerk       
    .     
    CLEAR : lt_s066,lt_s066[].     
    LOOP AT  lt_s066_tmp.       
    MOVE-CORRESPONDING lt_s066_tmp TO lt_s066.       
    COLLECT lt_s066.     
    ENDLOOP.     

    DATA BEGIN OF lt_s067 OCCURS 0,              kunnr 
    LIKE s066-knkli,              olikw 
    LIKE s067-olikw,              ofakw 
    LIKE s067-ofakw,            
    END OF lt_s067.     
    DATA : lt_s067_tmp LIKE TABLE OF lt_s067 WITH HEADER LINE .     

    SELECT knkli AS kunnr olikw  ofakw       
    INTO TABLE lt_s067_tmp       
    FROM s067       
    FOR ALL ENTRIES IN lt_waerk       
    WHERE   knkli = lt_waerk-kunnr AND kkber '1000' AND cmwae =   lt_waerk-waerk.     
    CLEAR : lt_s067,lt_s067[].     
    LOOP AT  lt_s067_tmp.       
    MOVE-CORRESPONDING lt_s067_tmp TO lt_s067.       
    COLLECT lt_s067.     
    ENDLOOP.   

    ENDIF.   
    LOOP AT gt_vbak INTO wa_vbak.
    ** KNKK-KLIMK – ( KNKK-SKFOR + S067-OLIKW + S067-OFAKW + SUM(S066-OEIKW) )
    *    SELECT SINGLE waerk
    *      INTO l_waerk
    *      FROM vbak WHERE vbeln = wa_vbak-vbeln.

    *--取折扣总额     
    LOOP AT git_konv.       
    IF wa_vbak-knumv = git_konv-knumv.         wa_vbak
    -zh_kwert = wa_vbak-zh_kwert + git_konv-kwert.         
    CLEAR git_konv.       
    ENDIF.     
    ENDLOOP.     

    READ TABLE lt_tvakt WITH KEY auart = wa_vbak-auart BINARY SEARCH.     
    IF sy-subrc 0.       wa_vbak
    -bezei = lt_tvakt-bezei.     
    ENDIF.     


    READ TABLE lt_waerk WITH KEY vbeln = wa_vbak-vbeln BINARY SEARCH.     
    IF sy-subrc 0.
    * KNKK-KLIMK – ( KNKK-SKFOR + S067-OLIKW + S067-OFAKW + SUM(S066-OEIKW) )
    *      DATA : BEGIN OF lt_knkk OCCURS 0,
    *                        kunnr LIKE knkk-kunnr,
    *                        klimk LIKE knkk-klimk,
    *                        skfor LIKE knkk-skfor,
    *               END OF lt_knkk.
    *
    *      SELECT SUM( a~klimk ) SUM( skfor )
    *      INTO (wa_vbak-klimk,l_skfor)
    *      FROM knkk AS a
    *        INNER JOIN t014 AS b ON a~kkber = b~kkber
    *      WHERE kunnr = wa_vbak-kunnr AND a~kkber = '1000' AND waers = l_waerk.       

    READ TABLE lt_knkk WITH KEY kunnr = lt_waerk-kunnr BINARY SEARCH.       
    IF sy-subrc 0.         wa_vbak
    -klimk = lt_knkk-klimk.         l_skfor 
    = lt_knkk-skfor.       
    ELSE.         
    CLEAR: wa_vbak-klimk,l_skfor.       
    ENDIF.

    *      DATA : BEGIN OF lt_s066 OCCURS 0,
    *                         kunnr LIKE s066-knkli,
    *                         oeikw LIKE s066-oeikw,
    *        END OF lt_s066.
    *
    *      SELECT SUM( oeikw )
    *        INTO l_oeikw
    *        FROM s066 WHERE   knkli = wa_vbak-kunnr AND kkber = '1000' AND cmwae =  l_waerk.       

    READ TABLE lt_s066 WITH KEY kunnr = wa_vbak-kunnr BINARY SEARCH.       
    IF sy-subrc 0.         l_oeikw 
    = lt_s066-oeikw.       
    ELSE.         
    CLEAR: l_oeikw.       
    ENDIF.

    *      SELECT SUM( olikw ) SUM( ofakw )
    *        INTO (l_olikw,l_ofakw)
    *        FROM s067 WHERE   knkli = wa_vbak-kunnr AND kkber = '1000' AND cmwae =  l_waerk.       

    READ TABLE lt_s067 WITH KEY kunnr = wa_vbak-kunnr BINARY SEARCH.       
    IF sy-subrc 0.         l_olikw 
    = lt_s067-olikw.         l_ofakw 
    = lt_s067-ofakw.       
    ELSE.         
    CLEAR: l_olikw,l_ofakw.       
    ENDIF.       wa_vbak

    -klimk = wa_vbak-klimk (  l_skfor + l_olikw + l_ofakw + l_oeikw ).     
    ENDIF.
    *审批文本     
    DATA : anw_stat_existing TYPE  xfeld,            e_stsma           
    LIKE  jsto-stsma,            
    line              LIKE  bsvx-sttxt,            user_line         
    LIKE  bsvx-sttxt,            stonr             
    LIKE  tj30-stonr.     
    DATA : objnr  LIKE  jest-objnr.     
    CLEAR : objnr.     
    CONCATENATE 'VB'  wa_vbak-vbeln '000000' INTO objnr.
    *VB0010000005000000     
    CALL FUNCTION 'STATUS_TEXT_EDIT'       
    EXPORTING         
    client            = sy-mandt         flg_user_stat     
    'X'         objnr             
    = objnr         spras             
    '1'       
    IMPORTING         anw_stat_existing 
    = anw_stat_existing         e_stsma           
    = e_stsma         
    line              line         user_line         
    = user_line         stonr             
    = stonr       
    EXCEPTIONS         object_not_found  
    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.     
    ELSE.       
    SELECT SINGLE txt30         
    INTO wa_vbak-txt30         
    FROM tj30t         
    WHERE stsma = e_stsma            
    AND spras '1'            
    AND txt04 = user_line.     
    ENDIF.     
    MODIFY gt_vbak FROM wa_vbak.   
    ENDLOOP.
    ENDFORM.                    " FRM_READ_VBAP

    *&---------------------------------------------------------------------*
    *&      Form  bdc_dynpro
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *      -->PROGRAM    text
    *      -->DYNPRO     text
    *----------------------------------------------------------------------*
    FORM bdc_dynpro USING program dynpro.   
    CLEAR bdcdata.   bdcdata
    -program  program.   bdcdata
    -dynpro   dynpro.   bdcdata
    -dynbegin 'X'.   
    APPEND bdcdata.
    ENDFORM.                    "BDC_DYNPRO
    *********************************************
    FORM bdc_field USING fnam fval.   
    CLEAR bdcdata.   bdcdata
    -fnam = fnam.   bdcdata
    -fval = fval.   
    APPEND bdcdata.
    ENDFORM.                    "BDC_FIELD

    *&---------------------------------------------------------------------*
    *&      Form  CALL_TRANSACTION_form
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    FORM call_transaction_form USING tcode.   
    DATA : ls_message_text_output(255).   
    CLEAR : gt_msg,gt_msg[].   
    CALL TRANSACTION tcode        
    USING   bdcdata        
    MODE    'E'  "错误时弹出屏幕        
    UPDATE  'S'        MESSAGES 
    INTO gt_msg.   break
    :xh003.   
    READ TABLE gt_msg WITH KEY msgtyp 'S'  msgnr '100'.   
    IF sy-subrc 0.     
    CLEAR : ls_message_text_output.     
    CALL FUNCTION 'MESSAGE_TEXT_BUILD'       
    EXPORTING         msgid               
    = gt_msg-msgid         msgnr               
    = gt_msg-msgnr         msgv1               
    = gt_msg-msgv1         msgv2               
    = gt_msg-msgv2         msgv3               
    = gt_msg-msgv3         msgv4               
    = gt_msg-msgv4       
    IMPORTING         message_text_output 
    = ls_message_text_output.
    *    MESSAGE ls_message_text_output TYPE 'S'.   
    ELSE.     
    LOOP AT gt_msg.       
    CLEAR : ls_message_text_output.       
    CALL FUNCTION 'MESSAGE_TEXT_BUILD'         
    EXPORTING           msgid               
    = gt_msg-msgid           msgnr               
    = gt_msg-msgnr           msgv1               
    = gt_msg-msgv1           msgv2               
    = gt_msg-msgv2           msgv3               
    = gt_msg-msgv3           msgv4               
    = gt_msg-msgv4         
    IMPORTING           message_text_output 
    = ls_message_text_output.       
    MESSAGE ls_message_text_output TYPE 'W'.     
    ENDLOOP.   
    ENDIF.   
    CLEAR bdcdata.CLEAR bdcdata[].

    ENDFORM.                    "CALL_TRANSACTION_form
    *&---------------------------------------------------------------------*
    *&      Form  FRM_DISPLAY_DATA_D
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM frm_display_data_d .   gs_layout
    -box_fieldname 'CK'.   gs_layout
    -box_tabname 'gt_vbap_sel'.   gs_layout

    -colwidth_optimize 'X'.   

    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'     
    EXPORTING       i_callback_program       
    = sy-repid       i_callback_pf_status_set 
    'SET_STATUS'       i_callback_user_command  
    'USER_COMMAND'       is_layout                
    = gs_layout       it_fieldcat              
    = gt_fieldcat_d[]       i_save                   
    'A'     
    TABLES       t_outtab                 
    = gt_vbap_sel[]     
    EXCEPTIONS       program_error            
    1       
    OTHERS                   2.
    ENDFORM.                    " FRM_DISPLAY_DATA_D
    *&---------------------------------------------------------------------*
    *&      Form  FRM_READ_ZTSD003
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM frm_read_ztsd003 .   
    SELECT *     
    INTO CORRESPONDING FIELDS OF TABLE gt_ztsd003     
    FROM ztsd024     
    WHERE vbeln_vl IN p_vl_s          
    AND vbeln IN p_vbn_s          
    AND erdat IN p_erdat          
    AND ernam IN p_ernam.   
    LOOP AT gt_ztsd003 INTO wa_ztsd003.
    * SO INFO     
    SELECT SINGLE auart kunnr erdat  erzet vkgrp     
    INTO (wa_ztsd003-auart , wa_ztsd003-kunnr,              wa_ztsd003
    -erdat_c ,  wa_ztsd003-erzet_c,              wa_ztsd003
    -vkgrp)       
    FROM vbak WHERE vbeln =  wa_ztsd003-vbeln       
    .     
    IF sy-subrc <> 0.       
    DELETE gt_ztsd003 .       
    CONTINUE.     
    ENDIF.     
    SELECT  SINGLE bezei       
    INTO wa_ztsd003-bezei       
    FROM tvakt       
    WHERE auart = wa_ztsd003-auart       
    AND spras '1'
    .
    *售达方     
    SELECT SINGLE kunnr adrnr       
    INTO (wa_ztsd003-kunnr , wa_ztsd003-adrnr)       
    FROM vbpa       
    WHERE   vbeln = wa_ztsd003-vbeln           
    AND posnr '000000'           
    AND parvw 'AG'.     
    IF NOT wa_ztsd003-adrnr IS INITIAL.       
    SELECT SINGLE name1 INTO wa_ztsd003-name4      
    FROM   adrc         
    WHERE addrnumber = wa_ztsd003-adrnr.     
    ENDIF.

    *送达方     
    SELECT SINGLE kunnr adrnr       
    INTO (wa_ztsd003-kunnr_s , wa_ztsd003-adrnr)       
    FROM vbpa       
    WHERE   vbeln = wa_ztsd003-vbeln           
    AND posnr '000000'           
    AND parvw 'WE'                     
    .     
    IF NOT wa_ztsd003-adrnr IS INITIAL.       
    SELECT SINGLE name1 INTO wa_ztsd003-name5      
    FROM   adrc         
    WHERE addrnumber = wa_ztsd003-adrnr.     
    ENDIF.
    *办事处     
    SELECT SINGLE bezei       
    INTO wa_ztsd003-name7     
    FROM tvgrt     
    WHERE vkgrp = wa_ztsd003-vkgrp         
    AND spras 1.


    * user name     
    SELECT SINGLE name_text       
    INTO wa_ztsd003-name_text       
    FROM v_username       
    WHERE bname = wa_ztsd003-ernam.     
    CLEAR : wa_ztsd003-posnr,wa_ztsd003-posnr_vl.     
    MODIFY gt_ztsd003 FROM wa_ztsd003.   
    ENDLOOP.   

    SORT gt_ztsd003 BY erdat DESCENDING                                 erzet 
    DESCENDING                                 ernam 
    DESCENDING                                 vbeln_vl 
    DESCENDING                                  posnr_vl 
    ASCENDING                                  
    .   
    DELETE ADJACENT DUPLICATES FROM gt_ztsd003.   
    DATA : l_vkorg LIKE vbak-vkorg.   break
    : xh003.   
    DATA : l_spart_vbak LIKE vbak-spart,          l_spart_vbap 
    LIKE vbap-spart.   
    LOOP AT gt_ztsd003 INTO wa_ztsd003.     
    CLEAR : l_vkorg.     
    SELECT SINGLE vkorg a~spart b~spart       
    INTO  (l_vkorg,l_spart_vbak,l_spart_vbap)       
    FROM vbak AS a       INNER 
    JOIN vbap AS b       
    ON a~vbeln = b~vbeln       
    WHERE a~vbeln = wa_ztsd003-vbeln        
    AND a~vkorg IN vkorg        
    AND a~vtweg IN vtweg        
    "AND a~spart IN spart        
    "AND b~spart IN spart2        
    AND werks IN werks        
    AND vkbur IN vkbur        
    AND vkgrp IN vkgrp             

    .     
    IF l_vkorg IS INITIAL.       
    DELETE gt_ztsd003.     
    ELSE.       
    AUTHORITY-CHECK OBJECT 'V_VBAK_VKO'                                            
    ID 'VKORG' DUMMY                                            
    ID 'VTWEG' DUMMY                                            
    ID 'SPART' FIELD l_spart_vbap                                            
    ID 'ACTVT' DUMMY.       
    IF sy-subrc <> 0"抬头         
    DELETE gt_ztsd003.       
    ENDIF.     
    ENDIF.   
    ENDLOOP.   break
    :xh003.
    ENDFORM.                    " FRM_READ_ZTSD003

    *&---------------------------------------------------------------------*
    *&      Form  frm_build_fieldcat_s
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    FORM frm_build_fieldcat_s .   
    CLEAR : gt_fieldcat_s,gt_fieldcat_s[].   
    DEFINE alv_head.     
    clear gt_fieldcat_s.     
    if &1 'CK'.       gt_fieldcat_s
    -checkbox 'X'.       gt_fieldcat_s
    -edit 'X'.     
    else.       gt_fieldcat_s
    -edit ''.     
    endif.     
    if &1 'VBELN_VL' or &1 'VBELN'.       gt_fieldcat_s
    -hotspot 'X'.     
    endif.     gt_fieldcat_s
    -fieldname = &1.     gt_fieldcat_s
    -tabname = &4.     gt_fieldcat_s
    -seltext_s = &2 .     gt_fieldcat_s
    -seltext_m = &2 .     gt_fieldcat_s
    -seltext_l = &2 .     gt_fieldcat_s
    -outputlen = &3.     gt_fieldcat_s
    -just  = &5.     gt_fieldcat
    -key   = &6.     gt_fieldcat_s
    -no_zero 'X'.
    *      gt_fieldcat-decimals_out = 2.     
    if &1 'DATBI'.       gt_fieldcat_s
    -edit 'X'.     
    endif.     
    append gt_fieldcat_s.   
    END-OF-DEFINITION.   alv_head 

    'CK' 'SEL' 'GT_ZTSD003'  'L' ''.   alv_head 
    'VBELN_VL' '交货单' 'GT_ZTSD003'  'L'  ''.
    *  alv_head 'POSNR_VL' '交货单行项目' 8 'GT_ZTSD003'  'L'.   alv_head 
    'VBELN' '销售单' 'GT_ZTSD003' 'L' ''.
    *  alv_head 'POSNR' '行项目' 6 'GT_ZTSD003' 'L' ''.   alv_head 

    'NAME4' '售达方名称' 16 'GT_VBAK'  'L' ''.
    *  alv_head 'KUNNR_S' '送达方' 10 'GT_VBAK'.   alv_head 
    'NAME5' '送达方名称' 16 'GT_VBAK' 'L' ''.
    *  alv_head 'KUNNR_J' '经办人' 10 'GT_VBAK'.
    *  alv_head 'VKBUR' '销售大区' 10 'GT_VBAK'.
    *  alv_head 'VKGRP' '办事处' 10 'GT_VBAK'.   alv_head 
    'NAME7' '办事处' 10 'GT_VBAK' 'L' ''.
    *  alv_head 'TELF1' '客户联系方式' 10 'GT_VBAK'.   alv_head 
    'ERDAT_C' '订单日期' 10 'GT_VBAK' 'L' ''.   alv_head 
    'ERZET_C' '订单时间' 'GT_VBAK' 'L' ''.
    *  alv_head 'AUART' '订单类型' 10 'GT_VBAK' 'L'.   alv_head 
    'BEZEI' '订单描述' 'GT_VBAK' 'L' ''.   alv_head 

    'ERDAT' '转交日期' 10 'GT_ZTSD003' 'L' ''.   alv_head 
    'ERZET' '转交时间' 'GT_ZTSD003' 'L' ''.
    *  alv_head 'ERNAM' '审核人' 10 'GT_ZTSD003' 'L'.   alv_head 
    'NAME_TEXT' '转交操作员' 10 'GT_ZTSD003' 'L' ''.

    ENDFORM.                    " frm_build_fieldcat

    *&---------------------------------------------------------------------*
    *&      Form  frm_display_data
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    FORM frm_display_data_s .   gs_layout
    -box_fieldname 'CK'.   gs_layout
    -box_tabname 'GT_ZTSD003'.   gs_layout

    -colwidth_optimize 'X'.   

    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'     
    EXPORTING       i_callback_program       
    = sy-repid       i_callback_pf_status_set 
    'SET_STATUS_S'       i_callback_user_command  
    'USER_COMMAND_S'       is_layout                
    = gs_layout       it_fieldcat              
    = gt_fieldcat_s[]       i_save                   
    'A'     
    TABLES       t_outtab                 
    = gt_ztsd003[]     
    EXCEPTIONS       program_error            
    1       
    OTHERS                   2.
    ENDFORM.                    " frm_display_data

    *&---------------------------------------------------------------------*
    *&      Form  user_command_S
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *      -->RF_UCOMM   text
    *      -->RS         text
    *----------------------------------------------------------------------*
    FORM user_command_s   USING     rf_ucomm  LIKE sy-ucomm                                                  rs        
    TYPE slis_selfield.   

    DATA: lr_grid TYPE REF TO cl_gui_alv_grid.   
    DATA : ls_mkpf TYPE  emkpf,          lt_mesg 
    TYPE TABLE OF mesg.   
    CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'     
    IMPORTING       e_grid 
    = lr_grid.   
    CALL METHOD lr_grid->check_changed_data.   rs

    -refresh 'X'.   
    CASE rf_ucomm.     
    WHEN '&IC1'.       break
    : xh003.       
    CASE rs-fieldname.         
    WHEN 'VBELN_VL'.           
    SET PARAMETER ID 'VL' FIELD rs-value.           
    CALL TRANSACTION 'VL03N' AND SKIP FIRST SCREEN.         
    WHEN 'VBELN'.           
    SET PARAMETER ID 'AUN' FIELD rs-value.           
    CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.       
    ENDCASE.     
    WHEN '&VL09'" 冲销       
    AUTHORITY-CHECK OBJECT 'Z_SD_DNDEL'                               
    ID 'ACTVT'  FIELD '06'.       
    IF sy-subrc <> 0.         
    MESSAGE '权限不足,不能删除!' TYPE 'E'.       
    ENDIF.       
    DATA : l_vbeln_vl TYPE vbeln_vl.
    *      BREAK-POINT.       
    CLEAR : bdcdata[],bdcdata.       
    LOOP AT gt_ztsd003 INTO wa_ztsd003 WHERE ck 'X'..
    *冲销
    *        CALL FUNCTION 'WS_REVERSE_GOODS_ISSUE'
    *          EXPORTING
    *            i_vbeln                   = wa_ztsd003-vbeln_vl
    *            i_budat                   = sy-datum
    *            i_vbtyp                   = 'J'
    *          IMPORTING
    *            es_emkpf                  = ls_mkpf
    *          TABLES
    *            t_mesg                    = lt_mesg
    *          EXCEPTIONS
    *            error_reverse_goods_issue = 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.
    *删除         
    PERFORM bdc_dynpro USING 'SAPMV50A'  '4004'.         
    PERFORM bdc_field       USING 'BDC_CURSOR'  'LIKP-VBELN'.         
    PERFORM bdc_field       USING 'BDC_OKCODE'  '/00'.         
    PERFORM bdc_field       USING 'LIKP-VBELN'  wa_ztsd003-vbeln_vl.         
    PERFORM bdc_dynpro USING 'SAPMV50A'  '1000'.         
    PERFORM bdc_field       USING 'BDC_OKCODE'  '/ELOES_T'.         

    PERFORM call_transaction_form_vl02n USING 'VL02N' ."CHANGING l_vbeln_vl.       

    ENDLOOP.   
    ENDCASE.   
    CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'     
    IMPORTING       e_grid 
    = lr_grid.   
    CALL METHOD lr_grid->check_changed_data.   rs

    -refresh 'X'.

    ENDFORM.                    "user_command_S

    *&---------------------------------------------------------------------*
    *&      Form  set_status_s
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *      -->RT_EXTAB   text
    *----------------------------------------------------------------------*
    FORM set_status_s  USING     rt_extab  TYPE slis_t_extab.   
    SET PF-STATUS 'STANDARD_S'    EXCLUDING rt_extab .
    ENDFORM.                    "set_status


    *&---------------------------------------------------------------------*
    *&      Form  call_transaction_form_vl01n
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *      -->TCODE      text
    *----------------------------------------------------------------------*
    FORM call_transaction_form_vl01n USING tcode CHANGING p_delivery LIKE likp-vbeln.   
    DATA : ls_message_text_output(255).   
    CLEAR : gt_msg,gt_msg[].   
    DATA: l_mode.   l_mode 
    'E'"错误时弹出屏幕   
    CALL TRANSACTION tcode        
    USING   bdcdata        
    MODE    l_mode  "错误时弹出屏幕        
    UPDATE  'S'        MESSAGES 
    INTO gt_msg.   break
    :xh003.   
    READ TABLE gt_msg WITH KEY msgtyp 'S'  msgnr '311'.   
    IF sy-subrc 0.     
    CLEAR : ls_message_text_output.     
    CALL FUNCTION 'MESSAGE_TEXT_BUILD'       
    EXPORTING         msgid               
    = gt_msg-msgid         msgnr               
    = gt_msg-msgnr         msgv1               
    = gt_msg-msgv1         msgv2               
    = gt_msg-msgv2         msgv3               
    = gt_msg-msgv3         msgv4               
    = gt_msg-msgv4       
    IMPORTING         message_text_output 
    = ls_message_text_output.     p_delivery  
    = gt_msg-msgv2.     
    MESSAGE ls_message_text_output TYPE 'S'.   
    ELSE.     
    LOOP AT gt_msg.       
    CLEAR : ls_message_text_output.       
    CALL FUNCTION 'MESSAGE_TEXT_BUILD'         
    EXPORTING           msgid               
    = gt_msg-msgid           msgnr               
    = gt_msg-msgnr           msgv1               
    = gt_msg-msgv1           msgv2               
    = gt_msg-msgv2           msgv3               
    = gt_msg-msgv3           msgv4               
    = gt_msg-msgv4         
    IMPORTING           message_text_output 
    = ls_message_text_output.       
    MESSAGE ls_message_text_output TYPE 'W'.     
    ENDLOOP.   
    ENDIF.   
    CLEAR bdcdata.CLEAR bdcdata[].

    ENDFORM.                    "CALL_TRANSACTION_form

    *&---------------------------------------------------------------------*
    *&      Form  call_transaction_form_vl02n
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *      -->TCODE      text
    *----------------------------------------------------------------------*
    FORM call_transaction_form_vl02n USING tcode.   
    DATA : ls_message_text_output(255).   
    CLEAR : gt_msg,gt_msg[].   
    CALL TRANSACTION tcode        
    USING   bdcdata        
    MODE    'E'  "错误时弹出屏幕        
    UPDATE  'S'        MESSAGES 
    INTO gt_msg.   break
    :xh003.   
    READ TABLE gt_msg WITH KEY msgtyp 'S'  msgnr '310'.   
    IF sy-subrc 0.
    *删除记录表     
    DELETE FROM ztsd024 WHERE vbeln_vl =  wa_ztsd003-vbeln_vl.     
    COMMIT WORK.     
    DELETE gt_ztsd003 WHERE vbeln_vl =  wa_ztsd003-vbeln_vl.     
    CLEAR : ls_message_text_output.     
    CALL FUNCTION 'MESSAGE_TEXT_BUILD'       
    EXPORTING         msgid               
    = gt_msg-msgid         msgnr               
    = gt_msg-msgnr         msgv1               
    = gt_msg-msgv1         msgv2               
    = gt_msg-msgv2         msgv3               
    = gt_msg-msgv3         msgv4               
    = gt_msg-msgv4       
    IMPORTING         message_text_output 
    = ls_message_text_output.
    *    MESSAGE ls_message_text_output TYPE 'S'.   
    ELSE.     
    LOOP AT gt_msg.       
    CLEAR : ls_message_text_output.       
    CALL FUNCTION 'MESSAGE_TEXT_BUILD'         
    EXPORTING           msgid               
    = gt_msg-msgid           msgnr               
    = gt_msg-msgnr           msgv1               
    = gt_msg-msgv1           msgv2               
    = gt_msg-msgv2           msgv3               
    = gt_msg-msgv3           msgv4               
    = gt_msg-msgv4         
    IMPORTING           message_text_output 
    = ls_message_text_output.       
    MESSAGE ls_message_text_output TYPE 'W'.     
    ENDLOOP.   
    ENDIF.   
    CLEAR bdcdata.CLEAR bdcdata[].

    ENDFORM.                    "CALL_TRANSACTION_form

    INITIALIZATION.

    AT SELECTION-SCREEN.   
    DATA : l_where(20).   
    RANGES : lt_werks FOR marc-werks ,                  lt_vkorg 
    FOR vbak-vkorg .
    *                 lt_spart FOR vbak-spart.   
    CLEAR : lt_werks,lt_werks[],lt_vkorg,lt_vkorg[].   
    IF vkorg[] IS INITIAL AND werks[] IS INITIAL.     
    MESSAGE '销售组织和工厂必须选取一项!' TYPE 'E'.   
    ENDIF.

    *工厂   
    SELECT werks AS low     
    INTO CORRESPONDING FIELDS OF TABLE lt_werks     
    FROM t001w     
    WHERE werks IN werks.

    *销售组织   
    SELECT vkorg AS low     
    INTO CORRESPONDING FIELDS OF TABLE lt_vkorg     
    FROM tvko     
    WHERE vkorg  IN vkorg.

    *工厂
    *  IF NOT werks[] IS INITIAL.
    *    LOOP AT lt_werks.
    *      AUTHORITY-CHECK OBJECT 'Z_SD_WERKS'
    *                                           ID 'WERKS' FIELD lt_werks-low.
    *      IF sy-subrc <> 0.
    *        CLEAR :  l_where.
    *        CONCATENATE '工厂:'   lt_werks-low ',访问权限不足!' INTO  l_where.
    *        MESSAGE  l_where TYPE 'E'.
    *      ENDIF.
    *    ENDLOOP.
    *  ENDIF.   

    IF NOT vkorg[] IS INITIAL .     
    LOOP AT lt_vkorg.       
    AUTHORITY-CHECK OBJECT 'V_VBAK_VKO'                                            
    ID 'VKORG' FIELD lt_vkorg-low                                            
    ID 'VTWEG' DUMMY                                            
    ID 'SPART' DUMMY                                            
    ID 'ACTVT' DUMMY.       
    IF sy-subrc <> 0.         
    CLEAR :  l_where.         
    CONCATENATE '销售组织:'   lt_vkorg-low ',访问权限不足!' INTO  l_where.         
    MESSAGE  l_where TYPE 'E'.       
    ENDIF.     
    ENDLOOP.   
    ENDIF.


    START-OF-SELECTION.
    *产品组(抬头)   
    SELECT spart AS low     
    INTO CORRESPONDING FIELDS OF TABLE lt_spart     
    FROM tspa.   
    "WHERE spart IN spart.

    *产品组(抬头)   
    SELECT spart AS low     
    INTO CORRESPONDING FIELDS OF TABLE lt_spart2     
    FROM tspa.   
    "WHERE spart IN spart2.   

    IF ck_audit ''.
    *读取数据     
    PERFORM frm_read_vbap.
    *ALV显示     
    IF NOT gt_vbak[] IS INITIAL.       
    PERFORM frm_build_fieldcat .       
    PERFORM frm_display_data.     
    ENDIF.   
    ELSE"审核     
    PERFORM frm_read_ztsd003.     
    IF NOT gt_ztsd003[] IS INITIAL.       
    PERFORM frm_build_fieldcat_s .       
    PERFORM frm_display_data_s.     
    ENDIF.   
    ENDIF.

  • 相关阅读:
    Outlook 邮件助手
    飞花令
    青蛙跳台阶
    如何提问,找到去说谎国的路
    如何计时一个小时十五分钟
    旋转数组的最小元素
    谁养鱼?
    小龙赚了多少?
    下一行是什么?
    5 = ?
  • 原文地址:https://www.cnblogs.com/eagle-dtq/p/5356996.html
Copyright © 2020-2023  润新知