SRC Cobra
SRC Cobra
SRC Cobra
END-OF-SELECTION.
* 1. Create Trailer PERFORM f_process_trailer.
* 2. Putting the file out there in the output path
PERFORM f_write_output.
* 3. Building IT0211 and deleting T5UDB
IF ( p_sim IS INITIAL ).
PERFORM f_build_it0211.
PERFORM f_delete_t5udb.
ENDIF.
* 3. Writing errors +-+
DESCRIBE TABLE it_errors LINES n_e_cnt.
IF n_e_cnt GT 0.
PERFORM f_write_error_report.
ENDIF.
* 4. writing control statistics +-+
PERFORM f_write_control_stats.
* 5. FTPing output to AETNA recipient, updating ZTABLE +-+
IF p_sim IS INITIAL.
IF ( n_rec_sent GT 0 ).
PERFORM update_z_table.
*
if there weren't any results in i_rec
ELSE.
WRITE text-m01 TO it_email_msg.
APPEND it_email_msg.
CLEAR it_email_msg.
ENDIF.
ENDIF.
* 6. Email production support with control stats +-+
*
even in non-simulation mode
+-+
PERFORM f_send_email_control_stats.
* 7. Archiving output +-+
PERFORM f_archive_output.
* 8. Update Interface Log Table
IF p_sim IS INITIAL.
PERFORM f_complete_interface_log.
ENDIF.
*&---------------------------------------------------------------------*
*&
Form F_INIT
*&---------------------------------------------------------------------*
*
Set up Selection screen defaults
*----------------------------------------------------------------------*
FORM f_init.
* Set User name
p_sap_id = sy-uname.
*Initialize the logical path
CONCATENATE p_path sy-sysid INTO p_path.
CONCATENATE p_apath sy-sysid INTO p_apath.
" F_INIT
*&---------------------------------------------------------------------*
*&
Form F_HEADER
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM f_header.
DATA: w_title1 TYPE sy-title.
w_title1 = p_fname.
CALL FUNCTION 'Z_ERR_REPORT_HEADER'
EXPORTING
title1 = text-h01
title2 = text-h05
title3 = w_title1
prog = sy-cprog
EXCEPTIONS
OTHERS = 1.
IF sy-subrc <> 0.
WRITE: / text-525
EXIT.
UNDER text-h02.
ENDIF.
SKIP 1.
ENDFORM.
" F_HEADER
*&---------------------------------------------------------------------*
*&
Form F_START_INTERFACE_LOG
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM f_start_interface_log.
SELECT MAX( seqno ) INTO w_seq FROM zinterface_log
WHERE interface_id = c_interface_name.
CLEAR zinterface_log.
zinterface_log-interface_id
w_seq = w_seq + 1.
zinterface_log-seqno
zinterface_log-var_name
zinterface_log-start_date
zinterface_log-start_time
zinterface_log-userid
INSERT zinterface_log.
COMMIT WORK.
ENDFORM.
= c_interface_name.
=
=
=
=
=
w_seq.
sy-slset.
sy-datum.
sy-uzeit.
sy-uname.
" F_START_INTERFACE_LOG
*&---------------------------------------------------------------------*
*&
Form F_INIT_TABLES
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM f_init_tables.
* select from T5UDB into it_T5UDB all records that occurred after
* the last run date for the program
SELECT * INTO TABLE it_t5udb FROM t5udb.
* error processing for the select from T5UDB
IF sy-subrc NE 0.
WRITE :/ text-e17 UNDER text-h02.
EXIT.
ENDIF.
* sorting it_T5UDB
SORT it_t5udb BY pernr ASCENDING dsubt ASCENDING.
* Move relevant fields to It211 for update
it_t5udb_cop[] = it_t5udb[].
ENDFORM.
" F_INIT_TABLES
*&---------------------------------------------------------------------*
*&
Form F_PROCESS_PERNR
*&---------------------------------------------------------------------*
*
Process Employee records and build File lines
*----------------------------------------------------------------------*
FORM f_process_pernr.
DATA: lt_pernr TYPE STANDARD TABLE OF t5udb,
ls_pernr TYPE t5udb.
TYPE c.
TYPE i.
TYPE i.
wl_string = param_string.
wl_pos = 0.
wl_len = strlen( wl_string ).
DO.
IF wl_pos GT wl_len.
EXIT.
ENDIF.
IF wl_string+wl_pos(1)
wl_string+wl_pos(1)
wl_string+wl_pos(1)
wl_string+wl_pos(1)
wl_string+wl_pos(1)
wl_string+wl_pos(1)
wl_string+wl_pos(1)
wl_string+wl_pos(1)
=
=
=
=
=
=
=
=
','
'#'
':'
'"'
'.'
'-'
'('
')'
OR
OR
OR
OR
OR
OR
OR
.
"D03K917155
"D03K917155
IF sy-subrc <> 0.
EXIT.
ENDIF.
*--INSERT BEGIN D03K917155
IF sy-index GT 1.
CONCATENATE lv_file <fs> INTO lv_file RESPECTING BLANKS.
ELSE.
lv_file = <fs>.
ENDIF.
*--INSERST END D03K917155
ENDDO.
TRANSLATE lv_file TO UPPER CASE.
APPEND lv_file TO it_output_msg.
TRANSFER lv_file TO v_flnm.
ENDIF.
UNASSIGN <fs>.
CLEAR lv_file.
ENDFORM.
" F_TRANSFER_DATA
*&---------------------------------------------------------------------*
*&
Form F_WRITE_ERROR_REPORT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM f_write_error_report.
DATA: v_cnt(2) TYPE n.
DESCRIBE TABLE it_errors LINES v_cnt.
* if there are any error records
IF v_cnt GT 0.
SKIP.
*
LOOP AT it_errors.
WRITE AT 2 it_errors-pernr.
WRITE AT 15 it_errors-sever.
WRITE AT 20 it_errors-etext.
NEW-LINE.
ENDLOOP.
ENDIF.
ENDFORM.
" F_WRITE_ERROR_REPORT
*&---------------------------------------------------------------------*
*&
Form F_WRITE_CONTROL_STATS
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM f_write_control_stats.
SKIP 2.
WRITE:/ text-c01, 60 n_rec_read,
/ text-c02, 60 n_e_cnt,
*
/ text-c05, 60 n_rec_bypass,
/ text-c03, 60 n_rec_process,
/ text-c04, 60 n_rec_sent,
/ text-c07, 60 n_211_cnt.
SKIP 1.
ENDFORM.
" F_WRITE_CONTROL_STATS
*&---------------------------------------------------------------------*
*&
Form UPDATE_Z_TABLE
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM update_z_table.
ADD 1 TO v_seq_num.
PERFORM f_enqueue.
MOVE: sy-repid
v_seq_num
sy-datum
sy-uname
sy-uzeit
sy-datum
TO
TO
TO
TO
TO
TO
zpa_intf_dateto-program_name,
zpa_intf_dateto-sequence,
zpa_intf_dateto-last_date_to,
zpa_intf_dateto-last_updated_by,
zpa_intf_dateto-last_time,
zpa_intf_dateto-last_update_date.
INSERT zpa_intf_dateto.
IF sy-subrc NE 0.
WRITE:/ text-526.
ENDIF.
PERFORM f_dequeue.
ENDFORM.
" UPDATE_Z_TABLE
*&---------------------------------------------------------------------*
*&
Form F_SEND_EMAIL_CONTROL_STATS
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM f_send_email_control_stats.
it_email_msg-line = text-d07.
APPEND it_email_msg.
it_email_msg-line+0(20) = text-d05.
it_email_msg-line+21(32) = text-d06.
APPEND it_email_msg.
it_email_msg-line = text-d07.
APPEND it_email_msg.
it_email_msg-line+0(60) = text-d01.
it_email_msg-line+61(10) = n_rec_read.
APPEND it_email_msg.
CLEAR it_email_msg.
APPEND it_email_msg.
it_email_msg-line+0(60) = text-d03.
it_email_msg-line+61(10) = n_emp_error.
APPEND it_email_msg.
it_email_msg-line+0(60) = text-d04.
it_email_msg-line+61(10) = n_rec_process.
APPEND it_email_msg.
it_email_msg-line+0(60) = text-c05.
it_email_msg-line+61(10) = n_rec_bypass.
APPEND it_email_msg.
CLEAR it_email_msg.
APPEND it_email_msg.
IF p_sap_id <> ''.
CALL FUNCTION 'Z_SENDEMAIL'
EXPORTING
interface_name
= c_interface_name
email_id
= p_sap_id
email_title
= c_email_title
TABLES
email_msg
= it_email_msg
EXCEPTIONS
email_not_sent
= 1
no_dlist_defined = 2
email_sent_not_all = 3
OTHERS
= 4.
CASE sy-subrc.
WHEN 1.
WRITE: / text-520
WHEN 2.
WRITE: / text-521
WHEN 3.
WRITE: / text-522
WHEN 4.
WRITE: / text-523
ENDCASE.
UNDER text-h02.
UNDER text-h02.
UNDER text-h02.
UNDER text-h02.
ENDIF.
ENDFORM.
" F_SEND_EMAIL_CONTROL_STATS
*&---------------------------------------------------------------------*
*&
Form F_ARCHIVE_OUTPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM f_archive_output.
PERFORM f_log_archname USING p_apath
v_arch_file
c_interface_name.
* transferring contents of outbound_rec to specified archive path
IF NOT ( p_apath IS INITIAL ).
PERFORM f_arch_file USING v_flnm
v_arch_file
CHANGING v_rcode.
IF v_rcode <> 0.
WRITE: / v_arch_file,
text-e07.
ELSE.
WRITE: / text-524,
v_arch_file.
ENDIF.
ENDIF.
ENDFORM.
" F_ARCHIVE_OUTPUT
*&---------------------------------------------------------------------*
*&
Form F_COMPLETE_INTERFACE_LOG
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM f_complete_interface_log.
zinterface_log-interface_id
zinterface_log-seqno
zinterface_log-var_name
zinterface_log-end_date
zinterface_log-end_time
zinterface_log-records_read
zinterface_log-processed
zinterface_log-errors
zinterface_log-skipped
UPDATE zinterface_log.
COMMIT WORK.
ENDFORM.
=
=
=
=
=
=
=
=
=
c_interface_name.
w_seq.
sy-slset.
sy-datum.
sy-uzeit.
n_rec_read.
n_rec_process.
n_emp_error.
n_rec_bypass.
" F_COMPLETE_INTERFACE_LOG
*&---------------------------------------------------------------------*
*&
Form F_ENQUEUE
*&---------------------------------------------------------------------*
*
THIS ROUTINE IS TO LOCK THE TABLE ZPA_INTF_DATETO
*----------------------------------------------------------------------*
* --> NO PARAMETERS
* <-- NO PARAMETERS
*----------------------------------------------------------------------*
FORM f_enqueue.
CALL FUNCTION 'ENQUEUE_EZPA_INTF_DATETO'
EXPORTING
mode_zpa_intf_dateto = 'E'
mandt
= sy-mandt
EXCEPTIONS
foreign_lock
= 1
system_failure
= 2
OTHERS
= 3.
IF sy-subrc NE 0.
MESSAGE e018 WITH 'ZPA_INTF_DATETO'.
ENDIF.
ENDFORM.
" F_ENQUEUE
*&---------------------------------------------------------------------*
*&
Form F_DEQUEUE
*&---------------------------------------------------------------------*
*
THIS ROUTINE IS TO UNLOCK THE THE TABLE zpa_intf_dateto
*----------------------------------------------------------------------*
* --> NO PARAMETERS
* <-- NO PARAMETERS
*----------------------------------------------------------------------*
FORM f_dequeue.
CALL FUNCTION 'DEQUEUE_EZPA_INTF_DATETO'
EXPORTING
mode_zpa_intf_dateto = 'E'
mandt
= sy-mandt.
ENDFORM.
" F_DEQUEUE
*&---------------------------------------------------------------------*
*&
Form F_BUILD_IT0211
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM f_build_it0211.
DATA: x_p0211
x_p0006
x_subrc
x_begda
x_endda
x_return
x_pernr
LIKE
LIKE
LIKE
TYPE
TYPE
LIKE
LIKE
p0211,
p0006 OCCURS 0 WITH HEADER LINE,
sy-subrc,
p0211-begda,
p0211-endda,
bapireturn1,
p0211-pernr.
x_p0211-bstat = wa_t5udb-bstat.
** lock the employee record for update **
PERFORM enqueue_pernr USING wa_t5udb-pernr x_subrc.
IF x_subrc = 0.
CALL FUNCTION
EXPORTING
infty
number
subtype
record
operation
nocommit
IMPORTING
return
'HR_INFOTYPE_OPERATION'
=
=
=
=
=
=
'0211'
x_p0211-pernr
x_p0211-subty
x_p0211
'INS'
' '
= x_return.
IF x_return-message IS INITIAL.
n_211_cnt = n_211_cnt + 1.
ELSE.
** errors encountered, write to error log **
it_errors-pernr = x_p0211-pernr.
it_errors-etext = x_return-message.
APPEND it_errors.
CLEAR it_errors.
n_emp_error = n_emp_error + 1.
ENDIF.
* release lock
PERFORM dequeue_pernr USING wa_t5udb-pernr.
ENDIF.
ENDIF.
ENDLOOP.
ENDFORM.
"f_build_it0211
*---------------------------------------------------------------------*
*
FORM enqueue_pernr
*
*---------------------------------------------------------------------*
* Lock the employee record for update
*
*---------------------------------------------------------------------*
* --> p_subrc
- return code
*
*---------------------------------------------------------------------*
FORM enqueue_pernr USING p_pernr p_subrc.
CALL FUNCTION 'HR_BEN_ENQUEUE_PERSONAL_NUMBER'
EXPORTING
pernr
= p_pernr
reaction
= c_no
IMPORTING
subrc
= p_subrc
TABLES
error_table = it_benerr.
IF p_subrc <> 0.
** errors encountered, write to error log **
PERFORM collect_errors.
ENDIF.
ENDFORM.
"enqueue_pernr
*---------------------------------------------------------------------*
*
FORM dequeue_pernr
*
*---------------------------------------------------------------------*
* Unlock the employee record
*
*---------------------------------------------------------------------*
FORM dequeue_pernr USING p_pernr.
DATA: v_subrc
LIKE sy-subrc.
"dequeue_pernr
*&---------------------------------------------------------------------*
*&
Form F_DELETE_T5UDB
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM f_delete_t5udb.
DELETE FROM t5udb WHERE pernr NE '00000000'.
ENDFORM.
" F_DELETE_T5UDB
*---------------------------------------------------------------------*
*
FORM collect_errors
*
*---------------------------------------------------------------------*
* Wite error messages from functions to error log
*
*---------------------------------------------------------------------*
FORM collect_errors.
LOOP AT it_benerr.
it_errors-pernr = it_benerr-pernr.
it_errors-etext = it_benerr-etext.
APPEND it_errors.
CLEAR it_errors.
n_emp_error = n_emp_error + 1.
ENDLOOP.
ENDFORM.
"collect_errors
*&---------------------------------------------------------------------*
*&
Form F_COLLECT_ERRORS
*&---------------------------------------------------------------------*
* Wite error messages from functions to error log
*
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM f_collect_errors.
LOOP AT it_benerr.
MOVE it_benerr-pernr TO it_errors-pernr.
MOVE it_benerr-etext TO it_errors-etext.
APPEND it_errors.
CLEAR it_errors.
ENDLOOP.
REFRESH it_benerr.
ENDFORM.
" F_COLLECT_ERRORS
*&---------------------------------------------------------------------*
*&
Form F_PROCESS_HEADER
*&---------------------------------------------------------------------*
*
Create Header record for File
*----------------------------------------------------------------------*
FORM f_process_header .
* Get Header value wa_header-recrd_typ = c_rec_h.
wa_header-emplyr_id = c_emplyr.
wa_header-file_no = v_file_seq.
wa_header-file_cr_date = sy-datum.
wa_header-edi_vers = c_edi_vers.
wa_header-spec_vers = c_spec_vers.
wa_header-sys_label = c_sys_lbl.
wa_header-terminator = c_term.
wa_header-cr_lf = c_cr.
APPEND wa_header TO it_header.
ENDFORM.
" F_PROCESS_HEADER
*&---------------------------------------------------------------------*
*&
Form F_DETERMINE_BEN
*&---------------------------------------------------------------------*
*
Determine Beneficiary *----------------------------------------------------------------------*
FORM f_determine_ben USING x_pernr TYPE pernr_d.
DATA: lv_evtyp TYPE cob_evtyp.
DATA: lv_ben TYPE cob_subty.
* Get only Current Employee's record
it_t5udb_pernr[] = it_t5udb[].
DELETE it_t5udb_pernr WHERE pernr NE x_pernr.
SORT it_t5udb_pernr BY evtyp.
* For each Event type for each employee we need to build record fo TYPE B,D,C an
d P
* Get how many set of records requied based on event type
LOOP AT it_t5udb_pernr INTO wa_t5udb_pernr.
IF wa_t5udb_pernr-evtyp NE lv_evtyp.
lv_evtyp = wa_t5udb_pernr-evtyp.
wa_set-pernr = wa_t5udb_pernr-pernr.
wa_set-evtyp = wa_t5udb_pernr-evtyp.
*
wa_set-ben_dubst = wa_t5udb_pernr-dubst.
*
wa_set-dobjp = wa_t5udb_pernr-dobjp.
wa_set-evtdate = wa_t5udb_pernr-evdat.
APPEND wa_set TO it_set.
ELSE.
CONTINUE.
ENDIF.
ENDLOOP.
* Determine who is beneficiary - must be one
LOOP AT it_set INTO wa_set.
CASE wa_set-evtyp.
WHEN '01' OR '02' OR '08'.
* Main Beneficiary is employee only
wa_set-ben_dubst = '0'.
MODIFY it_set FROM wa_set.
WHEN '03' OR '05' OR '07' OR '04'.
* Determine Main Beneficary from dependent evaluation PERFORM f_ben_evaluation USING x_pernr
wa_set-evtdate
wa_set-evtyp
CHANGING lv_ben.
wa_set-ben_dubst = lv_ben.
MODIFY it_set FROM wa_set.
ENDCASE.
ENDLOOP.
ENDFORM.
" F_DETERMINE_BEN
*&---------------------------------------------------------------------*
*&
Form F_BEN_EVALUATION
*&---------------------------------------------------------------------*
*
Evaluate dependent
*----------------------------------------------------------------------*
FORM f_ben_evaluation USING
p_pernr TYPE pernr_d
p_date TYPE cob_evdat
p_evtyp TYPE cob_evtyp
CHANGING p_ben TYPE cob_subty.
DATA: lv_subrc TYPE sy-subrc.
CLEAR: p0021.
REFRESH: p0021.
CALL FUNCTION 'HR_READ_INFOTYPE'
EXPORTING
pernr
= p_pernr
infty
= '0021'
begda
= p_date
endda
= p_date
IMPORTING
subrc
= lv_subrc
TABLES
infty_tab
= p0021
EXCEPTIONS
infty_not_found = 1.
IF lv_subrc EQ 0.
IF p_evtyp NE '05'.
* check for spouse first
READ TABLE p0021 WITH KEY famsa = '1'.
IF sy-subrc EQ 0.
p_ben = p0021-famsa.
ELSE.
* Check for domestic Partner -
*&---------------------------------------------------------------------*
*&
Form F_GET_IQB_SSN
*&---------------------------------------------------------------------*
*
Get Primary SSN - For Beneficiary *----------------------------------------------------------------------*
FORM f_get_iqb_ssn USING p_pernr TYPE pernr_d.
DATA: lv_icnum TYPE psg_idnum.
DATA: lv_icnum_cop TYPE psg_idnum.
DATA: lv_subrc TYPE sy-subrc.
LOOP AT it_set INTO wa_set WHERE pernr = p_pernr.
* Get employee's SSN
* Try to get employee's US SSN if possible
CALL FUNCTION 'Z_EMPLOYEE_SSN_NEW'
EXPORTING
pernr
= wa_set-pernr
idcot
= 'US'
molga
= '10'
IMPORTING
icnum
= lv_icnum
EXCEPTIONS
not_found_0709 = 1
not_found_0185 = 2
not_found_ssn = 3
not_found_0002 = 4
OTHERS
= 5.
IF sy-subrc EQ 0.
FIND '-' IN lv_icnum.
IF sy-subrc <> 0.
PERFORM f_create_ssn CHANGING lv_icnum.
v_emp_ssn = lv_icnum.
lv_icnum_cop = lv_icnum.
ELSE.
v_emp_ssn = lv_icnum.
lv_icnum_cop = lv_icnum.
ENDIF.
ELSE. " Look for Canada SSN as we have common citizenship
CALL FUNCTION 'Z_EMPLOYEE_SSN_NEW'
EXPORTING
pernr
= wa_set-pernr
idcot
= 'CA'
molga
= '07'
IMPORTING
icnum
= lv_icnum
EXCEPTIONS
not_found_0709 = 1
not_found_0185 = 2
not_found_ssn = 3
not_found_0002 = 4
OTHERS
= 5.
IF sy-subrc EQ 0.
FIND '-' IN lv_icnum.
IF sy-subrc <> 0.
PERFORM f_create_ssn CHANGING lv_icnum.
v_emp_ssn = lv_icnum.
lv_icnum_cop = lv_icnum.
ELSE.
v_emp_ssn = lv_icnum.
lv_icnum_cop = lv_icnum.
ENDIF.
ELSE.
w_subrc = 'E'.
it_errors-pernr = wa_set-pernr.
it_errors-etext = text-e19.
APPEND it_errors.
ADD 1 TO n_e_cnt.
ENDIF.
ENDIF.
* Get IQB CASE wa_set-ben_dubst.
WHEN '0'. " when Beneficiary is Emp
wa_set-iqb_ssn = v_emp_ssn.
MODIFY it_set FROM wa_set.
WHEN '1' OR '13'. " Beneficiary is Spouse
CLEAR: p0106.
REFRESH p0106.
CALL FUNCTION 'HR_READ_INFOTYPE'
EXPORTING
pernr
= wa_set-pernr
infty
= '0106'
IMPORTING
subrc
= lv_subrc
TABLES
infty_tab
= p0106
EXCEPTIONS
infty_not_found = 1
OTHERS
= 2.
IF lv_subrc EQ 0.
LOOP AT p0106 WHERE subty = wa_set-ben_dubst
AND begda <= wa_set-evtdate AND
endda >= wa_set-evtdate.
EXIT.
ENDLOOP.
IF sy-subrc EQ 0.
IF p0106-perid IS NOT INITIAL.
wa_set-iqb_ssn = p0106-perid.
MODIFY it_set FROM wa_set.
ELSE.
REPLACE ALL OCCURRENCES OF '-' IN lv_icnum_cop WITH ''.
CONDENSE lv_icnum_cop.
CONCATENATE 'D0' lv_icnum_cop INTO wa_set-iqb_ssn.
MODIFY it_set FROM wa_set.
ENDIF.
ELSE.
w_subrc = 'E'.
it_errors-pernr = wa_set-pernr.
it_errors-etext = text-e02.
APPEND it_errors.
ADD 1 TO n_e_cnt.
ENDIF.
ENDIF.
WHEN '2' OR '6' OR '14'.
CLEAR: p0106.
REFRESH p0106.
CALL FUNCTION 'HR_READ_INFOTYPE'
EXPORTING
pernr
=
infty
=
IMPORTING
subrc
=
TABLES
infty_tab
=
EXCEPTIONS
infty_not_found =
OTHERS
=
IF lv_subrc EQ 0.
LOOP AT p0106 WHERE
AND
AND
wa_set-pernr
'0106'
lv_subrc
p0106
1
2.
subty
objps
begda
endda
= wa_set-ben_dubst
= '01'
<= wa_set-evtdate AND
>= wa_set-evtdate.
EXIT.
ENDLOOP.
IF sy-subrc EQ 0.
IF p0106-perid IS NOT INITIAL.
wa_set-iqb_ssn = p0106-perid.
MODIFY it_set FROM wa_set.
ELSE.
REPLACE ALL OCCURRENCES OF '-' IN lv_icnum_cop WITH ''.
CONDENSE lv_icnum_cop.
CONCATENATE 'D1' lv_icnum_cop INTO wa_set-iqb_ssn.
MODIFY it_set FROM wa_set.
ENDIF.
ELSE.
w_subrc = 'E'.
it_errors-pernr = wa_set-pernr.
it_errors-etext = text-e02.
APPEND it_errors.
ADD 1 TO n_e_cnt.
ENDIF.
ENDIF.
ENDCASE.
IF wa_set-iqb_ssn IS INITIAL.
w_subrc = 'E'.
it_errors-pernr = wa_set-pernr.
it_errors-etext = text-e40.
ENDIF.
ENDLOOP.
ENDFORM.
" F_GET_IQB_SSN
*&---------------------------------------------------------------------*
*&
Form F_CREATE_BEN_REC
*&---------------------------------------------------------------------*
*
Create Beneficiaries' Record
*----------------------------------------------------------------------*
FORM f_create_ben_rec USING pa_set TYPE ty_set.
DATA: lv_subrc TYPE sy-subrc,
lv_country TYPE t005-intca3.
wa_ben-recrd_typ = c_rec_b.
wa_ben-ssn_iqb = pa_set-iqb_ssn.
wa_ben-servc_code = c_servc_code.
wa_ben-emplyr_id = c_emplyr_id.
wa_ben-ben_typ = c_bene_type.
wa_ben-cobra_qe_date = pa_set-evtdate.
CASE pa_set-evtyp.
WHEN '01'.
wa_ben-event_qe_reason = '001'.
WHEN '02'.
wa_ben-event_qe_reason = '008'.
WHEN '03'.
wa_ben-event_qe_reason = '002'.
WHEN '04'.
wa_ben-event_qe_reason = '011'.
WHEN '05'.
wa_ben-event_qe_reason = '003'.
WHEN '07'.
wa_ben-event_qe_reason = '009'.
WHEN '08'.
wa_ben-event_qe_reason = '007'.
ENDCASE.
wa_ben-end_rec = c_term.
wa_ben-cr_lf = c_cr.
* Employee SSN
wa_ben-ssn_emp = v_emp_ssn.
* SSN IQB - Primary Dependent SSN
wa_ben-ssn_qb = pa_set-iqb_ssn.
* Get Personal and Address Details IF pa_set-ben_dubst = '0'. " Employee
CLEAR: p0002, v_subrc.
REFRESH: p0002.
CALL FUNCTION 'HR_READ_INFOTYPE'
EXPORTING
pernr
= pa_set-pernr
infty
= '0002'
begda
= pa_set-evtdate
endda
= pa_set-evtdate
IMPORTING
subrc
= v_subrc
TABLES
infty_tab
= p0002
EXCEPTIONS
infty_not_found = 1.
IF lv_subrc EQ 0.
wa_ben-frst_name = p0002-vorna.
wa_ben-lst_name = p0002-nachn.
ELSE.
w_subrc = 'E'.
it_errors-pernr = pa_set-pernr.
it_errors-etext = text-e01.
APPEND it_errors.
ADD 1 TO n_e_cnt.
EXIT.
ENDIF.
* Get address of employee
CLEAR: p0006, v_subrc.
REFRESH: p0006.
CALL FUNCTION 'HR_READ_INFOTYPE'
EXPORTING
pernr
= pa_set-pernr
infty
= '0006'
*
subty
= '1'
begda
= pa_set-evtdate
endda
= pa_set-evtdate
IMPORTING
subrc
= lv_subrc
TABLES
infty_tab
= p0006
EXCEPTIONS
infty_not_found = 1.
IF lv_subrc EQ 0.
READ TABLE p0006 WITH KEY subty = '1'.
IF sy-subrc EQ 0.
wa_ben-addr1 = p0006-stras.
PERFORM f_replace_add USING wa_ben-addr1.
wa_ben-addr2 = p0006-locat.
PERFORM f_replace_add USING wa_ben-addr2.
wa_ben-city = p0006-ort01.
wa_ben-state = p0006-state.
wa_ben-zip = p0006-pstlz.
PERFORM f_replace_add USING wa_ben-zip.
SELECT SINGLE intca3 FROM t005 INTO lv_country WHERE land1 = p0006-land1
.
IF sy-subrc EQ 0.
wa_ben-country = lv_country.
ENDIF.
wa_ben-dob = p0002-gbdat.
IF p0002-gesch EQ '1'.
wa_ben-gender = 'M'.
ELSEIF p0002-gesch EQ '2'.
wa_ben-gender = 'F'.
ELSE.
wa_ben-gender = 'U'.
ENDIF.
IF p0002-famst EQ '0'.
wa_ben-mrtl_stat = 'S'.
ELSEIF p0002-famst EQ '1'.
wa_ben-mrtl_stat = 'M'.
ELSE.
wa_ben-mrtl_stat = 'U'.
ENDIF.
wa_ben-rel_to_emp = 'E'.
ELSE.
w_subrc = 'E'.
it_errors-pernr = pa_set-pernr.
it_errors-etext = text-e03.
APPEND it_errors.
ADD 1 TO n_e_cnt.
EXIT.
ENDIF.
ELSE.
w_subrc = 'E'.
it_errors-pernr = pa_set-pernr.
it_errors-etext = text-e03.
APPEND it_errors.
ADD 1 TO n_e_cnt.
EXIT.
ENDIF.
ELSE. " Dependent turns beneficiary
CLEAR: p0021.
REFRESH: p0021.
CALL FUNCTION 'HR_READ_INFOTYPE'
EXPORTING
pernr
= pa_set-pernr
infty
= '0021'
begda
= pa_set-evtdate
endda
= pa_set-evtdate
IMPORTING
subrc
= lv_subrc
TABLES
infty_tab
= p0021
EXCEPTIONS
infty_not_found = 1.
IF lv_subrc EQ 0.
READ TABLE p0021 WITH KEY famsa = pa_set-ben_dubst.
IF sy-subrc EQ 0.
wa_ben-frst_name = p0021-favor.
wa_ben-lst_name = p0021-fanam.
wa_ben-dob = p0021-fgbdt.
IF p0021-fasex EQ '1'.
wa_ben-gender = 'M'.
ELSEIF p0021-fasex EQ '2'.
wa_ben-gender = 'F'.
ENDIF.
IF p0021-famsa = '1'.
wa_ben-rel_to_emp = 'S'.
ELSEIF p0021-famsa = '13'.
wa_ben-rel_to_emp = 'P'.
ELSEIF p0021-famsa = '2'.
wa_ben-rel_to_emp = 'C'.
ELSEIF p0021-famsa = '14' OR p0021-famsa = '06'.
wa_ben-rel_to_emp = 'O'.
ENDIF.
ENDIF.
* Address CLEAR: p0106.
REFRESH p0106.
CALL FUNCTION 'HR_READ_INFOTYPE'
EXPORTING
pernr
= wa_set-pernr
infty
= '0106'
begda
= pa_set-evtdate
endda
= pa_set-evtdate
IMPORTING
subrc
= lv_subrc
TABLES
infty_tab
= p0106
EXCEPTIONS
infty_not_found = 1
OTHERS
= 2.
IF sy-subrc EQ 0.
READ TABLE p0106 WITH KEY subty = pa_set-ben_dubst.
IF sy-subrc EQ 0.
wa_ben-addr1 = p0106-stras.
PERFORM f_replace_add USING wa_ben-addr1.
wa_ben-addr2 = p0106-locat.
PERFORM f_replace_add USING wa_ben-addr2.
wa_ben-city = p0106-ort01.
wa_ben-state = p0106-state.
wa_ben-zip = p0106-pstlz.
PERFORM f_replace_add USING wa_ben-zip.
SELECT SINGLE intca3 FROM t005 INTO lv_country WHERE land1 = p0106-lan
d1.
IF sy-subrc EQ 0.
wa_ben-country = lv_country.
ENDIF.
IF p0106-famst EQ 0.
wa_ben-mrtl_stat = 'S'.
ELSEIF p0106-famst EQ 1.
wa_ben-mrtl_stat = 'M'.
ELSE.
wa_ben-mrtl_stat = 'U'.
ENDIF.
ENDIF.
ELSE.
w_subrc = 'E'.
it_errors-pernr = pa_set-pernr.
it_errors-etext = text-e02.
APPEND it_errors.
ADD 1 TO n_e_cnt.
EXIT.
ENDIF.
ELSE.
w_subrc = 'E'.
it_errors-pernr = pa_set-pernr.
it_errors-etext = text-e02.
APPEND it_errors.
ADD 1 TO n_e_cnt.
EXIT.
ENDIF.
ENDIF.
wa_ben-status = 'N'.
* Append Record
APPEND wa_ben TO it_ben.
CLEAR wa_ben.
ENDFORM.
" F_CREATE_BEN_REC
*&---------------------------------------------------------------------*
*&
Form F_CREATE_COV
*&---------------------------------------------------------------------*
*
Create Coverage Records
*----------------------------------------------------------------------*
FORM f_create_cov USING pa_set TYPE ty_set.
DATA: lv_evdat TYPE begda,
lv_subrc TYPE sy-subrc.
DATA: pln_seq(2) TYPE n.
* Skip processing if already have error IF w_subrc IS NOT INITIAL.
EXIT.
ENDIF.
* Get Family details anyway CLEAR: p0021.
REFRESH: p0021.
CALL FUNCTION 'HR_READ_INFOTYPE'
EXPORTING
pernr
= pa_set-pernr
infty
= '0021'
begda
= pa_set-evtdate
endda
= pa_set-evtdate
IMPORTING
subrc
= lv_subrc
TABLES
infty_tab
= p0021
EXCEPTIONS
infty_not_found = 1.
CLEAR: p0106.
REFRESH: p0106.
CALL FUNCTION 'HR_READ_INFOTYPE'
EXPORTING
pernr
= pa_set-pernr
infty
= '0106'
begda
= pa_set-evtdate
endda
= pa_set-evtdate
IMPORTING
subrc
= lv_subrc
TABLES
infty_tab
= p0106
EXCEPTIONS
infty_not_found = 1.
* Coverage Records will have 1-1 map with It167 IF w_subrc IS NOT INITIAL.
EXIT.
ENDIF.
CLEAR: p0167.
REFRESH: p0167.
IF pa_set-ben_dubst EQ '10' AND
pa_set-evtyp EQ '05'.
lv_evdat = pa_set-evtdate - 1.
ELSE.
lv_evdat = pa_set-evtdate.
ENDIF.
CALL FUNCTION 'HR_READ_INFOTYPE'
EXPORTING
pernr
= pa_set-pernr
infty
= '0167'
begda
= lv_evdat
endda
= lv_evdat
IMPORTING
subrc
= lv_subrc
TABLES
infty_tab
= p0167
EXCEPTIONS
infty_not_found = 1.
IF lv_subrc EQ 0.
SORT p0167 BY endda DESCENDING.
* Loop All Active Plans LOOP AT p0167.
wa_cov-recrd_typ = c_rec_c.
wa_cov-ssn_iqb = pa_set-iqb_ssn.
wa_cov-ssn_emp = v_emp_ssn.
CASE p0167-bplan.
WHEN 'AEDN'.
wa_cov-pln_id = '317024'.
WHEN 'EXDN'.
wa_cov-pln_id = '317282'.
WHEN 'EXDN'.
wa_cov-pln_id = '317282'.
WHEN 'EXMD'.
wa_cov-pln_id = '317283'.
WHEN 'EXSP'.
wa_cov-pln_id = '317285'.
WHEN 'AEHF'.
wa_cov-pln_id =
WHEN 'OOA1'.
wa_cov-pln_id =
WHEN 'PPO9'.
wa_cov-pln_id =
WHEN 'GHCE'.
wa_cov-pln_id =
WHEN 'KANC'.
wa_cov-pln_id =
WHEN 'OPCH'.
wa_cov-pln_id =
WHEN 'VISN'.
wa_cov-pln_id =
ENDCASE.
pln_seq = sy-tabix.
wa_cov-pln_seq_no =
'317298'.
'317300'.
'317303'.
'317307'.
'317311'.
'317313'.
'317322'.
pln_seq.
IF p0167-depcv EQ 'EE'.
wa_cov-cov_class_id = '001'.
ELSEIF p0167-depcv EQ 'EE+2'.
wa_cov-cov_class_id = '004'.
ELSEIF p0167-depcv EQ 'EE+1'.
LOOP AT p0021 WHERE famsa = '1' OR
famsa = '13'.
EXIT.
ENDLOOP.
IF sy-subrc EQ 0.
wa_cov-cov_class_id = '002'.
ELSE.
LOOP AT p0021 WHERE famsa = '2' OR
famsa = '6' OR
famsa = '14'.
EXIT.
ENDLOOP.
IF sy-subrc EQ 0.
wa_cov-cov_class_id = '003'.
ENDIF.
ENDIF.
ENDIF.
wa_cov-end_rec = c_term.
wa_cov-cr_lf = c_cr.
APPEND wa_cov TO it_cov.
PERFORM f_create_participants USING pa_set
p0167
sy-tabix.
IF w_subrc IS NOT INITIAL.
DELETE it_cov FROM wa_cov.
ENDIF.
ENDLOOP.
ENDIF.
IF sy-subrc <> 0.
w_subrc = 'E'.
it_errors-pernr = pa_set-pernr.
it_errors-etext = text-e05.
APPEND it_errors.
ADD 1 TO n_e_cnt.
EXIT.
ENDIF.
ENDFORM.
" F_CREATE_COV
*&---------------------------------------------------------------------*
*&
Form F_CREATE_PARTICIPANTS
*&---------------------------------------------------------------------*
*
build Participants for each Coverage Plan
*----------------------------------------------------------------------*
FORM f_create_participants USING pa_set TYPE ty_set
x0167 TYPE p0167
plan_seq TYPE sy-tabix.
DATA: lv_pln_seq(2) TYPE n.
DATA: lv_dep_seq(2) TYPE n.
* Skip processing if already have error
IF w_subrc IS NOT INITIAL.
EXIT.
ENDIF.
wa_part-recrd_typ = c_rec_p.
wa_part-ssn_iqb = pa_set-iqb_ssn.
wa_part-ssn_emp = v_emp_ssn.
lv_pln_seq = plan_seq.
wa_part-pln_seq_no = lv_pln_seq.
wa_part-end_rec = c_term.
wa_part-cr_lf = c_cr.
CASE x0167-bplan.
WHEN 'AEDN'.
wa_part-pln_id = '317024'.
WHEN 'EXDN'.
wa_part-pln_id = '317282'.
WHEN 'EXDN'.
wa_part-pln_id = '317282'.
WHEN 'EXMD'.
wa_part-pln_id = '317283'.
WHEN 'EXSP'.
wa_part-pln_id = '317285'.
WHEN 'AEHF'.
wa_part-pln_id = '317298'.
WHEN 'OOA1'.
wa_part-pln_id = '317300'.
WHEN 'PPO9'.
wa_part-pln_id = '317303'.
WHEN 'GHCE'.
wa_part-pln_id = '317307'.
WHEN 'KANC'.
wa_part-pln_id = '317311'.
WHEN 'OPCH'.
wa_part-pln_id = '317313'.
WHEN 'VISN'.
wa_part-pln_id = '317322'.
ENDCASE.
* Determine how many participant record required for this plan Id
IF x0167-depcv = 'EE'. " For beneficiary only
IF pa_set-ben_dubst = '0'. " ensuring employee is beneficiary
wa_part-ssn_dep = v_emp_ssn.
APPEND wa_part TO it_part.
ELSE.
" When employee is no longer beneficiary
wa_part-ssn_dep = pa_set-iqb_ssn.
APPEND wa_part TO it_part.
ENDIF.
ELSEIF x0167-depcv = 'EE+1'.
* First Include beneficary as participant
IF sy-subrc EQ 0.
wa_part-ssn_dep = p0106-perid.
APPEND wa_part TO it_part.
ENDIF.
ENDLOOP.
ELSEIF pa_set-ben_dubst = '2'. " When eldest child is beneficiary
wa_part-ssn_dep = pa_set-iqb_ssn.
APPEND wa_part TO it_part.
* Determine primary dependent and include them as participant SORT p0021 BY fgbdt.
LOOP AT p0021 WHERE famsa = '2'.
IF sy-tabix EQ 1.
CONTINUE.
ENDIF.
lv_dep_seq = p0021-objps.
wa_part-dep_seq_no = lv_dep_seq.
LOOP AT p0106 WHERE subty = p0021-famsa
AND objps = p0021-objps.
EXIT.
ENDLOOP.
*
READ TABLE p0106 WITH KEY subty = p0021-famsa.
IF sy-subrc EQ 0.
wa_part-ssn_dep = p0106-perid.
APPEND wa_part TO it_part.
ENDIF.
ENDLOOP.
ENDIF.
ENDIF.
ENDFORM.
" F_CREATE_PARTICIPANTS
*&---------------------------------------------------------------------*
*&
Form F_CREATE_DEP
*&---------------------------------------------------------------------*
*
Create dependent records
*----------------------------------------------------------------------*
FORM f_create_dep USING
p_set TYPE ty_set..
DATA: lv_dep_seq(2) TYPE n.
IF w_subrc IS NOT INITIAL.
EXIT.
ENDIF.
IF p_set-ben_dubst = '0'. " employee as Beneficiary
LOOP AT p0021.
wa_dep-recrd_typ = c_rec_d.
wa_dep-ssn_iqb = p_set-iqb_ssn.
wa_dep-ssn_emp = v_emp_ssn.
LOOP AT p0106 WHERE subty = p0021-famsa
AND objps = p0021-objps.
EXIT.
ENDLOOP.
*
READ TABLE p0106 WITH KEY subty = p0021-famsa.
IF sy-subrc EQ 0.
wa_dep-ssn_dep = p0106-perid.
ENDIF.
wa_dep-frst_name = p0021-favor.
wa_dep-lst_name = p0021-fanam.
wa_dep-dob = p0021-fgbdt.
lv_dep_seq = sy-tabix.
wa_dep-dep_seq = lv_dep_seq.
CASE p0021-famsa.
WHEN '1'.
wa_dep-rel_to_emp = 'S'.
WHEN '2'.
wa_dep-rel_to_emp = 'C'.
WHEN '13'.
wa_dep-rel_to_emp = 'P'.
WHEN OTHERS.
wa_dep-rel_to_emp = 'O'.
ENDCASE.
wa_dep-end_rec = c_term.
wa_dep-cr_lf = c_cr.
APPEND wa_dep TO it_dep.
ENDLOOP.
ELSEIF p_set-ben_dubst = '1'.
LOOP AT p0021 WHERE famsa = '2'.
wa_dep-recrd_typ = c_rec_d.
wa_dep-ssn_iqb = p_set-iqb_ssn.
wa_dep-ssn_emp = v_emp_ssn.
LOOP AT p0106 WHERE subty = p0021-famsa
AND objps = p0021-objps.
EXIT.
ENDLOOP.
*
READ TABLE p0106 WITH KEY subty = p0021-famsa.
IF sy-subrc EQ 0.
wa_dep-ssn_dep = p0106-perid.
ENDIF.
wa_dep-frst_name = p0021-favor.
wa_dep-lst_name = p0021-fanam.
wa_dep-dob = p0021-fgbdt.
lv_dep_seq = p0021-objps.
wa_dep-dep_seq = lv_dep_seq.
CASE p0021-famsa.
WHEN '1'.
wa_dep-rel_to_emp = 'S'.
WHEN '2'.
wa_dep-rel_to_emp = 'C'.
WHEN '13'.
wa_dep-rel_to_emp = 'P'.
WHEN OTHERS.
wa_dep-rel_to_emp = 'O'.
ENDCASE.
wa_dep-end_rec = c_term.
wa_dep-cr_lf = c_cr.
APPEND wa_dep TO it_dep.
ENDLOOP.
ELSEIF p_set-ben_dubst = '13'.
LOOP AT p0021 WHERE famsa = '14'.
wa_dep-recrd_typ = c_rec_d.
wa_dep-ssn_iqb = p_set-iqb_ssn.
wa_dep-ssn_emp = v_emp_ssn.
LOOP AT p0106 WHERE subty = p0021-famsa
AND objps = p0021-objps.
EXIT.
ENDLOOP.
*
READ TABLE p0106 WITH KEY subty = p0021-famsa.
IF sy-subrc EQ 0.
wa_dep-ssn_dep = p0106-perid.
ENDIF.
wa_dep-frst_name = p0021-favor.
wa_dep-lst_name = p0021-fanam.
wa_dep-dob = p0021-fgbdt.
lv_dep_seq = p0021-objps.
wa_dep-dep_seq = lv_dep_seq.
CASE p0021-famsa.
WHEN '2'.
wa_dep-rel_to_emp = 'C'.
WHEN '13'.
wa_dep-rel_to_emp = 'P'.
WHEN OTHERS.
wa_dep-rel_to_emp = 'O'.
ENDCASE.
wa_dep-end_rec = c_term.
wa_dep-cr_lf = c_cr.
APPEND wa_dep TO it_dep.
ENDLOOP.
ELSEIF p_set-ben_dubst = '2'.
SORT p0021 BY fgbdt.
LOOP AT p0021 WHERE famsa = '2' OR famsa EQ'6'.
IF sy-tabix EQ 1.
CONTINUE.
ENDIF.
wa_dep-recrd_typ = c_rec_d.
wa_dep-ssn_iqb = p_set-iqb_ssn.
wa_dep-ssn_emp = v_emp_ssn.
LOOP AT p0106 WHERE subty = p0021-famsa
AND objps = p0021-objps.
EXIT.
ENDLOOP.
*
READ TABLE p0106 WITH KEY subty = p0021-famsa.
IF sy-subrc EQ 0.
wa_dep-ssn_dep = p0106-perid.
ENDIF.
wa_dep-frst_name = p0021-favor.
wa_dep-lst_name = p0021-fanam.
wa_dep-dob = p0021-fgbdt.
lv_dep_seq = p0021-objps.
wa_dep-dep_seq = lv_dep_seq.
CASE p0021-famsa.
WHEN '2'.
wa_dep-rel_to_emp = 'C'.
WHEN OTHERS.
wa_dep-rel_to_emp = 'O'.
ENDCASE.
wa_dep-end_rec = c_term.
wa_dep-cr_lf = c_cr.
APPEND wa_dep TO it_dep.
ENDLOOP.
ENDIF.
ENDFORM.
" F_CREATE_DEP
*&---------------------------------------------------------------------*
*&
Form F_REPLACE_ADD
*&---------------------------------------------------------------------*
*
Replace a comma with a space.
*----------------------------------------------------------------------*
*
-->PARAM_STRING text
*----------------------------------------------------------------------*
FORM f_replace_add USING
param_string.
DATA: wl_string(90)
TYPE c.
DATA: wl_pos
DATA: wl_len
TYPE i.
TYPE i.
wl_string = param_string.
wl_pos = 0.
wl_len = strlen( wl_string ).
DO.
IF wl_pos GT wl_len.
EXIT.
ENDIF.
IF wl_string+wl_pos(1) = ',' OR
wl_string+wl_pos(1) = '.' OR
wl_string+wl_pos(1) = '-' OR
wl_string+wl_pos(1) = '/' OR
wl_string+wl_pos(1) = '#'.
wl_string+wl_pos(1) = ' '.
ENDIF.
wl_pos = wl_pos + 1.
ENDDO.
param_string = wl_string.
ENDFORM.
" F_REPLACE_ADD
*&---------------------------------------------------------------------*
*&
Form F_PROCESS_TRAILER
*&---------------------------------------------------------------------*
*
Trailer Record
*----------------------------------------------------------------------*
FORM f_process_trailer .
DATA: count TYPE string.
wa_trailer-recrd_typ = c_rec_t.
wa_trailer-emplyr_id = c_emplyr_id.
DESCRIBE TABLE it_ben LINES n_rec_ben.
DESCRIBE TABLE it_cov LINES n_rec_cov.
DESCRIBE TABLE it_dep LINES n_rec_dep.
DESCRIBE TABLE it_part LINES n_rec_part.
count = n_rec_ben.
WRITE count TO wa_trailer-ben_rec_cnt RIGHT-JUSTIFIED.
count = n_rec_cov.
WRITE count TO wa_trailer-cov_rec_cnt RIGHT-JUSTIFIED.
count = n_rec_dep.
WRITE count TO wa_trailer-dep_rec_cnt RIGHT-JUSTIFIED.
count = n_rec_part.
WRITE count TO wa_trailer-part_rec_cnt RIGHT-JUSTIFIED.
n_rec_sent = n_rec_ben + n_rec_cov + n_rec_dep + n_rec_part.
count = n_rec_sent.
WRITE count TO wa_trailer-row_cnt RIGHT-JUSTIFIED.
wa_trailer-terminator = c_term.
wa_trailer-cr_lf = c_cr.
APPEND wa_trailer TO it_trailer.
CLEAR count.
ENDFORM.
" F_PROCESS_TRAILER
*&---------------------------------------------------------------------*
*&
Form F_CREATE_SSN
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
FORM f_create_ssn CHANGING lv_icnum TYPE psg_idnum.
DATA: lv_first(3),
lv_second(2),
lv_third(4).
lv_first = lv_icnum+0(3).
lv_second = lv_icnum+3(2).
lv_third = lv_icnum+5(4).
CLEAR lv_icnum.
CONCATENATE lv_first '-' lv_second '-' lv_third INTO lv_icnum.
ENDFORM.
" F_CREATE_SSN