..3 Программа печати
Создайте отчет Z_EMPLOYEELIST и скопируйте в него этот код:
REPORT z_employeelist .
* declare the context
DATA gt_context TYPE zcontext_employeelist .
* fill the context
PERFORM fill_context .
* call the form
CALL FUNCTION 'ZXLWB_CALLFORM'
EXPORTING
iv_formname = 'EMPLOYEELIST'
iv_context_ref = gt_context
EXCEPTIONS
process_terminated = 1
OTHERS = 2.
IF sy-subrc NE 0 .
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 .
ENDIF .
*&---------------------------------------------------------------------*
*& Form fill_context
*&---------------------------------------------------------------------*
FORM fill_context .
DATA:
ls_pa0001 TYPE pa0001 ,
lt_pa0001 TYPE STANDARD TABLE OF pa0001 ,
ls_pa0002 TYPE pa0002 ,
lv_plvar TYPE objec-plvar ,
ls_context_row TYPE zcontext_employeelist_row .
CALL FUNCTION 'RH_GET_PLVAR'
IMPORTING
plvar = lv_plvar
EXCEPTIONS
OTHERS = 1.
* loop at personal assignment
SELECT *
INTO TABLE lt_pa0001
FROM pa0001
WHERE begda LE sy-datum
AND endda GE sy-datum .
LOOP AT lt_pa0001 INTO ls_pa0001 .
CLEAR ls_context_row .
*------------ read text of position
CALL FUNCTION 'RH_READ_OBJECT'
EXPORTING
plvar = lv_plvar
otype = 'S'
objid = ls_pa0001-plans
begda = ls_pa0001-begda
endda = ls_pa0001-endda
IMPORTING
stext = ls_context_row-position
EXCEPTIONS
OTHERS = 0.
*------------ read personal data
SELECT SINGLE *
INTO ls_pa0002
FROM pa0002
WHERE pernr EQ ls_pa0001-pernr
AND begda LE sy-datum
AND endda GE sy-datum .
ls_context_row-emp_number = ls_pa0002-pernr .
ls_context_row-last_name = ls_pa0002-nachn .
ls_context_row-first_name = ls_pa0002-vorna .
ls_context_row-birth_date = ls_pa0002-gbdat .
ls_context_row-nationality = ls_pa0002-natio .
*------------ read photo of the employee (get JPG-file as rawdata)
PERFORM get_photo_rawdata
USING ls_pa0002-pernr
CHANGING ls_context_row-photo_rawdata .
CHECK ls_context_row-photo_rawdata IS NOT INITIAL .
APPEND ls_context_row TO gt_context .
ENDLOOP .
ENDFORM . "fill_context
*&---------------------------------------------------------------------*
*& Form get_photo_rawdata
*&---------------------------------------------------------------------*
* read photo of the employee (get JPG-file as rawdata)
*----------------------------------------------------------------------*
FORM get_photo_rawdata USING pv_pernr TYPE pernr-pernr
CHANGING cv_photo_rawdata TYPE xstring .
CLEAR cv_photo_rawdata .
DATA:
lv_objkey TYPE swotobjid-objkey ,
ls_connections TYPE bdn_con ,
lt_connections TYPE STANDARD TABLE OF bdn_con .
DATA:
lv_archiv_id TYPE toaar-archiv_id ,
lv_document_class TYPE toadv-doc_type ,
lv_document_type TYPE toav0-ar_object ,
lv_archiv_doc_id TYPE sapb-sapadokid ,
lv_fullpath TYPE char255 .
DATA:
lv_fullpath_string TYPE string ,
lt_photo_rawdata TYPE STANDARD TABLE OF w3mime ,
lv_photo_filelength TYPE i ,
lv_rc TYPE i .
lv_objkey = pv_pernr .
CALL FUNCTION 'BDS_ALL_CONNECTIONS_GET'
EXPORTING
classname = 'PREL'
classtype = 'CL'
objkey = lv_objkey
TABLES
all_connections = lt_connections
EXCEPTIONS
OTHERS = 5.
CHECK sy-subrc EQ 0 .
LOOP AT lt_connections INTO ls_connections
WHERE doc_type EQ 'HRICOLFOTO'
OR doc_type EQ 'HRIEMPFOTO' .
lv_archiv_id = ls_connections-contrep .
lv_document_class = ls_connections-docuclass .
lv_document_type = ls_connections-doc_type .
lv_archiv_doc_id = ls_connections-bds_docid .
EXIT .
ENDLOOP .
CHECK sy-subrc EQ 0 .
CALL FUNCTION 'ALINK_DOCUMENTS_GET_CLIENT'
EXPORTING
archiv_id = lv_archiv_id
document_class = lv_document_class
document_type = lv_document_type
archiv_doc_id = lv_archiv_doc_id
IMPORTING
retfilename = lv_fullpath
EXCEPTIONS
OTHERS = 2.
CHECK sy-subrc EQ 0
AND lv_fullpath IS NOT INITIAL .
lv_fullpath_string = lv_fullpath .
cl_gui_frontend_services=>gui_upload(
EXPORTING filename = lv_fullpath_string
filetype = 'BIN'
IMPORTING filelength = lv_photo_filelength
CHANGING data_tab = lt_photo_rawdata ) .
CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'
EXPORTING
input_length = lv_photo_filelength
IMPORTING
buffer = cv_photo_rawdata
TABLES
binary_tab = lt_photo_rawdata.
cl_gui_frontend_services=>file_delete(
EXPORTING filename = lv_fullpath_string
CHANGING rc = lv_rc ) .
ENDFORM . "get_photo_rawdata