AVL_全选_取消全选_打印_ZMM1035

*&---------------------------------------------------------------------*
*& Report  ZMM1035
*&
*&---------------------------------------------------------------------*
*&  采购凭证打印 
*&
*&---------------------------------------------------------------------*

REPORT  zmm1035.
TYPE-POOLS: slis.
TABLES: a003,konp,ztemp_vendor,ekko,lfm1,lfa1,t024,ekpa.


DATA: zitcpo LIKE itcpo.
DATA: z TYPE i,
      wa_ekpo TYPE ekpo,
      wa_eket TYPE eket,
      wa_tkomv TYPE komv,
      it_ekpo TYPE TABLE OF ekpo.
DATA: zrsnum LIKE eket-rsnum.
DATA: zwaers LIKE ekko-waers,
      zekgrp LIKE ekko-ekgrp,
      v_werks(10) TYPE c,
      t_zg(15) TYPE c,
      t_bz(10) TYPE c,
      v_bukrs(40) TYPE c,
      v_vtext LIKE t052u-text1.

DATA: BEGIN OF i_data OCCURS 0,
      ebeln LIKE ekko-ebeln,  "Document No. 采购凭证
       ebelp LIKE ekpo-ebelp,  "Item 行项目号
       matnr LIKE ekpo-matnr,  "Material
       txz01 LIKE ekpo-txz01,  "Material description
       wrkst LIKE mara-wrkst,  "基本物料  2009.06.08
       menge LIKE ekpo-menge, "Quantity
       netpr LIKE ekpo-netpr, "Price
       mwskz LIKE ekpo-mwskz,
       kbetr LIKE konp-kbetr,  " 2009.10.21 税率转换为数值
       v_price TYPE p DECIMALS 6,
       v_dj(14)   TYPE c,
       peinh LIKE ekpo-peinh,  "Price unit
       meins LIKE ekpo-meins,
       werks LIKE ekpo-werks,
       eindt LIKE eket-eindt,  "Delivery date
       bedat LIKE eket-bedat,  "Purchase order date
       amount(11) TYPE c,      "sub.total
       flag(1) TYPE c,         "Item category
       groes LIKE mara-groes, "大小量纲 2012.08.10
       ztxz01(21) TYPE c,
       ztxz02(21) TYPE c,
       zlg1(17) TYPE c,
       zlg2(17) TYPE c,
       zkbetr LIKE konv-kbetr,  "金额
       zwaers LIKE konv-waers,  "币别
       zkpein LIKE konv-kpein,                              "单位 10000
       y_price TYPE p DECIMALS 6,
       zycjg(14) TYPE c,
END OF i_data.

DATA: BEGIN OF i_header OCCURS 0 ,
ebeln LIKE ekpo-ebeln,
werks LIKE ekpo-werks,
bedat LIKE ekko-bedat,
lifnr LIKE lfa1-lifnr,      
name1 LIKE lfa1-name1,
stcd1 LIKE lfa1-stcd1,
addr  LIKE lfa1-stras,
telf1 LIKE lfa1-telf1,
telfx LIKE lfa1-telfx,
adrnr LIKE lfa1-adrnr,
email LIKE adr6-smtp_addr,
zsabe LIKE lfb1-zsabe,
verkf LIKE lfm1-verkf,
bankn LIKE lfbk-bankn,
eknam LIKE t024-eknam,
v_vtext LIKE t052u-text1,
mwskz LIKE eine-mwskz,
stext LIKE t007s-text1,
ekorg LIKE ekko-ekorg,     "
eikto LIKE lfm1-eikto,     "打印采购订单限定格式
ekgrp LIKE ekko-ekgrp,
bsart LIKE ekko-bsart,     "订单类型 
*采购组的联系方式
v_telfx LIKE t024-telfx,               
tel_number LIKE t024-tel_number,     
zlifnr LIKE ekko-zlifnr,
zname1 LIKE ekko-zname1,
waers LIKE ekko-waers,
zterm LIKE ekko-zterm,
lifn2 LIKE ekpa-lifn2,
knumv LIKE ekko-knumv, "条件记录号
END OF i_header .

DATA: BEGIN OF i_wrkst OCCURS 0,
      matnr LIKE mara-matnr,
      wrkst LIKE mara-wrkst,
      END OF i_wrkst.
DATA: v_total_c LIKE konv-kawrt,
      v_total LIKE konv-kawrt.    "total

