0% found this document useful (0 votes)
103 views15 pages

CRM Comb Invoice Exec 4-6-2015

This document defines variables and data types used to summarize billing document details from a billing engine application into transaction records. It loops through billing document header and item entities, extracting properties like document number, terms, date, item details. It also retrieves pricing details from related condition entities and loops through related billing request items and partner entities.

Uploaded by

Abhishek Nandi
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
103 views15 pages

CRM Comb Invoice Exec 4-6-2015

This document defines variables and data types used to summarize billing document details from a billing engine application into transaction records. It loops through billing document header and item entities, extracting properties like document number, terms, date, item details. It also retrieves pricing details from related condition entities and loops through related billing request items and partner entities.

Uploaded by

Abhishek Nandi
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 15

METHOD crm_comb_invoice_exec.

DATA: lr_object
lv_obj_guid
lv_obj_kind

TYPE REF TO cl_doc_crm_order,


TYPE crmt_object_guid,
TYPE crmt_object_kind.

INCLUDE crm_object_names_con.
DATA:
lt_pridoc TYPE crmt_pric_cond_t,
ls_pridoc TYPE crmt_pric_cond,
lt_prcond TYPE prct_cond_du_tab,
ls_prcond TYPE prct_cond_du,
lt_header_guids TYPE crmt_object_guid_tab,
ls_header_guids TYPE crmt_object_guid,
lt_request_objs TYPE crmt_object_name_tab.
DATA : lv_adj(9) TYPE p DECIMALS 2.
DATA : lt_partners TYPE zsf_partners_t,
ls_partners TYPE zsf_partners,
ls_patient TYPE zpatient_det,
lt_patient TYPE zpatient_det_t,
lr_partner_add TYPE REF TO cl_crm_bol_entity,
ls_but000 TYPE but000,
lt_address TYPE TABLE OF crmst_partneraddress_btil,
ls_address TYPE crmst_partneraddress_btil,
ls_shipto TYPE zpartner_add,
ls_contact TYPE zpartner_add,
ls_billto TYPE zpartner_add,
ls_header TYPE zinv_header.
DATA : l_bdh_guid TYPE bea_bdh_guid,
lt_ztransac_det TYPE ztransac_det_t,
ls_ztransac_det TYPE ztransac_det,
lv_string TYPE string,
lv_doc TYPE bu_partner,
lv_number_int TYPE crmt_item_no,
lv_header_guid TYPE crmt_object_guid,
lv_order_id TYPE crmt_object_id,
lr_core TYPE REF TO cl_crm_bol_core,
lv_guid TYPE crmt_genil_object_guid,
lv_obj TYPE crmt_object_id,
lv_guid_britm TYPE string,
lr_bd_items TYPE REF TO if_bol_entity_col,
lr_br_items TYPE REF TO if_bol_entity_col,
lr_iterator TYPE REF TO if_bol_entity_col_iterator,
lr_partners TYPE REF TO if_bol_entity_col,
lr_dateset TYPE REF TO cl_crm_bol_entity,
lr_datesall TYPE REF TO if_bol_entity_col,
lr_part TYPE REF TO if_bol_bo_property_access,
lr_part1 TYPE REF TO cl_crm_bol_entity,
lr_part_set TYPE REF TO cl_crm_bol_entity,
lr_ordi TYPE REF TO cl_crm_bol_entity,
lr_itmsalset TYPE REF TO cl_crm_bol_entity,
lr_docflwset TYPE REF TO cl_crm_bol_entity,
lr_docflw TYPE REF TO cl_crm_bol_entity,
lr_docflwall TYPE REF TO if_bol_entity_col,
lr_entity TYPE REF TO cl_crm_bol_entity,
lr_entity_head TYPE REF TO cl_crm_bol_entity,
lr_entity_itm TYPE REF TO cl_crm_bol_entity,
lr_main TYPE REF TO cl_crm_bol_entity,
fm_name TYPE rs38l_fnam,
lv_appl TYPE bef_appl,

lv_bea_guid TYPE ppf_guid,


