发货单打印程序(ZSD19)程序记录

*&---------------------------------------------------------------------*
*& Report  ZBME_SD_FHPT
*&
*&---------------------------------------------------------------------*
*&
*&-------------------BME发货单打印程序--SF 2019.03.06-------------------*
*&
*&---------------------------------------------------------------------*

REPORT  zbme_sd_fhpt.
TYPE-POOLS:slis.
TABLES:likp,lips.

DATA: gth_out TYPE zbme_sd_fhpt,
      gtd_out LIKE TABLE OF gth_out.

DATA:gth_alv_sel TYPE zbme_sd_fhpt,
     gtd_alv_sel LIKE TABLE OF gth_alv_sel.

DATA:gth_item LIKE zbme_sd_fhi,
     gtd_item LIKE TABLE OF gth_item.

DATA:gth_likp TYPE likp,
     gth_lips TYPE lips.

DATA:gtd_fieldcat_lvc TYPE lvc_t_fcat,
     gth_fieldcat_lvc TYPE lvc_s_fcat,
     gst_layout_lvc   TYPE lvc_s_layo.
DATA:g_grid TYPE REF TO cl_gui_alv_grid.

SELECTION-SCREEN BEGIN OF BLOCK b_01 WITH FRAME TITLE text_001.
SELECT-OPTIONS:
                s_vkorg FOR gth_likp-vkorg DEFAULT '1300',
                s_vbeln FOR gth_likp-vbeln,
                s_vgbel FOR gth_lips-vgbel,
                s_kunnr FOR gth_likp-kunnr,
                s_erdat FOR gth_likp-erdat,
                s_ernam FOR gth_likp-ernam.
*PARAMETERS: p_prt AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN END OF BLOCK b_01.

INITIALIZATION.
  text_001 '筛选条件'.
  s_erdat-sign 'I'.
  s_erdat-option 'EQ'.
  s_erdat-low = sy-datum 10.
  s_erdat-high = sy-datum + 2.
  APPEND s_erdat.

START-OF-SELECTION.
  PERFORM sub_getdata.

END-OF-SELECTION.

  PERFORM sub_fieldcat_lvc.
  PERFORM sub_layout_lvc.
*  PERFORM add_field_lvc.
  PERFORM call_alv_lvc.

*&---------------------------------------------------------------------*
*&      Form  sub_getdata
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM sub_getdata.

  SELECT a~vbeln
         b~vgbel
         a~vkorg
         a~erdat
         a~bldat
         a~kunnr
         b~ernam
         b~posnr "项目编号
         b~pstyv "项目类别
         b~matnr
         b~werks
         b~lgort "库存地点
         b~charg
         b~lfimg "交货数量
         b~vrkme "销售单位

   INTO CORRESPONDING FIELDS OF TABLE gtd_out
   FROM likp AS a INNER JOIN lips AS b ON a~vbeln = b~vbeln
   WHERE a~vkorg IN s_vkorg AND a~vbeln IN s_vbeln AND b~vgbel IN s_vgbel
      AND a~kunnr IN s_kunnr AND a~erdat IN s_erdat AND b~ernam IN s_ernam.

  DELETE gtd_out WHERE lifsk IS NOT INITIAL."交货冻结.

  SORT gtd_out BY vbeln DESCENDING.

  LOOP AT gtd_out INTO gth_out.

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'   "补零函数
      EXPORTING
        input   = gth_out-matnr
     IMPORTING
       output   = gth_out-matnr.

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        input  = gth_out-kunnr
      IMPORTING
        output = gth_out-kunnr.

    "物料描述
    SELECT SINGLE maktx INTO gth_out-maktx FROM makt WHERE matnr = gth_out-matnr.
    "产品名称、型号、规格
    SPLIT gth_out-maktx AT ' ' INTO gth_out-maktx1 gth_out-xingh gth_out-guige.

    "生产日期、有效日期
    SELECT SINGLE hsdat INTO gth_out-hsdat FROM mcha WHERE matnr = gth_out-matnr AND werks = gth_out-werks AND charg = gth_out-charg.
    SELECT SINGLE mhdrz INTO gth_out-mhdrz FROM mara WHERE matnr = gth_out-matnr.
    IF gth_out-mhdrz <> 0.
      gth_out-vfdat = gth_out-hsdat + gth_out-mhdrz.
    ENDIF.

    "随行发票  invoice
    SELECT SINGLE ihrez_e INTO gth_out-invoice FROM vbkd WHERE vbeln = gth_out-vgbel.

    "销售单位描述
    SELECT SINGLE mseht INTO gth_out-mseht FROM t006a WHERE spras '1' AND msehi = gth_out-vrkme.
    "订单数量
    SELECT SINGLE kwmeng INTO gth_out-kwmeng FROM vbap WHERE vbeln = gth_out-vgbel AND posnr = gth_out-posnr.

    "发货日期
    SELECT SINGLE wadat_ist INTO gth_out-wadat_ist
       FROM likp WHERE vbeln = gth_out-vbeln.

    "客户名称、送货地址
    SELECT SINGLE name1 stras INTO (gth_out-name1,gth_out-strasFROM kna1 WHERE kunnr = gth_out-kunnr.

    "总签约商名称
    SELECT SINGLE name1 INTO gth_out-ctorsname FROM kna1 WHERE kunnr SELECT kunnr FROM vbpa WHERE vbeln = gth_out-vbeln AND parvw 'ZG' ).

    "价格
    SELECT SINGLE knumv INTO gth_out-knumv FROM vbak WHERE vbeln = gth_out-vgbel.
    SELECT SINGLE kbetr INTO gth_out-kbetr FROM konv WHERE knumv = gth_out-knumv AND kposn = gth_out-posnr AND kschl 'ZPR4'.

    "金额
    gth_out-kwert = gth_out-kbetr * gth_out-kwmeng.

    "业务员
    SELECT SINGLE a~name_last INTO gth_out-vorna
      FROM adrp AS a INNER JOIN usr21 AS b ON a~persnumber = b~persnumber
      WHERE b~bname = gth_out-ernam.

    MODIFY gtd_out FROM gth_out.
    CLEAR gth_out.

  ENDLOOP.

