Code
Code
LINE-SIZE 132
LINE-COUNT 65(3)
NO STANDARD PAGE HEADING.
*----------------------------------------------------------------------*
* Report: ZFPXR050 *
* Author: Peter Janidlo *
* Date: 20100618 *
* Func. Spec: Health Care Professional Reporting *
* Control ID: VC1709 *
* Trans. Code: ZV630 *
* Description: Retrieve and report: 1. downpayments and reversed *
* downpayments linked to health care reportable purchase *
* orders; 2. cleared payments and payment reversals *
* linked to health care reportable purchase orders or *
* reportable web disbursement requests. *
*----------------------------------------------------------------------*
* Process: 1. Retrieve HCP reportable documents in the date range: *
* A. Downpayments and reversed downpayments *
* B. Payments to invoices; calculate percent of payment *
* per invoice *
* C. Payment reversals to invoices; calculate percent of *
* payment per invoice *
* 2. Retrieve vendor details *
* 3. Format and output interface file *
* 4. Format and output ALV report *
*----------------------------------------------------------------------*
* MODIFICATION LOG: *
* CORR. NO DATE PROGRAMMER DESCRIPTION *
* GDVK9A14IQ 20100618 Peter Janidlo R21.0: Original version. *
* GDVK9A15U1 20100920 Peter Janidlo R21.0 Defect 1320: Fixed RC *
* checks for web DRs. New fields *
* PO Reference and Invoice Type. *
* Fixed selection by PO for *
* payments and payment reversals.*
* R21.0 Defect 1340: Modified *
* payments and payment reversals *
* to process individual invoice *
* items. *
* GDVK9A160J 20100929 Peter Janidlo R21.0 Defect 1390: Extracted *
* common process from payment *
* and payment reversals; removed *
* separate web DR subroutine and *
* incorporated web DRs in common *
* process so that EC invoice *
* items are collected instead of *
* web DR container items. *
* GDVK9A162B 20101001 Peter Janidlo R21.0 Defect 1390: Fixed *
* format of negative Spend Amt. *
* GDVK9A162F 20101002 Peter Janidlo R21.0 Defect 1407: Fixed error *
* in payment reversal selection. *
* Fixed retrieval of PO account *
* assignment. Added code to *
* select downpayment reversals. *
* Fixed selection of vendor tax *
* ID. Added security to restrict *
* display of tax ID. Added doc *
* type to Spend ID to make it *
* unique for payments and payment*
* reversals. Added CoCd security.*
* Modified payments to select *
* specific posting keys. *
* GDVK9A17JA 21-Dec-2010 Tirth Pandya CR06101096 - Fixed errors in doc*
* GDVK9A17XL 06-Jan-2011 creater logic.Added cost centre *
* details to ALV. changed logic to*
* get payment reversals' details. *
* Changed the Cost *
* centre and cost element value *
* assignment for invoices. *
* GDVK9A18OC 20110228 Peter Janidlo CR06148157: Fixed fiscal year *
* in Spend IDs of payment *
* reversals and corresponding *
* original payments. Added *
* Payment document number to *
* Spend ID to properly account *
* for invoices paid again after *
* a payment reversal. *
* GDVK9A1O6L 20130107 Peter Janidlo CR06474471: For web DRs or POs *
* with multiple products per *
* item: split invoice item into *
* multiple items, one per prod, *
* with same spend ID and value, *
* but percentage divided equally *
* across individual products, and*
* unique product ID. Added check *
* to find HCO Vendors, which are *
* automatically HC reportable. *
* Fixed vendor address retrieval *
* for PO boxes. Cleared HCO data *
* in interface when SSN = zero. *
* Added ISO currency key to *
* interface. Added PO and web DR *
* Travel Destination (City, *
* Region, Country) to interface. *
* GDVK9A1OKO 20130311 Peter Janidlo CR06474471: Modified ALV to *
* display PO or web DR when *
* selected. *
* GDVK9A1OTN 20130326 Peter Janidlo CR06474471: Fixed tax code. *
* GDVK9A1RV1 20130910 Rajesh Unny Nair CR06556798: for ZV630 the HCO *
* data is corrected *
* GDVK9A1UVK 16-Apr-2014 Dinesh D CR06578545: Please find the *
* changes below. *
************************************************************************
* Changes as per CR06578545: *
*1. Allowed up to 40 characters for the Lilly person id/customer id. *
*2. Lilly person id is changed to customer id on all applications *
* in SAP and on the interface. *
*3. Extracted ZD and ZG document types into the interface and report. *
*4. Added new fields (BELNR, HEALTH_CARE_PROF, HEALTH_CARE_ORG, *
* PATIENT_ORG, VAT Registration number, TRANSACTION ID, MEETING ID)to*
* the interface and report. The data fields newly added on the ZD doc*
* type include transaction id, meeting number, and customer id. ZG *
* doc type will have the same template as ZD but will only be *
* populating customer id field. *
*5. HCO vendor classification and Patient Org vendor classification *
* needs is put on both the interface file and displayed on the *
* report. *
*6. Currency that the payment was made sent to the *
* interface. *
*7. VAT Registration field should is added to the report and also on *
* the interface. *
*8. WEB DR number and Invoice number is added to the interface. *
*----------------------------------------------------------------------*
* GDVK9A1VB4 19-May-2014 Dinesh D CR06578545- Removed the Hard *
* coding for Vendor Classificatio.*
* Added condition to Display *
* line items in the report based *
* on HCP, HCP, Patient org and *
* Clinical trial PO. *
* Changed the code to Fetch the *
* Language for the PO's and Invoic*
* for fetching the text from *
* READ_TEXT function module. *
* Removed the Validatoin logic for*
* Vendor. Line item with mutiple *
* Product and one of the product *
* is N/A then it will not be *
* displayed in the report. *
* GDVK9A1VE5 17-Jun-2014 Dinesh D CR06578545- For the Product as *
* N/A, the column value product is*
* made space. Only one N/A product*
* will be displayed per line item,*
* BELNR will be dispalyed for all *
* document type. *
* If condition added for Clinical *
* grant payments, the data will be*
* selected based on the SAP PO *
* 'Our Reference' and the 'Sales *
* Person fields'. Corrected the *
* column value populated for BELNR*
* and WEB_DR in the interface file*
* GDVK9A1VH5 25-Jun-2014 Dinesh D CR06578545: Please find the *
* changes below. *
************************************************************************
* Changes as per CR06578545: *
*1. If the CLASSIFICATION for HCO and/ or PT Org are populated with a *
* YES on the Vendor Master - ALWAYS pull/send the records/transactions.*
*2. Any document for ZD or ZG - ALWAYS pull/send the records/ *
* transactions. *
*3. Any PO record where the CUSTOMER ID is populated - ALWAYS pull/send*
* the records/transactions. *
*4. POS that have OUR REF and SALES PERSON on the Communication Tab - *
* ALWAYS pull/send the records/transactions. This is for the clinical *
* grants Pos. *
************************************************************************
* GDVK9A1WMS 04-Nov-2014 Sunil V CR06719587:Bug fix in displaying*
* Customer id, Meeting id and *
* Transaction id for ZD/ZG doc. *
* GDVK9A1YUS 16-Sep-2014 Ramireddy G CR06687537: Please find the *
* changes below. *
* Changes as per CR06687537: for CHINA raise the bar report *
* 1. Add two radiobuttons on selection screen, one for US and another *
* China, keep the existing code/processing logic un touched for US *
* radio button and write new logic/code for China radiobutton by *
* reusing the code as much as possible. Differences for China report*
* are listed in below points: *
* 2. Replace "Spend Type" field with new "Meeting ID" field on *
* selection screen for China radiobutton. *
* 3. Limit selection to China-related documents; that is, only select *
* documents linked to meeting IDs(PO header text 'F12'). *
* 4. China radiobutton will only handle invoice types RE &RI *
* 5. China report will not handle "HCO and HCP Reportable" indicators, *
* WebDRs & Sunshine part unlinke US radiobutton. *
* 6. Send output in new file format for China. *
* 7. Create a separate last-run date record in ZLASTRUN for China. *
* *
* STJK962842 10-Sep-2015 Archana CHG0015380: Changes are done below:*
* Mukherjee *
* 1. Added 2 new columns in ALV display - Tax code and Tax rate *
* 2. Modified interface file to display the 2 new added columns *
* 3. Modified report to display Payment lines for the invoices *
* 4. Display tax details: Withholding and VAT taxes for Payments and *
* Invoices *
* 5. In the final output, concatenate the cost element of expense lines*
* to the cost elemnt of tax lines *
* *
* STJK961833 10-Nov-2015 Archana CHG0056997: Changes are done below:*
* Mukherjee *
* 1. Columns like event id, event name should be populated for tax *
* lines from payment documents with details from their corresponding*
* invoice documents. *
* 2. As of now ZV630 is showing vendor line from payment document which*
* should not be required and should be removed. *
* 3. Amount for ZD and ZG documents are coming incorrect, these should *
* be changed to the amount from the expense line of invoice. *
* 4. Addition of earlier deleted K3 document type line items so that *
* all line items for document type K3 and corresponding invoice item*
* taxes should be populated *
* 5. Code changes for restricting entries in the output if PO details *
* are mentioned in an input parameters. So that outpul will be *
* populated only for given PO. *
************************************************************************
*----------------------------------------------------------------------*
* APPLICATION: P2P-A/R *
* LOGICAL DATABASE: None *
* INPUTS: Selection screen, Payment, web DR, and PO data *
* OUTPUTS: ALV Report, Interface file *
* EXTERNAL ROUTINES: READ_TEXT, SWW_WI_CONTAINER_READ *
* CONVERT_DATE (ZREPFUNC), ALV *
* INCLUDES: SLIS, <CNTN01> *
* RETURN CODES: None *
* ABENDS: None *
*----------------------------------------------------------------------*
* Type groups
TYPE-POOLS: slis.
INCLUDE <cntn01>. "#EC INCL_OK
TABLES: bkpf,
ekko,
bseg,
sscrfields. "R21_1407
DATA: g_meetingid TYPE char20. "CR06687537
************************************************************************
* User Selections *
************************************************************************
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME
TITLE text-b01.
* Start of changes for CR06687537
PARAMETERS: p_us RADIOBUTTON GROUP r2 USER-COMMAND r2,
p_china RADIOBUTTON GROUP r2.
SELECTION-SCREEN SKIP.
* End of changes for CR06687537
PARAMETERS: p_auto AS CHECKBOX USER-COMMAND auto.
SELECT-OPTIONS: s_lifnr FOR ekko-lifnr MODIF ID sel,
s_bukrs FOR bkpf-bukrs MODIF ID sel,
s_cpudt FOR bkpf-cpudt MODIF ID sel,
s_belnr FOR bkpf-belnr MODIF ID sel,
s_ebeln FOR ekko-ebeln MODIF ID sel,
s_kostl FOR bseg-kostl MODIF ID sel,
s_kstar FOR bseg-kstar MODIF ID sel,
s_blart FOR bkpf-blart MODIF ID sel.
SELECT-OPTIONS: s_meet FOR g_meetingid MODIF ID sel. "CR06687537
PARAMETERS: p_rpt RADIOBUTTON GROUP r1,
p_inf RADIOBUTTON GROUP r1.
SELECTION-SCREEN END OF BLOCK b1.
************************************************************************
* Data Declarations *
************************************************************************
TYPES: tp_prsid TYPE string. "CR06578545
* Begin R21_1390
* Type: Payments for invoices, Payment Reversals
TYPES: BEGIN OF tp_pfi,
lifnr TYPE bsak-lifnr,
bukrs TYPE bsak-bukrs,
belnr TYPE bsak-belnr,
gjahr TYPE bsak-gjahr,
blart TYPE bsak-blart,
cpudt TYPE bsak-cpudt,
augbl TYPE bsak-augbl,
augdt TYPE bsak-augdt,
cputm TYPE bkpf-cputm, "CR06687537
END OF tp_pfi.
* Type: Payment Usage
TYPES: BEGIN OF tp_ukey,
bukrs TYPE bsak-bukrs,
lifnr TYPE lifnr, " CHG0015380
belnr TYPE bsak-belnr,
gjahr TYPE bsak-gjahr,
buzei TYPE bsak-buzei,
blart TYPE bsak-blart,
shkzg TYPE bsak-shkzg,
wrbtr TYPE bsak-wrbtr,
nebtr TYPE bseg-nebtr,
waers TYPE bkpf-waers,
wwert TYPE bkpf-wwert,
usnam TYPE bkpf-usnam,
xblnr TYPE bkpf-xblnr,
bktxt TYPE bkpf-bktxt,
END OF tp_ukey.
* Table Type: Payment Usage
TYPES: tt_ukey TYPE STANDARD TABLE OF tp_ukey INITIAL SIZE 0.
* End R21_1390
TYPES: BEGIN OF tp_rpt,
lifnr TYPE bsak-lifnr,
hkont TYPE bseg-hkont,
bukrs TYPE bsak-bukrs,
belnr TYPE bsak-belnr,
gjahr TYPE bsak-gjahr,
buzei TYPE bsak-buzei,
* Begin of changes for CHG0015380
buzid TYPE buzid,
ktosl TYPE ktosl,
* End of changes for CHG0015380
blart TYPE bsak-blart,
cpudt TYPE bsak-cpudt,
ebeln TYPE bsak-ebeln,
ebelp TYPE bsak-ebelp,
zekkn TYPE bsak-zekkn,
augbl TYPE bsak-augbl,
augdt TYPE bsak-augdt,
usnam TYPE ekpo-afnam, "CR06101096
kostl TYPE ekkn-kostl,
unsez TYPE ekko-unsez,
verkf TYPE ekko-verkf,
invtp TYPE bsak-blart, "R21_1320
txz01 TYPE c LENGTH 50,
prsid TYPE tp_prsid,
wi_id TYPE zwebdr, "CR06474471
cdm_flag TYPE z_cdmfl, "CR06474471
pymnt TYPE bsak-belnr, "CR06148157
* Vendor details
stcd1 TYPE lfa1-stcd1, "CR06474471
stcd2 TYPE lfa1-stcd2,
stcdx TYPE lfa1-stcd1, "CR06474471
name1 TYPE lfa1-name1,
name2 TYPE lfa1-name2,
street TYPE adrc-street,
str_suppl1 TYPE adrc-str_suppl1,
city1 TYPE adrc-city1,
region TYPE adrc-region,
post_code1 TYPE adrc-post_code1,
country TYPE adrc-country,
* Begin CR06474471
po_box TYPE adrc-po_box,
post_code2 TYPE adrc-post_code2,
prod TYPE c LENGTH 255,
prod_id TYPE ztproduct_name-zzprod_name,
percentage TYPE i,
td_city TYPE addr1_data-city1,
td_region TYPE t005s-bland,
td_country TYPE addr1_data-country,
event_prod_id TYPE c LENGTH 50,
* End CR06474471
wrbtr TYPE p LENGTH 8 DECIMALS 2,
shkzg TYPE bsak-shkzg,
waers TYPE t001-waers,
meetid TYPE c LENGTH 20, "CR06687537
cputm TYPE cputm, "CR06687537
* Begin of changes for CHG0015380
mwskz TYPE mwskz,
qsskz TYPE qsskz,
* Adding 2 new columns for tax code and rate
tax_code TYPE char3,
tax_rate TYPE char16,
* End of changes for CHG0015380
END OF tp_rpt.
* Table Type: Report "R21_1390
TYPES: tt_rpt TYPE STANDARD TABLE OF tp_rpt INITIAL SIZE 0. "R21_1390
TYPES: BEGIN OF tp_inf,
event_id TYPE c LENGTH 43,
event_prod_id TYPE c LENGTH 50, "CR06474471
event_nm TYPE c LENGTH 50,
customer_id TYPE c LENGTH 40, "CR06578545
hco_id TYPE c LENGTH 10,
hco_tax_id TYPE c LENGTH 11,
hco_nm TYPE c LENGTH 35,
hco_alt_nm TYPE c LENGTH 35,
hco_adrs_ln_1 TYPE c LENGTH 60,
hco_adrs_ln_2 TYPE c LENGTH 40,
hco_adrs_city TYPE c LENGTH 40,
hco_adrs_rgn_cd TYPE c LENGTH 3,
hco_adrs_pstl_cd TYPE c LENGTH 10,
hco_adrs_cntry_cd TYPE c LENGTH 3,
spend_id TYPE c LENGTH 50, "R21_1407 "CR06148157
spend_type_cd TYPE c LENGTH 16,
* Begin of changes for CHG0015380
* Increasing the length of the field from 10 to 16
spend_purpose_cd TYPE c LENGTH 16,
* End of changes for CHG0015380
spend_purpose_secondary_cd TYPE c LENGTH 10,
spend_dt_pd TYPE c LENGTH 10,
spend_amt TYPE c LENGTH 25,
currency TYPE c LENGTH 3, "CR06474471
global_id TYPE c LENGTH 12,
event_parent_id TYPE c LENGTH 12,
event_alt_id TYPE c LENGTH 30,
po_info TYPE c LENGTH 16, "R21_1320
invc_type TYPE c LENGTH 4, "R21_1320
* Begin CR06474471
prod_lly_id TYPE c LENGTH 50,
prod_nm TYPE c LENGTH 50,
prod_dtl_prcnt TYPE c LENGTH 6,
spend_travel_details_id TYPE c LENGTH 50,
spend_travel_details_city TYPE c LENGTH 40,
spend_travel_details_rgn_cd TYPE c LENGTH 3,
spend_travel_details_cntry_cd TYPE c LENGTH 3,
* End CR06474471
* Begin of CR06578545
belnr TYPE belnr_d,
wi_id TYPE zwebdr, "CR06474471
atwrt1 TYPE c LENGTH 2,
atwrt2 TYPE c LENGTH 2,
atwrt3 TYPE c LENGTH 2,
stceg TYPE c LENGTH 20,
transaction_id TYPE c LENGTH 20,
meeting_id TYPE c LENGTH 20,
* End of CR06578545
* Begin of changes for CHG0015380
tax_code TYPE char3,
tax_rate TYPE char16,
* End of changes for CHG0015380
* ALV-only fields
wrbtr TYPE p LENGTH 8 DECIMALS 2,
waers TYPE t001-waers,
cdm_flag TYPE z_cdmfl, "CR06474471
* Begin of changes for CHG0015380
bukrs TYPE bukrs,
gjahr TYPE gjahr,
buzei TYPE buzei,
* End of changes for CHG0015380
END OF tp_inf.
* Start of changes for CR06687537
TYPES: BEGIN OF tp_inf_china,
event_id TYPE c LENGTH 43,
event_nm TYPE c LENGTH 50,
event_strt_dt TYPE c LENGTH 16,
event_typ_cd TYPE c LENGTH 50,
event_parent_id TYPE c LENGTH 20,
eventparentcompanycd TYPE c LENGTH 3,
eventparentsrcsyscd TYPE c LENGTH 12,
eventsubtypecd TYPE c LENGTH 25,
eventparentcountry TYPE c LENGTH 20,
eventviacustomertype TYPE c LENGTH 3,
eventcustomerid TYPE c LENGTH 50,
eventcustomereventrole TYPE c LENGTH 6,
hco_id TYPE c LENGTH 10,
hco_nm TYPE c LENGTH 35,
hco_alt_nm TYPE c LENGTH 35,
hco_adrs_ln_1 TYPE c LENGTH 60,
hco_adrs_ln_2 TYPE c LENGTH 40,
hco_adrs_city TYPE c LENGTH 40,
hco_adrs_rgn_cd TYPE c LENGTH 3,
hco_adrs_pstl_cd TYPE c LENGTH 10,
hco_adrs_cntry_cd TYPE c LENGTH 3,
spend_id TYPE c LENGTH 50,
spend_alt_id TYPE c LENGTH 16,
spend_dt_pd TYPE c LENGTH 16,
spend_amt TYPE c LENGTH 25,
currency TYPE c LENGTH 3,
spendtypecd TYPE c LENGTH 7,
spendpurposecd TYPE c LENGTH 25,
spend_cost_center TYPE c LENGTH 10,
spend_cost_element TYPE c LENGTH 10,
spendcostcenterpersent TYPE c LENGTH 5,
companycd TYPE c LENGTH 3,
src_sys_id TYPE c LENGTH 3,
srcsystypecd TYPE c LENGTH 12,
countrycd TYPE c LENGTH 2,
eventcreatedby TYPE c LENGTH 25,
* ALV-only fields
wrbtr TYPE p LENGTH 8 DECIMALS 2,
waers TYPE t001-waers,
END OF tp_inf_china.
* End of changes for CR06687537
* Begin CR06474471
TYPES: BEGIN OF tp_products,
item TYPE i,
product TYPE i,
value TYPE swcont-value,
END OF tp_products.
TYPES: tt_products TYPE STANDARD TABLE OF tp_products
WITH KEY item product
INITIAL SIZE 0.
TYPES: BEGIN OF tp_dest,
item TYPE i,
type TYPE swc_elem,
value TYPE swcont-value,
END OF tp_dest.
TYPES: tt_dest TYPE STANDARD TABLE OF tp_dest
WITH KEY item type
INITIAL SIZE 0.
* End CR06474471
* Begin of CR06578545
TYPES : BEGIN OF ty_ausp,
objek TYPE ausp-objek,
atinn TYPE ausp-atinn,
atwrt TYPE ausp-atwrt,
END OF ty_ausp.
TYPES : BEGIN OF ty_objek,
objek TYPE c LENGTH 50,
END OF ty_objek.
TYPES: BEGIN OF ty_lifnr,
lifnr TYPE lifnr,
END OF ty_lifnr.
DATA : it_lifnr TYPE STANDARD TABLE OF ty_lifnr,
wa_lifnr TYPE ty_lifnr.
DATA : it_ausp TYPE STANDARD TABLE OF ty_ausp,
wk_ausp TYPE ty_ausp,
it_objek TYPE STANDARD TABLE OF ty_objek,
wk_objek TYPE ty_objek.
*Line deleted for CHG0015380
* END OF CR06578545.
DATA: t_rpt TYPE STANDARD TABLE OF tp_rpt INITIAL SIZE 0. "#EC NEEDED
DATA: t_inf TYPE STANDARD TABLE OF tp_inf INITIAL SIZE 0. "#EC NEEDED
DATA: t_inf_china TYPE STANDARD TABLE OF tp_inf_china INITIAL SIZE 0. "#EC NEEDE
D "CR06687537
* Range: Invoice document types
DATA: r_invdt TYPE RANGE OF t003-blart INITIAL SIZE 0. "#EC NEEDED
* Range: Downpayment document types
DATA: r_dpydt TYPE RANGE OF t003-blart INITIAL SIZE 0. "#EC NEEDED
* Range: Payment document types
DATA: r_paydt TYPE RANGE OF t003-blart INITIAL SIZE 0. "#EC NEEDED
* Range: Payment Reversal document types
DATA: r_revdt TYPE RANGE OF t003-blart INITIAL SIZE 0. "#EC NEEDED
* Begin R21_1390
* Range: Web DR workflow tasks
DATA: r_task TYPE RANGE OF swwwihead-wi_rh_task INITIAL SIZE 0.
"#EC NEEDED
* End R21_1390
* Table: ALV field catalog
DATA: t_fieldcat TYPE slis_t_fieldcat_alv. "#EC NEEDED
* Table: ALV events
DATA: t_events TYPE slis_t_event. "#EC NEEDED
* Table: ALV top of page event
DATA: t_listheader TYPE slis_t_listheader. "#EC NEEDED
* Structure: ALV layout
DATA: s_layout TYPE slis_layout_alv. "#EC NEEDED
DATA: gv_repid TYPE sy-repid, "#EC NEEDED " Program name
gv_text1 TYPE char10, "#EC NEEDED " ZLASTRUN param
gv_text2 TYPE char10, "#EC NEEDED " ZLASTRUN param
gv_paramter TYPE zlastrun-paramter, "#EC NEEDED " Lastrun tmstamp
gv_frdat TYPE d, "#EC NEEDED
gv_frtim TYPE t, "#EC NEEDED
gv_todat TYPE d, "#EC NEEDED
gv_totim TYPE t, "#EC NEEDED
gv_noauth TYPE c LENGTH 1, "#EC NEEDED " No authorization
"R21_1407
* Begin of CR06578545
lv_tdname TYPE thead-tdname,
lv1_tdname TYPE c LENGTH 20,
lv2_tdname TYPE thead-tdname.
RANGES: r_non_ec FOR bsak-blart.
* End of CR06578545
CONSTANTS:
c_x TYPE c VALUE 'X', " NEVER CHANGE THIS
c_auto TYPE char10 VALUE 'AUTOMATIC',
c_manual TYPE char10 VALUE 'MANUAL',
c_china TYPE char10 VALUE 'CHINA', "CR06687537
c_onli TYPE syucomm VALUE 'ONLI', "R21_1407
c_prin TYPE syucomm VALUE 'PRIN', "R21_1407
c_save TYPE c VALUE 'A', " Save ALV layout
c_typ_s TYPE c VALUE 'S', " ALV Sub-header
c_blkls TYPE t003-blkls VALUE 'A', " Invoices
c_k1 TYPE blart VALUE 'K1',
c_k2 TYPE blart VALUE 'K2',
c_k3 TYPE blart VALUE 'K3',
c_k4 TYPE blart VALUE 'K4',
c_k5 TYPE blart VALUE 'K5',
c_ab TYPE blart VALUE 'AB',
c_zv TYPE blart VALUE 'ZV',
c_kv TYPE blart VALUE 'KV',
c_zd TYPE blart VALUE 'ZD', " CR06578545
c_zg TYPE blart VALUE 'ZG', " CR06578545
c_re TYPE blart VALUE 'RE', "CR06687537
c_ri TYPE blart VALUE 'RI', "CR06687537
c_tdobject TYPE tdobject VALUE 'EKPO', " PO Item text
c_tdid TYPE tdid VALUE 'F09', " Lilly Person ID
c_tdid_prd TYPE tdid VALUE 'F10', " Product ID "CR06474471
c_tdid_trv TYPE tdid VALUE 'F11', " Trav. Dest "CR06474471
c_credit TYPE shkzg VALUE 'H',
c_umskz_dp TYPE umskz VALUE 'A',
c_umsks_dp TYPE umsks VALUE 'A',
c_bschl_dp TYPE bschl VALUE '29', " Downpayment
c_bl_dpr TYPE blart VALUE 'KA',
c_bschl_py TYPE bschl VALUE '25', " Payment "R21_1407
c_date_fr TYPE d VALUE '00010101',
c_mrate TYPE kurst VALUE 'M',
c_usd TYPE waers VALUE 'USD',
* Begin CR06474471
c_addr_typ TYPE ad_adrtype VALUE '1',
c_us TYPE ad_ctry_fr VALUE 'US',
c_usa TYPE land1 VALUE 'USA',
c_hco TYPE atnam VALUE 'Z_HEALTH_CARE_ORG_COVERED_RECI',
c_mafid TYPE klmaf VALUE 'O',
c_klart TYPE klassenart VALUE '010',
c_y TYPE atwrt VALUE 'Y',
c_na TYPE zprod_desc VALUE 'N/A',
c_nax TYPE zprod_desc VALUE 'NA',
* End CR06474471
* Web DR
c_task1 TYPE sww_task VALUE 'WS91000001',
c_task2 TYPE sww_task VALUE 'WS93000024',
c_task3 TYPE sww_task VALUE 'WS91000102',
c_task4 TYPE sww_task VALUE 'WS91000052',
c_blart_dr TYPE blart VALUE 'EC',
c_wi_type TYPE sww_witype VALUE 'F',
c_elem_crd TYPE swc_elem VALUE 'Z_CRD_NO',
c_elem_cia TYPE swc_elem VALUE 'ZCIA', "CR06474471
c_elem_txt TYPE swc_elem VALUE 'TEXT',
c_elem_prd TYPE swc_elem VALUE 'PRDNAME*', "CR06474471
c_elem_cty TYPE swc_elem VALUE 'CITYLI*', "CR06474471
c_elem_reg TYPE swc_elem VALUE 'REGIONLI*', "CR06474471
c_elem_co TYPE swc_elem VALUE 'COUNTRYLI*', "CR06474471
c_sep1 TYPE c LENGTH 1 VALUE '-',
c_sep2 TYPE c LENGTH 1 VALUE '_',
c_sepp TYPE c LENGTH 1 VALUE ';', "CR06474471
c_opath TYPE c LENGTH 20 VALUE '/transfer/00207/',
c_fprfx TYPE c LENGTH 13 VALUE 'SAP_SPND_DATA',
c_fextn TYPE c LENGTH 4 VALUE '.tsv', "#EC NOTEXT
c_opath_china TYPE c LENGTH 20 VALUE '/transfer/01681/', "CR06687537
c_fprfx_china TYPE c LENGTH 25 VALUE 'LLY_LLY_SAP_CN_SPEND_DATA', "CR06687537
* Begin of changes for CHG0015380
* Increasing length from 41 to 43
c_nf TYPE i VALUE 43, " Num I/F fields
* End of changes for CHG0015380
c_texto TYPE c LENGTH 8 VALUE 'TEXT-O',
* Begin of CR06578545
c_meetid TYPE tdid VALUE '1009',
c_meetid2 TYPE tdid VALUE 'F12',
c_001 TYPE char3 VALUE '001',
c_i TYPE char1 VALUE 'I',
c_eq TYPE char2 VALUE 'EQ',
* End of CR06578545
c_file_sep TYPE c VALUE cl_abap_char_utilities=>horizontal_tab.
************************************************************************
* Subroutines *
************************************************************************
*&---------------------------------------------------------------------*
*& Form initialization
*&---------------------------------------------------------------------*
* Initialize global variables and screen fields.
*----------------------------------------------------------------------*
FORM initialization.
* Set global variables
gv_repid = sy-repid.
p_auto = space.
p_rpt = c_x.
ENDFORM. " initialization
*&---------------------------------------------------------------------*
*& Form DISABLE_FIELDS
*&---------------------------------------------------------------------*
* Grey-out input fields for automatic selection.
*----------------------------------------------------------------------*
FORM disable_fields.
LOOP AT SCREEN.
IF screen-group1 = 'SEL'.
IF p_auto = c_x.
screen-input = '0'.
MODIFY SCREEN.
* Clear all screen fields
CLEAR: s_lifnr,
s_bukrs,
s_cpudt,
s_belnr,
s_ebeln,
s_kostl,
s_kstar,
s_blart.
REFRESH: s_lifnr,
s_bukrs,
s_cpudt,
s_belnr,
s_ebeln,
s_kostl,
s_kstar,
s_blart.
ELSE.
screen-input = '1'.
MODIFY SCREEN.
* Start of changes for CR06687537
IF p_china = c_x.
IF screen-name CP 'S_BLART*'.
screen-input = '0'.
MODIFY SCREEN.
ENDIF.
ELSE.
IF screen-name CP 'S_MEET*'.
screen-input = '0'.
MODIFY SCREEN.
ENDIF.
ENDIF.
* End of changes for CR06687537
ENDIF.
ENDIF.
ENDLOOP.
ENDFORM. " DISABLE_FIELDS
*&---------------------------------------------------------------------*
*& Form update_zlastrun
*&---------------------------------------------------------------------*
* Update ZLASTRUN table with program execution details.
*----------------------------------------------------------------------*
* --> P_ENDTIME Start/end indicator
* --> P_PARAMTER Last run timestamp
*----------------------------------------------------------------------*
FORM update_zlastrun USING p_endtime TYPE c
p_paramter TYPE zlastrun-paramter.
CALL FUNCTION 'Z_UPDATE_ZLASTRUN'
EXPORTING
programm = gv_repid
text1 = gv_text1
text2 = gv_text2
flag_for_endtime = p_endtime
flag_for_counter = space " Do NOT overwrite PARAMTER
paramter = p_paramter
EXCEPTIONS
OTHERS = 0.
ENDFORM. " update_zlastrun
*&---------------------------------------------------------------------*
*& Form main
*&---------------------------------------------------------------------*
* This is the main driver of the program.
*----------------------------------------------------------------------*
FORM main.
IF p_auto = c_x.
gv_text1 = c_auto.
* Start of changes for CR06687537
IF p_china = c_x.
gv_text2 = c_china.
ELSE.
* End of changes for CR06687537
gv_text2 = space.
ENDIF. "CR06687537
ELSE.
gv_text1 = c_manual.
gv_text2 = sy-uname.
ENDIF.
PERFORM get_last_rundate.
PERFORM get_docty.
* Start of changes for CR06687537
IF p_china = c_x.
PERFORM get_payments_china.
PERFORM get_reversals_china.
ELSE.
* End of changes for CR06687537
PERFORM get_downpayments.
PERFORM get_dp_reversals. "R21_1407
PERFORM get_payments.
*-- Start of changes for Defect#937
IF it_ausp IS INITIAL.
DATA: it_lifnr_temp TYPE STANDARD TABLE OF ty_lifnr.
SELECT lifnr
FROM lfa1
INTO TABLE it_lifnr_temp
WHERE lifnr IN s_lifnr.
IF sy-subrc EQ 0.
LOOP AT it_lifnr_temp INTO wa_lifnr.
wk_objek-objek = wa_lifnr-lifnr.
COLLECT wk_objek INTO it_objek.
ENDLOOP.
SORT it_objek BY objek.
IF it_objek IS NOT INITIAL.
SELECT objek
atinn
atwrt
FROM ausp
INTO TABLE it_ausp
FOR ALL ENTRIES IN it_objek
WHERE objek = it_objek-objek.
IF sy-subrc EQ 0.
SORT it_ausp BY objek atinn.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
*-- End of changes for Defect#937
PERFORM get_reversals.
ENDIF. "CR06687537
* Begin of changes for CHG0015380
* Added this routine to fetch the clearing docs for
* invoices and tax lines for invoices and clearing docs
* and displaye them in ALV. Also pick relevant details
* to populate the additional 2 columsn for tax code and rate
PERFORM get_taxes.
* End of changes for CHG0015380
PERFORM get_vendor_details.
ENDFORM. " main
*&---------------------------------------------------------------------*
*& Form GET_LAST_RUNDATE
*&---------------------------------------------------------------------*
* For Automatic execution, retrieve end date and time of previous
* run. (For Manual execution, use Entry Date range from selection
* screen.)
*----------------------------------------------------------------------*
FORM get_last_rundate.
DATA: lv_paramter TYPE zlastrun-paramter,
lv_timestamp TYPE tzntimestp.
CLEAR: p_hcr,
p_prsid,
p_verkf,
p_unsez.
ENDLOOP.
ENDFORM. " FORMAT_INTERFACE
*&---------------------------------------------------------------------*
*& Form CREATE_INTERFACE_FILE
*&---------------------------------------------------------------------*
* Format and write interface file to transfer directory.
*----------------------------------------------------------------------*
FORM create_interface_file.
DATA: lv_outfile TYPE c LENGTH 120, " Output file name
lv_line TYPE c LENGTH 2000, " Output file line
lv_line_str TYPE string. "yusuf
DATA: lv_rc TYPE sy-subrc, " Return code
lv_nn TYPE n LENGTH 2, " Text element number
lv_text TYPE c LENGTH 8, " Text element name
lv_l TYPE i, " Length
lv_i TYPE i, " Current field
lv_o TYPE i. " Offset
DATA: s_inf TYPE tp_inf.
FIELD-SYMBOLS: <t1> TYPE any,
<fs> TYPE any.
CONSTANTS : c_000000000000 TYPE char12 VALUE '000000000000'. "CR06578545
lv_rc = 0.
WHILE lv_rc = 0.
* Generate file name
* File name format: SAP_SPND_DATA_YYYYMMDD_HHMISS.tsv
GET TIME.
CONCATENATE c_opath
c_fprfx c_sep2
sy-datlo c_sep2
sy-timlo
c_fextn
INTO lv_outfile.
* Make sure file does not already exist
OPEN DATASET lv_outfile FOR INPUT
IN TEXT MODE
ENCODING DEFAULT.
lv_rc = sy-subrc.
ENDWHILE.
* Open file for output
OPEN DATASET lv_outfile FOR OUTPUT
IN TEXT MODE
ENCODING DEFAULT "UTF-8
WITH WINDOWS LINEFEED.
IF sy-subrc <> 0.
MESSAGE e030 WITH lv_outfile.
ENDIF.
* Add header line containing field names
CLEAR lv_line.
DO c_nf TIMES.
lv_nn = sy-index.
CONCATENATE c_texto lv_nn INTO lv_text. " Get corres. text element
ASSIGN (lv_text) TO <t1>. " Get text
lv_rc = sy-subrc.
IF lv_rc = 0.
IF lv_nn = 1.
lv_line = <t1>.
ELSE.
CONCATENATE lv_line
c_file_sep
<t1>
INTO lv_line.
ENDIF.
ELSE.
* Prevent short dump due to missing texts/unassigned field symbol
IF lv_nn = 1.
ELSE.
CONCATENATE lv_line
c_file_sep
INTO lv_line.
ENDIF.
ENDIF.
ENDDO.
lv_line_str = lv_line. "CHG0015380
TRANSFER lv_line_str TO lv_outfile.
* Add detail lines; remove trailing spaces, separate fields with defined
* separator
LOOP AT t_inf INTO s_inf.
CLEAR: lv_line,
lv_o.
DO c_nf TIMES.
lv_i = sy-index.
ASSIGN COMPONENT lv_i OF STRUCTURE s_inf TO <fs>.
lv_rc = sy-subrc.
CLEAR lv_l.
IF lv_rc = 0.
lv_l = strlen( <fs> ).
ENDIF.
IF lv_rc = 0 AND " Field symbol assigned
lv_l > 0. " Prevent short dump on zero len
lv_line+lv_o(lv_l) = <fs>(lv_l).
* Begin of CR06578545
IF <fs>(lv_l) = c_000000000000.
CLEAR lv_line+lv_o(lv_l).
ENDIF.
* End of CR06578545
lv_o = lv_o + lv_l.
ENDIF.
IF lv_i <> c_nf. " No separator after last field
lv_line+lv_o(1) = c_file_sep.
lv_o = lv_o + 1.
ENDIF.
ENDDO.
lv_line_str = lv_line. " CHG0015380
TRANSFER lv_line_str TO lv_outfile.
ENDLOOP.
* Close dataset
CLOSE DATASET lv_outfile.
ENDFORM. " CREATE_INTERFACE_FILE
*&---------------------------------------------------------------------*
*& Form OUTPUT_REPORT
*&---------------------------------------------------------------------*
* Format and output ALV report. Do not output in background.
*----------------------------------------------------------------------*
FORM output_report.
CHECK sy-batch = space.
PERFORM alv_report_layout.
* Start of changes for CR06687537
IF p_china = c_x.
PERFORM alv_field_catalog_china.
PERFORM alv_report_china.
ELSE.
* End of changes for CR06687537
PERFORM alv_field_catalog.
PERFORM alv_report.
ENDIF. "CR06687537
ENDFORM. " OUTPUT_REPORT
*&---------------------------------------------------------------------*
*& Form alv_field_catalog
*&---------------------------------------------------------------------*
* Create list of fields for ALV report.
*----------------------------------------------------------------------*
FORM alv_field_catalog.
PERFORM add_field
USING: 'EVENT_ID' text-r01 space space,
'EVENT_NM' text-r02 space space,
'CUSTOMER_ID' text-r03 space space, "CR06578545
'HCO_ID' text-r04 space space.
* Begin R21_1407
* Only display tax ID if user has authorization
IF gv_noauth = space.
PERFORM add_field
USING: 'HCO_TAX_ID' text-r05 space space.
ENDIF.
PERFORM add_field
USING: 'HCO_NM' text-r06 space space,
* End R21_1407
'HCO_ALT_NM' text-r07 space space,
'HCO_ADRS_LN_1' text-r08 space space,
'HCO_ADRS_LN_2' text-r09 space space,
'HCO_ADRS_CITY' text-r10 space space,
'HCO_ADRS_RGN_CD' text-r11 space space,
'HCO_ADRS_PSTL_CD' text-r12 space space,
'HCO_ADRS_CNTRY_CD' text-r13 space space,
'SPEND_ID' text-r14 space space,
'SPEND_TYPE_CD' text-r15 space space,
'SPEND_PURPOSE_CD' text-r16 space space,
'SPEND_PURPOSE_SECONDARY_CD' text-r17 space space,
'SPEND_DT_PD' text-r18 space space,
'WRBTR' text-r19 space 'WAERS',
'WAERS' text-r25 space space, "CR06474471
'GLOBAL_ID' text-r20 space space,
'EVENT_PARENT_ID' text-r21 space space,
'EVENT_ALT_ID' text-r22 space space,
'PO_INFO' text-r23 c_x space, "R21_1320
"CR06474471
'BELNR' text-r40 c_x space, "CR06578545
'WI_ID' text-r32 c_x space, "CR06474471
'INVC_TYPE' text-r24 space space, "R21_1320
* Begin CR06474471
'EVENT_PROD_ID' text-r26 space space,
'PROD_NM' text-r27 space space,
'PROD_DTL_PRCNT' text-r28 space space,
'SPEND_TRAVEL_DETAILS_CITY' text-r29 space space,
'SPEND_TRAVEL_DETAILS_RGN_CD' text-r30 space space,
'SPEND_TRAVEL_DETAILS_CNTRY_CD' text-r31 space space,
* End CR06474471
* Begin of CR06578545
'ATWRT1' text-r33 space space,
'ATWRT2' text-r34 space space,
'ATWRT3' text-r35 space space,
'STCEG' text-r36 space space,
'TRANSACTION_ID' text-r38 space space,
'MEETING_ID' text-r39 space space.
* End of CR06578545
* Begin of changes for CHG0015380
* Adding the new fields in the field catalog
PERFORM add_field USING:
'TAX_CODE' text-o42 space space,
'TAX_RATE' text-o43 space space.
* End of changes for CHG0015380
ENDFORM. " alv_field_catalog
*&---------------------------------------------------------------------*
*& Form add_field
*&---------------------------------------------------------------------*
* Create single field catalog entry for main report.
*----------------------------------------------------------------------*
* --> P_FIELD Field name
* --> P_TEXT Column heading
* --> P_HOT Field is hotspot
* --> P_CURR Currency key field
*----------------------------------------------------------------------*
FORM add_field USING p_field TYPE slis_fieldname
p_text TYPE scrtext_l
p_hot TYPE c
p_curr TYPE any.
DATA: s_fieldcat TYPE slis_fieldcat_alv.
CLEAR s_fieldcat.
s_fieldcat-tabname = 'T_INF'. "CR06474471
s_fieldcat-fieldname = p_field.
s_fieldcat-seltext_l = p_text.
s_fieldcat-hotspot = p_hot.
s_fieldcat-cfieldname = p_curr.
APPEND s_fieldcat TO t_fieldcat.
ENDFORM. " add_field
*&---------------------------------------------------------------------*
*& Form alv_report_layout
*&---------------------------------------------------------------------*
* Define ALV layout and event parameters.
*----------------------------------------------------------------------*
FORM alv_report_layout.
DATA: lv_datlo TYPE sy-datlo,
lv_fdate TYPE c LENGTH 11,
lv_ftime TYPE c LENGTH 8.
DATA: s_events TYPE slis_alv_event,
s_listheader TYPE slis_listheader.
* Set layout
CLEAR s_layout.
s_layout-colwidth_optimize = c_x.
s_layout-zebra = c_x.
s_layout-get_selinfos = c_x.
s_layout-confirmation_prompt = space.
s_layout-detail_popup = c_x.
* Create top of page event
CLEAR s_events.
s_events-name = slis_ev_top_of_page.
s_events-form = slis_ev_top_of_page.
APPEND s_events TO t_events.
* Fill top of page
CLEAR s_listheader.
s_listheader-typ = c_typ_s.
s_listheader-key = text-t01.
APPEND s_listheader TO t_listheader.
* Add "subject" lines to top-of-page
* Add report name
CLEAR s_listheader.
s_listheader-typ = c_typ_s.
s_listheader-info = gv_repid.
APPEND s_listheader TO t_listheader.
* Format date and time
lv_datlo = sy-datlo.
PERFORM convert_date IN PROGRAM zrepfunc USING lv_datlo
CHANGING lv_fdate.
CONCATENATE sy-timlo(2) sy-timlo+2(2) sy-timlo+4(2)
INTO lv_ftime SEPARATED BY ':'.
* Add formatted date and time
CLEAR s_listheader.
s_listheader-typ = c_typ_s.
CONCATENATE lv_fdate lv_ftime
INTO s_listheader-info SEPARATED BY space.
APPEND s_listheader TO t_listheader.
ENDFORM. " alv_report_layout
*&---------------------------------------------------------------------*
*& Form alv_report
*&---------------------------------------------------------------------*
* Output ALV report.
*----------------------------------------------------------------------*
FORM alv_report.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = gv_repid
i_callback_user_command = slis_ev_user_command
is_layout = s_layout
it_fieldcat = t_fieldcat
i_save = c_save
it_events = t_events
TABLES
t_outtab = t_inf
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE e038(zpmp) WITH sy-subrc.
ENDIF.
ENDFORM. " alv_report
*&---------------------------------------------------------------------*
*& Form top_of_page
*&---------------------------------------------------------------------*
* Generate ALV header.
*----------------------------------------------------------------------*
FORM top_of_page. "#EC CALLED
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = t_listheader
EXCEPTIONS
OTHERS = 0.
ENDFORM. " top_of_page
* Begin R21_1390
*&---------------------------------------------------------------------*
*& Form GET_PAYMENTS
*&---------------------------------------------------------------------*
* Retrieve and process payments for invoices.
*----------------------------------------------------------------------*
FORM get_payments.
DATA: t_pfi TYPE STANDARD TABLE OF tp_pfi INITIAL SIZE 0.
DATA: t_ukey TYPE tt_ukey.
DATA: x_rpt TYPE tt_rpt.
DATA: s_rpt TYPE tp_rpt. "CR06578545
DATA: lv_cputm TYPE bkpf-cputm,
lv_hcr TYPE c LENGTH 1, " Flag: payment is reportable
lv_rc TYPE sy-subrc.
FIELD-SYMBOLS: <pfi> TYPE tp_pfi.
IF p_auto = c_x.
* Get payments for invoices from last run date; only retrieve cleared
* vendor items
SELECT DISTINCT lifnr
bukrs belnr gjahr
blart cpudt
augbl augdt
INTO CORRESPONDING FIELDS OF TABLE t_pfi
FROM bsak
WHERE bukrs IN s_bukrs
AND cpudt >= gv_frdat
AND cpudt <= gv_todat
AND lifnr IN s_lifnr
AND umskz = space
AND belnr IN s_belnr
AND blart IN r_paydt
AND blart IN s_blart
AND bschl IN (c_bschl_py,c_bschl_dp). "R21_1407
IF sy-subrc <> 0.
DELETE t_pfi.
CONTINUE.
ENDIF.
* Process documents
PERFORM process_usage TABLES t_ukey
x_rpt
USING <pfi>
space "R21_1407
'0000' "R21_1407
lv_hcr
lv_rc.
IF lv_hcr = space OR lv_rc <> 0 OR x_rpt[] IS INITIAL.
DELETE t_pfi.
CONTINUE.
ENDIF.
APPEND LINES OF x_rpt TO t_rpt.
ENDLOOP.
* Begin of changes for CHG0015380
gt_pfi[] = t_pfi[].
* End of changes for CHG0015380
* BEGIN OF CR06578545.
LOOP AT t_rpt INTO s_rpt.
wk_objek-objek = s_rpt-lifnr.
COLLECT wk_objek INTO it_objek.
ENDLOOP.
SORT it_objek BY objek.
IF it_objek IS NOT INITIAL.
SELECT objek
atinn
atwrt
FROM ausp
INTO TABLE it_ausp
FOR ALL ENTRIES IN it_objek
WHERE objek = it_objek-objek.
IF sy-subrc EQ 0.
SORT it_ausp BY objek atinn.
ENDIF.
ENDIF.
* END OF CR06578545.
ENDFORM. " GET_PAYMENTS
*&---------------------------------------------------------------------*
*& Form GET_REVERSALS
*&---------------------------------------------------------------------*
* Retrieve and process Payment Reversals.
*----------------------------------------------------------------------*
FORM get_reversals.
DATA: t_rev TYPE STANDARD TABLE OF tp_pfi INITIAL SIZE 0.
DATA: t_ukey TYPE tt_ukey.
DATA: x_rpt TYPE tt_rpt.
DATA: lv_cputm TYPE bkpf-cputm,
lv_hcr TYPE c LENGTH 1, " Flag: payment is reportable
lv_rc TYPE sy-subrc.
DATA: lv_stblg TYPE bkpf-stblg,
lv_stjah TYPE bkpf-stjah,
lv_bktxt TYPE bkpf-bktxt.
FIELD-SYMBOLS: <rev> TYPE tp_pfi.
IF p_auto = c_x.
* Get Payment Reversals for invoices from last run date; only retrieve
* cleared vendor items
SELECT DISTINCT lifnr
bukrs belnr gjahr
blart cpudt
augbl augdt
INTO CORRESPONDING FIELDS OF TABLE t_rev
FROM bsak
WHERE bukrs IN s_bukrs
AND cpudt >= gv_frdat
AND cpudt <= gv_todat
AND lifnr IN s_lifnr
AND umskz = space
AND belnr IN s_belnr
AND blart IN r_revdt
AND blart IN s_blart.
* Make sure document is within start and end times
LOOP AT t_rev ASSIGNING <rev>
WHERE cpudt = gv_frdat
OR cpudt = gv_todat.
* Get document entry time
CLEAR lv_cputm.
SELECT SINGLE cputm
INTO lv_cputm
FROM bkpf
WHERE bukrs = <rev>-bukrs
AND belnr = <rev>-belnr
AND gjahr = <rev>-gjahr.
IF sy-subrc <> 0.
DELETE t_rev.
CONTINUE.
ENDIF.
IF <rev>-cpudt = gv_frdat AND
lv_cputm <= gv_frtim.
DELETE t_rev.
CONTINUE.
ENDIF.
IF <rev>-cpudt = gv_todat AND
lv_cputm > gv_totim.
DELETE t_rev.
CONTINUE.
ENDIF.
ENDLOOP.
ELSE. " Manual execution
* Get Payment Reversals for invoices
SELECT DISTINCT lifnr
bukrs belnr gjahr
blart cpudt
augbl augdt
INTO CORRESPONDING FIELDS OF TABLE t_rev
FROM bsak
WHERE bukrs IN s_bukrs
AND cpudt IN s_cpudt
AND lifnr IN s_lifnr
AND umskz = space
AND belnr IN s_belnr
AND blart IN r_revdt
AND blart IN s_blart.
ENDIF.
CHECK NOT t_rev[] IS INITIAL.
* Process payment reversals
LOOP AT t_rev ASSIGNING <rev>.
* Verify payment reversal: get original payment document (the document
* reversed) and payment run
CLEAR: lv_stblg,
lv_stjah,
lv_bktxt.
SELECT SINGLE stblg stjah bktxt
INTO (lv_stblg,lv_stjah,lv_bktxt)
FROM bkpf
WHERE bukrs = <rev>-bukrs
AND belnr = <rev>-belnr
AND gjahr = <rev>-gjahr.
IF sy-subrc <> 0 OR
lv_stblg IS INITIAL OR
lv_bktxt IS INITIAL.
DELETE t_rev.
CONTINUE.
ENDIF.
* Get original invoices associated with the payment from payment run
REFRESH t_ukey.
SELECT bukrs belnr gjahr buzei
blart
shkzg wrbtr ##too_many_itab_fields
INTO CORRESPONDING FIELDS OF TABLE t_ukey
FROM regup
WHERE laufd = lv_bktxt(8)
AND laufi = lv_bktxt+9(6)
AND xvorl = space
AND lifnr = <rev>-lifnr " Payment doc vendor
AND vblnr = lv_stblg " Payment doc
AND bukrs = <rev>-bukrs. " Payment doc company
IF sy-subrc <> 0.
DELETE t_rev.
CONTINUE.
ENDIF.
* Retrieve payment document items (not in payment run)
SELECT bukrs belnr gjahr buzei
blart
shkzg wrbtr ##too_many_itab_fields
APPENDING CORRESPONDING FIELDS OF TABLE t_ukey
FROM bsak
WHERE bukrs = <rev>-bukrs
AND belnr = <rev>-belnr
AND gjahr = <rev>-gjahr.
* Process documents
PERFORM process_usage TABLES t_ukey
x_rpt
USING <rev>
lv_stblg "R21_1407
lv_stjah
lv_hcr
lv_rc.
* Code removed as per CR06578545
APPEND LINES OF x_rpt TO t_rpt.
ENDLOOP.
SORT t_rpt.
ENDFORM. " GET_REVERSALS
*&---------------------------------------------------------------------*
*& Form PROCESS_USAGE
*&---------------------------------------------------------------------*
* Process invoices in payment usage.
*----------------------------------------------------------------------*
* -->T_UKEY List of Payment Usage documents
* <--X_RPT Reportable items
* -->P_PFI Current payment/reversal item
* -->LV_STBLG Reversal document number "R21_1407
* -->LV_STJAH Reversal document year "R21_1407
* <--LV_HCR Indicator: payment is HCP reportable
* <--LV_RC Return code
*----------------------------------------------------------------------*
FORM process_usage TABLES t_ukey TYPE tt_ukey
x_rpt TYPE tt_rpt
USING p_pfi TYPE tp_pfi
lv_stblg TYPE bkpf-stblg "R21_1407
lv_stjah TYPE bkpf-stjah "R21_1407
lv_hcr TYPE c
lv_rc TYPE sy-subrc.
* Type: Invoice items
TYPES: BEGIN OF tp_items,
bukrs TYPE bseg-bukrs,
belnr TYPE bseg-belnr,
gjahr TYPE bseg-gjahr,
buzei TYPE bseg-buzei,
* Begin of changes for CHG0015380
buzid TYPE buzid,
mwskz TYPE mwskz,
qsskz TYPE qsskz,
* End of changes for CHG0015380
ebeln TYPE bseg-ebeln,
ebelp TYPE bseg-ebelp,
zekkn TYPE bseg-zekkn,
hkont TYPE bseg-hkont,
lifnr TYPE lifnr, " CHG0015380
kostl TYPE bseg-kostl,
shkzg TYPE bseg-shkzg,
wrbtr TYPE bseg-wrbtr,
ktosl TYPE ktosl, " CHG0015380
sgtxt TYPE sgtxt, "CR06578545
END OF tp_items.
DATA: t_inv TYPE STANDARD TABLE OF tp_ukey INITIAL SIZE 0.
DATA: t_items TYPE STANDARD TABLE OF tp_items INITIAL SIZE 0.
* Begin of changes for CHG0015380
DATA: lv_lifnr TYPE lifnr.
FIELD-SYMBOLS: <fs_items> TYPE tp_items.
* End of changes for CHG0015380
* Begin of CR06578545
DATA: t_items1 TYPE STANDARD TABLE OF tp_items,
wa_items1 TYPE tp_items.
* End of CR06578545
DATA: ls_rpt TYPE tp_rpt.
DATA: xv_hcr TYPE c LENGTH 1, " Flag: invoice is reportable
lv_hco TYPE c LENGTH 1. "CR06474471
DATA: lv_prsid TYPE tp_prsid,
lv_verkf TYPE ekko-verkf,
lv_unsez TYPE ekko-unsez,
lv_hkont TYPE ekkn-sakto,
lv_kostl TYPE ekkn-kostl,
lv_wi_id TYPE sww_wiid,
lv_cdm_flag TYPE z_cdmfl. "CR06474471
DATA: lv_invsum TYPE p LENGTH 8 DECIMALS 2,
lv_nebtr TYPE p LENGTH 8 DECIMALS 2,
lv_nebtr_i TYPE p LENGTH 8 DECIMALS 2,
lv_tdate TYPE d.
FIELD-SYMBOLS: <ukey> TYPE tp_ukey,
<inv> TYPE tp_ukey,
<items> TYPE tp_items.
* Begin CR06474471
DATA: lt_products TYPE tt_products,
ls_products TYPE tp_products.
DATA: lt_dest TYPE tt_dest,
ls_dest TYPE tp_dest.
DATA: ls_container TYPE swcont.
DATA: lv_index TYPE sy-tabix,
lv_count TYPE i.
* End CR06474471
REFRESH x_rpt.
CLEAR lv_hcr.
lv_rc = 0.
* Create container
swc_container wi_container.
swc_create_container wi_container.
IF p_auto = c_x.
* Get all open downpayments since last run
* An open downpayment has not been fully recouped; it stays open until
* value is recouped via invoices
SELECT lifnr
bukrs belnr gjahr buzei blart cpudt
ebeln ebelp zekkn
wrbtr shkzg ##too_many_itab_fields
INTO CORRESPONDING FIELDS OF TABLE t_dp
FROM bsik
WHERE bukrs IN s_bukrs
AND cpudt >= gv_frdat
AND cpudt <= gv_todat
AND lifnr IN s_lifnr
AND umsks = c_umsks_dp
AND umskz = c_umskz_dp " Down payment
AND belnr IN s_belnr
AND blart IN r_dpydt
AND blart IN s_blart
AND bschl = c_bschl_dp
AND ebeln IN s_ebeln.
* Get all cleared downpayments since last run
* A cleared downpayment has been fully recouped
SELECT lifnr
bukrs belnr gjahr buzei blart cpudt
ebeln ebelp zekkn
wrbtr shkzg ##too_many_itab_fields
APPENDING CORRESPONDING FIELDS OF TABLE t_dp
FROM bsak
WHERE bukrs IN s_bukrs
AND cpudt >= gv_frdat
AND cpudt <= gv_todat
AND lifnr IN s_lifnr
AND umsks = c_umsks_dp
AND umskz = c_umskz_dp
AND belnr IN s_belnr
AND blart IN r_dpydt
AND blart IN s_blart
AND bschl = c_bschl_dp
AND ebeln IN s_ebeln.
* Ignore document without POs
DELETE t_dp WHERE ebeln IS INITIAL.
* Make sure document is within start and end times
LOOP AT t_dp ASSIGNING <dp>
WHERE cpudt = gv_frdat
OR cpudt = gv_todat.
* Get document entry time
CLEAR lv_cputm.
SELECT SINGLE cputm
INTO lv_cputm
FROM bkpf
WHERE bukrs = <dp>-bukrs
AND belnr = <dp>-belnr
AND gjahr = <dp>-gjahr.
IF sy-subrc <> 0.
DELETE t_dp.
CONTINUE.
ENDIF.
IF <dp>-cpudt = gv_frdat AND
lv_cputm <= gv_frtim.
DELETE t_dp.
CONTINUE.
ENDIF.
IF <dp>-cpudt = gv_todat AND
lv_cputm > gv_totim.
DELETE t_dp.
CONTINUE.
ENDIF.
ENDLOOP.
ELSE. " Manual execution
* Get all open downpayments in date range
SELECT lifnr
bukrs belnr gjahr buzei blart cpudt
ebeln ebelp zekkn
wrbtr shkzg ##too_many_itab_fields
INTO CORRESPONDING FIELDS OF TABLE t_dp
FROM bsik
WHERE bukrs IN s_bukrs
AND cpudt IN s_cpudt
AND lifnr IN s_lifnr
AND umsks = c_umsks_dp
AND umskz = c_umskz_dp
AND belnr IN s_belnr
AND blart IN r_dpydt
AND blart IN s_blart
AND bschl = c_bschl_dp
AND ebeln IN s_ebeln.
* Get all cleared downpayments in date range
SELECT lifnr
bukrs belnr gjahr buzei blart cpudt
ebeln ebelp zekkn
wrbtr shkzg ##too_many_itab_fields
APPENDING CORRESPONDING FIELDS OF TABLE t_dp
FROM bsak
WHERE bukrs IN s_bukrs
AND cpudt IN s_cpudt
AND lifnr IN s_lifnr
AND umsks = c_umsks_dp
AND umskz = c_umskz_dp
AND belnr IN s_belnr
AND blart IN r_dpydt
AND blart IN s_blart
AND bschl = c_bschl_dp
AND ebeln IN s_ebeln.
* Ignore document without POs
DELETE t_dp WHERE ebeln IS INITIAL.
ENDIF.
CHECK NOT t_dp[] IS INITIAL.
* Process all items
PERFORM process_dp TABLES t_dp
USING space.
IF p_auto = c_x.
* Get all open downpayments since last run
* An open downpayment has not been fully recouped; it stays open until
* value is recouped via invoices
SELECT lifnr
bukrs belnr gjahr buzei blart cpudt
ebeln ebelp zekkn
wrbtr shkzg ##too_many_itab_fields
INTO CORRESPONDING FIELDS OF TABLE t_dpr
FROM bsik
WHERE bukrs IN s_bukrs
AND cpudt >= gv_frdat
AND cpudt <= gv_todat
AND lifnr IN s_lifnr
AND umsks = c_umsks_dp
AND umskz = c_umskz_dp
AND belnr IN s_belnr
AND blart IN r_revdt
AND blart IN s_blart
AND ebeln IN s_ebeln.
* Get all cleared downpayments since last run
* A cleared downpayment has been fully recouped
SELECT lifnr
bukrs belnr gjahr buzei blart cpudt
ebeln ebelp zekkn
wrbtr shkzg ##too_many_itab_fields
APPENDING CORRESPONDING FIELDS OF TABLE t_dpr
FROM bsak
WHERE bukrs IN s_bukrs
AND cpudt >= gv_frdat
AND cpudt <= gv_todat
AND lifnr IN s_lifnr
AND umsks = c_umsks_dp
AND umskz = c_umskz_dp
AND belnr IN s_belnr
AND blart IN r_revdt
AND blart IN s_blart
AND ebeln IN s_ebeln.
* Ignore document without POs
DELETE t_dpr WHERE ebeln IS INITIAL.
* Make sure document is within start and end times
LOOP AT t_dpr ASSIGNING <dpr>
WHERE cpudt = gv_frdat
OR cpudt = gv_todat.
* Get document entry time
CLEAR lv_cputm.
SELECT SINGLE cputm
INTO lv_cputm
FROM bkpf
WHERE bukrs = <dpr>-bukrs
AND belnr = <dpr>-belnr
AND gjahr = <dpr>-gjahr.
IF sy-subrc <> 0.
DELETE t_dpr.
CONTINUE.
ENDIF.
IF <dpr>-cpudt = gv_frdat AND
lv_cputm <= gv_frtim.
DELETE t_dpr.
CONTINUE.
ENDIF.
IF <dpr>-cpudt = gv_todat AND
lv_cputm > gv_totim.
DELETE t_dpr.
CONTINUE.
ENDIF.
ENDLOOP.
ELSE. " Manual execution
* Get all open downpayments in date range
SELECT lifnr
bukrs belnr gjahr buzei blart cpudt
ebeln ebelp zekkn
wrbtr shkzg ##too_many_itab_fields
INTO CORRESPONDING FIELDS OF TABLE t_dpr
FROM bsik
WHERE bukrs IN s_bukrs
AND cpudt IN s_cpudt
AND lifnr IN s_lifnr
AND umsks = c_umsks_dp
AND umskz = c_umskz_dp
AND belnr IN s_belnr
AND blart IN r_revdt
AND blart IN s_blart
AND ebeln IN s_ebeln.
* Get all cleared downpayments in date range
SELECT lifnr
bukrs belnr gjahr buzei blart cpudt
ebeln ebelp zekkn
wrbtr shkzg ##too_many_itab_fields
APPENDING CORRESPONDING FIELDS OF TABLE t_dpr
FROM bsak
WHERE bukrs IN s_bukrs
AND cpudt IN s_cpudt
AND lifnr IN s_lifnr
AND umsks = c_umsks_dp
AND umskz = c_umskz_dp
AND belnr IN s_belnr
AND blart IN r_revdt
AND blart IN s_blart
AND ebeln IN s_ebeln.
* Ignore document without POs
DELETE t_dpr WHERE ebeln IS INITIAL.
ENDIF.
CHECK NOT t_dpr[] IS INITIAL.
* Process all items
PERFORM process_dp TABLES t_dpr
USING c_x.
CLEAR p_hco.
* Check saved data first
* Note: binary search automatically applied for SORTED table
READ TABLE lt_vendor INTO ls_vendor
WITH TABLE KEY lifnr = p_lifnr.
IF sy-subrc = 0.
p_hco = ls_vendor-hco.
ELSE.
* Get Vendor HCO characteristic number
IF lv_atinn IS INITIAL.
SELECT SINGLE atinn
INTO lv_atinn
FROM cabn
WHERE atnam = c_hco. "#EC WARNOK
ENDIF.
lv_objek = p_lifnr. " Convert type
* Retrieve HCO characteristic value for Vendor
CALL FUNCTION 'CLFM_SELECT_AUSP'
EXPORTING
mafid = c_mafid
classtype = c_klart
object = lv_objek
feature = lv_atinn " Only retrieve HCO
TABLES
exp_ausp = lt_ausp
EXCEPTIONS
no_values = 1
OTHERS = 2.
IF sy-subrc = 0.
READ TABLE lt_ausp TRANSPORTING NO FIELDS
WITH KEY atwrt = c_y.
IF sy-subrc = 0.
* If Vendor HCO = Yes, then all vendor payments are HCR
p_hco = c_x.
ENDIF.
ENDIF.
* Save data for performance
CLEAR ls_vendor.
ls_vendor-lifnr = p_lifnr.
ls_vendor-hco = p_hco.
INSERT ls_vendor INTO TABLE lt_vendor.
ENDIF.
* Begin of CR06578545
wa_lifnr-lifnr = p_lifnr.
COLLECT wa_lifnr INTO it_lifnr.
* End of CR06578545
ENDFORM. " VENDOR_HCO
*&---------------------------------------------------------------------*
*& Form PO_SUNSHINE
*&---------------------------------------------------------------------*
* Retrieve the PO item texts for Reportable Product and Travel
* Destinate.
*----------------------------------------------------------------------*
* -->LT_PRODUCTS Table of Products
* -->LT_DEST Table of Travel Destination information
* -->P_EBELN PO number
* -->P_EBELP PO item
*----------------------------------------------------------------------*
FORM po_sunshine TABLES lt_products TYPE tt_products
lt_dest TYPE tt_dest
USING p_ebeln TYPE ekko-ebeln
p_ebelp TYPE ekpo-ebelp.
* Type: saved PO data
TYPES: BEGIN OF tp_po,
ebeln TYPE ekko-ebeln,
ebelp TYPE ekpo-ebelp,
products TYPE tt_products,
dest TYPE tt_dest,
END OF tp_po.
* Type: text object key
TYPES: BEGIN OF tp_stxh,
tdobject TYPE stxh-tdobject,
tdname TYPE stxh-tdname,
tdid TYPE stxh-tdid,
tdspras TYPE stxh-tdspras,
END OF tp_stxh.
* Table: saved PO data
STATICS: t_po TYPE SORTED TABLE OF tp_po
WITH UNIQUE KEY ebeln ebelp
INITIAL SIZE 0.
* Table: PO item text object keys
DATA: t_stxh TYPE STANDARD TABLE OF tp_stxh INITIAL SIZE 0.
* Table: PO item texts
DATA: t_lines TYPE STANDARD TABLE OF tline INITIAL SIZE 0.
* Table: Normalized PO text
DATA: lt_nlines TYPE tsfotabl.
DATA: lv_tdname TYPE stxh-tdname,
lv_count TYPE i.
DATA: ls_po TYPE tp_po,
ls_products TYPE tp_products.
FIELD-SYMBOLS: <po> TYPE tp_po,
<stxh> TYPE tp_stxh,
<nlines> TYPE tdline.
REFRESH: lt_products,
lt_dest.
* Check saved data first
* Note: binary search automatically applied for SORTED table
READ TABLE t_po ASSIGNING <po>
WITH TABLE KEY ebeln = p_ebeln
ebelp = p_ebelp.
IF sy-subrc = 0.
lt_products[] = <po>-products[].
lt_dest[] = <po>-dest[].
ELSE.
* Create text object ID as PO document number + PO item number
CONCATENATE p_ebeln
p_ebelp
INTO lv_tdname.
* Retrieve key for PO item text "Reportable Product List"
* Do not specify language key (could be any language)
* See TTXID and TTXIT for Valid text IDs
SELECT tdobject
tdname
tdid
tdspras
INTO TABLE t_stxh
FROM stxh
WHERE tdobject = c_tdobject " PO Item text
AND tdname = lv_tdname
AND tdid = c_tdid_prd. " Reportable Product List
* Retrieve actual Reportable Product List text
LOOP AT t_stxh ASSIGNING <stxh>.
REFRESH t_lines.
CALL FUNCTION 'READ_TEXT'
EXPORTING
id = <stxh>-tdid
language = <stxh>-tdspras
name = <stxh>-tdname
object = <stxh>-tdobject
TABLES
lines = t_lines
EXCEPTIONS
id = 1
language = 2
name = 3
not_found = 4
object = 5
reference_check = 6
wrong_access_to_archive = 7
OTHERS = 8.
IF sy-subrc = 0 AND NOT t_lines[] IS INITIAL.
PERFORM normalize_lines TABLES t_lines
lt_nlines
USING <stxh>-tdspras.
lv_count = 1.
LOOP AT lt_nlines ASSIGNING <nlines>.
CLEAR ls_products.
ls_products-item = 1.
ls_products-product = lv_count.
ls_products-value = <nlines>.
APPEND ls_products TO lt_products.
ADD 1 TO lv_count.
ENDLOOP.
IF sy-subrc = 0.
SORT lt_products BY item product.
ENDIF.
EXIT. " EXIT loop
ENDIF.
ENDLOOP.
REFRESH t_stxh.
* Retrieve key for PO item text "Travel Destination"
SELECT tdobject
tdname
tdid
tdspras
INTO TABLE t_stxh
FROM stxh
WHERE tdobject = c_tdobject " PO Item text
AND tdname = lv_tdname
AND tdid = c_tdid_trv. " Travel Destination
* Retrieve actual Travel Destination text
LOOP AT t_stxh ASSIGNING <stxh>.
REFRESH t_lines.
CALL FUNCTION 'READ_TEXT'
EXPORTING
id = <stxh>-tdid
language = <stxh>-tdspras
name = <stxh>-tdname
object = <stxh>-tdobject
TABLES
lines = t_lines
EXCEPTIONS
id = 1
language = 2
name = 3
not_found = 4
object = 5
reference_check = 6
wrong_access_to_archive = 7
OTHERS = 8.
IF sy-subrc = 0 AND NOT t_lines[] IS INITIAL.
PERFORM normalize_lines TABLES t_lines
lt_nlines
USING <stxh>-tdspras.
PERFORM parse_travel_dest TABLES lt_nlines
lt_dest.
EXIT. " EXIT loop
ENDIF.
ENDLOOP.
* Save data for performance
CLEAR ls_po.
ls_po-ebeln = p_ebeln.
ls_po-ebelp = p_ebelp.
ls_po-products[] = lt_products[].
ls_po-dest[] = lt_dest[].
INSERT ls_po INTO TABLE t_po.
ENDIF.
ENDFORM. " PO_SUNSHINE
*&---------------------------------------------------------------------*
*& Form NORMALIZE_LINES
*&---------------------------------------------------------------------*
* Normalized PO item texts by splitting at carriage returns or
* newlines and by removing empty lines.
*----------------------------------------------------------------------*
* -->LT_LINES Table of PO item texts
* <--LT_NLINES Table of normalized text from PO item
* -->P_LANGU Language of PO item texts in LT_LINES
*----------------------------------------------------------------------*
FORM normalize_lines TABLES lt_lines TYPE tline_t
lt_nlines TYPE tsfotabl
USING p_langu TYPE sy-langu.
DATA: lt_stream TYPE STANDARD TABLE OF tdline INITIAL SIZE 0.
DATA: lv_string TYPE string.
DATA: ls_nlines TYPE tdline.
REFRESH lt_nlines.
* Convert to stream format
CALL FUNCTION 'CONVERT_ITF_TO_STREAM_TEXT'
EXPORTING
language = p_langu
TABLES
itf_text = lt_lines
text_stream = lt_stream.
* Convert to string
CALL FUNCTION 'CONVERT_TABLE_TO_STRING'
EXPORTING
i_tabline_length = 132
IMPORTING
e_string = lv_string
TABLES
it_table = lt_stream.
* Split string at newline/CR into separate lines
REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>cr_lf
IN lv_string
WITH cl_abap_char_utilities=>newline
IN CHARACTER MODE.
SPLIT lv_string AT cl_abap_char_utilities=>newline
INTO TABLE lt_nlines
IN CHARACTER MODE.
* Remove lines containing only blank characters (spaces, tabs, etc.)
LOOP AT lt_nlines INTO ls_nlines.
* Find first non-blank character
FIND FIRST OCCURRENCE OF REGEX '\S' IN ls_nlines.
IF sy-subrc <> 0.
* If line contains only blank characters, delete it
DELETE lt_nlines.
ENDIF.
ENDLOOP.
ENDFORM. " NORMALIZE_LINES
*&---------------------------------------------------------------------*
*& Form PARSE_TRAVEL_DEST
*&---------------------------------------------------------------------*
* Retrieve Country Code, Region Code, and City from Travel
* Destination text.
*----------------------------------------------------------------------*
* -->LT_NLINES Table of normalized text from PO item
* <--LT_DEST Table with Country, Region, and City
*----------------------------------------------------------------------*
FORM parse_travel_dest TABLES lt_nlines TYPE tsfotabl
lt_dest TYPE tt_dest.
DATA: ls_dest TYPE tp_dest.
DATA: lv_us TYPE c LENGTH 1,
lv_region TYPE c LENGTH 1,
lv_bland TYPE t005s-bland,
lv_bezei TYPE t005u-bezei,
lv_land1 TYPE t005-land1,
lv_intca3 TYPE t005-intca3,
lv_mc_city TYPE adrcityt-mc_city,
lx_mc_city TYPE adrcityt-mc_city,
lv_size TYPE i.
TYPES: BEGIN OF xp_lines,
tdline TYPE tdline, " Original data
fline TYPE tdline, " Normalized data (for searches)
END OF xp_lines.
DATA: xt_lines TYPE STANDARD TABLE OF xp_lines INITIAL SIZE 0,
xs_lines TYPE xp_lines.
FIELD-SYMBOLS: <nlines> TYPE tdline.
* Copy orignal table; create second field with normalized data
LOOP AT lt_nlines ASSIGNING <nlines>.
CLEAR xs_lines.
xs_lines-tdline = <nlines>.
xs_lines-fline = <nlines>.
TRANSLATE xs_lines-fline TO UPPER CASE.
REPLACE ALL OCCURRENCES OF '.' IN xs_lines-fline WITH ''
IN CHARACTER MODE.
CONDENSE xs_lines-fline.
APPEND xs_lines TO xt_lines.
ENDLOOP.
* See if Country is US
LOOP AT xt_lines INTO xs_lines
WHERE fline = c_us
OR fline = c_usa.
CLEAR ls_dest.
ls_dest-item = 1.
ls_dest-type = c_elem_co.
ls_dest-value = c_us.
APPEND ls_dest TO lt_dest.
lv_us = c_x.
DELETE xt_lines.
EXIT.
ENDLOOP.
* For US, find Region
IF lv_us = c_x.
LOOP AT xt_lines INTO xs_lines.
lv_size = numofchar( xs_lines-fline ).
CHECK lv_size = 2.
* Try 2-character state name
lv_bland = xs_lines-fline.
SELECT SINGLE bland
INTO lv_bland
FROM t005s
WHERE land1 = c_us
AND bland = lv_bland.
IF sy-subrc = 0.
CLEAR ls_dest.
ls_dest-item = 1.
ls_dest-type = c_elem_reg.
ls_dest-value = lv_bland.
APPEND ls_dest TO lt_dest.
lv_region = c_x.
DELETE xt_lines.
EXIT.
ENDIF.
ENDLOOP.
* If 2-character state not found, try full state name
IF lv_region IS INITIAL.
LOOP AT xt_lines INTO xs_lines.
lv_bezei = xs_lines-fline.
* Use native SQL for case-insensitive search
EXEC SQL.
select bland
from t005U
into :lv_bland
where land1 = :c_us
and upper(bezei) = :lv_bezei
ENDEXEC.
IF sy-subrc <> 0.
* Try wild card search
lv_size = numofchar( lv_bezei ).
TRANSLATE lv_bezei(lv_size) USING ' %'.
CONCATENATE '%' lv_bezei '%' INTO lv_bezei.
EXEC SQL.
select bland
from t005U
into :lv_bland
where land1 = :c_us
and upper(bezei) like :lv_bezei
ENDEXEC.
ENDIF.
IF sy-subrc = 0.
CLEAR ls_dest.
ls_dest-item = 1.
ls_dest-type = c_elem_reg.
ls_dest-value = lv_bland.
APPEND ls_dest TO lt_dest.
lv_region = c_x.
DELETE xt_lines.
EXIT.
ENDIF.
ENDLOOP.
ENDIF.
ELSE.
* Search for foreign country
LOOP AT xt_lines INTO xs_lines.
lv_size = numofchar( xs_lines-fline ).
CHECK lv_size <= 3.
* Try 2-character Country name
lv_land1 = xs_lines-fline.
SELECT SINGLE land1
INTO lv_land1
FROM t005
WHERE land1 = lv_land1.
IF sy-subrc <> 0.
* Try ISO name
lv_intca3 = xs_lines-fline.
SELECT SINGLE land1
INTO lv_land1
FROM t005
WHERE intca3 = lv_intca3. "#EC WARNOK
ENDIF.
IF sy-subrc = 0.
CLEAR ls_dest.
ls_dest-item = 1.
ls_dest-type = c_elem_co.
ls_dest-value = lv_land1.
APPEND ls_dest TO lt_dest.
DELETE xt_lines.
EXIT.
ENDIF.
ENDLOOP.
ENDIF.
* Search for City
LOOP AT xt_lines INTO xs_lines.
* code removed as per CR06578545
CLEAR ls_dest.
ls_dest-item = 1.
ls_dest-type = c_elem_cty.
ls_dest-value = xs_lines-tdline.
APPEND ls_dest TO lt_dest.
DELETE xt_lines.
EXIT.
* code removed as per CR06578545
ENDLOOP.
SORT lt_dest BY item type.
ENDFORM. " PARSE_TRAVEL_DEST
*&---------------------------------------------------------------------*
*& Form SPLIT_PRODUCTS
*&---------------------------------------------------------------------*
* For line items with multiple products: split into separate
* report lines and sub-divide percentage across products.
*----------------------------------------------------------------------*
* <->X_RPT Reportable items
*----------------------------------------------------------------------*
FORM split_products TABLES x_rpt TYPE tt_rpt.
TYPES: BEGIN OF tp_prod,
desc TYPE zprod_desc,
END OF tp_prod.
DATA: lt_prod TYPE STANDARD TABLE OF tp_prod INITIAL SIZE 0,
ls_prod TYPE tp_prod.
DATA: y_rpt TYPE tt_rpt,
z_rpt TYPE tt_rpt,
s_rpt TYPE tp_rpt.
DATA: lv_id TYPE i,
lv_desc TYPE zprod_desc,
lv_p TYPE i, " Products count
lv_count TYPE sy-tabix,
lv_sum TYPE tp_rpt-wrbtr.
FIELD-SYMBOLS: <rpt> TYPE tp_rpt.
IF p_auto = c_x.
* Get payments for invoices from last run date; only retrieve cleared
* vendor items
SELECT DISTINCT lifnr
bukrs belnr gjahr
blart cpudt
augbl augdt
INTO CORRESPONDING FIELDS OF TABLE t_pfi
FROM bsak
WHERE bukrs IN s_bukrs
AND cpudt >= gv_frdat
AND cpudt <= gv_todat
AND lifnr IN s_lifnr
AND umskz = space
AND belnr IN s_belnr
AND blart IN r_paydt
AND bschl IN (c_bschl_py,c_bschl_dp). "R21_1407
* Make sure document is within start and end times
LOOP AT t_pfi ASSIGNING <pfi>
WHERE cpudt = gv_frdat
OR cpudt = gv_todat.
* Get document entry time
CLEAR lv_cputm.
SELECT SINGLE cputm
INTO lv_cputm
FROM bkpf
WHERE bukrs = <pfi>-bukrs
AND belnr = <pfi>-belnr
AND gjahr = <pfi>-gjahr.
IF sy-subrc <> 0.
DELETE t_pfi.
CONTINUE.
ELSE. "CR06687537
<pfi>-cputm = lv_cputm. "CR06687537
ENDIF.
IF <pfi>-cpudt = gv_frdat AND
lv_cputm <= gv_frtim.
DELETE t_pfi.
CONTINUE.
ENDIF.
IF <pfi>-cpudt = gv_todat AND
lv_cputm > gv_totim.
DELETE t_pfi.
CONTINUE.
ENDIF.
ENDLOOP.
ELSE. " Manual execution
* Get payments for invoices
SELECT DISTINCT lifnr
bukrs belnr gjahr
blart cpudt
augbl augdt
INTO CORRESPONDING FIELDS OF TABLE t_pfi
FROM bsak
WHERE bukrs IN s_bukrs
AND cpudt IN s_cpudt
AND lifnr IN s_lifnr
AND umskz = space
AND belnr IN s_belnr
AND blart IN r_paydt
AND bschl IN (c_bschl_py,c_bschl_dp). "R21_1407
ENDIF.
CHECK NOT t_pfi[] IS INITIAL.
* Start of changes for CR06687537
IF p_auto IS INITIAL.
SELECT bukrs belnr gjahr cputm
FROM bkpf
INTO TABLE lt_bkpf
FOR ALL ENTRIES IN t_pfi
WHERE bukrs = t_pfi-bukrs
AND belnr = t_pfi-belnr
AND gjahr = t_pfi-gjahr.
IF sy-subrc = 0.
SORT: lt_bkpf BY bukrs belnr gjahr.
ENDIF.
LOOP AT t_pfi ASSIGNING <pfi>.
READ TABLE lt_bkpf INTO ls_bkpf
WITH KEY bukrs = <pfi>-bukrs
belnr = <pfi>-belnr
gjahr = <pfi>-gjahr BINARY SEARCH.
IF sy-subrc = 0.
<pfi>-cputm = ls_bkpf-cputm.
ENDIF.
ENDLOOP.
ENDIF.
* End of changes for CR06687537
* Process payments
LOOP AT t_pfi ASSIGNING <pfi>.
* Get all FI document items associated with the clearing document of
* the payment; this will also select the payment items
* (See Payment Usage function in payment document overview)
REFRESH t_ukey.
SELECT bukrs belnr gjahr buzei
blart
shkzg wrbtr ##too_many_itab_fields
INTO CORRESPONDING FIELDS OF TABLE t_ukey
FROM bsak
WHERE lifnr = <pfi>-lifnr
AND bukrs = <pfi>-bukrs
AND augdt = <pfi>-augdt
AND augbl = <pfi>-augbl. " Index fields
IF sy-subrc <> 0.
DELETE t_pfi.
CONTINUE.
ENDIF.
* Process documents
PERFORM process_usage_china TABLES t_ukey
x_rpt
USING <pfi>
space "R21_1407
'0000' "R21_1407
lv_hcr
lv_rc.
IF lv_hcr = space OR lv_rc <> 0 OR x_rpt[] IS INITIAL.
DELETE t_pfi.
CONTINUE.
ENDIF.
APPEND LINES OF x_rpt TO t_rpt.
ENDLOOP.
SORT t_rpt.
ENDFORM. " GET_PAYMENTS_CHINA
*&---------------------------------------------------------------------*
*& Form GET_REVERSALS_CHINA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM get_reversals_china .
DATA: t_rev TYPE STANDARD TABLE OF tp_pfi INITIAL SIZE 0.
DATA: t_ukey TYPE tt_ukey.
DATA: x_rpt TYPE tt_rpt.
DATA: lv_cputm TYPE bkpf-cputm,
lv_hcr TYPE c LENGTH 1, " Flag: payment is reportable
lv_rc TYPE sy-subrc.
DATA: lv_stblg TYPE bkpf-stblg,
lv_stjah TYPE bkpf-stjah,
lv_bktxt TYPE bkpf-bktxt.
* Start of changes for CR06687537
TYPES: BEGIN OF ty_bkpf,
bukrs TYPE bukrs,
belnr TYPE belnr_d,
gjahr TYPE gjahr,
cputm TYPE cputm,
END OF ty_bkpf.
DATA: ls_bkpf TYPE ty_bkpf,
lt_bkpf TYPE STANDARD TABLE OF ty_bkpf.
* End of changes for CR06687537
FIELD-SYMBOLS: <rev> TYPE tp_pfi.
IF p_auto = c_x.
* Get Payment Reversals for invoices from last run date; only retrieve
* cleared vendor items
SELECT DISTINCT lifnr
bukrs belnr gjahr
blart cpudt
augbl augdt
INTO CORRESPONDING FIELDS OF TABLE t_rev
FROM bsak
WHERE bukrs IN s_bukrs
AND cpudt >= gv_frdat
AND cpudt <= gv_todat
AND lifnr IN s_lifnr
AND umskz = space
AND belnr IN s_belnr
AND blart IN r_revdt.
* Make sure document is within start and end times
LOOP AT t_rev ASSIGNING <rev>
WHERE cpudt = gv_frdat
OR cpudt = gv_todat.
* Get document entry time
CLEAR lv_cputm.
SELECT SINGLE cputm
INTO lv_cputm
FROM bkpf
WHERE bukrs = <rev>-bukrs
AND belnr = <rev>-belnr
AND gjahr = <rev>-gjahr.
IF sy-subrc <> 0.
DELETE t_rev.
CONTINUE.
ELSE. "CR06687537
<rev>-cputm = lv_cputm. "CR06687537
ENDIF.
IF <rev>-cpudt = gv_frdat AND
lv_cputm <= gv_frtim.
DELETE t_rev.
CONTINUE.
ENDIF.
IF <rev>-cpudt = gv_todat AND
lv_cputm > gv_totim.
DELETE t_rev.
CONTINUE.
ENDIF.
ENDLOOP.
ELSE. " Manual execution
* Get Payment Reversals for invoices
SELECT DISTINCT lifnr
bukrs belnr gjahr
blart cpudt
augbl augdt
INTO CORRESPONDING FIELDS OF TABLE t_rev
FROM bsak
WHERE bukrs IN s_bukrs
AND cpudt IN s_cpudt
AND lifnr IN s_lifnr
AND umskz = space
AND belnr IN s_belnr
AND blart IN r_revdt.
ENDIF.
CHECK NOT t_rev[] IS INITIAL.
* Start of changes for CR06687537
IF p_auto IS INITIAL.
SELECT bukrs belnr gjahr cputm
FROM bkpf
INTO TABLE lt_bkpf
FOR ALL ENTRIES IN t_rev
WHERE bukrs = t_rev-bukrs
AND belnr = t_rev-belnr
AND gjahr = t_rev-gjahr.
IF sy-subrc = 0.
SORT: lt_bkpf BY bukrs belnr gjahr.
ENDIF.
LOOP AT t_rev ASSIGNING <rev>.
READ TABLE lt_bkpf INTO ls_bkpf
WITH KEY bukrs = <rev>-bukrs
belnr = <rev>-belnr
gjahr = <rev>-gjahr BINARY SEARCH.
IF sy-subrc = 0.
<rev>-cputm = ls_bkpf-cputm.
ENDIF.
ENDLOOP.
ENDIF.
* End of changes for CR06687537
* Process payment reversals
LOOP AT t_rev ASSIGNING <rev>.
* Verify payment reversal: get original payment document (the document
* reversed) and payment run
CLEAR: lv_stblg,
lv_stjah,
lv_bktxt.
SELECT SINGLE stblg stjah bktxt
INTO (lv_stblg,lv_stjah,lv_bktxt)
FROM bkpf
WHERE bukrs = <rev>-bukrs
AND belnr = <rev>-belnr
AND gjahr = <rev>-gjahr.
IF sy-subrc <> 0 OR
lv_stblg IS INITIAL OR
lv_bktxt IS INITIAL.
DELETE t_rev.
CONTINUE.
ENDIF.
* Get original invoices associated with the payment from payment run
REFRESH t_ukey.
SELECT bukrs belnr gjahr buzei
blart
shkzg wrbtr ##too_many_itab_fields
INTO CORRESPONDING FIELDS OF TABLE t_ukey
FROM regup
WHERE laufd = lv_bktxt(8)
AND laufi = lv_bktxt+9(6)
AND xvorl = space
AND lifnr = <rev>-lifnr " Payment doc vendor
AND vblnr = lv_stblg " Payment doc
AND bukrs = <rev>-bukrs. " Payment doc company
IF sy-subrc <> 0.
DELETE t_rev.
CONTINUE.
ENDIF.
* Retrieve payment document items (not in payment run)
SELECT bukrs belnr gjahr buzei
blart
shkzg wrbtr ##too_many_itab_fields
APPENDING CORRESPONDING FIELDS OF TABLE t_ukey
FROM bsak
WHERE bukrs = <rev>-bukrs
AND belnr = <rev>-belnr
AND gjahr = <rev>-gjahr.
* Process documents
PERFORM process_usage_china TABLES t_ukey
x_rpt
USING <rev>
lv_stblg "R21_1407
lv_stjah
lv_hcr
lv_rc.
* Code removed as per CR06578545
APPEND LINES OF x_rpt TO t_rpt.
ENDLOOP.
SORT t_rpt.
REFRESH x_rpt.
CLEAR lv_hcr.
lv_rc = 0.
* Invoices (RE, RI, etc.) and Credit memos (KG) will remain; however,
* Credit memos are ignored
* Save invoices to a separate table; find the total sum of the
* invoices
REFRESH t_inv.
CLEAR lv_invsum.
CLEAR: p_hcr,
p_prsid,
p_verkf,
p_unsez,
p_meetid. "CR06687537
ls_inf-spend_dt_pd = ls_inf-event_strt_dt.
* ALV-only fields
ls_inf-wrbtr = <rpt>-wrbtr.
ls_inf-waers = <rpt>-waers.
* Begin CR06474471
* Convert SAP currency key to ISO
CLEAR lv_isocd.
CALL FUNCTION 'CURRENCY_CODE_SAP_TO_ISO'
EXPORTING
sap_code = ls_inf-waers
IMPORTING
iso_code = lv_isocd
EXCEPTIONS
not_found = 1
OTHERS = 2.
IF sy-subrc = 0.
ls_inf-currency = lv_isocd.
ELSE.
ls_inf-currency = ls_inf-waers.
ENDIF.
* End CR06474471
* Start of changes for CR06687537
ls_inf-eventcustomerid = ls_inf-spend_id.
ls_inf-spendtypecd = lc_spendtypcd.
ls_inf-spendpurposecd = lc_spendprpcd.
ls_inf-spend_cost_center = <rpt>-kostl.
ls_inf-spend_cost_element = <rpt>-hkont.
ls_inf-spendcostcenterpersent = lc_100per.
ls_inf-companycd = lc_lly.
ls_inf-src_sys_id = lc_sap.
ls_inf-srcsystypecd = lc_mtspnd.
ls_inf-countrycd = <rpt>-country.
ls_inf-eventcreatedby = <rpt>-usnam.
IF ls_inf-event_id IS INITIAL.
CONCATENATE ls_inf-src_sys_id ls_inf-spend_id INTO ls_inf-event_id.
ENDIF.
COLLECT ls_inf INTO t_inf_china.
* End of changes for CR06687537
ENDLOOP.
LOOP AT t_inf_china ASSIGNING <inf>.
* R21_1390
* Apply currency formatting for interface file
IF <inf>-wrbtr < 0.
WRITE <inf>-wrbtr
TO <inf>-spend_amt CURRENCY <inf>-waers NO-SIGN NO-GROUPING.
SHIFT <inf>-spend_amt LEFT DELETING LEADING space.
* Add sign
CONCATENATE '-'
<inf>-spend_amt
INTO <inf>-spend_amt.
ELSE.
WRITE <inf>-wrbtr
TO <inf>-spend_amt CURRENCY <inf>-waers NO-GROUPING.
SHIFT <inf>-spend_amt LEFT DELETING LEADING space.
ENDIF.
* R21_1390
ENDLOOP.
ENDFORM. " FORMAT_INTERFACE_CHINA
*&---------------------------------------------------------------------*
*& Form CREATE_INTERFACE_FILE_CHINA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM create_interface_file_china .
DATA: lv_outfile TYPE c LENGTH 120, " Output file name
lv_line TYPE c LENGTH 2000. " Output file line
DATA: lv_rc TYPE sy-subrc, " Return code
lv_nn TYPE n LENGTH 2, " Text element number
lv_text TYPE c LENGTH 8, " Text element name
lv_l TYPE i, " Length
lv_i TYPE i, " Current field
lv_o TYPE i. " Offset
DATA: ls_inf TYPE tp_inf_china.
FIELD-SYMBOLS: <t1> TYPE any,
<fs> TYPE any.
CONSTANTS : lc_000000000000 TYPE char12 VALUE '000000000000'. "CR06578545
lv_rc = 0.
WHILE lv_rc = 0.
* Generate file name
* File name format: SAP_SPND_DATA_YYYYMMDD_HHMISS.tsv
GET TIME.
CONCATENATE c_opath_china
c_fprfx_china c_sep2
sy-datlo c_sep2
sy-timlo
c_fextn
INTO lv_outfile.
* Make sure file does not already exist
OPEN DATASET lv_outfile FOR INPUT
IN TEXT MODE
ENCODING DEFAULT.
lv_rc = sy-subrc.
ENDWHILE.
* Open file for output
OPEN DATASET lv_outfile FOR OUTPUT
IN TEXT MODE
ENCODING DEFAULT "UTF-8
WITH WINDOWS LINEFEED.
IF sy-subrc <> 0.
MESSAGE e030 WITH lv_outfile.
ENDIF.
* Add header line containing field names
CONCATENATE text-f01 c_file_sep
text-f02 c_file_sep
text-f03 c_file_sep
text-f04 c_file_sep
text-f05 c_file_sep
text-f06 c_file_sep
text-f07 c_file_sep
text-f34 c_file_sep
text-f08 c_file_sep
text-f33 c_file_sep
text-f37 c_file_sep
text-f38 c_file_sep
text-f09 c_file_sep
text-f10 c_file_sep
text-f11 c_file_sep
text-f12 c_file_sep
text-f13 c_file_sep
text-f14 c_file_sep
text-f15 c_file_sep
text-f16 c_file_sep
text-f17 c_file_sep
text-f18 c_file_sep
text-f19 c_file_sep
text-f20 c_file_sep
text-f21 c_file_sep
text-f22 c_file_sep
text-f35 c_file_sep
text-f36 c_file_sep
text-f23 c_file_sep
text-f24 c_file_sep
text-f25 c_file_sep
text-f26 c_file_sep
text-f27 c_file_sep
text-f28 c_file_sep
text-f29 c_file_sep
text-f30
INTO lv_line.
lv_l = strlen( lv_line ).
TRANSFER lv_line(lv_l) TO lv_outfile.
* Add detail lines; remove trailing spaces, separate fields with defined
* separator
LOOP AT t_inf_china INTO ls_inf.
CLEAR: lv_line,
lv_o.
DO 36 TIMES. " c_nf
lv_i = sy-index.
ASSIGN COMPONENT lv_i OF STRUCTURE ls_inf TO <fs>.
lv_rc = sy-subrc.
CLEAR lv_l.
IF lv_rc = 0.
lv_l = strlen( <fs> ).
ENDIF.
IF lv_rc = 0 AND " Field symbol assigned
lv_l > 0. " Prevent short dump on zero len
lv_line+lv_o(lv_l) = <fs>(lv_l).
* Begin of CR06578545
IF <fs>(lv_l) = lc_000000000000.
CLEAR lv_line+lv_o(lv_l).
ENDIF.
* End of CR06578545
lv_o = lv_o + lv_l.
ENDIF.
IF lv_i <> c_nf. " No separator after last field
lv_line+lv_o(1) = c_file_sep.
lv_o = lv_o + 1.
ENDIF.
ENDDO.
TRANSFER lv_line(lv_o) TO lv_outfile.
ENDLOOP.
* Close dataset
CLOSE DATASET lv_outfile.
ENDFORM. " CREATE_INTERFACE_FILE_CHINA
*&---------------------------------------------------------------------*
*& Form ALV_FIELD_CATALOG_CHINA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM alv_field_catalog_china .
PERFORM add_field_china
USING: 'EVENT_ID' text-c01 space space ,
'EVENT_NM' text-c02 space space ,
'EVENT_STRT_DT' text-c03 space space ,
'EVENT_TYP_CD' text-c04 space space ,
'EVENT_PARENT_ID' text-c05 space space ,
'EVENTPARENTCOMPANYCD' text-c06 space space ,
'EVENTPARENTSRCSYSCD' text-c07 space space ,
'EVENTSUBTYPECD' text-c34 space space ,
'EVENTPARENTCOUNTRY' text-c09 space space ,
'EVENTVIACUSTOMERTYPE' text-c33 space space ,
'EVENTCUSTOMERID' text-c37 space space ,
'EVENTCUSTOMEREVENTROLE' text-c38 space space ,
'HCO_ID' text-c11 space space ,
'HCO_NM' text-c12 space space ,
'HCO_ALT_NM' text-c13 space space ,
'HCO_ADRS_LN_1' text-c14 space space ,
'HCO_ADRS_LN_2' text-c15 space space ,
'HCO_ADRS_CITY' text-c16 space space ,
'HCO_ADRS_RGN_CD' text-c17 space space ,
'HCO_ADRS_PSTL_CD' text-c18 space space ,
'HCO_ADRS_CNTRY_CD' text-c19 space space ,
'SPEND_ID' text-c20 space space ,
'SPEND_ALT_ID' text-c21 c_x space ,
'SPEND_DT_PD' text-c22 space space ,
'SPEND_AMT' text-c23 space space ,
'CURRENCY' text-c24 space space ,
'SPENDTYPECD' text-c35 space space ,
'SPENDPURPOSECD' text-c36 space space ,
'SPEND_COST_CENTER' text-c25 space space ,
'SPEND_COST_ELEMENT' text-c26 space space ,
'SPENDCOSTCENTERPERSENT' text-c27 space space ,
'COMPANYCD' text-c28 space space ,
'SRC_SYS_ID' text-c29 space space ,
'SRCSYSTYPECD' text-c30 space space ,
'COUNTRYCD' text-c31 space space ,
'EVENTCREATEDBY' text-c32 space space .
* 'WRBTR' text-r19 space 'WAERS',
ENDFORM. " ALV_FIELD_CATALOG_CHINA
*&---------------------------------------------------------------------*
*& Form ADD_FIELD_CHINA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_2300 text
* -->P_TEXT_C01 text
* -->P_SPACE text
* -->P_SPACE text
*----------------------------------------------------------------------*
FORM add_field_china USING p_field TYPE slis_fieldname
p_text TYPE c "scrtext_l
p_hot TYPE c
p_curr TYPE any.
DATA: s_fieldcat TYPE slis_fieldcat_alv.
CLEAR s_fieldcat.
s_fieldcat-tabname = 'T_INF_CHINA'. "CR06474471
s_fieldcat-fieldname = p_field.
s_fieldcat-seltext_l = p_text.
s_fieldcat-hotspot = p_hot.
s_fieldcat-cfieldname = p_curr.
APPEND s_fieldcat TO t_fieldcat.
ENDFORM. " ADD_FIELD_CHINA
*&---------------------------------------------------------------------*
*& Form ALV_REPORT_CHINA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM alv_report_china .