crm comb invoice exec newcode

Download Crm Comb Invoice Exec Newcode

If you can't read please download the document

Upload: abhishek-nandi

Post on 14-Sep-2015

218 views

Category:

Documents


3 download

DESCRIPTION

New code for comb invoice

TRANSCRIPT

METHOD crm_comb_invoice_exec. DATA: lr_object TYPE REF TO cl_doc_crm_order, lv_obj_guid TYPE crmt_object_guid, lv_obj_kind 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_reference 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, lv_bdh_ref TYPE bea_reference_no, lt_/1bea/crmb_bdh TYPE TABLE OF /1bea/crmb_bdh, ls_/1bea/crmb_bdh TYPE /1bea/crmb_bdh, lo_bea TYPE REF TO cl_bea_ppf. 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.**********************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_guid = lv_guid ). CHECK sy-subrc = 0.*Billing Document Number lv_string = lr_main->if_bol_bo_property_access~get_property_as_string( iv_attr_name = 'HEADNO_EXT' ).************newcode************************newcode************ lv_reference = lr_main->if_bol_bo_property_access~get_property_as_string( iv_attr_name = 'REFERENCE_NO' ). IF lv_string lv_reference. lv_bdh_ref = lv_reference. ELSE. lv_bdh_ref = lv_string. ENDIF. SELECT * FROM /1bea/crmb_bdh INTO TABLE lt_/1bea/crmb_bdh WHERE reference_no = lv_bdh_ref. LOOP AT lt_/1bea/crmb_bdh INTO ls_/1bea/crmb_bdh. CLEAR : lv_string, ls_ztransac_det, ls_header, ls_partners, ls_patient, ls_address. FREE : lr_bd_items, lr_entity,lr_condiset, lr_condset, lr_iterator, lr_ite, lr_part, lv_collection. FREE: lr_entity_itm, lr_entity_head, lr_main, lr_docflw, lr_docflwall, lr_docflwset, lr_datesall, lr_dateset. lv_guid = ls_/1bea/crmb_bdh-bdh_guid.*Get the Billing Doc Entity lr_main = lr_core->get_root_entity( iv_object_name = 'BDHeader' iv_object_guid = lv_guid ). CHECK sy-subrc = 0.*Billing Document Number lv_string = lr_main->if_bol_bo_property_access~get_property_as_string( iv_attr_name = 'HEADNO_EXT' ).************newcode************************newcode************ 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_attr_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_attr_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( iv_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( iv_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( iv_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( iv_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( iv_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( iv_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( iv_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( iv_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( iv_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( iv_attr_name = 'SRC_ITEMNO' ). ls_ztransac_det-bill_req_itm = lv_string. CLEAR lv_string.*****************Get Billing Document Pricing Details************************* 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 = 'KBETR' ). 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 = 'KWERT' ). ls_ztransac_det-subtotal = lv_string. ls_header-subtotal = ls_ztransac_det-subtotal + ls_header-subtotal. 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 = 'KWERT' ). 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 = 'KWERT' ). 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 = 'KWERT' ).* 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 = 'KWERT' ). lv_adj = lv_string. ls_header-discount_adjust = ls_header-discount_adjust + lv_adj. 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 = lv_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( 'BTHeaderItemsExt' ). 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_property_as_string( iv_attr_name = 'NUMBER_INT' ). lv_guid_britm = lr_entity_itm->if_bol_bo_property_access~get_property_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('BTItemPartnerSet'). 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('BTPartnerAddress'). IF lr_partner_add IS BOUND. CALL METHOD lr_partner_add->if_bol_bo_property_access~get_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('BTPartnerAddress'). IF lr_partner_add IS BOUND. CALL METHOD lr_partner_add->if_bol_bo_property_access~get_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( 'BTItemDocFlowSet' ). 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_property_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_property_as_string( iv_attr_name = 'OBJKEY_A' ). CLEAR lv_guid . lv_guid = lv_string. SELECT SINGLE header number_int FROM crmd_orderadm_i INTO (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_order_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 = 'BTAdminI' iv_object_guid = lv_guid ). IF lr_ordi IS BOUND.*PO Number Sold CLEAR lv_string. lr_itmsalset ?= lr_ordi->get_related_entity( iv_relation_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('BTItemPartnerSet'). 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_entity('BTPartnerAddress'). IF lr_partner_add IS BOUND. CALL METHOD lr_partner_add->if_bol_bo_property_access~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-partner. INSERT ls_address INTO TABLE lt_address. ENDIF. ENDIF. ENDIF. ENDIF. lr_dateset ?= lr_ordi->get_related_entity( 'BTItemDatesSet' ). 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('BTRefObjSet_A'). IF lr_boset IS BOUND. lr_refobj ?= lr_boset->get_related_entity('BTRefObjectSingle'). IF lr_refobj IS BOUND.*-----------* lr_refobj ?= lr_refobj->get_related_entity('BTIbaseComponent').* IF lr_refobj IS BOUND.* lr_refobj ?= lr_refobj->get_related_entity('SubLevelComponent').* 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-partner. 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-name 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_patient-doctor SEPARATED BY ','. ENDIF. ENDIF. READ TABLE lt_address INTO ls_address WITH KEY ref_partner_fct = 'ZPATIENT' 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-name 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 = '00000055' 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-name 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 = '00000003' 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-name SEPARATED BY ','. ENDIF. ENDIF. ENDLOOP. SORT lt_patient. DELETE ADJACENT DUPLICATES FROM lt_patient.************newcode************************newcode************* ENDIF. ENDLOOP. ENDIF.************newcode************************newcode************* function name DATA: function_name TYPE rs38l_fnam, dummy(254) TYPE c, ls_archive_index TYPE toa_dara, ls_output_options TYPE 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.