ENDFORM.                    "getdata


*&---------------------------------------------------------------------*
*&      Form  call_alv_lvc
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM call_alv_lvc.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_callback_program       = sy-cprog
      i_callback_pf_status_set 'SET_PF_STATUS'
      i_callback_user_command  'USER_COMMAND'
*      i_callback_top_of_page   = 'TOP_OF_PAGE'
      is_layout_lvc            = gst_layout_lvc
      it_fieldcat_lvc          = gtd_fieldcat_lvc
      i_save                   'A'
    TABLES
      t_outtab                 = gtd_out
    EXCEPTIONS
      program_error            1
      OTHERS                   2.

  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

ENDFORM.                    "CALL_ALV_LVC



*&---------------------------------------------------------------------*
*&      Form  SUB_FIELDCAT_LVC
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM sub_fieldcat_lvc.

  PERFORM add_field_lvc USING 'VBELN' '发货单号' 'X' '' '' ''
                              '' ''.
  PERFORM add_field_lvc USING 'VGBEL' '订单号' 'X' 'X' '' ''
                              '' ''.   
PERFORM add_field_lvc USING 'VKORG' '销售组织' 'X' 'X' '' ''                               
'' ''.   
PERFORM add_field_lvc USING 'BLDAT' '凭证日期' 'X' 'X' '' ''                               
'' ''.   
PERFORM add_field_lvc USING 'KUNNR' '客户编号' 'X' 'X' '' ''                               
'' ''.   
PERFORM add_field_lvc USING 'NAME1' '客户名称' 'X' '' '' ''                               
'' ''.   
PERFORM add_field_lvc USING 'STRAS' '送货地址' 'X' '' '' ''                               
'' ''.   
PERFORM add_field_lvc USING 'CTORSNAME' '签约商名称' 'X' '' '' ''                               
'' ''.   
PERFORM add_field_lvc USING 'VORNA' '发货人' 'X' '' '' ''                               
'' ''.   
PERFORM add_field_lvc USING 'POSNR' '序号' 'X' 'X' '' ''                               
'' ''.   
PERFORM add_field_lvc USING 'PSTYV' '项目类别' 'X' 'X' '' ''                               
'' ''.   
PERFORM add_field_lvc USING 'MATNR' '产品编号' 'X' 'X' '' ''                               
'' ''.   
PERFORM add_field_lvc USING 'MAKTX1' '产品描述' 'X' '' '' ''                               
'' ''.   
PERFORM add_field_lvc USING 'XINGH' '型号' 'X' '' '' ''                               
'' ''.   
PERFORM add_field_lvc USING 'GUIGE' '规格' 'X' '' '' ''                               
'' ''.   
PERFORM add_field_lvc USING 'WERKS' '工厂' 'X' '' '' ''                               
'' ''.   
PERFORM add_field_lvc USING 'LGORT' '库存地点' 'X' '' '' ''                               
'' ''.   
PERFORM add_field_lvc USING 'CHARG' '批次' 'X' '' '' ''                               
'' ''.   
PERFORM add_field_lvc USING 'HSDAT' '生产日期' 'X' '' '' ''                               
'' ''.   
PERFORM add_field_lvc USING 'VFDAT' '有效日期' 'X' '' '' ''                               
'' ''.   
PERFORM add_field_lvc USING 'KWMENG' '订单数量' 'X' '' '' ''                               
'' ''.   
PERFORM add_field_lvc USING 'LFIMG' '交货数量' 'X' '' '' ''                               
'' ''.   
PERFORM add_field_lvc USING 'KWMENG2' '赠品数量' 'X' '' '' ''                               
'' ''.   
PERFORM add_field_lvc USING 'MSEHT' '销售单位' 'X' '' '' ''                               
'' ''.   
PERFORM add_field_lvc USING 'KBETR' '单价' 'X' '' '' ''                               
'' ''.   
PERFORM add_field_lvc USING 'KWERT' '金额' 'X' '' '' ''                               
'' ''.   
PERFORM add_field_lvc USING 'NOTE' '备注' 'X' '' '' ''                               
'' ''.


