zoukankan      html  css  js  c++  java
  • ABAP 承运路单

    *&---------------------------------------------------------------------*
    *& Report  ZSDR010
    *&
    *&---------------------------------------------------------------------*
    *&程序名称:承运路单
    *&事物代码:ZSD030
    *&导入模板:无
    *&作者:
    *&时间:2016/3/2
    *&更新时间:2016/3/2
    *&--------------------------------------------------------------------

    REPORT zsdr010.
    INCLUDE zsdr010_inc.

    TYPE-POOLS: slis.
    TABLES:likp, kna1, lips ,vttp ,vttk.


    TYPESBEGIN OF ty_all,
             tknum      LIKE  vttk-tknum"运单号
             tplst      LIKE  vttk-tplst"装运点
             tdlnr      LIKE  vttk-tdlnr"物流公司
             erdat      LIKE  vttk-erdat"装运日期
             route      LIKE  vttk-route"路线
             distz      LIKE  vttk-distz"里程
             add01      LIKE  vttk-add01"车主、车号
             add02      LIKE  vttk-add02"司机
             bfart      LIKE  vttk-bfart"车型
             ernam      LIKE  vttk-ernam"创建者
             shtyp      LIKE  vttk-shtyp"装运类型
             btgew_sum  LIKE likp-btgew"总重量

             tpnum      LIKE  vttp-tpnum"项目号
             vbeln      LIKE  vttp-vbeln"交货单号
             kunnr      LIKE  likp-kunnr"客户代码
             name1      LIKE  kna1-name1"客户名称
             btgew      LIKE  likp-btgew"重量
             gewei      LIKE  likp-gewei"重量单位
             volum      LIKE  likp-volum"体积
             voleh      LIKE  likp-voleh"体积单位


             beizhu(20TYPE "备注
           END OF ty_all.

    TYPES:BEGIN OF ty_header,
            tknum      LIKE  vttk-tknum"运单号
            tplst      LIKE  vttk-tplst"装运点
            tplst_text LIKE  ttdst-bezei,"装运点描述
            tdlnr      LIKE  vttk-tdlnr"物流公司
            tdlnr_text LIKE  lfa1-name1"物流公司描述
            erdat      LIKE  vttk-erdat"装运日期
            route      LIKE  vttk-route"路线
            route_text LIKE  tvrot-bezei,"路线描述
            distz      LIKE  vttk-distz"里程
            add01      LIKE  vttk-add01"车主、车号
            add02      LIKE  vttk-add02"司机
            bfart      LIKE  vttk-bfart"车型
            ernam      LIKE  vttk-ernam"创建者
            shtyp      LIKE  vttk-shtyp"装运类型
            btgew_sum  LIKE likp-btgew"总重量
            beizhu(20TYPE "备注
          END OF ty_header.

    TYPES:BEGIN OF ty_items,
            tknum      LIKE  vttk-tknum"运单号
            tpnum      LIKE  vttp-tpnum"项目号
            vbeln      LIKE  vttp-vbeln"交货单号
            kunnr      LIKE  likp-kunnr"客户代码
            name1      LIKE  kna1-name1"客户名称
            btgew      LIKE  likp-btgew"重量
            gewei      LIKE  likp-gewei"重量单位
            volum      LIKE  likp-volum"体积
            voleh      LIKE  likp-voleh"体积单位


            beizhu(20TYPE "备注
          END OF ty_items.

    DATA:wa_all TYPE ty_all,
         gt_all TYPE ty_all OCCURS 0.

    DATA:wa_header TYPE ty_header,
         gt_header TYPE ty_header OCCURS 0.

    DATA:wa_items TYPE ty_items,
         gt_items TYPE ty_items OCCURS 0.


    *定义传入到smartforms的变量开始
    DATA:fm_name TYPE rs38l_fnam.
    DATA:itemsname(32TYPE c.
    DATA:headername(32TYPE c.
    *定义传入到smartforms的变量结束


    *定义存储ALV向smartforms传入数据的内表开始
    DATA:gt_header_temp TYPE ty_header OCCURS 0.
    DATA:gt_items_temp TYPE ty_items OCCURS 0.
    DATA:gt_all_temp TYPE ty_all OCCURS 0.
    *定义存储ALV向smartforms传入数据的内表结束

    *ALV显示头数据开始
    DATA:gt_header_show TYPE ty_header OCCURS 0.
    DATA:gt_items_show TYPE ty_items OCCURS 0.
    *ALV显示头数据结束


    "控制smartforms参数声明开始
    DATA :control_parameters TYPE ssfctrlop.
    "控制smartforms参数声明结束


    DATA: gs_fcat TYPE lvc_s_fcat,
          gt_fcat TYPE lvc_t_fcat,
          gs_layo TYPE lvc_s_layo,
          gs_grid TYPE lvc_s_glay.
    DATA: gt_event      TYPE slis_t_event WITH HEADER LINE,
          gt_event_exit TYPE slis_t_event_exit WITH HEADER LINE.

    DATA:  ref_grid TYPE REF TO cl_gui_alv_grid .

    START-OF-SELECTION.
      SELECT-OPTIONS: p_tknum    FOR vttk-tknum  "运单号
                      p_shtyp    FOR vttk-shtyp,"装运类型
                      p_tdlnr    FOR vttk-tdlnr   ,"服务代理
                      p_route    FOR vttk-route,"装运线路
                      p_ernam    FOR vttk-ernam,"创建者
                      p_erdat    FOR vttk-erdat  "装运日期
      "P_TPLST   FOR VTTK-TPLST ,
      "P_ERNAM   FOR VTTK-ERNAM ,
      "P_ROUTE   FOR VTTK-ROUTE .
      PERFORM frm_get_data.
      PERFORM display_data .

    END-OF-SELECTION.

      "当屏幕失去焦点时,自动刷新声明类开始
    CLASS lcl_event_receiver DEFINITION.
      PUBLIC SECTION.
        METHODS handle_modify
                      FOR EVENT data_changed_finished OF cl_gui_alv_grid
          IMPORTING e_modified et_good_cells.
    ENDCLASS.

    CLASS lcl_event_receiver IMPLEMENTATION.
      METHOD handle_modify.
    *    PERFORM refresh.

        DATA stbl TYPE lvc_s_stbl.

        stbl-row 'X'." 基于行的稳定刷新
        stbl-col 'X'." 基于列稳定刷新
        CALL METHOD ref_grid->refresh_table_display
          EXPORTING
            is_stable = stbl.
      ENDMETHOD.                    "HANDLE_MODIFY
    ENDCLASS.                    "LCL_EVENT_RECEIVER IMPLEMENTATION
    DATA gt_event_receiver TYPE REF TO lcl_event_receiver .
    "当屏幕失去焦点时,自动刷新声明类结束

    FORM frm_get_data .
      TYPESBEGIN OF ty_tknum ,"存储动态显示列的内表结构
               tknum LIKE  vttk-tknum "运单号
               btgew LIKE  likp-btgew"一个运单对应的重量
             END OF ty_tknum.

      DATA : hs_tknum TYPE HASHED TABLE OF ty_tknum WITH UNIQUE KEY tknum WITH HEADER LINE .

      SELECT vk~tknum vk~tplst vk~tdlnr vk~erdat vk~route vk~distz
             vk~add01 vk~add02 vk~bfart vk~ernam vk~shtyp
             vp~tpnum vp~vbeln lp~kunnr k~name1  lp~btgew lp~gewei
             lp~volum lp~voleh
        FROM vttk AS vk
        INNER JOIN vttp AS vp
        ON vk~tknum = vp~tknum
        INNER JOIN likp AS lp     
    ON vp~vbeln = lp~vbeln     INNER 
    JOIN kna1 AS k     
    ON k~kunnr = lp~kunnr     
    INTO CORRESPONDING FIELDS OF TABLE gt_all     

    WHERE ( vk~tknum IN p_tknum       
    AND vk~erdat IN p_erdat       
    AND vk~route IN p_route       
    AND vk~tdlnr IN p_tdlnr       
    AND vk~ernam IN p_ernam       
    AND vk~shtyp IN p_shtyp ).   

    LOOP AT gt_all INTO wa_all.     
    IF wa_all-gewei NE  'KG'.       

    CALL FUNCTION 'UNIT_CONVERSION_SIMPLE'         
    EXPORTING           
    input                = wa_all-btgew           round_sign           
    'X'           unit_in              
    'G'           unit_out             
    'KG'         
    IMPORTING           
    output               = wa_all-btgew         
    EXCEPTIONS           conversion_not_found 
    01           division_by_zero     
    02           input_invalid        
    03.     
    ENDIF.     hs_tknum

    -tknum = wa_all-tknum.     hs_tknum
    -btgew = wa_all-btgew.     
    COLLECT hs_tknum.   
    ENDLOOP.   

    SORT gt_all ASCENDING BY tknum  ."BUDAT_MKPF CPUTM_MKPF.   

    MOVE-CORRESPONDING gt_all TO gt_header_show.   
    MOVE-CORRESPONDING gt_all TO gt_items_show.   

    DELETE ADJACENT DUPLICATES FROM gt_header_show COMPARING tknum.   
    SORT gt_items_show BY tknum tpnum.   
    CLEAR wa_header.   
    LOOP AT gt_header_show INTO wa_header.     
    READ TABLE hs_tknum WITH KEY tknum = wa_header-tknum.     wa_header
    -btgew_sum = hs_tknum-btgew.     

    SELECT SINGLE bezei FROM ttdst INTO wa_header-tplst_text       
    WHERE tplst eq wa_header-tplst.      
    SELECT SINGLE bezei FROM tvrot INTO wa_header-route_text        
    WHERE route eq wa_header-route.      
    SELECT SINGLE name1 FROM lfa1 INTO wa_header-tdlnr_text        
    WHERE lifnr eq wa_header-tdlnr.     
    MODIFY gt_header_show FROM wa_header.     
    CLEAR wa_header.   
    ENDLOOP.

    ENDFORM.


    FORM display_data .   
    PERFORM set_fcat.   
    PERFORM set_layout.   

    PERFORM show_alv  TABLES gt_fcat  gt_header_show[]                      
    USING  gs_layo.
    ENDFORM.                    " DISPLAY_DATA

    *&---------------------------------------------------------------------*
    FORM set_fcat .   
    PERFORM csalv_set_fcat USING:

    " 'Field' 'Text' 'Edit' 'Zero' 'Type' 'Qfieldname' 'Key' 'Hostspot' 'Emphasize' 'Checkbox'             
    'TKNUM'  '运单号' '' ''  ''  ''  ''   ''  ''  '' '' '' '' '10',             
    'TPLST' '装运点'   ''  ''  ''  ''  ''  ''  ''  '' ''  '' '' '5',             
    'TPLST_TEXT' '装运点名称'   ''  ''  ''  ''  ''  ''  ''  '' ''  '' '' '30',             
    'TDLNR' '物流公司代码'   ''  ''  ''  ''  ''  ''  ''  '' ''  '' '' '15',             
    'TDLNR_TEXT' '物流公司'   ''  ''  ''  ''  ''  ''  ''  '' ''  '' '' '30',             
    'ERDAT' '装运日期'  ''  ''  ''  ''  ''  ''  ''  '' ''  '' '' '10',             
    'ROUTE' '装运线路'   ''  ''  ''  ''  ''  ''  ''  '' ''  '' '' '10',             
    'ROUTE_TEXT' '装运线路描述'   ''  ''  ''  ''  ''  ''  ''  '' ''  '' '' '30',             
    'SHTYP'  '装运类型'      ''  ''  ''  ''  ''  ''  ''  '' ''  '' '' '5',             
    'BTGEW_SUM' '总重量(KG)'   ''  ''  ''  ''  ''  ''  ''  '' ''  '' '' '10',             
    'DISTZ' '里程'       ''  ''  ''  ''  ''  ''  ''  '' ''  '' '' '10',             
    'ADD02'     '司机' ''  ''  ''  ''  ''  ''  ''  '' ''  '' '' '10',             
    'BFART'   '车型' ''  ''  ''  ''  ''  ''  ''  '' ''  '' '' '5',             
    'ERNAM'  '创建者'    ''  ''  ''  ''  ''  ''  ''  '' ''  '' '' '20',             

    'BEIZHU'  '备注'     'X'  ''  ''  ''  ''  ''  ''  '' '' '' 'X' ''.




    ENDFORM.                    " SET_FCAT
    *&---------------------------------------------------------------------*
    FORM set_layout .   gs_layo
    -zebra             'X'.
    *  gs_layout-stylefname     = 'FIELD_STYLE'.   gs_layo
    -CWIDTH_OPT        =  'X'.
    ENDFORM.                    " SET_LAYOUT
    *&---------------------------------------------------------------------*
    FORM csalv_set_fcat USING       p_name       p_text       p_edit       p_zero       p_type       p_qfieldname       p_key       p_hotspot       p_emphasize       p_checkbox       p_do_sum       p_decimals_out       p_no_out       p_outputlen













    .   gs_fcat
    -fieldname   =  p_name.
    *  gs_fcat-reptext_l   =
    *  gs_fcat-selddictxt   =   gs_fcat
    -reptext     =  p_text.   gs_fcat
    -edit        =  p_edit.   gs_fcat
    -no_zero     =  p_zero.   gs_fcat
    -datatype    =  p_type.   gs_fcat
    -qfieldname  =  p_qfieldname.   gs_fcat
    -key         =  p_key.   gs_fcat
    -hotspot     =  p_hotspot.   gs_fcat
    -emphasize   =  p_emphasize.   gs_fcat
    -checkbox    =   p_checkbox.   gs_fcat
    -do_sum      =  p_do_sum.   gs_fcat
    -decimals_o  =  p_decimals_out.   gs_fcat
    -no_out      =  p_no_out.   gs_fcat
    -outputlen   =  p_outputlen.   
    APPEND gs_fcat TO  gt_fcat.
    ENDFORM.                    "csalv_set_fcat

    *&---------------------------------------------------------------------*

    FORM show_alv TABLES  pt_fcat                       pt_tab               

    USING   ps_layout.   gs_grid


    -edt_cll_cb 'X'."当屏幕失去焦点时,自动刷新   gt_event

    -name 'CALLER_EXIT'.   "slis_ev_caller_exit_at_start事件   gt_event
    -form 'FM_BUTTON'.   
    APPEND gt_event .   

    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'     
    EXPORTING       i_callback_program       
    = sy-repid       i_callback_user_command  
    'USER_COMMAND'       i_grid_settings          
    = gs_grid       i_callback_pf_status_set 
    'SET_PF_STATUS'       is_layout_lvc            
    = gs_layo       it_fieldcat_lvc          
    = pt_fcat[]       it_events                
    = gt_event[]       i_save                   
    'X'
    *     it_event_exit            = gt_event_exit[]     
    TABLES       t_outtab                 
    = pt_tab     
    EXCEPTIONS       program_error            
    1       
    OTHERS                   2.
    ENDFORM.                    "csalv_set_fcat




    FORM print.   

    DATA:ptr_count(10TYPE c.   
    DATAlines TYPE i."获取往smartforms传入的要打印的行数目   
    DATA: insertrows TYPE i."需要再插入多少空行   
    DATArows TYPE VALUE 22."一页要打印的行数   

    CLEAR gt_all_temp.   
    CLEAR gt_header.   
    CLEAR gt_items.   
    CLEAR gt_header_temp.   
    CLEAR gt_items_temp.   

    DATA count LIKE lips-brgew VALUE 0.   
    DATA:ls_row  TYPE lvc_s_row,        lt_rows 
    TYPE lvc_t_row.   
    "CLEAR GT_HEADER.   
    "CLEAR GT_ITEMS.   
    CALL METHOD ref_grid->get_selected_rows     
    IMPORTING       et_index_rows 
    = lt_rows
    *     et_row_no     =     
    .   



    LOOP AT lt_rows INTO ls_row.     
    READ TABLE gt_header_show INTO wa_header INDEX ls_row-index.     
    APPEND wa_header TO gt_header.     
    LOOP AT gt_items_show INTO wa_items.       
    IF ( wa_header-tknum EQ wa_items-tknum ).         
    APPEND wa_items TO gt_items.       
    ENDIF.     
    ENDLOOP.   

    ENDLOOP.   

    CLEAR: control_parameters.   control_parameters
    -preview   'X'.   control_parameters
    -no_open   'X'.   control_parameters
    -no_close  'X'.   


    CALL FUNCTION 'SSF_OPEN'     
    EXPORTING       control_parameters 
    = control_parameters     
    EXCEPTIONS       formatting_error   
    1       internal_error     
    2       send_error         
    3       user_canceled      
    4       
    OTHERS             5.   
    IF sy-subrc <> 0.     
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno     
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.     
    EXIT.   
    ENDIF.   


    LOOP AT gt_header INTO wa_header.     

    APPEND wa_header TO gt_header_temp.     
    LOOP AT gt_items INTO wa_items.       
    IF ( wa_header-tknum EQ wa_items-tknum  .         
    APPEND wa_items TO gt_items_temp.       

    ENDIF.     
    ENDLOOP.     
    "WA_HEADER-TOTAL_BRGEW = COUNT.     
    "MODIFY TABLE gt_header_temp FROM wa_header.     
    CLEAR wa_items.     
    CLEAR wa_header.     
    CLEAR count.     
    IF gt_items_temp IS INITIAL.       
    MESSAGE i000(0kWITH  '请选中要打印的内容!'.       
    EXIT .     
    ENDIF.     

    CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'       
    EXPORTING         formname           
    'ZSDSF003'       
    IMPORTING         fm_name            
    = fm_name       
    EXCEPTIONS         no_form            
    1         no_function_module 
    2         
    OTHERS             3.     
    "SET HANDLER   gt_event_receiver->handle_modify FOR ref_grid.     
    DESCRIBE TABLE gt_items_temp LINES lines.     insertrows 
    =   lines MOD rows .     insertrows 
    rows - insertrows.     
    DO insertrows TIMES.       
    APPEND wa_items TO gt_items_temp.     
    ENDDO.     
    PERFORM frm_print_data."每一个表头数据向smartforms传入数据   
    ENDLOOP.   

    CALL FUNCTION 'SSF_CLOSE'     
    EXCEPTIONS       formatting_error 
    1       internal_error   
    2       send_error       
    3       
    OTHERS           4.   

    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.
    FORM frm_print_data.   



    CONCATENATE 'ZDDITEMMM' sy-uzeit INTO itemsname.   
    CONCATENATE 'ZDDHEADER' sy-uzeit INTO headername.   savebuffer gt_items_temp itemsname

    .   savebuffer gt_header_temp headername
    .
    *  PTR_COUNT =  GV_COUNT .
    *调用 smartForms   
    CALL FUNCTION fm_name     
    EXPORTING       control_parameters 
    = control_parameters       ptr_items          
    = itemsname       ptr_header         
    = headername
    *     PTR_TOTAL          = GV_COUNT     
    EXCEPTIONS       formatting_error   
    1       internal_error     
    2       send_error         
    3       user_canceled      
    4.   clearbuffer itemsname
    .   clearbuffer headername
    .   
    CLEAR gt_header_temp.   
    CLEAR gt_items_temp.
    ENDFORM.



    *&---------------------------------------------------------------------*
    *&      Form  user_command
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *      -->P_UCOMM      text
    *      -->PS_SELFIELD  text
    *----------------------------------------------------------------------*

    FORM user_command USING r_ucomm LIKE sy-ucomm       rs_selfield 
    TYPE slis_selfield.   


    CASE r_ucomm.     
    WHEN '&DATA_SAVE'.     
    WHEN '&PRINT' OR '&PRT'.       
    PERFORM print.     
    WHEN OTHERS.       

    LEAVE PROGRAM.   
    ENDCASE.

    ENDFORM.                    "user_command
    *&---------------------------------------------------------------------*
    *&      Form  SET_PF_STATUS
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *      -->RT_EXTAB   text
    *----------------------------------------------------------------------*
    FORM set_pf_status USING rt_extab TYPE slis_t_extab..   
    SET PF-STATUS 'STANDARD'.
    ENDFORM.                    "SET_PF_STATUS
    *&---------------------------------------------------------------------*
    *&      Form  fm_button
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *      -->E_GRID     text
    *----------------------------------------------------------------------*
    FORM fm_button USING e_grid TYPE slis_data_caller_exit.   

    CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    *   EXPORTING
    *     IR_SALV_FULLSCREEN_ADAPTER       =     
    IMPORTING
    *     ET_EXCLUDING                     =
    *     E_REPID                          =
    *     E_CALLBACK_PROGRAM               =
    *     E_CALLBACK_ROUTINE               =       e_grid 
    = ref_grid
    *     ET_FIELDCAT_LVC                  =
    *     ER_TRACE                         =
    *     E_FLG_NO_HTML                    =
    *     ES_LAYOUT_KKBLO                  =
    *     ES_SEL_HIDE                      =
    *     ET_EVENT_EXIT                    =
    *     ER_FORM_TOL                      =
    *     ER_FORM_EOL                      =     
    .

    *   CALL METHOD ref_grid->check_changed_data.
    * 设置enter事件   
    CALL METHOD ref_grid->register_edit_event     
    EXPORTING       i_event_id 
    = cl_gui_alv_grid=>mc_evt_enter     
    EXCEPTIONS       error      
    1       
    OTHERS     2.   


    CREATE OBJECT gt_event_receiver.   
    SET HANDLER   gt_event_receiver->handle_modify FOR ref_grid.
    ENDFORM.                    "FM_BUTTON

  • 相关阅读:
    WebService-CXF 学习笔记
    Java中对于ClassLoader类加载器 嵌套了深度技术的价值
    WebService学习笔记
    MongoDB学习笔记
    java.io.IOException: java.io.FileNotFoundException: /tmp/tomcat.2457258178644046891.8080/work/Tomcat/localhost/innovate-admin/C:/up/154884318438733213952/sys-error.log (没有那个文件或目录)
    Node Sass does not yet support your current environment: Linux 64-bit with Unsupported runtime
    Mysql优化
    SI架构设计与实践
    高并发高可用处理大数据量
    虚拟机安装CentOS详细操作
  • 原文地址:https://www.cnblogs.com/eagle-dtq/p/5244310.html
Copyright © 2011-2022 走看看