DATA: BEGIN OF it_konv OCCURS 0 ,
  ebeln LIKE ekko-ebeln, "采购凭证
  knumv LIKE konv-knumv, "条件记录号
  kposn LIKE konv-kposn, "行项目号
  kschl LIKE konv-kschl,   "条件类型
  kbetr LIKE konv-kbetr,  "金额
  waers LIKE konv-waers,  "币别
  kpein LIKE konv-kpein,                                    "单位 10000
END OF it_konv.
*&-----------报表输出用itab ------2014.08.13
DATA: BEGIN OF itab OCCURS 0 ,
  cbox(1)  TYPE c,  "选择框
  ebeln LIKE ekko-ebeln, "采购凭证
  lifn2 LIKE ekpa-lifn2, "原厂供应商
  name1 LIKE lfa1-name1, "供应商名称
  ekgrp LIKE ekko-ekgrp, "采购组
  bedat LIKE ekko-bedat,"凭证日期
  dycs(5) TYPE c,
END OF itab.
DATA: itab2 LIKE TABLE OF itab WITH HEADER LINE.
DATA:wa_sort     TYPE slis_t_sortinfo_alv,
     wa_variant  TYPE disvariant,
     v_repid    TYPE sy-repid VALUE sy-repid.
DATA:i_fieldcat      TYPE lvc_t_fcat,     "输出的内表字段
    zwa_fieldcat  TYPE lvc_s_fcat,
     i_events        TYPE slis_t_event,   "事件存储内表
     wa_events       TYPE slis_alv_event,
     i_ddval         TYPE lvc_t_drop,     "存储下拉列表的数据
     th_layout       TYPE lvc_s_layo,
     wa_ddval        TYPE lvc_s_drop.
*CONSTANTS:c_formname_top_of_page TYPE slis_formname VALUE 'TOP_OF_PAGE'.
CONSTANTS cns_pf_status TYPE slis_formname VALUE 'ALV_PF_STATUS'.
*CONSTANTS cns_user_command TYPE slis_formname VALUE 'ALV_USER_COMMAND'.
************************************************************************
*SELECT-SRECCN
************************************************************************
SELECTION-SCREEN BEGIN OF BLOCK bl1 WITH FRAME TITLE text-bl1."选择屏幕块
SELECT-OPTIONS: zebeln FOR ekko-ebeln."采购凭证
SELECT-OPTIONS: zlifn2 FOR ekpa-lifn2."供应商
SELECT-OPTIONS: zekorg FOR ekko-ekorg."采购组织
SELECT-OPTIONS: zekgrp1 FOR ekko-ekgrp."采购组
SELECT-OPTIONS: zbedat FOR ekko-bedat."凭证日期
SELECTION-SCREEN END OF BLOCK bl1.

START-OF-SELECTION.

  PERFORM sub_get_opt_date. "获取报表输出的数据
  PERFORM f_create_fieldcat.
  PERFORM f_display_alv.
*  PERFORM sub_get_data.  "获取打印输出的数据
*  PERFORM sub_process_data .  "处理打印输出的数据
*  PERFORM sub_print_data .   "打印

*&---------------------------------------------------------------------*
*&      Form  sub_get_opt_date
*&---------------------------------------------------------------------*
*       text  获取报表输出的数据
*----------------------------------------------------------------------*
FORM sub_get_opt_date.

  SELECT
    ekko~ebeln
    ekpa~lifn2
    ekko~ekgrp
    ekko~bedat
  INTO CORRESPONDING FIELDS OF TABLE itab
  FROM ekko INNER JOIN ekpa ON ekko~ebeln = ekpa~ebeln
   WHERE ekko~ebeln IN zebeln
     AND ekpa~lifn2 IN zlifn2
     AND ekko~ekorg IN zekorg
     AND ekko~ekgrp IN zekgrp1
     AND ekko~bedat IN zbedat
     AND ekpa~parvw = 'WL'.
  IF sy-subrc = 0.
    LOOP AT itab.
      SELECT SINGLE name1 INTO itab-name1 FROM lfa1 WHERE lifnr = i_header-lifn2 .
      MODIFY itab.
      CLEAR itab.
    ENDLOOP.
  ENDIF.

ENDFORM.                    "sub_get_opt_date