ENDFORM.                    "SUB_FIELDCAT_LVC


*&---------------------------------------------------------------------*
*&      Form  ADD_FIELD_LVC
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->I_FIELDNAME  text
*      -->I_TEXT       text
*      -->I_KEY        text
*      -->I_ZERO       text
*      -->I_EDIT       text
*      -->I_BOX        text
*      -->I_REFTAB     text
*      -->I_REFFIELD   text
*----------------------------------------------------------------------*
FORM add_field_lvc USING i_fieldname TYPE slis_fieldname                          i_text 
TYPE string                          i_key 
TYPE c                          i_zero 
TYPE c                          i_edit 
TYPE c                          i_box 
TYPE c                          i_reftab 
TYPE lvc_rtname                          i_reffield 
TYPE lvc_rfname.   

CLEAR gth_fieldcat_lvc.   gth_fieldcat_lvc
-fieldname = i_fieldname.   gth_fieldcat_lvc
-tabname 'GTD_OUT'.   gth_fieldcat_lvc
-colddictxt 'L'.   gth_fieldcat_lvc
-scrtext_l = i_text.   gth_fieldcat_lvc
-key = i_key.   gth_fieldcat_lvc
-no_zero = i_zero.   gth_fieldcat_lvc
-edit = i_edit.   gth_fieldcat_lvc
-checkbox = i_box.   gth_fieldcat_lvc
-ref_table = i_reftab.   gth_fieldcat_lvc
-ref_field = i_reffield.   

APPEND gth_fieldcat_lvc TO gtd_fieldcat_lvc.   
CLEAR gth_fieldcat_lvc.
ENDFORM.                    "ADD_FIELD_LVC

*&---------------------------------------------------------------------*
*&      Form  SUB_LAYOUT_LVC
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM sub_layout_lvc.   gst_layout_lvc
-zebra 'X'.   gst_layout_lvc
-cwidth_opt 'X'.   gst_layout_lvc
-detailtitl '详细信息'.  "设置弹出窗口的标题栏

ENDFORM.                    "SUB_LAYOUT_LVC


*&---------------------------------------------------------------------*
*&      Form  SET_PF_STATUS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->RT_EXTAB   text
*----------------------------------------------------------------------*
FORM set_pf_status USING rt_extab TYPE slis_t_extab.   

SET PF-STATUS 'STATUS'.   

IF g_grid IS INITIAL.     
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'       
IMPORTING         e_grid 
= g_grid.     
CALL METHOD g_grid->set_ready_for_input       
EXPORTING         i_ready_for_input 
1.   
ENDIF.
ENDFORM.                    "SET_PF_STATUS