lo_bea
TYPE REF TO cl_bea_ppf.
**********************Declarations************************
**********************Process data************************
lo_bea ?= io_appl_object.
* determine name of billing engine application
lv_appl = lo_bea->get_bea_name( ).
* determine guid of billing document
lv_bea_guid = lo_bea->get_headguid( ).
l_bdh_guid = lv_bea_guid.
IF l_bdh_guid IS NOT INITIAL.
lr_core = cl_crm_bol_core=>get_instance( ).
CHECK lr_core IS BOUND.
lr_core->start_up( 'ALL' ).
lv_guid = l_bdh_guid.
*Get the Billing Doc Entity
lr_main = lr_core->get_root_entity( iv_object_name = 'BDHeader' iv_object_gu
id = lv_guid ).
CHECK sy-subrc = 0.
*Billing Document Number
lv_string = lr_main->if_bol_bo_property_access~get_property_as_string( iv_at
tr_name = 'HEADNO_EXT' ).
ls_ztransac_det-bill_doc = lv_string.
ls_header-invoice_number = lv_string.
CLEAR lv_string.
lv_string = lr_main->if_bol_bo_property_access~get_property_as_string( iv_at
tr_name = 'TERMS_OF_PAYMENT' ).
ls_header-terms = lv_string.
CLEAR lv_string.
lv_string = lr_main->if_bol_bo_property_access~get_property_as_string( iv_at
tr_name = 'BILL_DATE' ).
ls_header-invoice_date = lv_string.
CLEAR lv_string.
*Get the Billing Doc Items
TRY.
CALL METHOD lr_main->get_related_entities
EXPORTING
iv_relation_name = 'BDItemRel'
RECEIVING
rv_result
= lr_bd_items.
CATCH cx_crm_genil_model_error .
ENDTRY.
* Step 1. loop through all the Billing Document Items
*----------------------------------------------------CHECK lr_bd_items IS BOUND.
FREE lr_entity.
lr_entity ?= lr_bd_items->get_first( ). "Items
WHILE lr_entity IS BOUND.
lv_string = lr_entity->if_bol_bo_property_access~get_property_as_string( i
v_attr_name = 'PRODUCT_ID' ).
ls_ztransac_det-product = lv_string.
CLEAR lv_string.

lv_string = lr_entity->if_bol_bo_property_access~get_property_as_string(
v_attr_name = 'PRODUCT_DESCR' ).
ls_ztransac_det-prod_desc = lv_string.
CLEAR lv_string.
lv_string = lr_entity->if_bol_bo_property_access~get_property_as_string(
v_attr_name = 'ITEMNO_EXT' ).
ls_ztransac_det-item_no = lv_string.
CLEAR lv_string.
lv_string = lr_entity->if_bol_bo_property_access~get_property_as_string(
v_attr_name = 'NET_VALUE' ).
ls_ztransac_det-net_value = lv_string.
CLEAR lv_string.
lv_string = lr_entity->if_bol_bo_property_access~get_property_as_string(
v_attr_name = 'TAX_VALUE' ).
ls_ztransac_det-tax_value = lv_string.
CLEAR lv_string.
lv_string = lr_entity->if_bol_bo_property_access~get_property_as_string(
v_attr_name = 'GROSS_VALUE' ).
ls_ztransac_det-gross_value = lv_string.
CLEAR lv_string.
lv_string = lr_entity->if_bol_bo_property_access~get_property_as_string(
v_attr_name = 'QTY_UNIT' ).
ls_ztransac_det-unit = lv_string.
CLEAR lv_string.
lv_string = lr_entity->if_bol_bo_property_access~get_property_as_string(
v_attr_name = 'QUANTITY' ).
ls_ztransac_det-quantity = lv_string.
CLEAR lv_string.
*Billing Request #
lv_string = lr_entity->if_bol_bo_property_access~get_property_as_string(
v_attr_name = 'SRC_HEADNO' ).
ls_ztransac_det-bill_req = lv_string.
CLEAR lv_string.
lv_string = lr_entity->if_bol_bo_property_access~get_property_as_string(
v_attr_name = 'SRC_ITEMNO' ).
ls_ztransac_det-bill_req_itm = lv_string.
CLEAR lv_string.
*****************Get Billing Document Pricing Details*************************
DATA : lr_condset TYPE REF TO cl_crm_bol_entity,
lv_collection TYPE REF TO if_bol_bo_col,
lr_ite TYPE REF TO if_bol_bo_col_iterator,
lr_condiset TYPE REF TO cl_crm_bol_entity.
lr_condset ?= lr_entity->get_related_entity( 'BDICondRel' ).
IF lr_condset IS BOUND.
lr_condiset ?= lr_condset->get_related_entity( 'BDICond2PRC' ).
IF lr_condiset IS BOUND.
lr_condiset ?= lr_condiset->get_related_entity( 'CondItemSetRel' ).
IF lr_condiset IS BOUND.
lv_collection = lr_condiset->get_related_entities(
iv_relation_name = 'CondILineRel' ).
IF lv_collection IS BOUND.
lr_ite ?= lv_collection->get_iterator( ).
IF lr_ite IS BOUND.
CALL METHOD lr_ite->find_by_property
EXPORTING
iv_attr_name = 'KSCHL'
iv_value
= 'ZPR0'