*@---------------------------------------------------------------------*
*@      Form  f_display_alv
*@---------------------------------------------------------------------*
*       调用 FUNCTION 输出ALV报表
*----------------------------------------------------------------------*
FORM f_display_alv .
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_callback_program       = v_repid
      it_fieldcat_lvc          = i_fieldcat
      it_events                = i_events[]
      i_default                = 'X'
      i_save                   = 'A'
      i_callback_user_command  = 'USER_COMMAND'
      i_callback_pf_status_set = 'SET_PF_STATUS' "指定自建的状态栏
      is_layout_lvc            = th_layout
    TABLES
      t_outtab                 = itab.      "i_alv.
ENDFORM.                    " f_display_alv
*&      Form  set_pf_status
*&--------------------------------------------------------------------*
*       自建状态栏的名称,自定义的GUI状态
*---------------------------------------------------------------------*
FORM set_pf_status USING rt_extab TYPE slis_t_extab.
  SET PF-STATUS 'ZMM1035_STATUS'."自建状态栏的名称
ENDFORM.                    "set_pf_status
*&--------------------------------------------------------------------*
*&      Form  USER_COMMAND
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
*      -->UCOMM      text
*     -->SELFIELD   text
*---------------------------------------------------------------------*
FORM user_command USING ucomm LIKE sy-ucomm               "接收用户的命令
  selfield TYPE slis_selfield.
  READ TABLE itab INDEX selfield-tabindex.
  CHECK sy-subrc = 0.
  DATA:  wl_answer  TYPE c.
  DATA: zbz TYPE c.
****************************************
***自动刷新alv数据到内表中,省去点击保存之后才刷新数据
***注意 selfield-refresh = 'X'.只做这个是不够的
  DATA lr_grid TYPE REF TO cl_gui_alv_grid.

  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      e_grid = lr_grid.

  CALL METHOD lr_grid->check_changed_data.
  selfield-refresh = 'X'.
  selfield-row_stable = 'X'.
  selfield-col_stable = 'X'.
****************************************
*  IF ucomm = '&JS' OR  ucomm = '&WC'.
**      ucomm = '&DATA_SAVE'.
*    CALL FUNCTION 'POPUP_TO_CONFIRM'
*      EXPORTING
*        text_question         = '您确定要执行该操作吗?'"TEXT-S07 "确定要删除吗?
*        icon_button_1         = '是' "TEXT-S08 "是
*        icon_button_2         = '否' "TEXT-S09 "否
*        default_button        = '2'
*        display_cancel_button = 'X'
*        start_column          = 25
*        start_row             = 6
*      IMPORTING
*        answer                = wl_answer
*      EXCEPTIONS
*        text_not_found        = 1
*        OTHERS                = 2.

  IF ucomm = '&PRINT'. "打印选中
***********判断是否有勾选记录
    LOOP AT itab WHERE cbox = 'X'.
      zbz = 'X'.
    ENDLOOP.
    IF zbz = 'X'.
      PERFORM print_data.
*          selfield-refresh = 'X'.
    ELSE.
      MESSAGE '请勾选要打印的行项目!' TYPE 'I'.
    ENDIF.
  ELSEIF ucomm = 'ALL'.
    PERFORM select_all.
    PERFORM alv_refresh CHANGING selfield-col_stable
                                 selfield-row_stable
                                 selfield-refresh.
  ELSEIF ucomm = 'DALL'.
    PERFORM cancle_all.
    PERFORM alv_refresh CHANGING  selfield-col_stable
                                  selfield-row_stable
                                  selfield-refresh.
  ENDIF.

*  IF wl_answer = '1'.
*    CASE ucomm.
*      WHEN '&WC'.
*      WHEN '&JS'.
***********判断是否有勾选记录
*        LOOP AT i_list WHERE cbox = 'X'.
*          zbz = 'X'.
*        ENDLOOP.
*        IF zbz = 'X'.
*          PERFORM ggzt_form.      "
*          selfield-refresh = 'X'.                             "设置刷新标记  必须
*          LOOP AT i_mes.
*            MESSAGE  i_mes  TYPE 'I'.
*          ENDLOOP.
*
*        ELSE.
*          MESSAGE '请勾选更改状态的行项目!' TYPE 'I'.
*        ENDIF.
*        CLEAR zbz.
*    ENDCASE.
*  ENDIF.
ENDFORM.                    "USER_COMMAND
*&---------------------------------------------------------------------*
*&      Form  cancle_all
*&---------------------------------------------------------------------*
*&      打印数据
*&---------------------------------------------------------------------*
FORM print_data.
  PERFORM sub_get_data.  "获取打印输出的数据
  PERFORM sub_process_data .  "处理打印输出的数据
  PERFORM sub_print_data .   "打印
