*&---------------------------------------------------------------------*
*& 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 a LEFT JOIN vbap AS b 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 i 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 : i TYPE i VALUE 0 .
LOOP AT it_vbak WHERE che EQ 'X' .
i = i + 1 .
ENDLOOP .
IF i = 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
*& 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 a LEFT JOIN vbap AS b 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 i 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 : i TYPE i VALUE 0 .
LOOP AT it_vbak WHERE che EQ 'X' .
i = i + 1 .
ENDLOOP .
IF i = 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