RECEIVING
rv_result
= lr_part.
IF lr_part IS NOT BOUND.
CALL METHOD lr_ite->find_by_property
EXPORTING
iv_attr_name = 'KSCHL'
iv_value
= 'ZPPP'
RECEIVING
rv_result
= lr_part.
IF lr_part IS NOT BOUND.
CALL METHOD lr_ite->find_by_property
EXPORTING
iv_attr_name = 'KSCHL'
iv_value
= 'ZGPO'
RECEIVING
rv_result
= lr_part.
IF lr_part IS NOT BOUND.
CALL METHOD lr_ite->find_by_property
EXPORTING
iv_attr_name = 'KSCHL'
iv_value
= 'ZPRC'
RECEIVING
rv_result
= lr_part.
ENDIF.
ENDIF.
ENDIF.
IF lr_part IS BOUND.
**Rental Sales Price
CLEAR lv_string.
lv_string = lr_part->get_property_as_string( iv_attr_name = 'K
BETR' ).
ls_ztransac_det-rate = lv_string.
CLEAR lv_string.
**Rental end value
lv_string = lr_part->get_property_as_string( iv_attr_name = 'K
WERT' ).
ls_ztransac_det-subtotal = lv_string.
ls_header-subtotal = ls_ztransac_det-subtotal + ls_header-sub
total.
ENDIF.
**Capping Adjustment
CALL METHOD lr_ite->find_by_property
EXPORTING
iv_attr_name = 'KSCHL'
iv_value
= 'ZCAA'
RECEIVING
rv_result
= lr_part.
IF lr_part IS BOUND.
CLEAR lv_string.
lv_string = lr_part->get_property_as_string( iv_attr_name = 'K
WERT' ).
ls_ztransac_det-capadj = lv_string.
ENDIF.
**State Tax
CALL METHOD lr_ite->find_by_property
EXPORTING
iv_attr_name = 'KSCHL'
iv_value
= 'XR1'

RECEIVING
rv_result
= lr_part.
IF lr_part IS BOUND.
CLEAR lv_string.
lv_string = lr_part->get_property_as_string( iv_attr_name = 'K
WERT' ).
ls_ztransac_det-xr1 = lv_string.
ENDIF.
**Cash Discount
CALL METHOD lr_ite->find_by_property
EXPORTING
iv_attr_name = 'KSCHL'
iv_value
= '0SKO'
RECEIVING
rv_result
= lr_part.
IF lr_part IS BOUND.
CLEAR lv_string.
lv_string = lr_part->get_property_as_string( iv_attr_name = 'K
WERT' ).
*

ls_ztransac_det-xr1 = lv_string.
ENDIF.
**Total Adjustments
CALL METHOD lr_ite->find_by_property
EXPORTING
iv_attr_name = 'VTEXT'
iv_value
= 'Total Adjustments'
RECEIVING
rv_result
= lr_part.
IF lr_part IS BOUND.
CLEAR lv_string.
lv_string = lr_part->get_property_as_string( iv_attr_name = 'K
WERT' ).
lv_adj = lv_string.
ls_header-discount_adjust = ls_header-discount_adjust + lv_ad
j.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
*****************Get Billing Document Pricing Details*************************
* Step 2. Get through all the Billing Req Items and partner details
*----------------------------------------------------------------------IF ls_ztransac_det-bill_req IS NOT INITIAL.
CLEAR : ls_partners,lv_guid.
lv_obj = ls_ztransac_det-bill_req .
SELECT SINGLE guid FROM crmd_orderadm_h INTO lv_guid WHERE object_id = l
v_obj.
IF sy-subrc = 0.
FREE lr_entity_head.
lr_entity_head = lr_core->get_root_entity( iv_object_name = 'BTAdminH'
iv_object_guid = lv_guid ).
IF lr_entity_head IS BOUND.
lr_entity_head ?= lr_entity_head->get_related_entity( 'BTHeaderItems
Ext' ).
TRY.
CALL METHOD lr_entity_head->get_related_entities

EXPORTING
iv_relation_name = 'BTOrderItemAll'
RECEIVING
rv_result
= lr_br_items.
CATCH cx_crm_genil_model_error .
ENDTRY.
IF lr_br_items IS BOUND.
lr_entity_itm ?= lr_br_items->get_first( ).
WHILE lr_entity_itm IS BOUND.
CLEAR : ls_partners, lv_string.
ls_partners-bill_req_no = ls_ztransac_det-bill_req.
lv_string = lr_entity_itm->if_bol_bo_property_access~get_propert
y_as_string( iv_attr_name = 'NUMBER_INT' ).
lv_guid_britm = lr_entity_itm->if_bol_bo_property_access~get_pro
perty_as_string( iv_attr_name = 'GUID' ).
ls_partners-bill_itm_no = lv_string.
IF ls_partners-bill_itm_no <> ls_ztransac_det-bill_req_itm.
lr_entity_itm ?= lr_br_items->get_next( ).
CONTINUE.
ENDIF.
*Get the Partners
lr_part_set ?= lr_entity_itm->get_related_entity('BTItemPartnerS
et').
IF lr_part_set IS BOUND.
TRY.
CALL METHOD lr_part_set->get_related_entities
EXPORTING
iv_relation_name = 'BTPartnerAll'
RECEIVING
rv_result
= lr_partners.
CATCH cx_crm_genil_model_error .
ENDTRY.
IF lr_partners IS BOUND.
lr_iterator ?= lr_partners->get_iterator( ).
*Bill to Party
CALL METHOD lr_iterator->find_by_property
EXPORTING
iv_attr_name = 'PARTNER_FCT'
iv_value
= '00000003'
RECEIVING
rv_result
= lr_part.
IF lr_part IS BOUND .
lr_part1 ?= lr_part.
lr_partner_add ?= lr_part1->get_related_entity('BTPartnerA
ddress').
IF lr_partner_add IS BOUND.
CALL METHOD lr_partner_add->if_bol_bo_property_access~ge
t_properties
IMPORTING
es_attributes = ls_address.
INSERT ls_address INTO TABLE lt_address.
ENDIF.
CLEAR lv_string.
lv_string = lr_part->get_property_as_string( iv_attr_name
= 'PARTNER_NO' ).
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = lv_string
IMPORTING

output = ls_partners-partner.
ls_partners-partner_fun = '00000003'.
IF ls_partners-partner IS NOT INITIAL.
INSERT ls_partners INTO TABLE lt_partners.
CLEAR ls_partners.
ENDIF.
ENDIF.

*Ship to Party
CALL METHOD lr_iterator->find_by_property
EXPORTING
iv_attr_name = 'PARTNER_FCT'
iv_value
= '00000055'
RECEIVING
rv_result
= lr_part.
IF lr_part IS BOUND.
lr_part1 ?= lr_part.
lr_partner_add ?= lr_part1->get_related_entity('BTPartnerA
ddress').
IF lr_partner_add IS BOUND.
CALL METHOD lr_partner_add->if_bol_bo_property_access~ge
t_properties
IMPORTING
es_attributes = ls_address.
INSERT ls_address INTO TABLE lt_address.
ENDIF.
CLEAR lv_string.
lv_string = lr_part->get_property_as_string( iv_attr_name
= 'PARTNER_NO' ).

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'


EXPORTING
input = lv_string
IMPORTING
output = ls_partners-partner.
ls_partners-partner_fun = '00000055'.
IF ls_partners-partner IS NOT INITIAL.
INSERT ls_partners INTO TABLE lt_partners.
CLEAR ls_partners.
ENDIF.
ENDIF.

*Patient
CALL METHOD lr_iterator->find_by_property
EXPORTING
iv_attr_name = 'PARTNER_FCT'
iv_value
= 'ZPATIENT'
RECEIVING
rv_result
= lr_part.
IF lr_part IS BOUND.
CLEAR lv_string.
lv_string = lr_part->get_property_as_string( iv_attr_name
= 'PARTNER_NO' ).

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'


EXPORTING
input = lv_string
IMPORTING
output = ls_partners-partner.
ls_partners-partner_fun = 'ZPATIENT'.
IF ls_partners-partner IS NOT INITIAL.
INSERT ls_partners INTO TABLE lt_partners.
ls_ztransac_det-patient = ls_partners-partner.
CLEAR ls_partners.

ENDIF.
ENDIF.
*Contact Person
CALL METHOD lr_iterator->find_by_property
EXPORTING
iv_attr_name = 'PARTNER_FCT'
iv_value
= '00000015'
RECEIVING
rv_result
= lr_part.
IF lr_part IS BOUND.
CLEAR lv_string.
lv_string = lr_part->get_property_as_string( iv_attr_name
= 'PARTNER_NO' ).

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'


EXPORTING
input = lv_string
IMPORTING
output = ls_partners-partner.
ls_partners-partner_fun = '00000015'.
IF ls_partners-partner IS NOT INITIAL.
INSERT ls_partners INTO TABLE lt_partners.
CLEAR ls_partners.
ENDIF.
ENDIF.
ENDIF.
ENDIF.

* Step 3. Get through all the Order Items from Billing Req Item to to fetch req
data
*---------------------------------------------------------------------------------lr_docflwset ?= lr_entity_itm->get_related_entity( 'BTItemDocFlo
wSet' ).
IF lr_docflwset IS BOUND.
TRY.
CALL METHOD lr_docflwset->get_related_entities
EXPORTING
iv_relation_name = 'BTDocFlowAll'
RECEIVING
rv_result
= lr_docflwall.
CATCH cx_crm_genil_model_error .
ENDTRY.
IF lr_docflwall IS BOUND.
lr_docflw ?= lr_docflwall->get_first( ).
WHILE lr_docflw IS BOUND.
lv_string = lr_docflw->if_bol_bo_property_access~get_prope
rty_as_string( iv_attr_name = 'OBJKEY_B' ).
IF lv_string <> lv_guid_britm.
lr_docflw ?= lr_docflwall->get_next( ).
CONTINUE.
ENDIF.
*Get the Order item
IF lr_docflw IS BOUND.
CLEAR lv_string.
lv_string = lr_docflw->if_bol_bo_property_access~get_pro
perty_as_string( iv_attr_name = 'OBJKEY_A' ).
CLEAR lv_guid .
lv_guid = lv_string.
SELECT SINGLE header number_int FROM crmd_orderadm_i INT
O (lv_header_guid ,lv_number_int) WHERE

guid = lv_guid.
IF sy-subrc = 0 .
*Order Item Number
ls_ztransac_det-order_item = lv_number_int.
SELECT SINGLE object_id FROM crmd_orderadm_h INTO lv_o
rder_id WHERE
guid = lv_header_guid.
IF sy-subrc = 0.
*Order Number
ls_ztransac_det-order_no = lv_order_id.
ENDIF.
ENDIF.
lr_ordi = lr_core->get_root_entity( iv_object_name = 'BT
AdminI' iv_object_guid = lv_guid ).
IF lr_ordi IS BOUND.
*PO Number Sold
CLEAR lv_string.
lr_itmsalset ?= lr_ordi->get_related_entity( iv_relati
on_name = 'BTItemSalesSet' ).
IF lr_itmsalset IS BOUND.
lv_string = lr_itmsalset->if_bol_bo_property_access~
get_property_as_string( iv_attr_name = 'PO_NUMBER_SOLD' ).
IF lv_string IS NOT INITIAL .
ls_ztransac_det-po = lv_string.
ENDIF.
ENDIF.
*Get the Patient Alternate Address
FREE lr_partner_add.
lr_partner_add ?= lr_ordi->get_related_entity('BTItemP
artnerSet').
IF lr_partner_add IS BOUND.
lr_partner_add ?= lr_partner_add->get_related_entity
('BTPartner_00000055').
IF lr_partner_add IS BOUND.
lr_partner_add ?= lr_partner_add->get_related_enti
ty('BTPartnerAddress').
IF lr_partner_add IS BOUND.
CALL METHOD lr_partner_add->if_bol_bo_property_a
ccess~get_properties
IMPORTING
es_attributes = ls_address.
READ TABLE lt_partners INTO ls_partners WITH KEY
partner_fun = 'ZPATIENT'.
IF sy-subrc = 0.
ls_address-ref_partner_fct = 'ZPATIENT'.
ls_address-ref_partner_no = ls_partners-partne
r.
INSERT ls_address INTO TABLE lt_address.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
lr_dateset ?= lr_ordi->get_related_entity( 'BTItemDate
sSet' ).
IF lr_dateset IS BOUND.
TRY.
CALL METHOD lr_dateset->get_related_entities
EXPORTING

iv_relation_name = 'BTDatesAll'
RECEIVING
rv_result
= lr_datesall.
CATCH cx_crm_genil_model_error .
ENDTRY.
IF lr_datesall IS BOUND.
lr_iterator ?= lr_datesall->get_iterator( ).
*Rental Start Date
CALL METHOD lr_iterator->find_by_property
EXPORTING
iv_attr_name = 'APPT_TYPE'
iv_value
= 'ZACT_RENTBEG'
RECEIVING
rv_result
= lr_part.
CLEAR lv_string.
IF lr_part IS BOUND.
lv_string = lr_part->get_property_as_string( iv_
attr_name = 'TIMESTAMP_FROM' ).
IF lv_string IS NOT INITIAL.
ls_ztransac_det-ren_s_date = lv_string.
ENDIF.
ENDIF.
*Rental End Date
CALL METHOD lr_iterator->find_by_property
EXPORTING
iv_attr_name = 'APPT_TYPE'
iv_value
= 'ZACT_RENTEND'
RECEIVING
rv_result
= lr_part.
IF lr_part IS BOUND.
CLEAR lv_string.
lv_string = lr_part->get_property_as_string( iv_
attr_name = 'TIMESTAMP_FROM' ).
IF lv_string IS NOT INITIAL.
ls_ztransac_det-ren_e_date = lv_string.
ENDIF.
ENDIF.
*Date From
CALL METHOD lr_iterator->find_by_property
EXPORTING
iv_attr_name = 'APPT_TYPE'
iv_value
= 'DATE_FROM'
RECEIVING
rv_result
= lr_part.
IF lr_part IS BOUND.
CLEAR lv_string.
lv_string = lr_part->get_property_as_string( iv_
attr_name = 'TIMESTAMP_FROM' ).
IF lv_string IS NOT INITIAL.
ls_ztransac_det-bill_s_date = lv_string.
ENDIF.
ENDIF.
*Date To
CALL METHOD lr_iterator->find_by_property
EXPORTING
iv_attr_name = 'APPT_TYPE'

iv_value
= 'DATE_TO'
RECEIVING
rv_result
= lr_part.
IF lr_part IS BOUND.
CLEAR lv_string.
lv_string = lr_part->get_property_as_string( iv_
attr_name = 'TIMESTAMP_FROM' ).
IF lv_string IS NOT INITIAL.
ls_ztransac_det-bill_e_date = lv_string.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
* Get the Ref Object
DATA : lr_boset TYPE REF TO cl_crm_bol_entity,
lr_refobj TYPE REF TO cl_crm_bol_entity.
lr_boset ?= lr_ordi->get_related_entity('BTItemBOSSet'
).
IF lr_boset IS BOUND.
lr_boset ?= lr_boset->get_related_entity('BTRefObjSe
t_A').
IF lr_boset IS BOUND.
lr_refobj ?= lr_boset->get_related_entity('BTRefOb
jectSingle').
IF lr_refobj IS BOUND.
*----------*
lr_refobj ?= lr_refobj->get_related_entity('BTI
baseComponent').
*
IF lr_refobj IS BOUND.
*
lr_refobj ?= lr_refobj->get_related_entity('S
ubLevelComponent').
*
IF lr_refobj IS BOUND.
*
lr_refobj ?= lr_refobj->get_related_entity(
'IBCompObj').
*
IF lr_refobj IS BOUND.
*
CLEAR lv_string.
*
lv_string = lr_refobj->if_bol_bo_property
_access~get_property_as_string( iv_attr_name = 'OBJECT_ID' ).
*
ls_ztransac_det-serial = lv_string.
*
lv_string = lr_refobj->if_bol_bo_property
_access~get_property_as_string( iv_attr_name = 'DESCR_EXT' ).
*
ls_ztransac_det-serial_dsc = lv_string.
*
EXIT.
*
ENDIF.
*
ENDIF.
*
ENDIF.
*--------------------*Come out of the loop
EXIT.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
lr_docflw ?= lr_docflwall->get_next( ).
ENDWHILE.
EXIT.
ENDIF.
ENDIF.
lr_entity_itm ?= lr_br_items->get_next( ).

ENDWHILE.
ENDIF.
ENDIF.
ENDIF.
ENDIF.

INSERT ls_ztransac_det INTO TABLE lt_ztransac_det.


CLEAR ls_ztransac_det.
lr_entity ?= lr_bd_items->get_next( ).
ENDWHILE.
LOOP AT lt_partners INTO ls_partners.
CLEAR ls_but000.
SELECT SINGLE * FROM but000 INTO ls_but000 WHERE partner = ls_partners-par
tner.
IF sy-subrc = 0.
IF ls_partners-partner_fun = 'ZPATIENT'.
CLEAR ls_patient.
ls_patient-dob = ls_but000-birthdt.
ls_patient-partner = ls_but000-partner.
CONCATENATE ls_but000-name_last ls_but000-name_first INTO ls_patient-n
ame SEPARATED BY ','.
SELECT SINGLE idnumber FROM but0id INTO ls_patient-ssn
WHERE partner = ls_partners-partner AND type = 'ZJ0001'.
*Get the Doctor name
SELECT SINGLE partner2 FROM but050 INTO lv_doc WHERE
partner1 = ls_partners-partner AND relnr = '000000020712'.
IF sy-subrc = 0.
CLEAR ls_but000.
SELECT SINGLE * FROM but000 INTO ls_but000 WHERE partner = lv_doc.
IF sy-subrc = 0.
CONCATENATE ls_but000-name_last ls_but000-name_first INTO ls_patie
nt-doctor SEPARATED BY ','.
ENDIF.
ENDIF.
READ TABLE lt_address INTO ls_address WITH KEY ref_partner_fct = 'ZPAT
IENT' ref_partner_no = ls_partners-partner.
IF sy-subrc = 0.
ls_patient-building = ls_address-building.
ls_patient-floor = ls_address-floor.
ls_patient-roomnumber = ls_address-room_no.
ENDIF.
INSERT ls_patient INTO TABLE lt_patient.
ENDIF.
IF ls_partners-partner_fun = '00000055'.
CLEAR ls_shipto-name.
CONCATENATE ls_but000-name_org1 ls_but000-name_org2 INTO ls_shipto-nam
e SEPARATED BY space.
ls_shipto-partner = ls_partners-partner.
ls_shipto-partner_fun = ls_partners-partner_fun.
READ TABLE lt_address INTO ls_address WITH KEY ref_partner_fct = '0000
0055' ref_partner_no = ls_partners-partner+4(6).
IF sy-subrc = 0.
ls_shipto-district = ls_address-district.
ls_shipto-city1 = ls_address-city.
ls_shipto-post_code1
= ls_address-postl_cod1.
ls_shipto-street
= ls_address-street.
ls_shipto-region = ls_address-region.
ls_shipto-country = ls_address-country.

ls_shipto-addr_no = ls_address-addr_no.
ENDIF.
ENDIF.
IF ls_partners-partner_fun = '00000003'.
CLEAR ls_billto-name.
CONCATENATE ls_but000-name_org1 ls_but000-name_org2 INTO ls_billto-nam
e SEPARATED BY space.
ls_billto-partner = ls_partners-partner.
ls_billto-partner_fun = ls_partners-partner_fun.
READ TABLE lt_address INTO ls_address WITH KEY ref_partner_fct = '0000
0003' ref_partner_no = ls_partners-partner+4(6).
IF sy-subrc = 0.
ls_billto-district = ls_address-district.
ls_header-county_name = ls_address-district.
ls_billto-city1 = ls_address-city.
ls_billto-post_code1
= ls_address-postl_cod1.
ls_billto-street
= ls_address-street.
ls_billto-region = ls_address-region.
SELECT SINGLE bezei FROM t005u INTO ls_header-state_name WHERE
bland = ls_billto-region AND land1 = 'US'.
ls_billto-country = ls_address-country.
ls_billto-addr_no = ls_address-addr_no.
ENDIF.
ENDIF.
IF ls_partners-partner_fun = '00000015'.
CLEAR ls_contact-name.
CONCATENATE ls_but000-name_last ls_but000-name_first INTO ls_contact-n
ame SEPARATED BY ','.
ENDIF.
ENDIF.
ENDLOOP.
SORT lt_patient.
DELETE ADJACENT DUPLICATES FROM lt_patient.
ENDIF.
* function name
DATA: function_name
dummy(254)
ls_archive_index
ls_output_options

TYPE
TYPE
TYPE
TYPE

rs38l_fnam,
c,
toa_dara,
ssfcompop.

* init
ls_output_options = is_output_options.
* get the function name for this smart form
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname
= ip_smart_form
*
VARIANT
= ' '
*
DIRECT_CALL
= ' '
IMPORTING
fm_name
= function_name
EXCEPTIONS
no_form
= 1
no_function_module = 2
OTHERS
= 3.
IF sy-subrc <> 0.
* add an error message to processing protocol
MESSAGE e015(sppf_media) WITH ip_smart_form INTO dummy.
CALL METHOD cl_log_ppf=>add_message

EXPORTING
ip_problemclass = '1'
ip_handle
= ip_application_log.
EXIT.
ENDIF.
* set a meaningful title for the output
* ls_output_options-tdtitle = 'Purchase Order No. 12345'.
*----------- get application specific data ----------------------------* --------->
* --------->
* --------->
* --------->
*----------------------------------------------------------------------*---------- is_mail_appl_obj ------------------------------------------* fill this parameter if your application object is a BOR object
* the output will be connected with the BOR object via SAP Office
* this is done for mail and fax but not for print outputs
* ------>
* is_mail_appl_obj-LOGSYS
=
* is_mail_appl_obj-OBJTYPE =
* is_mail_appl_obj-OBJKEY
=
* is_mail_appl_obj-DESCRIBE =
* ------>
*----------------------------------------------------------------------*-----------language of smart form-------------------------------------* determin here the language of the smart form
* ls_control_parameters-langu = language_of_my_smart_form.
*----------------------------------------------------------------------*-----------fill archive parameters for archive link ------------------IF is_output_options-tdarmod = '2' OR
is_output_options-tdarmod = '3'.
* archive_index_tab
READ TABLE ct_archive_index_tab INTO ls_archive_index INDEX 1.
* just fill the id of your actual BOR object
* ------>
*
ls_archive_index-object_id
= 'ID_OF_YOUR_BOR_OBJECT'.
* ------>
IF ls_archive_index-object_id IS INITIAL.
DELETE ct_archive_index_tab INDEX 1.
ELSE.
MODIFY ct_archive_index_tab FROM ls_archive_index INDEX 1.
ENDIF.
ENDIF.
*----------------------------------------------------------------------* call function to process smart form
CALL FUNCTION function_name
EXPORTING
archive_index
= is_archive_index
archive_index_tab
= ct_archive_index_tab
archive_parameters = is_archive_parameters
control_parameters = is_control_parameters
mail_appl_obj
= is_mail_appl_obj
mail_recipient
= is_mail_recipient

mail_sender
= is_mail_sender
output_options
= ls_output_options
user_settings
= ip_user_settings
is_header
= ls_header
it_partners
= lt_partners
it_trans_det
= lt_ztransac_det
is_billto
= ls_billto
is_shipto
= ls_shipto
it_patient
= lt_patient
is_contact
= ls_contact
IMPORTING
document_output_info = es_document_output_info
job_output_info
= es_job_output_info
job_output_options = es_job_output_options
EXCEPTIONS
output_canceled
= 1
parameter_error
= 2
OTHERS
= 3.
IF sy-subrc <> 0.
* add an error message to processing protocol
CASE sy-subrc.
WHEN 1.
MESSAGE e016(sppf_media) INTO dummy.
WHEN 2.
MESSAGE e017(sppf_media) WITH function_name INTO dummy.
WHEN 3.
MESSAGE e018(sppf_media) WITH function_name INTO dummy.
ENDCASE.
CALL METHOD cl_log_ppf=>add_message
EXPORTING
ip_problemclass = '1'
ip_handle
= ip_application_log.
ENDIF.
* get error table
CALL FUNCTION 'SSF_READ_ERRORS'
IMPORTING
errortab = et_error_tab.
ENDMETHOD.

You might also like