ENDFORM.                    "cancle_all

********一下三个子函数为全选和取消全选使用
*&---------------------------------------------------------------------*
*&      Form  alv_refresh
*&---------------------------------------------------------------------*
*       更改选择的值
*----------------------------------------------------------------------*
FORM alv_refresh  CHANGING po_col_stable  po_row_stable  po_refresh.
  po_col_stable = 'X'.
  po_row_stable = 'X'.
  po_refresh = 'X'.
ENDFORM.                    " alv_refresh
*&---------------------------------------------------------------------*
*&      Form  cancle_all
*&---------------------------------------------------------------------*
*&      取消全选
*&---------------------------------------------------------------------*
FORM cancle_all.
  LOOP AT itab.
    itab-cbox = ''.
    MODIFY itab.
  ENDLOOP.
ENDFORM.                    "cancle_all
*&---------------------------------------------------------------------*
*&   Form  select_all
*&  全选
*&---------------------------------------------------------------------*
FORM select_all.
  LOOP AT itab.
    itab-cbox = 'X'.
    MODIFY itab.
  ENDLOOP.
ENDFORM.                    "select_all

*&---------------------------------------------------------------------*
*&      Form  init_alv_summary
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->V_I_FIELDCAT  text
*----------------------------------------------------------------------*
FORM f_create_fieldcat .

  CLEAR  zwa_fieldcat.
  zwa_fieldcat-fieldname  = 'CBOX'.
  zwa_fieldcat-tabname =  'ITAB' .
  zwa_fieldcat-scrtext_m  =  '选择' .
  IF  zwa_fieldcat-fieldname  = 'CBOX'.
    zwa_fieldcat-key       =  'X'.
    zwa_fieldcat-edit       =  'X'.
    zwa_fieldcat-checkbox   =  'X'.
  ENDIF.
  APPEND zwa_fieldcat TO i_fieldcat.

  CLEAR  zwa_fieldcat.
  zwa_fieldcat-fieldname  =  'EBELN'.
  zwa_fieldcat-tabname =  'ITAB' .
  zwa_fieldcat-scrtext_m  =  '采购凭证' .
  APPEND zwa_fieldcat TO i_fieldcat.

  CLEAR  zwa_fieldcat.
  zwa_fieldcat-fieldname  =  'LIFN2'.
  zwa_fieldcat-tabname =  'ITAB' .
  zwa_fieldcat-scrtext_m  =  '原厂供应商' .
  APPEND zwa_fieldcat TO i_fieldcat.

  CLEAR  zwa_fieldcat.
  zwa_fieldcat-fieldname  =  'NAME1'.
  zwa_fieldcat-tabname =  'ITAB' .
  zwa_fieldcat-scrtext_m  =  '原厂供应商名称' .
  APPEND zwa_fieldcat TO i_fieldcat.

  CLEAR  zwa_fieldcat.
  zwa_fieldcat-fieldname  =  'EKGRP'.
  zwa_fieldcat-tabname =  'ITAB' .
  zwa_fieldcat-scrtext_m  =  '采购组' .
  APPEND zwa_fieldcat TO i_fieldcat.

  CLEAR  zwa_fieldcat.
  zwa_fieldcat-fieldname  =  'BEDAT'.
  zwa_fieldcat-tabname =  'ITAB' .
  zwa_fieldcat-scrtext_m  =  '凭证日期' .
  APPEND zwa_fieldcat TO i_fieldcat.

  CLEAR  zwa_fieldcat.
  zwa_fieldcat-fieldname  =  'DYCS'.
  zwa_fieldcat-tabname =  'ITAB' .
  zwa_fieldcat-scrtext_m  =  '打印次数' .
  APPEND zwa_fieldcat TO i_fieldcat.

ENDFORM.                    " init_alv_summary

*&---------------------------------------------------------------------*
*&      Form  sub_get_data
*&---------------------------------------------------------------------*
*       text 获取打印输出的数据
*----------------------------------------------------------------------*
FORM sub_get_data.
  MOVE itab[] TO itab2[].
  DELETE itab2 WHERE cbox = ''.  "删除未选中的

  SELECT *
   FROM ekko
   INTO CORRESPONDING FIELDS OF TABLE i_header
   FOR ALL ENTRIES IN itab2
   WHERE ebeln  = itab2-ebeln.

