打印销售报价单

*&---------------------------------------------------------------------*
*& Report  ZSDR001
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  zsdr001 .

TYPE-POOLS :slis .
TABLES :vbak vbap vbep konv konp .

DATA itab  LIKE  TABLE  OF zsdsf01  WITH  HEADER  LINE .
DATA gt_sf  LIKE  TABLE  OF zsdsf01  WITH  HEADER  LINE .

DATA : BEGIN  OF wa_vbak ,
  vbeln  TYPE vbak -vbeln ,
  vkorg  TYPE vbak -vkorg ,
  vtweg  TYPE vbak -vtweg ,
  spart  TYPE vbak -spart ,
  auart  TYPE vbak -auart ,
  kunnr  TYPE vbak -kunnr ,
  angdt  TYPE vbak -angdt ,
  vsnmr_v  TYPE vbak -vsnmr_v ,
  knumv  TYPE vbak -knumv ,
  che ,
   END  OF wa_vbak .
DATA :it_vbak  LIKE  TABLE  OF wa_vbak  WITH  HEADER  LINE .
DATA :it_vbak1  LIKE  TABLE  OF wa_vbak  WITH  HEADER  LINE .

DATA BEGIN  OF wa_konv ,
  knumv  TYPE konv -knumv ,
  kposn  TYPE konv -kposn ,
  kschl   TYPE konv -kschl ,
  kumne   TYPE konv -kumne ,
  kumza  TYPE konv -kumza ,
  kbetr  TYPE konv -kbetr ,
  kpein  TYPE konv -kpein ,
   END  OF wa_konv .
DATA :it_konv  LIKE  TABLE  OF wa_konv  WITH  HEADER  LINE .

DATA p_vbeln  TYPE vbak -vbeln .
DATA p_num  TYPE  i .
DATA p_flag  TYPE  i .
DATA g_lines  TYPE  i .

DATA :  c_form_name        TYPE tdsfname  ,
       c_form_title       TYPE string .


DATA gv_title  TYPE lvc_title .
DATA gs_layout  TYPE  slis_layout_alv ,
      gt_fields   TYPE  slis_t_fieldcat_alv ,
      gs_fields   TYPE   LINE   OF  slis_t_fieldcat_alv .

SELECTION-SCREEN  BEGIN  OF   BLOCK block1  WITH  FRAME  TITLE  text - 001 .
SELECT-OPTIONS s_vkorg  FOR vbak -vkorg .     "销售组织
SELECT-OPTIONS s_vtweg  FOR vbak -vtweg .    "分销渠道
SELECT-OPTIONS s_kunnr  FOR vbak -kunnr .      "客户编号
SELECT-OPTIONS s_vbeln  FOR vbak -vbeln .        "报价单号
SELECTION-SCREEN  END  OF  BLOCK block1 .

START-OF-SELECTION .
   PERFORM getdata .
   PERFORM alvdata .

*&---------------------------------------------------------------------*
*&      Form  getdata
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM getdata .
   SELECT
    a ~vbeln
    a ~vkorg
    a ~vtweg
    a ~spart
    a ~auart
    a ~kunnr
    a ~angdt
    a ~bnddt
    a ~vsnmr_v
    a ~knumv
      INTO CORRESPONDING  FIELDS  OF  TABLE it_vbak  FROM vbak  AS a   WHERE a ~vkorg  IN s_vkorg  AND a ~vtweg  IN s_vtweg  AND a ~kunnr  IN s_kunnr  AND a ~vbeln  IN s_vbeln .
ENDFORM .                     "getdata


