Sie sind auf Seite 1von 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.
**Rental Sales Price
CALL METHOD lr_ite->find_by_property
EXPORTING
iv_attr_name = 'KSCHL'
iv_value
= 'ZPR0'

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
BETR' ).
ls_ztransac_det-zpr0 = lv_string.
ENDIF.
**Rental end value
IF lr_part IS BOUND.
CLEAR lv_string.
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.

Das könnte Ihnen auch gefallen