*  SELECT * INTO CORRESPONDING FIELDS OF TABLE i_header FROM ekko
*                            WHERE ebeln IN zebeln
**                            "AND lifnr IN zlifnr
*                            AND ekorg IN zekorg
*                            AND ekgrp IN zekgrp1
*                            AND bedat IN zbedat.
**                            AND frgke = '02'.   "审批通过

  IF i_header IS NOT INITIAL.
    SELECT *
    FROM ekpo
    INTO CORRESPONDING FIELDS OF TABLE it_ekpo
    FOR ALL ENTRIES IN i_header
    WHERE ebeln  = i_header-ebeln AND
         loekz <> 'X' ."没有删除标记的
*&----------------------从konv里面获取条件价格 原厂价格
    SELECT
        knumv "条件记录号
        kposn "行项目号
        kschl  "条件类型
        kbetr  "金额
        waers  "币别
        kpein                                               "单位10000
    FROM konv
    INTO CORRESPONDING FIELDS OF TABLE it_konv
    FOR ALL ENTRIES IN i_header
    WHERE knumv  = i_header-knumv "条件记录号
       AND kschl = 'PB77'. "条件类型

    LOOP AT it_konv.
      READ TABLE i_header WITH KEY knumv = it_konv-knumv.
      it_konv-ebeln = i_header-ebeln.
      MODIFY it_konv.
      CLEAR it_konv.
    ENDLOOP.
*  SELECT * INTO CORRESPONDING FIELDS OF TABLE it_ekpo FROM ekpo WHERE ebeln in zebeln and LOEKZ = ''.

    LOOP AT  it_ekpo INTO wa_ekpo.
      READ TABLE it_konv WITH KEY ebeln = wa_ekpo-ebeln  kposn = wa_ekpo-ebelp.
      i_data-zkbetr = it_konv-kbetr.   "原厂价格
      i_data-zwaers = it_konv-waers.    "原厂币别
      i_data-zkpein = it_konv-kpein.    "原厂单位
      i_data-y_price = it_konv-kbetr / it_konv-kpein.  "原厂单价
      i_data-zycjg = i_data-y_price .
      i_data-ebeln =  wa_ekpo-ebeln.            "Document No. 采购凭证
      i_data-ebelp =  wa_ekpo-ebelp.            "Item 行项目号
      i_data-matnr =  wa_ekpo-matnr.            "Material No.
      i_data-txz01 =  wa_ekpo-txz01.            "Material Description
      i_data-menge =  wa_ekpo-menge.            "Quantity
      i_data-mwskz =  wa_ekpo-mwskz.
      i_data-meins =  wa_ekpo-meins.     "单位
      i_data-amount = wa_ekpo-netwr.     "s     ub.total
      i_data-netpr =  wa_ekpo-netpr.     "价格
      i_data-peinh =  wa_ekpo-peinh.     "价格单位
      i_data-v_price = wa_ekpo-netpr / wa_ekpo-peinh.   "dj
      i_data-v_dj  = i_data-v_price.
      i_data-flag  =  wa_ekpo-pstyp.            "Item category
      APPEND i_data.
      CLEAR: wa_ekpo, wa_eket,wa_tkomv.
    ENDLOOP.

    SELECT matnr wrkst FROM mara INTO TABLE i_wrkst FOR ALL ENTRIES IN i_data       " 2009.06.08
    WHERE matnr = i_data-matnr.

  ENDIF.

ENDFORM.                    "sub_get_data

*&---------------------------------------------------------------------*
*&      Form  sub_process_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM sub_process_data.

  SORT i_data BY ebeln.

  LOOP AT i_data.