*&---------------------------------------------------------------------*
*&      Form  USER_COMMAND
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->R_UCOMM      text
*      -->RS_SELFIELD  text
*----------------------------------------------------------------------*
FORM user_command USING r_ucomm LIKE sy-ucomm                         rs_selfield 
TYPE slis_selfield.   
DATA:lflg_valid TYPE c.   
CALL METHOD g_grid->check_changed_data     
IMPORTING       e_valid 
= lflg_valid.   

CHECK lflg_valid 'X'.   rs_selfield
-refresh 'X'.   

DATA: ztabindex TYPE  sy-tabix.   ztabindex 
= rs_selfield-tabindex.   
CASE r_ucomm.     
WHEN 'PRNT'.       
IF ztabindex 0.         
MESSAGE '请选择正确的一行!' TYPE 'I'.       
ELSE .         
CLEAR: gtd_alv_sel,gth_alv_sel,gtd_item,gth_item,gth_out.         
READ TABLE gtd_out INTO gth_alv_sel INDEX ztabindex.         
APPEND gth_alv_sel TO gtd_alv_sel.         

LOOP AT gtd_out INTO gth_out WHERE vbeln = gth_alv_sel-vbeln.           gth_item
-maktx1 = gth_out-maktx1.           gth_item
-xingh = gth_out-xingh.           gth_item
-guige = gth_out-guige.           gth_item
-mseht = gth_out-mseht.           gth_item
-kwmeng = gth_out-kwmeng.           gth_item
-kbetr = gth_out-kbetr.           gth_item
-kwert = gth_out-kwert.           gth_item
-lfimg = gth_out-lfimg.           gth_item
-charg = gth_out-charg.           gth_item
-hsdat = gth_out-hsdat.           gth_item
-vfdat = gth_out-vfdat.           gth_item
-note = gth_out-note.           
APPEND gth_item TO gtd_item.           
CLEAR:gth_item,gth_out.         
ENDLOOP.         

PERFORM zpages.  "分页         

DATA:zsmart_name TYPE rs38l_fnam.         
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'           
EXPORTING             formname           
'ZLE_SHIP_BMEPR'           
IMPORTING             fm_name            
= zsmart_name           
EXCEPTIONS             no_form            
1             no_function_module 
2             
OTHERS             3.         

CALL FUNCTION zsmart_name           
EXPORTING             gth_header      
= gth_alv_sel           
TABLES             gtd_item        
= gtd_item          
EXCEPTIONS            formatting_error 
1            internal_error   
2            send_error       
3            user_canceled    
4                   
.

*        "打印次数
*        DATA: zprint TYPE i.
*        IF gth_out-zprt IS INITIAL.
*          zprint = 1.
*        ELSE.
*          zprint = gth_out-zprt.
*          zprint = zprint + 1.
*        ENDIF.
*        UPDATE vbak SET zprt = zprint WHERE vbeln = gth_out-vbeln.
*        COMMIT WORK.
*
*        DELETE gtd_out WHERE vbeln = gth_out-vbeln.
*        ENDIF.       
ENDIF.   
ENDCASE.
ENDFORM.                    "user_command

*&---------------------------------------------------------------------*
*&      Form  ZPAGES
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM zpages.   
DATA: pages TYPE VALUE 0"页数       
lines TYPE VALUE 0"行项目数量       
blank TYPE VALUE 0"空行数量   
CONSTANTS rows TYPE VALUE 2"每页打印行项目数量   

LOOP AT gtd_item INTO gth_item.
*       计算行数与空行、及单张凭证页数     
lines lines + 1."行项目数量     
blank lines MOD rows."空行数量     
IF blank 0.       pages 
lines DIV rows."单张凭证页数     
ELSE.       pages 
lines DIV rows + 1.     
ENDIF.     gth_item
-pages = pages.     
MODIFY gtd_item FROM gth_item.   
ENDLOOP.   
IF blank 0.   
ELSE.     gth_item
-maktx1 ''.     gth_item
-xingh ''.     gth_item
-guige ''.     gth_item
-mseht ''.     gth_item
-kwmeng 0.     gth_item
-kbetr ''.     gth_item
-kwert ''.     gth_item
-lfimg 0.     gth_item
-charg ''.     gth_item
-hsdat ''.     gth_item
-vfdat ''.     gth_item
-note ''.     
APPEND gth_item TO gtd_item.   
ENDIF.   
CLEAR:lines,blank,pages.

ENDFORM.                    " ZPAGES

posted @ 2019-04-11 16:29  不渡之人  阅读(126)  评论(0编辑  收藏  举报