*&---------------------------------------------------------------------*
*&      Form  getdetaildata
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM getdetaildata .
   IF  NOT it_vbak[]  IS  INITIAL .
     LOOP  AT it_vbak  WHERE che  EQ  'X' .
      it_vbak1  it_vbak .
       APPEND it_vbak1 .
     ENDLOOP .

     SELECT
  a ~vbeln
  a ~vkorg
  a ~vtweg
  a ~spart
  a ~auart
  a ~kunnr
  a ~angdt
  a ~bnddt
  a ~vsnmr_v
  a ~knumv
  a ~erdat
  b ~posnr
  b ~matnr
  b ~kwmeng
  b ~meins
  b ~netpr
    INTO CORRESPONDING  FIELDS  OF  TABLE itab  FROM vbak  AS LEFT  JOIN vbap  AS ON a ~vbeln  b ~vbeln  FOR  ALL ENTRIES  IN it_vbak1  WHERE a ~vbeln  it_vbak1 -vbeln .
   ENDIF .

   IF  NOT itab[]  IS  INITIAL .
     SORT itab  BY vbeln  posnr .
     DATA num  TYPE  VALUE  1 .

     LOOP  AT itab .
      itab -cursornum  num .
      num  num +  1 .
       MODIFY itab .
     ENDLOOP .

     SELECT
          knumv
          kposn
          kschl      "条件类型
          kumne    "分母cconde
          kumza     "分子
          kbetr     "金额
          kpein    "定价单位
           INTO CORRESPONDING  FIELDS  OF  TABLE it_konv  FROM konv  FOR  ALL ENTRIES  IN itab  WHERE knumv  itab -knumv  AND kposn  itab -posnr .
   ENDIF .

   LOOP  AT itab .
     IF itab -matnr  'tooling'  OR itab -matnr  'TOOLING' .
      itab -linetooling  itab -kwmeng * itab -netpr .
     ELSE .
       LOOP  AT it_konv  WHERE knumv  itab -knumv  AND kposn  itab -posnr .
         IF it_konv -kschl  'ZQP1' .
          itab -matcost  it_konv -kumne / it_konv -kumza  it_konv -kbetr / it_konv -kpein  ) .
         ELSEIF it_konv -kschl  'ZQP2' .
          itab -scrap  itab -matcost * it_konv -kbetr /  100 .
         ELSEIF it_konv -kschl  'ZQP3' .
          itab -smd  it_konv -kumne / it_konv -kumza  it_konv -kbetr / it_konv -kpein  ) .
         ELSEIF it_konv -kschl  'ZQP4' .
          itab -winding  it_konv -kumne / it_konv -kumza  it_konv -kbetr / it_konv -kpein  ) .
         ELSEIF it_konv -kschl  'ZQP5' .
          itab -assembly  it_konv -kumne / it_konv -kumza  it_konv -kbetr / it_konv -kpein  ) .
         ELSEIF it_konv -kschl  'ZQP6' .
          itab -burnin  it_konv -kumne / it_konv -kumza  it_konv -kbetr / it_konv -kpein  ) .
         ELSEIF it_konv -kschl  'ZQP7' .
          itab -testing  it_konv -kumne / it_konv -kumza  it_konv -kbetr / it_konv -kpein  ) .
          itab -totalmatcost  itab -matcost + itab -scrap + itab -smd + itab -assembly + itab -burnin .
         ELSEIF it_konv -kschl  'ZQPB' .
          itab -sg  itab -totalmatcost * it_konv -kbetr /  100 .
         ELSEIF it_konv -kschl  'ZQPC' .
          itab -profit  itab -totalmatcost * it_konv -kbetr /  100 .
          itab -unitprice  itab -totalmatcost + itab -sg + itab -profit .
         ELSEIF it_konv -kschl  'ZQP9' .
          itab -vat  itab -unitprice * it_konv -kbetr /  100 .
         ENDIF .
        itab -totalprice  itab -unitprice + itab -vat .
         MODIFY itab .
       ENDLOOP .
     ENDIF .

     SELECT  SINGLE trmtyp  INTO itab -trmtyp  FROM vbkd  WHERE vbeln  itab -vbeln .
     SELECT  SINGLE zlsch  INTO itab -zlsch  FROM vbkd  WHERE vbeln  itab -vbeln .
     DATA :startdate  TYPE d enddate  TYPE d .
     SELECT  SINGLE angdt bnddt  INTO  (startdate enddate FROM vbak  WHERE vbeln  itab -vbeln .
     DATA aa  TYPE  i .
     CALL  FUNCTION  'DAYS_BETWEEN_TWO_DATES'
       EXPORTING
        i_datum_bis              enddate
        i_datum_von              startdate
       IMPORTING
        e_tage                   aa
       EXCEPTIONS
        days_method_not_defined  1
         OTHERS                   2 .
    itab -validdays  aa .
     MODIFY itab .
   ENDLOOP .




ENDFORM .                     "getdata


*&---------------------------------------------------------------------*
*&      Form  alvdata
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM alvdata .
  gs_layout -colwidth_optimize  'X' .
  gs_layout -box_fieldname  'CHE' .
  gs_layout -zebra  'X' .
   REFRESH gt_fields .
   CLEAR gs_fields .

  gs_fields -fieldname   =   'VKORG' .
  gs_fields -seltext_l   =   '销售组织' .
   APPEND  gs_fields   TO  gt_fields .
   CLEAR  gs_fields .

  gs_fields -fieldname   =   'VTWEG' .
  gs_fields -seltext_l   =   '分销渠道' .
   APPEND  gs_fields   TO  gt_fields .
   CLEAR  gs_fields .

  gs_fields -fieldname   =   'SPART' .
  gs_fields -seltext_l   =   '产品组' .
   APPEND  gs_fields   TO  gt_fields .
   CLEAR  gs_fields .

  gs_fields -fieldname   =   'KUNNR' .
  gs_fields -seltext_l   =   '客户编号' .
   APPEND  gs_fields   TO  gt_fields .
   CLEAR  gs_fields .

  gs_fields -fieldname   =   'VBELN' .
  gs_fields -seltext_l   =   '报价单号' .
   APPEND  gs_fields   TO  gt_fields .
   CLEAR  gs_fields .

  gs_fields -fieldname   =   'AUART' .
  gs_fields -seltext_l   =   '报价单类型' .
   APPEND  gs_fields   TO  gt_fields .
   CLEAR  gs_fields .

  gs_fields -fieldname   =   'VSNMR_V' .
  gs_fields -seltext_l   =   '报价单版本号' .
   APPEND  gs_fields   TO  gt_fields .
   CLEAR  gs_fields .

  gs_fields -fieldname   =   'ANGDT' .
  gs_fields -seltext_l   =   '报价单有效开始日期' .
   APPEND  gs_fields   TO  gt_fields .
   CLEAR  gs_fields .

  gs_fields -fieldname   =   'BNDDT' .
  gs_fields -seltext_l   =   '报价单有效截止日期' .
   APPEND  gs_fields   TO  gt_fields .
   CLEAR  gs_fields .

   CALL  FUNCTION  'REUSE_ALV_GRID_DISPLAY'
     EXPORTING
      i_callback_program        sy -repid
      i_callback_pf_status_set  'SET_PF'
      i_callback_user_command   'USER_COM'
      i_grid_title              gv_title
      is_layout                 gs_layout
      it_fieldcat               gt_fields
      i_save                    'X'
     TABLES
      t_outtab                  it_vbak
     EXCEPTIONS
      program_error             1
       OTHERS                    2 .

ENDFORM .                     "alvdata

*&---------------------------------------------------------------------*
*&      Form  set_fp
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->EXTAB      text
*----------------------------------------------------------------------*
FORM  set_pf   USING    extab   TYPE  slis_t_extab .
   SET   PF-STATUS   'ZSDR001' .
ENDFORM .                     "set_pf

*&---------------------------------------------------------------------*
*&      Form  user_com
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->R_UCOMM      text
*      -->RS_SELFIELD  text
*----------------------------------------------------------------------*
FORM user_com  USING r_ucomm  LIKE sy -ucomm
      rs_selfield  TYPE slis_selfield .

   DATA lr_grid  TYPE  REF  TO cl_gui_alv_grid ,
        myindex  TYPE sy -tabix .

   CALL  FUNCTION  'GET_GLOBALS_FROM_SLVC_FULLSCR'
     IMPORTING
      e_grid  lr_grid .
   CALL  METHOD lr_grid ->check_changed_data .
  rs_selfield - refresh  'X' .

   CASE r_ucomm .
     WHEN  '&PRQUO' .
       DATA TYPE  VALUE  0 .
       LOOP  AT it_vbak  WHERE che  EQ  'X' .
         1 .
       ENDLOOP .
       IF  0 .
         MESSAGE : '请选择需要打印的列'  TYPE  'E' .
       ENDIF .

       CLEAR itab .
       REFRESH itab[] .
       CLEAR it_vbak1 .
       REFRESH it_vbak1[] .

      p_vbeln  '' .
      p_num  1 .
      p_flag  0 .
       PERFORM getdetaildata .
       PERFORM separateprint .

   ENDCASE .
   CLEAR r_ucomm .

ENDFORM .                     "user_com

*&---------------------------------------------------------------------*
*&      Form  separateprint
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM separateprint .

   CLEAR gt_sf .
   REFRESH  gt_sf[] .
   DESCRIBE  TABLE itab  LINES g_lines .
   LOOP  AT itab  WHERE cursornum >= p_num  AND cursornum <= g_lines .
     IF p_num <= g_lines .
       IF p_flag  0 .
        p_vbeln  itab -vbeln .
       ENDIF .
       IF itab -vbeln  EQ p_vbeln .
        gt_sf  itab .
         APPEND gt_sf .
        p_num  p_num +  1 .
        p_flag  1 .
         IF p_num > g_lines .
           PERFORM printdata .     "只选中一条报价单打印时
         ENDIF .
       ELSE .                             "选中多条报价单打印时
        p_num  p_num +  1 .
        p_flag  0 .
         PERFORM printdata .
       ENDIF .
     ENDIF .
   ENDLOOP .

ENDFORM .                     "separateprint
*&---------------------------------------------------------------------*
*&      Form  printdata
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM printdata .
   DATA f_index  LIKE sy -tabix .
   DATA lines_len  TYPE  i .
   DATA ls_control_parameters   TYPE ssfctrlop .
   DATA ls_output_options       TYPE ssfcompop .
   DATA l_smf_name              TYPE rs38l_fnam .

   SORT gt_sf  BY vbeln .

  c_form_name  'ZSDSF001' .           "对应的smartform的名称
  ls_output_options -tdimmed        'X' .
  ls_output_options -tdcopies       '1' .
  ls_output_options -tdnoprint      '' .
  ls_output_options -tddelete       'X' .

  ls_control_parameters -no_dialog  '' .
  ls_control_parameters -preview    'X' .
  ls_control_parameters -langu      '1' .

   CALL  FUNCTION  'SSF_FUNCTION_MODULE_NAME'      "这个函数主要用来取你要调用的function module
     EXPORTING
      formname  c_form_name         "将smartform赋值给formname
     IMPORTING
      fm_name   l_smf_name .

   CALL  FUNCTION l_smf_name      "调用smartform,这里是以function的方式和smartform交互
     EXPORTING
      control_parameters  ls_control_parameters
      output_options      ls_output_options
      user_settings       'X'
     TABLES
      it_tab              gt_sf[]          "将内表的内容传递到smartfrom
     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 .
   ENDIF .


   CLEAR gt_sf .
   REFRESH  gt_sf[] .
   PERFORM separateprint .
ENDFORM .                     "printdata
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值