************************取物料的大小量纲by augus 2012.08.10
    DATA: string1(21) TYPE c,
          string2(21) TYPE c,
          len TYPE i.
    SELECT SINGLE groes INTO i_data-groes FROM mara WHERE matnr = i_data-matnr.
    len  = STRLEN( i_data-groes ).
    IF len > 17.
      CALL FUNCTION 'STRING_SPLIT_AT_POSITION' "大小量纲拆分
    EXPORTING
      string  = i_data-groes
      pos     = 17
      langu   = '1'
    IMPORTING
      string1 = string1
      string2 = string2.
      i_data-zlg1 = string1.
      i_data-zlg2 = string2.
    ELSE.
      i_data-zlg1 = i_data-groes.
    ENDIF.
    CLEAR: string1, string2, len.

    len = STRLEN( i_data-txz01 ).
    IF len > 27.
      CALL FUNCTION 'STRING_SPLIT_AT_POSITION' "物料描述拆分
        EXPORTING
          string  = i_data-txz01
          pos     = 21
          langu   = '1'
        IMPORTING
          string1 = string1
          string2 = string2.
      i_data-ztxz01 = string1.
      i_data-ztxz02 = string2.
    ELSE.
      i_data-ztxz01 = i_data-txz01 .
    ENDIF.
    CLEAR: string1, string2, len.
**************************************************
    SELECT SINGLE eindt  FROM eket INTO i_data-eindt WHERE ebeln = i_data-ebeln AND ebelp = i_data-ebelp.
*    IF i_data-ebeln = zebeln.
*      v_total = v_total + i_data-amount.   "Total amount
*      v_total_c = v_total.
*    ENDIF.
*    zebeln = i_data-ebeln.
    SELECT SINGLE * FROM a003
      WHERE aland = 'CN' AND mwskz = i_data-mwskz.
    IF sy-subrc = 0.
      SELECT SINGLE * FROM konp
        WHERE knumh = a003-knumh.
      IF sy-subrc = 0.
        i_data-kbetr = konp-kbetr / 1000.
      ELSE.
        i_data-kbetr = 0.
      ENDIF.
    ENDIF.

    MODIFY i_data.
  ENDLOOP.

  LOOP AT i_header.
    SELECT SINGLE lifn2 INTO i_header-lifn2 FROM ekpa WHERE ebeln = i_header-ebeln AND  parvw = 'WL'.
    IF sy-subrc = 0.
      SELECT SINGLE eikto FROM lfm1 INTO i_header-eikto WHERE lifnr = i_header-lifn2   " i_header-lifnr     " 2014.08.11  改为临时供应商
                                                          AND ekorg = i_header-ekorg.

      SELECT SINGLE * FROM lfm1 WHERE lifnr = i_header-lifn2.  "i_header-lifnr  2014.08.11  改为临时供应商
*      IF lfm1-expvz = '2' .
*        i_header-lifnr = i_header-zlifnr.
*        SELECT SINGLE * FROM ztemp_vendor WHERE lifnr = i_header-zlifnr.
*        i_header-name1 = ztemp_vendor-name1. 
*        i_header-verkf = ztemp_vendor-verkf.
*        i_header-telf1 = ztemp_vendor-telf1.
*        i_header-addr = ztemp_vendor-ort01.
*        i_header-telfx = ztemp_vendor-telfx.
*        i_header-telf1 = ztemp_vendor-telf1.
*      ELSE.
      SELECT SINGLE name1 stcd1 stras telf1 telfx adrnr FROM lfa1
           INTO (i_header-name1, i_header-stcd1, i_header-addr,
                 i_header-telf1, i_header-telfx,lfa1-adrnr)
                                     WHERE lifnr = i_header-lifn2 .  "i_header-lifnr.  2014.08.11  改为临时供应商
      SELECT SINGLE smtp_addr                "get E_mail
        FROM adr6 INTO i_header-email
       WHERE addrnumber = lfa1-adrnr.

      SELECT SINGLE verkf                    "get contact person
     FROM lfm1 INTO i_header-verkf
     WHERE lifnr = i_header-lifn2 . "i_header-lifnr. 2014.08.11  改为临时供应商
*      ENDIF.
    ENDIF.
*********************税率************************
    SELECT SINGLE text1 FROM t007s INTO i_header-stext
    WHERE mwskz = i_header-mwskz AND spras = '1' AND kalsm = 'TAXCN'.
*************************************************

*******************************************************************************
    SELECT SINGLE werks  FROM ekpo INTO i_header-werks WHERE ebeln = i_header-ebeln.
    SELECT SINGLE ekgrp  FROM ekko INTO i_header-ekgrp WHERE ebeln = i_header-ebeln.

    SELECT SINGLE bsart  FROM ekko INTO i_header-bsart WHERE ebeln = i_header-ebeln.   " 2009.06.22
***********************

    SELECT SINGLE *                         "header data
      FROM ekko
     WHERE ebeln = i_header-ebeln.

    SELECT SINGLE *                         "Contract Person of Customer
      FROM t024
     WHERE ekgrp = i_header-ekgrp.

