..3 Программа печати
Создайте отчет Z_ADMISSION_FORM и скопируйте в него этот код:
REPORT z_admission_form.
* declare parameters
PARAMETERS p_pernr TYPE pernr_d OBLIGATORY .
* declare the context
DATA gs_context TYPE zcontext_admission_form .
* fill the context
PERFORM fill_context .
* call the form
CALL FUNCTION 'ZXLWB_CALLFORM'
EXPORTING
iv_formname = 'ADMISSION_FORM'
iv_context_ref = gs_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_pa0002 TYPE pa0002 ,
ls_pa0006 TYPE pa0006 ,
lv_years TYPE i .
*------------ read personal data
SELECT SINGLE *
INTO ls_pa0002
FROM pa0002
WHERE pernr EQ p_pernr
AND begda LE sy-datum
AND endda GE sy-datum .
*------------ read address
SELECT SINGLE *
INTO ls_pa0006
FROM pa0006
WHERE pernr EQ p_pernr
AND begda LE sy-datum
AND endda GE sy-datum .
*------------ form fields
* field: Name
CONCATENATE ls_pa0002-vorna
ls_pa0002-nachn
INTO gs_context-name SEPARATED BY space .
TRANSLATE gs_context-name TO UPPER CASE .
* field: Name at birth
gs_context-name_at_birth = ls_pa0002-name2 .
TRANSLATE gs_context-name_at_birth TO UPPER CASE .
* field: Date of birth
CONCATENATE ls_pa0002-gbdat+6(2)
ls_pa0002-gbdat+4(2)
ls_pa0002-gbdat+0(4)
INTO gs_context-date_of_birth .
* field: Age
CALL FUNCTION 'HR_99S_INTERVAL_BETWEEN_DATES'
EXPORTING
begda = ls_pa0002-gbdat
endda = sy-datum
IMPORTING
c_years = lv_years.
gs_context-age = lv_years .
* field: Sex
CASE ls_pa0002-gesch .
WHEN '1' . gs_context-sex = 'M' . " -->> Male
WHEN '2' . gs_context-sex = 'F' . " -->> Female
ENDCASE .
* field: Personal address
CONCATENATE ls_pa0006-stras
ls_pa0006-locat
ls_pa0006-ort01
ls_pa0006-ort02
ls_pa0006-state
ls_pa0006-pstlz
ls_pa0006-land1
INTO gs_context-personal_address SEPARATED BY space .
CONDENSE gs_context-personal_address .
TRANSLATE gs_context-personal_address TO UPPER CASE .
* field: Contact number
gs_context-contact_number = ls_pa0006-telnr .
*------------ read photo of the employee (get JPG-file as rawdata)
PERFORM get_photo_rawdata
USING p_pernr
CHANGING gs_context-photo_rawdata .
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