**************** 2009.10.20采购组的联系方式
    IF sy-subrc = 0.
      i_header-eknam = t024-eknam.
      i_header-v_telfx = t024-telfx.
      i_header-tel_number = t024-tel_number.
    ENDIF.

    MODIFY i_header.
    CLEAR i_header.
  ENDLOOP.
ENDFORM.                    "sub_process_data

*&---------------------------------------------------------------------*
*&      Form  sub_print_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM sub_print_data .
  DATA: index TYPE i,
        zindex TYPE i.
  DESCRIBE TABLE i_header LINES index.

  CALL FUNCTION 'OPEN_FORM'
    EXPORTING
      form                        = 'ZMMPRO03'
      language                    = sy-langu
      device                      = 'PRINTER'
      dialog                      = 'X'
      OPTIONS                     = zitcpo
    EXCEPTIONS
      canceled                    = 1
      device                      = 2
      form                        = 3
      OPTIONS                     = 4
      unclosed                    = 5
      mail_options                = 6
      archive_error               = 7
      invalid_fax_number          = 8
      more_params_needed_in_batch = 9
      spool_error                 = 10
      OTHERS                      = 11.
  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 i_header.
    zindex = sy-tabix.
    PERFORM read_data USING i_header.

    CALL FUNCTION 'WRITE_FORM'
      EXPORTING
        element = 'HEADER'
        window  = 'HEADER'.

    CALL FUNCTION 'WRITE_FORM'
      EXPORTING
        element = 'COMPANY'
        window  = 'COMPANY'.

    CALL FUNCTION 'WRITE_FORM'
      EXPORTING
        element = 'HEADER'
        window  = 'MAIN'.

    CALL FUNCTION 'WRITE_FORM'
      EXPORTING
        element = 'ITEM1'
        window  = 'MAIN'.
*  ***************************************************
    LOOP AT i_data WHERE ebeln = i_header-ebeln.
      CALL FUNCTION 'WRITE_FORM'
        EXPORTING
          element = 'ITEM2'
          window  = 'MAIN'.
*******************物料描述的拆分modify by 2012.08.10
*      IF i_data-ztxz02 IS NOT INITIAL OR i_data-zlg2 IS NOT INITIAL.
*        CALL FUNCTION 'WRITE_FORM'
*          EXPORTING
*            element = 'ITEM4'
*            window  = 'MAIN'.
*      ENDIF.


      READ TABLE i_wrkst WITH KEY matnr = i_data-matnr.        
      IF i_wrkst-wrkst <> ''.
        CALL FUNCTION 'WRITE_FORM'
          EXPORTING
            element = 'ITEM3'
            window  = 'MAIN'.
      ENDIF.
    ENDLOOP.

    CALL FUNCTION 'WRITE_FORM'
      EXPORTING
        element = 'FOOTER'
        window  = 'MAIN'.
    IF zindex < index."不是最好一页 sapscript的换页NEW-PAGE
      CALL FUNCTION 'WRITE_FORM'
        EXPORTING
          element = 'NEWPAGE'
          window  = 'MAIN'.
    ENDIF.
    CLEAR v_total.
  ENDLOOP.

  CALL FUNCTION 'CLOSE_FORM'.

ENDFORM.                    " sub_print_data

*&---------------------------------------------------------------------*
*&      Form  read_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM read_data USING i_header LIKE i_header.

  CLEAR: zwaers,zekgrp,v_bukrs,v_werks,t_zg,t_bz,v_vtext.
  SELECT SINGLE *  FROM ekko WHERE  ebeln = i_header-ebeln.
  zwaers = i_header-waers.
  zekgrp  = i_header-ekgrp.

  CASE i_header-werks.
    WHEN '1000'.
      v_bukrs = '1000工厂'.
      v_werks = '制造一部'.
      t_zg = '小凡、小诺'.
      t_bz = '小米'.
    WHEN OTHERS.
      v_werks = ''.
      t_zg = ''.
      t_bz = ''.
  ENDCASE.

  LOOP AT i_data WHERE ebeln = i_header-ebeln.
    v_total = v_total + i_data-amount.   "Total amount
    v_total_c = v_total.
  ENDLOOP.
  SELECT text1
  FROM t052u INTO  v_vtext  WHERE zterm = i_header-zterm. "付款方式
  ENDSELECT .
ENDFORM.                    "read_data

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值