Powered By

Free XML Skins for Blogger

Powered by Blogger

Showing posts with label ABAP Report. Show all posts
Showing posts with label ABAP Report. Show all posts

Saturday, October 18, 2008

Submit ABAP report with SQL traces

You use ST05, Trace Request, to do a SQL trace.

When using SQL trace, it is good to run the program in debugger and just before you execute the SQL, go to ST05 in another session and turn the trace on.

After, or when, the SQL is finished, you can turn the trace off.

Then click on List Trace to see the details.

This is the way to control the traces.

If you just turn the trace on and then execute the program, you will get everything and will be overflooded with unnecessary information.

Tuesday, October 7, 2008

SAP ABAP - Sending GOS attachments to an email address

Description Sending GOS attachements to an email address for the given business object and ID. This program is tested in the version 4.6C.

REPORT z_send_gos_attachments.
* Selection-screen.
SELECTION-SCREEN BEGIN OF LINE.
* Email address
SELECTION-SCREEN COMMENT 2(20) v_text1 FOR FIELD p_email.
PARAMETERS: p_email(50) OBLIGATORY.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
* Business object type
SELECTION-SCREEN COMMENT 2(20) v_text2 FOR FIELD p_bo.
PARAMETERS: p_bo TYPE borident-objtype DEFAULT 'BUS2102'.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
* Business object ID
SELECTION-SCREEN COMMENT 2(20) v_text3 FOR FIELD p_boid.
PARAMETERS: p_boid TYPE borident-objkey DEFAULT '0060000717'.
SELECTION-SCREEN END OF LINE.
* Internal table declarations.
DATA: lt_links TYPE TABLE OF relgraphlk,
lv_document_id TYPE sofolenti1-doc_id,
lt_plist LIKE sopcklsti1 OCCURS 2 WITH HEADER LINE,
lt_soli LIKE soli OCCURS 100 WITH HEADER LINE,
lt_rec_tab LIKE somlreci1 OCCURS 1 WITH HEADER LINE,
lt_roles TYPE STANDARD TABLE OF relroles,
lt_appllinks TYPE STANDARD TABLE OF srl_aprel,
lt_object_content_l LIKE solisti1 OCCURS 0 WITH HEADER LINE,
lt_object_content LIKE solisti1 OCCURS 0 WITH HEADER LINE,
lt_doc_dat LIKE sofolenti1.
* Variables.
DATA: lv_objtp LIKE soodk-objtp,
lv_lang LIKE tst01-dlang,
lv_line_size TYPE i VALUE 255,
lv_name LIKE soextreci1-receiver.
* Work areas
DATA: lwa_doc_data LIKE sodocchgi1,
lwa_document_data LIKE sofolenti1,
lwa_links LIKE LINE OF lt_links,
lwa_object TYPE borident.
* Initialization.
INITIALIZATION.
* Set the texts.
v_text1 = 'Email addr.'.
v_text2 = 'Business obj type'.
v_text3 = 'Business obj ID'.
* Start-of-selection.
START-OF-SELECTION.
* Assign the values
lwa_object-objkey = p_boid.
lwa_object-objtype = p_bo.
* Get the attachment list for the input business object type
* and name.
CALL FUNCTION 'SREL_GET_NEXT_RELATIONS'
EXPORTING
object = lwa_object
relationtype = 'ATTA'
TABLES
links = lt_links
roles = lt_roles
appllinks = lt_appllinks
EXCEPTIONS
internal_error = 1
no_logsys = 2
OTHERS = 3.
* Check the return code.
IF sy-subrc <> 0.
MESSAGE s208(00) WITH 'Error in FM SREL_GET_NEXT_RELATIONS'.
ENDIF.
* Process the attachment list
LOOP AT lt_links INTO lwa_links.
MOVE lwa_links-objkey_b TO lv_document_id.
* Read the data
CALL FUNCTION 'SO_DOCUMENT_READ_API1'
EXPORTING
document_id = lv_document_id
IMPORTING
document_data = lwa_document_data
TABLES
object_content = lt_object_content_l
EXCEPTIONS
document_id_not_exist = 1
operation_no_authorization = 2
x_error = 3
OTHERS = 4.
* Prepare the data.
lt_plist-transf_bin = 'X'.
lt_plist-head_start = 0.
lt_plist-head_num = 0.
lt_plist-body_start = 0.
lt_plist-body_num = 0.
lt_plist-doc_type = 'RAW'.
lt_plist-obj_descr = lwa_document_data-obj_descr.
APPEND lt_plist.
lt_plist-transf_bin = 'X'.
lt_plist-head_start = 0.
lt_plist-head_num = 0.
IF sy-tabix = 1.
lt_plist-body_start = 1.
ELSE.
DESCRIBE TABLE lt_object_content.
lt_plist-body_start = sy-tfill + 1.
ENDIF.
DESCRIBE TABLE lt_object_content_l LINES lt_plist-body_num.
lt_plist-doc_type = lwa_document_data-obj_type.
* Get the size.
READ TABLE lt_object_content_l INDEX lt_plist-body_num.
lt_plist-doc_size = ( lt_plist-body_num - 1 ) * lv_line_size
+ STRLEN( lt_object_content_l ).
APPEND lt_plist.
* Move the values to the main internal table.
APPEND LINES OF lt_object_content_l TO lt_object_content.
ENDLOOP.
* Move the receiver address.
MOVE: p_email TO lt_rec_tab-receiver,
'U' TO lt_rec_tab-rec_type.
APPEND lt_rec_tab.
* Set the language.
lwa_doc_data-obj_langu = sy-langu.
* Email subject.
CONCATENATE 'GOS '
p_boid
'attachments'
INTO lwa_doc_data-obj_descr
SEPARATED BY space.
* Set the user name.
lv_name = sy-uname.
* Send the email.
CALL FUNCTION 'SO_DOCUMENT_SEND_API1'
EXPORTING
document_data = lwa_doc_data
sender_address = lv_name
sender_address_type = 'B'
TABLES
packing_list = lt_plist
contents_bin = lt_object_content
receivers = lt_rec_tab
EXCEPTIONS
too_many_receivers = 1
document_not_sent = 2
document_type_not_exist = 3
operation_no_authorization = 4
parameter_error = 5
x_error = 6
enqueue_error = 7
OTHERS = 8.
IF sy-subrc <> 0.
MESSAGE e208(00) WITH 'Error in sending email'.
ENDIF.
COMMIT WORK.
* Send the email immediately.
SUBMIT rsconn01
WITH mode = 'INT'
AND RETURN.
* Success message.
MESSAGE s208(00) WITH 'Email sent'.
-->

SAP ABAP - Getting PDF file from spooling list

I made this code snippet for users to provide function like this, saving files from splooing list. You can find your own spooling list only and then choose, save it.
*********************************************************************
* Program Name : ZSDRPDF
* SAP Module : SD
* Description : PDF SAVE FROM SPOOLING LIST
* Input :
* Output :
* Initiator : Kyung Woo, Nam
* External Ref :
*********************************************************************
* Change History.
* Date Author Reason
*
*********************************************************************
Report ZSDRPDF no standard page heading
message-id zmsd
line-size 125
line-count 80.
tables: TSP01.
types: begin of ty_spool,
RQIDENT like tsp01-RQIDENT,
RQOWNER like tsp01-RQOWNER,
RQTITLE like tsp01-RQTITLE,
chk.
types: end of ty_spool.
data: wa_spool type ty_spool.
data: itb_spool type ty_spool occurs 0.data: flag type i.data: ztxt(50).
data: l_path type RLGRAP-FILENAME.
*selection-screen begin of block blk with frame title text-001.
*parameter : zuser like tsp01-RQOWNER default sy-uname.
*selection-screen end of block blk.
START-OF-SELECTION.
PERFORM get_data.
END-OF-SELECTION.
PERFORM write_data.
AT LINE-SELECTION.
CLEAR ztxt.
CLEAR l_path.
l_path = 'C:\zfile.pdf'. CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
def_filename = l_path
def_path = ''
mask = ',*.*,*.txt,*.txt.'
mode = 'S'
title = 'Choose file path to save'
IMPORTING
filename = l_path
EXCEPTIONS
inv_winsys = 1
no_batch = 2
selection_cancel = 3
selection_error = 4
OTHERS = 5. IF sy-subrc = 0.
ENDIF.
CALL FUNCTION 'Z_SD_PDF_CREATE'
EXPORTING
spoolno = wa_spool-rqident
p_file = l_path
IMPORTING
msgtxt = ztxt. IF sy-subrc <> 0 OR
NOT ( ztxt IS INITIAL ).
ELSE.
MESSAGE i008(zmsd) WITH 'Fail'.
ENDIF.*&---------------------------------------------------------------------*
*& Form get_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM get_data. SELECT rqident rqowner rqtitle
into corresponding fields of table itb_spool
FROM TSP01
* WHERE rqowner = zuser.
where rqowner = sy-uname. sort itb_spool by rqident descending.
ENDFORM. " get_data
*&---------------------------------------------------------------------*
*& Form write_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM write_data. clear flag.
write sy-uline(125).
write:/ ''.
write: (15) 'Spooling Number'.
write: '', (20) 'Job Owner', '', (80) 'Job Title', ''.
write: sy-uline(125).
loop at itb_spool into wa_spool. flag = sy-tabix mod 2.
case flag.
when 1.
format color col_normal on.
when 0.
format color off.
endcase. write:/ ''.
format hotspot on.
write: (15) wa_spool-rqident.
hide wa_spool-rqident.
format hotspot off.
write: '', (20) wa_spool-rqowner, '',
(80) wa_spool-rqtitle, ''.
write: sy-uline(125).
endloop.ENDFORM. " write_data
--> Function module : Z_SD_PDF_CREATEFUNCTION z_sd_pdf_create.
*"----------------------------------------------------------------------
*"*"Local interface:
*" IMPORTING
*" REFERENCE(SPOOLNO) TYPE TSP01-RQIDENT
*" REFERENCE(P_FILE) TYPE RLGRAP-FILENAME DEFAULT 'C:\file.pdf'
*" EXPORTING
*" REFERENCE(MSGTXT) TYPE CHAR50
*"----------------------------------------------------------------------
*
* External Ref : RSTXPDFT4
*
DATA download VALUE 'X'.
DATA otf LIKE itcoo OCCURS 100 WITH HEADER LINE.
DATA cancel.
DATA pdf LIKE tline OCCURS 100 WITH HEADER LINE.
DATA doctab LIKE docs OCCURS 1 WITH HEADER LINE.
DATA: numbytes TYPE i,
arc_idx LIKE toa_dara,
pdfspoolid LIKE tsp01-rqident,
jobname LIKE tbtcjob-jobname,
jobcount LIKE tbtcjob-jobcount,
is_otf.
DATA: client LIKE tst01-dclient,
name LIKE tst01-dname,
objtype LIKE rststype-type,
type LIKE rststype-type.
TABLES: tsp01. SELECT SINGLE * FROM tsp01
WHERE rqident = spoolno. IF sy-subrc <> 0.
MESSAGE e001(zmsd) WITH text-001. " Fail
EXIT.
ENDIF. client = tsp01-rqclient.
name = tsp01-rqo1name. CALL FUNCTION 'RSTS_GET_ATTRIBUTES'
EXPORTING
authority = 'SP01'
client = client
name = name
part = 1
IMPORTING
type = type
objtype = objtype
EXCEPTIONS
fb_error = 1
fb_rsts_other = 2
no_object = 3
no_permission = 4.
IF objtype(3) = 'OTF'.
is_otf = 'X'.
ELSE.
is_otf = space.
ENDIF. IF is_otf = 'X'.
CALL FUNCTION 'CONVERT_OTFSPOOLJOB_2_PDF'
EXPORTING
src_spoolid = spoolno
no_dialog = ' '
IMPORTING
pdf_bytecount = numbytes
pdf_spoolid = pdfspoolid
btc_jobname = jobname
btc_jobcount = jobcount
TABLES
pdf = pdf
EXCEPTIONS
err_no_otf_spooljob = 1
err_no_spooljob = 2
err_no_permission = 3
err_conv_not_possible = 4
err_bad_dstdevice = 5
user_cancelled = 6
err_spoolerror = 7
err_temseerror = 8
err_btcjob_open_failed = 9
err_btcjob_submit_failed = 10
err_btcjob_close_failed = 11.
CASE sy-subrc.
WHEN 0.
WHEN OTHERS.
MESSAGE e001(zmsd) WITH text-002.
"CONVERT_OTFSPOOLJOB_2_PDF Fail
EXIT.
ENDCASE.
ELSE.
CALL FUNCTION 'CONVERT_ABAPSPOOLJOB_2_PDF'
EXPORTING
src_spoolid = spoolno
no_dialog = ' '
IMPORTING
pdf_bytecount = numbytes
pdf_spoolid = pdfspoolid
btc_jobname = jobname
btc_jobcount = jobcount
TABLES
pdf = pdf
EXCEPTIONS
err_no_abap_spooljob = 1
err_no_spooljob = 2
err_no_permission = 3
err_conv_not_possible = 4
err_bad_destdevice = 5
user_cancelled = 6
err_spoolerror = 7
err_temseerror = 8
err_btcjob_open_failed = 9
err_btcjob_submit_failed = 10
err_btcjob_close_failed = 11.
CASE sy-subrc.
WHEN 0.
WHEN OTHERS.
MESSAGE e001(zmsd) WITH text-003.
"CONVERT_ABAPSPOOLJOB_2_PDF Fail
EXIT.
ENDCASE.
ENDIF.
*************** download PDF file ***********
CHECK download = 'X'.
IF NOT ( jobname IS INITIAL ).
EXIT.
ENDIF.
CALL FUNCTION 'WS_DOWNLOAD'
EXPORTING
filename = p_file
filetype = 'BIN'
bin_filesize = numbytes
TABLES
data_tab = pdf
EXCEPTIONS
file_open_error = 1
file_write_error = 2
invalid_filesize = 3
invalid_table_width = 4
invalid_type = 5
no_batch = 6
unknown_error = 7
OTHERS = 8. IF sy-subrc <> 0.
msgtxt = text-004. "Fail
ENDIF.
ENDFUNCTION.
-->

see more information---https://www.sdn.sap.com/irj/sdn/wiki?path=/display/Snippets/ABAP4+Tuning+Checklist&

SAP ABAP - Easy Graph to use

I'll introduce some code snippet to use easily.
of course, there are lots of program sourse using graph in T-CODE GRAL.

But, I think the function 'GFW_PRES_SHOW' is powerful and easy to use...

This code snippet shows how to use function GFW_PRES_SHOW.

...data gathering

*__Make data format

DATA: lv_cnt(2), lv_text(30).

REFRESH values.
REFRESH column_texts.

SORT it_gra BY zcono.

*__Row definition

LOOP AT it_gra.
lv_cnt = sy-tabix.
CONCATENATE 'VALUES-VAL' lv_cnt INTO lv_text.
CONDENSE lv_text.
ASSIGN (lv_text) TO .
= it_gra-cnt.
ENDLOOP.

*___Row Text

values-rowtxt = '??????'.
APPEND values.

*__Column definition

LOOP AT it_gra.
column_texts-coltxt = it_gra-zcono.
APPEND column_texts.
ENDLOOP.

*___Call graph function

CALL FUNCTION 'GFW_PRES_SHOW'
EXPORTING
presentation_type = 31 "graph type 31 = pie type, 8 or 1 = bar chart
parent = contc "Custom Container
TABLES
values = values "row data(Maximun 32)
column_texts = column_texts " column definition
EXCEPTIONS
error_occurred = 1
OTHERS = 2.

.....


see images here

https://www.sdn.sap.com/irj/sdn/wiki?path=/display/Snippets/ABAP4+Tuning+Checklist&

SAP ABAP - Code for Displaying Quotations in ALV and create Condition Records Automatically from it

Description:

The below code involves Hierarchy Sequential ALV, BDC, BAPI and also explains about the interactivity of the ALV.

This program is used to display Quotations in Hierarchy ALV. Provision is given to select some of the Quotations and use the interactive button to create Condition Records based on the quotation data.

/* REPORT  ZSPRENH069 NO STANDARD PAGE HEADING.TYPE-POOLS : SLIS.                            "Global Type for ALV  ************************************************************************
* T Y P E S *
************************************************************************TYPES: BEGIN OF TY_VB_AKAP,
VBELN TYPE VBELN_VA, "Sales Document
KUNNR TYPE KUNAG, "Sold-to party
POSNR TYPE POSNR_VA, "Item Number
MATNR TYPE MATNR, "Material Number
PMATN TYPE PMATN, "Pricing Reference Material/Newly Created Material
KWMENG TYPE KWMENG, "Cumulative Order Qty. in Sales Units
VRKME TYPE VRKME, "Sales Unit
* NETPR TYPE NETPR, "Net Price
KZWI1 TYPE KZWI1, "Sub Total 1 from pricing procedure for condition
VKAUS TYPE ABRVW, "Usage Indicator
END OF TY_VB_AKAP, BEGIN OF TY_MARA,
MATNR TYPE MATNR, "Material Number
ZZTECHSPEC TYPE ZTECHSPEC, "Technical Specification
END OF TY_MARA, BEGIN OF TY_MVKE,
MATNR TYPE MATNR, "Material Number
VKORG TYPE VKORG, "Sales Organization
VTWEG TYPE VTWEG, "Distribution Channel
KONDM TYPE KONDM, "Material Pricing Group
END OF TY_MVKE, BEGIN OF TY_VBKD,
VBELN TYPE VBELN_VA, "Sales Document
POSNR TYPE POSNR_VA, "Item Number
BSTKD_E TYPE BSTKD_E, "Used to capture New Material Number
END OF TY_VBKD, BEGIN OF TY_IHEADER,
SELECT(1) TYPE C, "Check Box
VBELN TYPE VBELN, "Sales Document
KUNNR TYPE KUNAG, "Sold-to Party
END OF TY_IHEADER, BEGIN OF TY_MESSAGE1,
VKORG TYPE VKORG, "Sales Organization
VTWEG TYPE VTWEG, "Distribution Channel
KUNNR TYPE KUNAG, "Customer number
KONDM TYPE KONDM, "Material pricing group
ZCOUNT(2) TYPE N, "Zcount
MSGTYP(1) TYPE C, "Message type
TEXT(150) TYPE C, "Message text
END OF TY_MESSAGE1, BEGIN OF TY_MESSAGE2,
VKORG TYPE VKORG, "Sales Organization
VTWEG TYPE VTWEG, "Distribution Channel
KUNNR TYPE KUNAG, "Customer number
MATNR TYPE MATNR, "Material Number
MSGTYP(1) TYPE C, "Message type
TEXT(150) TYPE C, "Message text
END OF TY_MESSAGE2, BEGIN OF TY_IFINAL,
VBELN TYPE VBELN_VA, "Sales Document
KWMENG TYPE KWMENG, "Cumulative Order Qty. in Sales Units
POSNR TYPE POSNR_VA, "Item Number
KUNNR TYPE KUNAG, "Sold-to party
MATNR TYPE MATNR, "Material Number
VRKME TYPE VRKME, "Sales Unit
KZWI1 TYPE KZWI1, "Sub Total 1 from pricing procedure for condition
VKAUS TYPE ABRVW, "Usage Indicator
ZZTECHSPEC TYPE ZTECHSPEC, "Technical Specification
PMATN TYPE PMATN, "Pricing Reference Material/Newly Created Material
KONDM TYPE KONDM, "Material Pricing Group
END OF TY_IFINAL, BEGIN OF TY_ACC1,
VBELN TYPE VBELN_VA, "Sales Document
KUNNR TYPE KUNAG, "Sold-to party
KONDM TYPE KONDM, "Material Pricing Group
ZCOUNT(2) TYPE N, "ZCount indicator
KSTBM TYPE KSTBM, "Quantity
VRKME TYPE VRKME, "Sales Unit
ZZTECHSPEC TYPE ZTECHSPEC, "Technical Specification
KZWI1 TYPE KZWI1, "Sub Total 1 from pricing procedure for condition
ERROR(1) TYPE N, "Error Field
END OF TY_ACC1, BEGIN OF TY_ACC2,
VBELN TYPE VBELN_VA, "Sales Document
KUNNR TYPE KUNAG, "Sold-to party
MATNR TYPE MATNR, "Material Number
KSTBM TYPE KSTBM, "Cumulative Order Qty. in Sales Units
ZZTECHSPEC TYPE ZTECHSPEC, "Technical Specification
VRKME TYPE VRKME, "Sales Unit
KZWI1 TYPE KZWI1, "Sub Total 1 from pricing procedure for condition
ERROR(1) TYPE N, "Error field
END OF TY_ACC2.************************************************************************
* D A T A *
************************************************************************* Internal Table Declarations
*****************************DATA: T_FIELDCATALOG TYPE SLIS_T_FIELDCAT_ALV, "Fieldcatalog IT
T_EVENTS TYPE SLIS_T_EVENT, "Event IT
T_HEADER TYPE SLIS_T_LISTHEADER, "Header IT T_VB_AKAP TYPE STANDARD TABLE OF TY_VB_AKAP, "To hold records from VBAK & VBAP Table
T_MARA TYPE STANDARD TABLE OF TY_MARA, "To hold records from MARA Table
T_MVKE TYPE STANDARD TABLE OF TY_MVKE, "To hold records from MVKE Table
T_VBKD TYPE STANDARD TABLE OF TY_VBKD, "To hold records from VBKD Table
T_IHEADER TYPE STANDARD TABLE OF TY_IHEADER, "To hold records from VBAK Table
T_IFINAL TYPE STANDARD TABLE OF TY_IFINAL, "To hold cumulative data for ALV
T_BDCDATA TYPE STANDARD TABLE OF BDCDATA, "IT for bdcdata
T_BDCMSGCOLL TYPE STANDARD TABLE OF BDCMSGCOLL, "IT for error messages
T_MESSAGE1 TYPE STANDARD TABLE OF TY_MESSAGE1, "IT for conditions1 messages
T_MESSAGE2 TYPE STANDARD TABLE OF TY_MESSAGE2, "IT for conditions2 messages
T_ACC2 TYPE STANDARD TABLE OF TY_ACC2, "IT for holding data for Second Access Sequence Processing
T_ACC1 TYPE STANDARD TABLE OF TY_ACC1, "IT for holding data for First Access Sequence Processing
T_SELECT TYPE STANDARD TABLE OF RSPARAMS, "IT for holding data related to the selection screen* Work area Declarations
************************
W_FIELDCATALOG TYPE SLIS_FIELDCAT_ALV, "Fieldcatalog WA
W_EVENT TYPE SLIS_ALV_EVENT, "Event WA
W_HEADER TYPE SLIS_LISTHEADER, "Header WA
W_LAYOUT TYPE SLIS_LAYOUT_ALV, "Layout WA
W_KEYINFO TYPE SLIS_KEYINFO_ALV, "Key Information WA W_VB_AKAP TYPE TY_VB_AKAP, "To hold records from T_VB_AKAP
W_MARA TYPE TY_MARA, "To hold records from T_MARA
W_MVKE TYPE TY_MVKE, "To hold records from T_MVKE
W_VBKD TYPE TY_VBKD, "To hold records from T_VBKD
W_IHEADER TYPE TY_IHEADER, "To hold records from T_IHEADER
W_IFINAL TYPE TY_IFINAL, "To hold records from T_IFINAL
W_PARAMS TYPE CTU_PARAMS, "CTU Params
W_BDCDATA TYPE BDCDATA, "Work Area for BDCDATA
W_BDCMSGCOLL TYPE BDCMSGCOLL, "Work Area to collect BDC Messages
W_MESSAGE1 TYPE TY_MESSAGE1, "WA for price conditions1 messages
W_MESSAGE2 TYPE TY_MESSAGE2, "WA for price conditions2 messages
W_ACC2 TYPE TY_ACC2, "WA for holding records from T_ACC2
W_ACC1 TYPE TY_ACC1, "WA for holding records from T_ACC1* Variable declarations
*********************** G_AUDAT TYPE AUDAT, "Document Date (Date Received/Sent)
G_VBELN TYPE VBELN_VA, "Sales Document
G_KUNNR TYPE KUNAG, "Sold-to party
G_MATNR TYPE MATNR, "Material Number
G_REPID TYPE SY-REPID, "Program Name
G_MESSAGE(73) TYPE C, "To Capture Message
G_FLAG1(1) TYPE C, "Flag
G_ANSWER(1) TYPE C. "Optional Button
* Constant declarations
***********************CONSTANTS: C_A(1) TYPE C VALUE 'A', "Constant Value A
C_S(1) TYPE C VALUE 'S', "Constant Value S
C_U(1) TYPE C VALUE 'U', "Constant Value U
C_X(1) TYPE C VALUE 'X', "Constant Value X
C_E(1) TYPE C VALUE 'E', "Constant Value E
C_I(1) TYPE C VALUE 'I', "Constant Value I
C_R(1) TYPE C VALUE 'R', "Constant Value R
C_B(1) TYPE C VALUE 'B', "Document Category is Quotation
C_HTNAME(10) TYPE C VALUE 'T_IHEADER', "Internal table for Header Data
C_ITNAME(10) TYPE C VALUE 'T_IFINAL', "Internal Table with processed data
C_Q2(2) TYPE C VALUE 'Q2', "Constant Order Reason Q2
C_100(3) TYPE C VALUE '100', "Popup screen
* C_046(3) TYPE C VALUE '046', "Value 046
* C_047(3) TYPE C VALUE '047', "Value 047
C_25(2) TYPE C VALUE '25', "Popup screen
C_5(1) TYPE C VALUE '5', "Popup screen
C_1 TYPE I VALUE 1, "Value 1 for Error Denotion
C_2 TYPE I VALUE 2, "Value 2 for Error Denotion
C_3 TYPE I VALUE 3, "Value 3 for BDC Error Denotion
C_1000(4) TYPE N VALUE 1000, "Value 1000
C_01(2) TYPE N VALUE '01', "Value 01 for Zcount
C_VK11(4) TYPE C VALUE 'VK11', "Transaction VK11
C_DYNBEGIN(1) TYPE C VALUE 'X', "Indicator
C_UPDATE(1) TYPE C VALUE 'S', "Update
C_DISMODE(1) TYPE C VALUE 'N', "Display
C_ZBPR(4) TYPE C VALUE 'ZBPR', "Condition Type ZBPR
C_ERROR(5) TYPE C VALUE 'ERROR'. "Error screen title************************************************************************
* S E L E C T O P T I O N S & P A R A M E T E R S *
************************************************************************* Selection-screen Block 1
SELECTION-SCREEN BEGIN OF BLOCK BLK1 WITH FRAME TITLE TEXT-001.PARAMETERS: P_VKORG TYPE VKORG OBLIGATORY, "Sales Organization
P_VTWEG TYPE VTWEG OBLIGATORY, "Distribution Channel
P_SPART TYPE SPART DEFAULT '00'. "DivisionSELECTION-SCREEN END OF BLOCK BLK1.SELECTION-SCREEN BEGIN OF BLOCK BLK2 WITH FRAME TITLE TEXT-002.SELECT-OPTIONS: S_AUDAT FOR G_AUDAT, "Document Date (Date Received/Sent)
S_VBELN FOR G_VBELN, "Sales Document
S_KUNNR FOR G_KUNNR, "Sold-to party
S_MATNR FOR G_MATNR. "Material Number
PARAMETERS: P_VKAUS(2) TYPE N. "Usage IndicatorSELECTION-SCREEN END OF BLOCK BLK2.************************************************************************
* I N I T I A L I Z A T I O N *
************************************************************************
INITIALIZATION. CLEAR : G_REPID. "Program Name G_REPID = SY-REPID. "Program Name************************************************************************
* A T S E L E C T I O N S C R E E N *
************************************************************************
AT SELECTION-SCREEN.
************************************************************************
* S T A R T O F S E L E C T I O N *
************************************************************************
START-OF-SELECTION.* Data Selection
PERFORM DATA_RETRIEVAL.* Build Field Catalog
PERFORM BUILD_FIELDCATALOG.* Bulid layout
PERFORM BUILD_LAYOUT.* Build Events
PERFORM BUILD_EVENTS.* Captures the Values of Selection Screen
PERFORM CAPTURE_SCREEN.************************************************************************
* E N D O F S E L E C T I O N *
************************************************************************
END-OF-SELECTION.* Display List
PERFORM DISPLAY_ALV_REPORT.************************************************************************
* F O R M S *
*************************************************************************&---------------------------------------------------------------------*
*& Form DATA_RETRIEVAL
*&---------------------------------------------------------------------*
* Retrieves Data for ALV Display
*----------------------------------------------------------------------*
FORM DATA_RETRIEVAL . DATA : L_VKAUS TYPE VKAUS. "Variable to hold Usage Indicator CLEAR L_VKAUS. SELECT VBELN
KUNNR
INTO CORRESPONDING FIELDS OF TABLE T_IHEADER
FROM VBAK
WHERE VBELN IN S_VBELN
AND KUNNR IN S_KUNNR
AND VKORG EQ P_VKORG
AND AUDAT IN S_AUDAT
AND VTWEG EQ P_VTWEG
AND SPART EQ P_SPART
AND AUGRU EQ C_Q2
AND VBTYP EQ C_B. IF NOT T_IHEADER IS INITIAL. IF NOT P_VKAUS IS INITIAL OR P_VKAUS NE C_1. CONCATENATE 'C' P_VKAUS INTO L_VKAUS. SELECT A~VBELN
A~KUNNR
B~POSNR
B~MATNR
B~PMATN
B~KWMENG
B~VRKME
* B~NETPR
B~KZWI1
B~VKAUS
INTO TABLE T_VB_AKAP
FROM VBAK AS A
JOIN VBAP AS B
ON A~VBELN EQ B~VBELN
FOR ALL ENTRIES IN T_IHEADER
WHERE A~VBELN EQ T_IHEADER-VBELN
AND B~MATNR IN S_MATNR
AND B~VKAUS EQ L_VKAUS. ELSE. SELECT A~VBELN
A~KUNNR
B~POSNR
B~MATNR
B~PMATN
B~KWMENG
B~VRKME
* B~NETPR
B~KZWI1
B~VKAUS
INTO TABLE T_VB_AKAP
FROM VBAK AS A
JOIN VBAP AS B
ON A~VBELN EQ B~VBELN
FOR ALL ENTRIES IN T_IHEADER
WHERE A~VBELN EQ T_IHEADER-VBELN
AND B~MATNR IN S_MATNR. ENDIF. IF NOT T_VB_AKAP IS INITIAL. SELECT VBELN
POSNR
BSTKD_E
INTO TABLE T_VBKD
FROM VBKD
FOR ALL ENTRIES IN T_VB_AKAP
WHERE VBELN EQ T_VB_AKAP-VBELN
AND POSNR EQ T_VB_AKAP-POSNR. ENDIF. SORT T_VBKD BY VBELN POSNR. CLEAR W_VB_AKAP.* After much of coding was completed, Usage of PMATN was dropped and
* the first eighteen characters of the field BSTKD was proposed for usage
* Hence PMATN is overwritten by BSTKD value in the below loop LOOP AT T_VB_AKAP INTO W_VB_AKAP. CLEAR: W_VBKD,
W_VB_AKAP-PMATN. READ TABLE T_VBKD INTO W_VBKD
WITH KEY VBELN = W_VB_AKAP-VBELN
POSNR = W_VB_AKAP-POSNR
BINARY SEARCH.
IF SY-SUBRC EQ 0.
W_VB_AKAP-PMATN = W_VBKD-BSTKD_E+0(18).
ENDIF. MODIFY T_VB_AKAP FROM W_VB_AKAP TRANSPORTING PMATN. CLEAR W_VB_AKAP. ENDLOOP. IF NOT T_VB_AKAP IS INITIAL. SELECT MATNR
ZZTECHSPEC
INTO TABLE T_MARA
FROM MARA
FOR ALL ENTRIES IN T_VB_AKAP
WHERE MATNR EQ T_VB_AKAP-MATNR. IF SY-SUBRC EQ 0. SORT T_MARA BY MATNR. ENDIF. "Checking SY-SUBRC for T_MARA SELECT MATNR
ZZTECHSPEC
APPENDING TABLE T_MARA
FROM MARA
FOR ALL ENTRIES IN T_VB_AKAP
WHERE MATNR EQ T_VB_AKAP-PMATN. IF SY-SUBRC EQ 0. SORT T_MARA BY MATNR. ENDIF. "Checking SY-SUBRC for T_MARA
SELECT MATNR
VKORG
VTWEG
KONDM
INTO TABLE T_MVKE
FROM MVKE
FOR ALL ENTRIES IN T_VB_AKAP
WHERE MATNR EQ T_VB_AKAP-PMATN. IF SY-SUBRC EQ 0. SORT T_MVKE BY MATNR VKORG VTWEG. ENDIF. "Checking SY-SUBRC for T_MVKE SELECT MATNR
VKORG
VTWEG
KONDM
APPENDING TABLE T_MVKE
FROM MVKE
FOR ALL ENTRIES IN T_VB_AKAP
WHERE MATNR EQ T_VB_AKAP-MATNR. IF SY-SUBRC EQ 0. SORT T_MVKE BY MATNR VKORG VTWEG. ENDIF. "Checking SY-SUBRC for T_MVKE ENDIF. " FOR T_VB_AKAP NOT INITIAL. ENDIF. " FOR T_IHEADER NOT INITIAL. CLEAR: W_VB_AKAP,
W_IFINAL. LOOP AT T_VB_AKAP INTO W_VB_AKAP. W_IFINAL-VBELN = W_VB_AKAP-VBELN.
W_IFINAL-KUNNR = W_VB_AKAP-KUNNR.
W_IFINAL-POSNR = W_VB_AKAP-POSNR.
W_IFINAL-MATNR = W_VB_AKAP-MATNR.
W_IFINAL-PMATN = W_VB_AKAP-PMATN.
W_IFINAL-KWMENG = W_VB_AKAP-KWMENG.
W_IFINAL-VRKME = W_VB_AKAP-VRKME.
* W_IFINAL-NETPR = W_VB_AKAP-NETPR.
W_IFINAL-KZWI1 = ( W_VB_AKAP-KZWI1 / W_VB_AKAP-KWMENG ) * 1000.
W_IFINAL-VKAUS = W_VB_AKAP-VKAUS.* Populating Material Pricing Group from New Material Group, if such Group doesn't exist
* Population of Material Pricing Group from Material Number is tried.
* Similar condition does suit for Tech Spec too. SORT: T_MVKE BY MATNR VKORG VTWEG,
T_MARA BY MATNR. IF NOT W_VB_AKAP-PMATN IS INITIAL. CLEAR W_MVKE.
READ TABLE T_MVKE
INTO W_MVKE
WITH KEY MATNR = W_VB_AKAP-PMATN
VKORG = P_VKORG
VTWEG = P_VTWEG
BINARY SEARCH. IF SY-SUBRC EQ 0. W_IFINAL-KONDM = W_MVKE-KONDM. ENDIF. READ TABLE T_MARA
INTO W_MARA
WITH KEY MATNR = W_VB_AKAP-PMATN
BINARY SEARCH. IF SY-SUBRC EQ 0. W_IFINAL-ZZTECHSPEC = W_MARA-ZZTECHSPEC. ENDIF. " SY-SUBRC FOR READ TABLE T_MARA* IF W_MVKE-KONDM IS INITIAL. ELSE.* SORT T_MVKE BY MATNR VKORG VTWEG. CLEAR W_MVKE.
READ TABLE T_MVKE
INTO W_MVKE
WITH KEY MATNR = W_VB_AKAP-MATNR
VKORG = P_VKORG
VTWEG = P_VTWEG
BINARY SEARCH. IF SY-SUBRC EQ 0. W_IFINAL-KONDM = W_MVKE-KONDM. ENDIF. READ TABLE T_MARA
INTO W_MARA
WITH KEY MATNR = W_VB_AKAP-MATNR
BINARY SEARCH. IF SY-SUBRC EQ 0. W_IFINAL-ZZTECHSPEC = W_MARA-ZZTECHSPEC. ENDIF. " SY-SUBRC FOR READ TABLE T_MARA* ELSE.
*
* W_IFINAL-KONDM = W_MVKE-KONDM.
*
ENDIF. " IS INITIAL CHECK FOR W_MVKE-KONDM APPEND W_IFINAL TO T_IFINAL. CLEAR: W_VB_AKAP,
W_IFINAL. ENDLOOP. SORT T_IFINAL BY VBELN.* Checking whether if there are any header quotations which does not have items against them in item internal table
* if such records exist then, ensuring that such records gets deleted from header too, so that inconsitency is removed. CLEAR W_IHEADER.
LOOP AT T_IHEADER INTO W_IHEADER. CLEAR W_IFINAL.
READ TABLE T_IFINAL INTO W_IFINAL WITH KEY VBELN = W_IHEADER-VBELN.
IF SY-SUBRC NE 0. W_IHEADER-SELECT = C_X.
MODIFY T_IHEADER FROM W_IHEADER TRANSPORTING SELECT. ENDIF. ENDLOOP.
DELETE T_IHEADER WHERE SELECT = C_X. SORT T_IFINAL BY VBELN.
ENDFORM. " DATA_RETRIEVAL*&---------------------------------------------------------------------*
*& Form build_layout
*&---------------------------------------------------------------------*
* To build ALV Layout
*----------------------------------------------------------------------*
FORM BUILD_LAYOUT. CLEAR : W_LAYOUT. W_LAYOUT-COLWIDTH_OPTIMIZE = C_X.
W_LAYOUT-BOX_TABNAME = C_HTNAME. "tabname for checkbox
W_LAYOUT-BOX_FIELDNAME = 'SELECT'. "fieldname for checkbox CLEAR : W_KEYINFO. W_KEYINFO-HEADER01 = 'VBELN'. "Header1 key information
W_KEYINFO-ITEM01 = 'VBELN'. "Item1 key informationENDFORM. "build_layout*&---------------------------------------------------------------------*
*& Form build_events
*&---------------------------------------------------------------------*
* To build ALV Events
*----------------------------------------------------------------------*
FORM BUILD_EVENTS. CONSTANTS: C_TOP_OF_PAGE TYPE SLIS_FORMNAME VALUE 'TOP_OF_PAGE'. CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE = 1
IMPORTING
ET_EVENTS = T_EVENTS
EXCEPTIONS
LIST_TYPE_WRONG = 1
OTHERS = 2. IF SY-SUBRC = 0. READ TABLE T_EVENTS INTO W_EVENT
WITH KEY NAME = C_TOP_OF_PAGE. IF SY-SUBRC = 0. MOVE C_TOP_OF_PAGE TO W_EVENT-FORM. MODIFY T_EVENTS INDEX SY-TABIX
FROM W_EVENT
TRANSPORTING FORM.
ENDIF. ELSE. MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF.ENDFORM. "build_events*&---------------------------------------------------------------------*
*& Form top_of_page
*&---------------------------------------------------------------------*
* To display top of page in ALV Report
*----------------------------------------------------------------------*
FORM TOP_OF_PAGE. "#EC CALLED DATA : L_VKORG(35) TYPE C, "Sales Organization
L_VTWEG(35) TYPE C, "Distribution Channel
L_SPART(35) TYPE C. "Division** Title
* CLEAR W_HEADER.
* W_HEADER-TYP = C_H.
* W_HEADER-INFO = TEXT-003.
* APPEND W_HEADER TO T_HEADER.* Sales Organization
CLEAR W_HEADER.
W_HEADER-TYP = C_S.
CONCATENATE TEXT-004 P_VKORG INTO L_VKORG.
W_HEADER-INFO = L_VKORG.
APPEND W_HEADER TO T_HEADER.* Distribution Channel
CLEAR W_HEADER.
W_HEADER-TYP = C_S.
CONCATENATE TEXT-005 P_VTWEG INTO L_VTWEG.
W_HEADER-INFO = L_VTWEG.
APPEND W_HEADER TO T_HEADER.* Division
CLEAR W_HEADER.
W_HEADER-TYP = C_S.
CONCATENATE TEXT-006 P_SPART INTO L_SPART.
W_HEADER-INFO = L_SPART.
APPEND W_HEADER TO T_HEADER. CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
IT_LIST_COMMENTARY = T_HEADER.ENDFORM. "top_of_page*&---------------------------------------------------------------------*
*& Form pf_status
*&---------------------------------------------------------------------*
* To set PF-Status (user interface)
*----------------------------------------------------------------------*
* -->EXTAB The excluding table (function codes)
*----------------------------------------------------------------------*
FORM PF_STATUS "#EC CALLED
USING T_EXTAB TYPE SLIS_T_EXTAB. "#EC NEEDED SET PF-STATUS 'ZSTANDARD_FULLSCREEN'.ENDFORM. "pf_status*&---------------------------------------------------------------------*
*& Form display_alv_report
*&---------------------------------------------------------------------*
* To display ALV report
*----------------------------------------------------------------------*
FORM DISPLAY_ALV_REPORT. CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
EXPORTING
* I_INTERFACE_CHECK = ' '
I_CALLBACK_PROGRAM = G_REPID
I_CALLBACK_PF_STATUS_SET = 'PF_STATUS'
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
IS_LAYOUT = W_LAYOUT
IT_FIELDCAT = T_FIELDCATALOG
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
* IT_SORT =
* IT_FILTER =
* IS_SEL_HIDE =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
I_DEFAULT = C_X
I_SAVE = C_A
* IS_VARIANT =
IT_EVENTS = T_EVENTS[]
* IT_EVENT_EXIT =
I_TABNAME_HEADER = 'T_IHEADER'
I_TABNAME_ITEM = 'T_IFINAL'
* I_STRUCTURE_NAME_HEADER =
* I_STRUCTURE_NAME_ITEM =
IS_KEYINFO = W_KEYINFO
* IS_PRINT =
* IS_REPREP_ID =
* I_BYPASSING_BUFFER =
* I_BUFFER_ACTIVE =
* IR_SALV_HIERSEQ_ADAPTER =
* IT_EXCEPT_QINFO =
* I_SUPPRESS_EMPTY_DATA = ABAP_FALSE
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
T_OUTTAB_HEADER = T_IHEADER
T_OUTTAB_ITEM = T_IFINAL
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2. IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.ENDFORM. "display_alv_report*&---------------------------------------------------------------------*
*& Form BUILD_FIELDCATALOG
*&---------------------------------------------------------------------*
* To build ALV Field Catalog
*----------------------------------------------------------------------*FORM BUILD_FIELDCATALOG . DATA: L_COUNT TYPE I VALUE 0. CLEAR W_FIELDCATALOG.
L_COUNT = L_COUNT + 1.
W_FIELDCATALOG-COL_POS = L_COUNT.
W_FIELDCATALOG-TABNAME = C_HTNAME.
W_FIELDCATALOG-FIELDNAME = 'SELECT'.
W_FIELDCATALOG-SELTEXT_M = TEXT-C01.
W_FIELDCATALOG-CHECKBOX = C_X.
W_FIELDCATALOG-EDIT = C_X.
APPEND W_FIELDCATALOG TO T_FIELDCATALOG. CLEAR W_FIELDCATALOG.
L_COUNT = L_COUNT + 1.
W_FIELDCATALOG-COL_POS = L_COUNT.
W_FIELDCATALOG-TABNAME = C_HTNAME.
W_FIELDCATALOG-FIELDNAME = 'VBELN'.
W_FIELDCATALOG-SELTEXT_M = TEXT-C02.
W_FIELDCATALOG-KEY = C_X. "Fixes the column for no-scroll
APPEND W_FIELDCATALOG TO T_FIELDCATALOG. CLEAR W_FIELDCATALOG.
L_COUNT = L_COUNT + 1.
W_FIELDCATALOG-COL_POS = L_COUNT.
W_FIELDCATALOG-TABNAME = C_HTNAME.
W_FIELDCATALOG-FIELDNAME = 'KUNNR'.
W_FIELDCATALOG-SELTEXT_M = TEXT-C04.
APPEND W_FIELDCATALOG TO T_FIELDCATALOG. CLEAR L_COUNT. CLEAR W_FIELDCATALOG.
L_COUNT = L_COUNT + 1.
W_FIELDCATALOG-COL_POS = L_COUNT.
W_FIELDCATALOG-TABNAME = C_ITNAME.
W_FIELDCATALOG-FIELDNAME = 'POSNR'.
W_FIELDCATALOG-SELTEXT_M = TEXT-C03.
APPEND W_FIELDCATALOG TO T_FIELDCATALOG. CLEAR W_FIELDCATALOG.
L_COUNT = L_COUNT + 1.
W_FIELDCATALOG-COL_POS = L_COUNT.
W_FIELDCATALOG-TABNAME = C_ITNAME.
W_FIELDCATALOG-FIELDNAME = 'KWMENG'.
W_FIELDCATALOG-SELTEXT_M = TEXT-C06.
W_FIELDCATALOG-EMPHASIZE = 'C400'.
APPEND W_FIELDCATALOG TO T_FIELDCATALOG. CLEAR W_FIELDCATALOG.
L_COUNT = L_COUNT + 1.
W_FIELDCATALOG-COL_POS = L_COUNT.
W_FIELDCATALOG-TABNAME = C_ITNAME.
W_FIELDCATALOG-FIELDNAME = 'VRKME'.
W_FIELDCATALOG-SELTEXT_M = TEXT-C07.
W_FIELDCATALOG-JUST = C_R.
APPEND W_FIELDCATALOG TO T_FIELDCATALOG. CLEAR W_FIELDCATALOG.
L_COUNT = L_COUNT + 1.
W_FIELDCATALOG-COL_POS = L_COUNT.
W_FIELDCATALOG-TABNAME = C_ITNAME.
* W_FIELDCATALOG-FIELDNAME = 'NETPR'.
W_FIELDCATALOG-FIELDNAME = 'KZWI1'.
W_FIELDCATALOG-SELTEXT_M = TEXT-C08.
W_FIELDCATALOG-EMPHASIZE = 'C400'.
APPEND W_FIELDCATALOG TO T_FIELDCATALOG. CLEAR W_FIELDCATALOG.
L_COUNT = L_COUNT + 1.
W_FIELDCATALOG-COL_POS = L_COUNT.
W_FIELDCATALOG-TABNAME = C_ITNAME.
W_FIELDCATALOG-FIELDNAME = 'VKAUS'.
W_FIELDCATALOG-SELTEXT_M = TEXT-C12.
W_FIELDCATALOG-JUST = C_R.
APPEND W_FIELDCATALOG TO T_FIELDCATALOG. CLEAR W_FIELDCATALOG.
L_COUNT = L_COUNT + 1.
W_FIELDCATALOG-COL_POS = L_COUNT.
W_FIELDCATALOG-TABNAME = C_ITNAME.
W_FIELDCATALOG-FIELDNAME = 'ZZTECHSPEC'.
W_FIELDCATALOG-SELTEXT_M = TEXT-C09.
W_FIELDCATALOG-EMPHASIZE = 'C400'.
APPEND W_FIELDCATALOG TO T_FIELDCATALOG. CLEAR W_FIELDCATALOG.
L_COUNT = L_COUNT + 1.
W_FIELDCATALOG-COL_POS = L_COUNT.
W_FIELDCATALOG-TABNAME = C_ITNAME.
W_FIELDCATALOG-FIELDNAME = 'MATNR'.
W_FIELDCATALOG-SELTEXT_M = TEXT-C05.
APPEND W_FIELDCATALOG TO T_FIELDCATALOG. CLEAR W_FIELDCATALOG.
L_COUNT = L_COUNT + 1.
W_FIELDCATALOG-COL_POS = L_COUNT.
W_FIELDCATALOG-TABNAME = C_ITNAME.
W_FIELDCATALOG-FIELDNAME = 'PMATN'.
W_FIELDCATALOG-SELTEXT_M = TEXT-C10.
W_FIELDCATALOG-EMPHASIZE = 'C400'.
APPEND W_FIELDCATALOG TO T_FIELDCATALOG. CLEAR W_FIELDCATALOG.
L_COUNT = L_COUNT + 1.
W_FIELDCATALOG-COL_POS = L_COUNT.
W_FIELDCATALOG-TABNAME = C_ITNAME.
W_FIELDCATALOG-FIELDNAME = 'KONDM'.
W_FIELDCATALOG-SELTEXT_M = TEXT-C11.
APPEND W_FIELDCATALOG TO T_FIELDCATALOG.ENDFORM. " BUILD_FIELDCATALOG*&---------------------------------------------------------------------*
*& Form user_command
*&---------------------------------------------------------------------*
* EXIT routine for command handling
*----------------------------------------------------------------------*
* -->L_UCOMM Function code that PAI triggered
* -->W_SELFIELD Information cursor position ALV
*----------------------------------------------------------------------*FORM USER_COMMAND USING L_UCOMM LIKE SY-UCOMM "#EC CALLED
W_SELFIELD TYPE SLIS_SELFIELD. "#EC NEEDED* Check function code
CASE L_UCOMM. WHEN 'CREATE'. SORT T_IHEADER BY SELECT. READ TABLE T_IHEADER INTO W_IHEADER
WITH KEY SELECT = C_X
BINARY SEARCH.
IF SY-SUBRC <> 0. MESSAGE I000(ZS) WITH TEXT-M01. ELSE. CLEAR : G_ANSWER.* Dialog box for save prompts
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
TEXT_QUESTION = TEXT-OP1
DISPLAY_CANCEL_BUTTON = ''
IMPORTING
ANSWER = G_ANSWER
EXCEPTIONS
TEXT_NOT_FOUND = 1
OTHERS = 2.
IF SY-SUBRC <> 0. MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ELSE. IF G_ANSWER = 1. SET PF-STATUS 'ZSTANDARD_SCREEN'. PERFORM DATA_IDENTITY_4_ACCESS_SEQ. PERFORM CREATE_CONDITIONS. PERFORM DISPLAY_RESULT. ENDIF. ENDIF. ENDIF. WHEN '&REFRESH'. SUBMIT ZSPRENH069 USING SELECTION-SCREEN 1000
WITH SELECTION-TABLE T_SELECT. WHEN 'BACKTO'. SUBMIT ZSPRENH069 USING SELECTION-SCREEN 1000
WITH SELECTION-TABLE T_SELECT. ENDCASE.ENDFORM. "user_command
*&---------------------------------------------------------------------*
*& Form DATA_IDENTITY_4_ACCESS_SEQ
*&---------------------------------------------------------------------*
* Seperates the Available Data for processing for both Access Sequences
*----------------------------------------------------------------------*FORM DATA_IDENTITY_4_ACCESS_SEQ . CLEAR : W_IFINAL,
W_ACC1,
W_ACC2. SORT T_MVKE BY MATNR VKORG VTWEG. LOOP AT T_IHEADER INTO W_IHEADER WHERE SELECT = C_X. LOOP AT T_IFINAL INTO W_IFINAL WHERE VBELN EQ W_IHEADER-VBELN. IF NOT W_IFINAL-PMATN IS INITIAL. CLEAR W_MVKE.
READ TABLE T_MVKE
INTO W_MVKE
WITH KEY MATNR = W_IFINAL-PMATN
VKORG = P_VKORG
VTWEG = P_VTWEG
BINARY SEARCH. IF W_MVKE-KONDM IS INITIAL. IF NOT W_IFINAL-VKAUS IS INITIAL. W_ACC2-ERROR = C_1. ELSE. CLEAR W_ACC2-ERROR. ENDIF. " ZCOUNT exists for the material W_ACC2-VBELN = W_IFINAL-VBELN.
W_ACC2-MATNR = W_IFINAL-PMATN.
W_ACC2-KUNNR = W_IFINAL-KUNNR.
W_ACC2-VRKME = W_IFINAL-VRKME.
W_ACC2-ZZTECHSPEC = W_IFINAL-ZZTECHSPEC.
W_ACC2-KSTBM = W_IFINAL-KWMENG.
W_ACC2-KZWI1 = W_IFINAL-KZWI1.
APPEND W_ACC2 TO T_ACC2. ELSE. "Material Pricing Group exists for the records W_ACC1-KONDM = W_MVKE-KONDM. IF W_IFINAL-VKAUS IS INITIAL.* CLEAR W_ACC2-ERROR.
* W_ACC2-VBELN = W_IFINAL-VBELN.
* W_ACC2-MATNR = W_IFINAL-PMATN.
* W_ACC2-KUNNR = W_IFINAL-KUNNR.
* W_ACC2-VRKME = W_IFINAL-VRKME.
* W_ACC2-ZZTECHSPEC = W_IFINAL-ZZTECHSPEC.
* W_ACC2-KSTBM = W_IFINAL-KWMENG.
* W_ACC2-KZWI1 = W_IFINAL-KZWI1.
* APPEND W_ACC2 TO T_ACC2.
W_ACC1-ZCOUNT = C_01. ELSE. W_ACC1-ZCOUNT = W_IFINAL-VKAUS+1(2). ENDIF. CLEAR W_ACC1-ERROR.
W_ACC1-VBELN = W_IFINAL-VBELN.
W_ACC1-KUNNR = W_IFINAL-KUNNR.
W_ACC1-VRKME = W_IFINAL-VRKME.
W_ACC1-ZZTECHSPEC = W_IFINAL-ZZTECHSPEC.
W_ACC1-KSTBM = W_IFINAL-KWMENG.
W_ACC1-KZWI1 = W_IFINAL-KZWI1.
APPEND W_ACC1 TO T_ACC1.
ENDIF. ELSE. "New Material Number doesn't exist* SORT T_MVKE BY MATNR VKORG VTWEG. CLEAR W_MVKE.
READ TABLE T_MVKE
INTO W_MVKE
WITH KEY MATNR = W_IFINAL-MATNR
VKORG = P_VKORG
VTWEG = P_VTWEG
BINARY SEARCH. IF W_MVKE-KONDM IS INITIAL. IF NOT W_IFINAL-VKAUS IS INITIAL. W_ACC2-ERROR = C_1. ELSE. CLEAR W_ACC2-ERROR. ENDIF. W_ACC2-VBELN = W_IFINAL-VBELN.
W_ACC2-MATNR = W_IFINAL-MATNR.
W_ACC2-KUNNR = W_IFINAL-KUNNR.
W_ACC2-VRKME = W_IFINAL-VRKME.
W_ACC2-ZZTECHSPEC = W_IFINAL-ZZTECHSPEC.
W_ACC2-KSTBM = W_IFINAL-KWMENG.
W_ACC2-KZWI1 = W_IFINAL-KZWI1.
APPEND W_ACC2 TO T_ACC2. ELSE. "Material Pricing Group exists for the records W_ACC1-KONDM = W_MVKE-KONDM. IF W_IFINAL-VKAUS IS INITIAL.* CLEAR W_ACC2-ERROR.
* W_ACC2-VBELN = W_IFINAL-VBELN.
* W_ACC2-MATNR = W_IFINAL-MATNR.
* W_ACC2-KUNNR = W_IFINAL-KUNNR.
* W_ACC2-VRKME = W_IFINAL-VRKME.
* W_ACC2-ZZTECHSPEC = W_IFINAL-ZZTECHSPEC.
* W_ACC2-KSTBM = W_IFINAL-KWMENG.
* W_ACC2-KZWI1 = W_IFINAL-KZWI1.
* APPEND W_ACC2 TO T_ACC2.
W_ACC1-ZCOUNT = C_01. ELSE. W_ACC1-ZCOUNT = W_IFINAL-VKAUS+1(2). ENDIF. CLEAR W_ACC1-ERROR.
W_ACC1-VBELN = W_IFINAL-VBELN.
W_ACC1-KUNNR = W_IFINAL-KUNNR.
W_ACC1-VRKME = W_IFINAL-VRKME.
W_ACC1-ZZTECHSPEC = W_IFINAL-ZZTECHSPEC.
W_ACC1-KSTBM = W_IFINAL-KWMENG.
W_ACC1-KZWI1 = W_IFINAL-KZWI1.
APPEND W_ACC1 TO T_ACC1. ENDIF. ENDIF. " CHECK FOR W_IFINAL-PMATN CLEAR: W_ACC1,
W_ACC2. ENDLOOP. " T_IFINAL ENDLOOP. " T_IHEADERENDFORM. " DATA_IDENTITY_4_ACCESS_SEQ
*&---------------------------------------------------------------------*
*& Form CREATE_CONDITIONS
*&---------------------------------------------------------------------*
* Creates the Condition Records for first two access sequences
*----------------------------------------------------------------------*FORM CREATE_CONDITIONS . DATA : L_ERROREXIST(1) TYPE C,
L_KONDM TYPE KONDM,
L_KSTBM(18) TYPE C,
L_KBETR(13) TYPE C,
L_FLAG_NEW(1) TYPE C,
L_UNAME TYPE SY-UNAME,
L_ACC1_VBELN TYPE VBELN_VA,
L_ACC2_VBELN TYPE VBELN_VA. W_PARAMS-DISMODE = C_DISMODE. "Dispaly mode
W_PARAMS-UPDMODE = C_UPDATE. "Update mode
W_PARAMS-CATTMODE = SPACE. "CATT
W_PARAMS-DEFSIZE = C_DYNBEGIN. "Default Size
W_PARAMS-RACOMMIT = C_DYNBEGIN. "Commit
W_PARAMS-NOBINPT = SPACE. "No Batch Input
W_PARAMS-NOBIEND = SPACE. "BI END
** code for the first access sequence..............................starts here
*
*
CLEAR: W_ACC1,
L_UNAME. SORT T_ACC1 BY VBELN KUNNR KONDM ZCOUNT ASCENDING KSTBM DESCENDING. LOOP AT T_ACC1 INTO W_ACC1. CALL FUNCTION 'ENQUEUE_EVVBAKE' "#EC *
EXPORTING
VBELN = W_ACC1-VBELN
EXCEPTIONS
FOREIGN_LOCK = 2.
* SYSTEM_FAILURE = 0
* OTHERS = 0. L_UNAME = SY-MSGV1. IF SY-SUBRC EQ 2. MESSAGE E042(V1) WITH W_ACC1-VBELN L_UNAME. ELSE. IF NOT W_ACC1-ERROR IS INITIAL. W_MESSAGE1-VKORG = P_VKORG.
W_MESSAGE1-VTWEG = P_VTWEG.
W_MESSAGE1-KUNNR = W_ACC1-KUNNR.
W_MESSAGE1-KONDM = L_KONDM.
W_MESSAGE1-ZCOUNT = W_ACC1-ZCOUNT.
W_MESSAGE1-MSGTYP = W_BDCMSGCOLL-MSGTYP.
CONCATENATE TEXT-018 TEXT-016 W_ACC1-VBELN INTO W_MESSAGE1-TEXT. APPEND W_MESSAGE1 TO T_MESSAGE1.
W_ACC1-ERROR = C_2. " 2 is the status which is used to indicate that this record is processed for error
" message and would be deleted from the internal table before processing the BDC. MODIFY T_ACC1 FROM W_ACC1 TRANSPORTING ERROR. ELSE.* DELETE T_ACC2 WHERE ERROR EQ C_2. CLEAR: L_ERROREXIST,
L_FLAG_NEW. AT NEW ZCOUNT. L_FLAG_NEW = C_X. ENDAT. IF L_FLAG_NEW EQ C_X. CLEAR L_FLAG_NEW. PERFORM BDC_DYNPRO USING 'SAPMV13A' '0100'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'RV13A-KSCHL'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'/00'.
PERFORM BDC_FIELD USING 'RV13A-KSCHL'
C_ZBPR.
PERFORM BDC_DYNPRO USING 'SAPLV14A' '0100'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'RV130-SELKZ(01)'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=WEIT'.
PERFORM BDC_FIELD USING 'RV130-SELKZ(01)'
C_X.
PERFORM BDC_DYNPRO USING 'SAPMV13A' '1950'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'KONP-KMEIN(01)'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'/00'.
PERFORM BDC_FIELD USING 'KOMG-VKORG'
P_VKORG.
PERFORM BDC_FIELD USING 'KOMG-VTWEG'
P_VTWEG.
PERFORM BDC_FIELD USING 'KOMG-KUNNR'
W_ACC1-KUNNR.
PERFORM BDC_FIELD USING 'KOMG-KONDM' "Material Pricing Group
W_ACC1-KONDM.
PERFORM BDC_FIELD USING 'KONP-KMEIN(01)'
W_ACC1-VRKME.
PERFORM BDC_FIELD USING 'KONP-KPEIN(01)'
C_1000.
PERFORM BDC_FIELD USING 'KOMG-ZZCOUNT(01)'
W_ACC1-ZCOUNT.
PERFORM BDC_FIELD USING 'KOMG-ZZTECHSPEC(01)'
W_ACC1-ZZTECHSPEC. PERFORM BDC_DYNPRO USING 'SAPMV13A' '1950'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'KOMG-ZZCOUNT(01)'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=KTXT'.
PERFORM BDC_FIELD USING 'RV130-SELKZ(01)'
C_X. PERFORM BDC_DYNPRO USING 'SAPLV70T' '0101'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'LV70T-LTX01(04)'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=BACK'.
L_ACC1_VBELN = W_ACC1-VBELN.
SHIFT L_ACC1_VBELN LEFT DELETING LEADING '0'.
PERFORM BDC_FIELD USING 'LV70T-LTX01(04)'
L_ACC1_VBELN. PERFORM BDC_DYNPRO USING 'SAPMV13A' '1950'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'KOMG-ZZCOUNT(01)'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=PSTF'.
PERFORM BDC_FIELD USING 'RV130-SELKZ(01)'
C_X. ENDIF. PERFORM BDC_DYNPRO USING 'SAPMV13A' '0303'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'KONM-KBETR(01)'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=EINF'. CLEAR L_KSTBM.
L_KSTBM = W_ACC1-KSTBM.
PERFORM BDC_FIELD USING 'KONM-KSTBM(01)' L_KSTBM.
PERFORM BDC_FIELD USING 'RV13A-KONMS(01)' W_ACC1-VRKME.
CLEAR L_KBETR.
L_KBETR = W_ACC1-KZWI1.
PERFORM BDC_FIELD USING 'KONM-KBETR(01)' L_KBETR.
AT END OF ZCOUNT. PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=SICH'.
CALL TRANSACTION C_VK11 USING T_BDCDATA "#EC CI_CALLTA
OPTIONS FROM W_PARAMS
MESSAGES INTO T_BDCMSGCOLL.
LOOP AT T_BDCMSGCOLL INTO W_BDCMSGCOLL. IF W_BDCMSGCOLL-MSGTYP EQ C_E OR
W_BDCMSGCOLL-MSGTYP EQ C_I OR
W_BDCMSGCOLL-MSGTYP EQ C_A.* L_ERROREXIST = C_X.
W_ACC1-ERROR = C_3.
MODIFY T_ACC1 FROM W_ACC1 TRANSPORTING ERROR. ENDIF. CLEAR W_BDCMSGCOLL. ENDLOOP.* IF L_ERROREXIST IS INITIAL.
*
* PERFORM CHANGE_SALESDOCUMENT_STATUS USING W_ACC1-VBELN.
*
* ENDIF.* Building the Internal Table to hold Success & Error Messages CLEAR: W_BDCMSGCOLL,
G_MESSAGE. LOOP AT T_BDCMSGCOLL INTO W_BDCMSGCOLL.*Funtion module to output the error and sucess messages CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
MSGID = W_BDCMSGCOLL-MSGID
MSGNR = W_BDCMSGCOLL-MSGNR
MSGV1 = W_BDCMSGCOLL-MSGV1
MSGV2 = W_BDCMSGCOLL-MSGV2
MSGV3 = W_BDCMSGCOLL-MSGV3
MSGV4 = W_BDCMSGCOLL-MSGV4
IMPORTING
MESSAGE_TEXT_OUTPUT = G_MESSAGE.* W_MESSAGE1-VBELN = W_IHEADER-VBELN.
W_MESSAGE1-VKORG = P_VKORG.
W_MESSAGE1-VTWEG = P_VTWEG.
W_MESSAGE1-KUNNR = W_ACC1-KUNNR.
W_MESSAGE1-KONDM = W_ACC1-KONDM.
W_MESSAGE1-ZCOUNT = W_ACC1-ZCOUNT.
W_MESSAGE1-MSGTYP = W_BDCMSGCOLL-MSGTYP.
CONCATENATE G_MESSAGE TEXT-016 W_ACC1-VBELN INTO W_MESSAGE1-TEXT. APPEND W_MESSAGE1 TO T_MESSAGE1. CLEAR : W_BDCMSGCOLL,
G_MESSAGE,
W_MESSAGE1.
EXIT. ENDLOOP. REFRESH : T_BDCDATA,
T_BDCMSGCOLL.
ENDAT. ENDIF. CLEAR W_ACC1. ENDIF. CALL FUNCTION 'DEQUEUE_EVVBAKE'
EXPORTING
VBELN = W_ACC1-VBELN. ENDLOOP.* code for the first access sequence...............................ends here* code for the second access sequence..............................starts here CLEAR: W_ACC2,
L_UNAME. SORT T_ACC2 BY VBELN KUNNR MATNR ASCENDING KSTBM DESCENDING. LOOP AT T_ACC2 INTO W_ACC2. "Looping at the Second Access Sequence Data Table. CALL FUNCTION 'ENQUEUE_EVVBAKE' "#EC *
EXPORTING
VBELN = W_ACC2-VBELN
EXCEPTIONS
FOREIGN_LOCK = 2. L_UNAME = SY-MSGV1. IF SY-SUBRC EQ 2. MESSAGE E042(V1) WITH W_ACC2-VBELN L_UNAME. ELSE. IF NOT W_ACC2-ERROR IS INITIAL. W_MESSAGE2-VKORG = P_VKORG.
W_MESSAGE2-VTWEG = P_VTWEG.
W_MESSAGE2-KUNNR = W_ACC2-KUNNR.
W_MESSAGE2-MATNR = W_ACC2-MATNR.
W_MESSAGE2-MSGTYP = C_E.
CONCATENATE TEXT-017 TEXT-016 W_ACC2-VBELN INTO W_MESSAGE2-TEXT. APPEND W_MESSAGE2 TO T_MESSAGE2. W_ACC2-ERROR = C_2. " 2 is the status which is used to indicate that this record is processed for error
" message and would be deleted from the internal table before processing the BDC. MODIFY T_ACC2 FROM W_ACC2 TRANSPORTING ERROR. ELSE.
* ENDIF. " If this record does not have the ZCount inconsistency
*
* CLEAR W_ACC2.
*
* ENDLOOP.
*
* LOOP AT T_ACC2 INTO W_ACC2.
*
* IF W_ACC2-ERROR IS INITIAL.* Deletion from the Internal Table is done inorder to ensure that proper records get created.
* And only those records which are already processed for Error Management are deleted.* DELETE T_ACC2 WHERE ERROR EQ C_2. CLEAR: L_ERROREXIST,
L_FLAG_NEW. AT NEW MATNR. L_FLAG_NEW = C_X. ENDAT. IF L_FLAG_NEW EQ C_X. CLEAR L_FLAG_NEW. PERFORM BDC_DYNPRO USING 'SAPMV13A' '0100'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'RV13A-KSCHL'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'/00'.
PERFORM BDC_FIELD USING 'RV13A-KSCHL'
C_ZBPR. PERFORM BDC_DYNPRO USING 'SAPLV14A' '0100'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'RV130-SELKZ(02)'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=WEIT'.
PERFORM BDC_FIELD USING 'RV130-SELKZ(02)'
C_X. PERFORM BDC_DYNPRO USING 'SAPMV13A' '1951'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'KOMG-VKORG'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'/00'.
PERFORM BDC_FIELD USING 'KOMG-VKORG'
P_VKORG.
PERFORM BDC_FIELD USING 'KOMG-VTWEG'
P_VTWEG.
PERFORM BDC_FIELD USING 'KOMG-KUNNR'
W_ACC2-KUNNR.
PERFORM BDC_FIELD USING 'KOMG-MATNR(01)'
W_ACC2-MATNR.
PERFORM BDC_FIELD USING 'KOMG-ZZTECHSPEC(01)'
W_ACC2-ZZTECHSPEC.
PERFORM BDC_FIELD USING 'KONP-KPEIN(01)'
C_1000.
PERFORM BDC_FIELD USING 'KONP-KMEIN(01)'
W_ACC2-VRKME. PERFORM BDC_DYNPRO USING 'SAPMV13A' '1951'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'KOMG-MATNR(01)'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=KTXT'.
PERFORM BDC_FIELD USING 'RV130-SELKZ(01)'
C_X. PERFORM BDC_DYNPRO USING 'SAPLV70T' '0101'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'LV70T-LTX01(04)'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=BACK'.
L_ACC2_VBELN = W_ACC2-VBELN.
SHIFT L_ACC2_VBELN LEFT DELETING LEADING '0'.
PERFORM BDC_FIELD USING 'LV70T-LTX01(04)'
L_ACC2_VBELN. PERFORM BDC_DYNPRO USING 'SAPMV13A' '1951'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'KOMG-MATNR(01)'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=PSTF'.
PERFORM BDC_FIELD USING 'RV130-SELKZ(01)'
C_X. ENDIF. PERFORM BDC_DYNPRO USING 'SAPMV13A' '0303'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'KONM-KBETR(01)'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=EINF'. CLEAR L_KSTBM.
L_KSTBM = W_ACC2-KSTBM.
PERFORM BDC_FIELD USING 'KONM-KSTBM(01)' L_KSTBM. PERFORM BDC_FIELD USING 'RV13A-KONMS(01)' W_ACC2-VRKME. CLEAR L_KBETR.
L_KBETR = W_ACC2-KZWI1.
PERFORM BDC_FIELD USING 'KONM-KBETR(01)' L_KBETR.*********END OF THE MATERIAL FOR A QUOTATION AT END OF MATNR. PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=SICH'. CALL TRANSACTION C_VK11 USING T_BDCDATA "#EC CI_CALLTA
OPTIONS FROM W_PARAMS
MESSAGES INTO T_BDCMSGCOLL. LOOP AT T_BDCMSGCOLL INTO W_BDCMSGCOLL. IF W_BDCMSGCOLL-MSGTYP EQ C_E OR
W_BDCMSGCOLL-MSGTYP EQ C_I OR
W_BDCMSGCOLL-MSGTYP EQ C_A.* L_ERROREXIST = C_X.
W_ACC2-ERROR = C_3.
MODIFY T_ACC2 FROM W_ACC2 TRANSPORTING ERROR. ENDIF. CLEAR W_BDCMSGCOLL. ENDLOOP.* IF L_ERROREXIST IS INITIAL.
*
* PERFORM CHANGE_SALESDOCUMENT_STATUS USING W_ACC2-VBELN.
*
* ENDIF.* Building the Internal Table to hold Success & Error Messages CLEAR: W_BDCMSGCOLL,
G_MESSAGE. LOOP AT T_BDCMSGCOLL INTO W_BDCMSGCOLL. CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
MSGID = W_BDCMSGCOLL-MSGID
MSGNR = W_BDCMSGCOLL-MSGNR
MSGV1 = W_BDCMSGCOLL-MSGV1
MSGV2 = W_BDCMSGCOLL-MSGV2
MSGV3 = W_BDCMSGCOLL-MSGV3
MSGV4 = W_BDCMSGCOLL-MSGV4
IMPORTING
MESSAGE_TEXT_OUTPUT = G_MESSAGE.* W_MESSAGE2-VBELN = W_IHEADER-VBELN.
W_MESSAGE2-VKORG = P_VKORG.
W_MESSAGE2-VTWEG = P_VTWEG.
W_MESSAGE2-KUNNR = W_ACC2-KUNNR.
W_MESSAGE2-MATNR = W_ACC2-MATNR.
W_MESSAGE2-MSGTYP = W_BDCMSGCOLL-MSGTYP.
CONCATENATE G_MESSAGE TEXT-016 W_ACC2-VBELN INTO W_MESSAGE2-TEXT. APPEND W_MESSAGE2 TO T_MESSAGE2. CLEAR : W_BDCMSGCOLL,
G_MESSAGE,
W_MESSAGE2.
EXIT. ENDLOOP. REFRESH : T_BDCDATA,
T_BDCMSGCOLL. ENDAT. "AT END OF MATNR ENDIF. "IF W_ACC2-ERROR IS INITIAL / NOT. CLEAR: W_ACC2. ENDIF. CALL FUNCTION 'DEQUEUE_EVVBAKE'
EXPORTING
VBELN = W_ACC2-VBELN. ENDLOOP.* code for the second access sequence..............................ends here* Processing for Change of Sales Document starts here CLEAR: W_IHEADER,
L_ERROREXIST. LOOP AT T_IHEADER INTO W_IHEADER WHERE SELECT EQ C_X. CALL FUNCTION 'ENQUEUE_EVVBAKE' "#EC *
EXPORTING
VBELN = W_IHEADER-VBELN
EXCEPTIONS
FOREIGN_LOCK = 2. L_UNAME = SY-MSGV1. IF SY-SUBRC EQ 2. MESSAGE E042(V1) WITH W_IHEADER-VBELN L_UNAME. ENDIF. LOOP AT T_ACC1 INTO W_ACC1 WHERE VBELN = W_IHEADER-VBELN. IF NOT W_ACC1-ERROR IS INITIAL. L_ERROREXIST = C_X. ENDIF. ENDLOOP. LOOP AT T_ACC2 INTO W_ACC2 WHERE VBELN = W_IHEADER-VBELN. IF NOT W_ACC2-ERROR IS INITIAL. L_ERROREXIST = C_X. ENDIF. ENDLOOP. IF L_ERROREXIST IS INITIAL. PERFORM CHANGE_SALESDOCUMENT_STATUS USING W_IHEADER-VBELN. ENDIF. CALL FUNCTION 'DEQUEUE_EVVBAKE'
EXPORTING
VBELN = W_IHEADER-VBELN. CLEAR L_ERROREXIST. ENDLOOP.ENDFORM. " CREATE_CONDITIONS
*&---------------------------------------------------------------------*
*& Form CHANGE_SALESDOCUMENT_STATUS
*&---------------------------------------------------------------------*
* Shall change the status of Order Reason for the given Quotation
*----------------------------------------------------------------------*
* --> P_VBELN Quotation Number
*----------------------------------------------------------------------*FORM CHANGE_SALESDOCUMENT_STATUS USING P_VBELN TYPE VBELN. DATA : W_ORDER_HEADER_IN TYPE BAPISDH1,
W_ORDER_HEADER_INX TYPE BAPISDH1X,
W_RETURN TYPE BAPIRET2, "#EC NEEDED T_ORDER_HEADER_IN TYPE STANDARD TABLE OF BAPISDH1, "#EC NEEDED
T_ORDER_HEADER_INX TYPE STANDARD TABLE OF BAPISDH1X, "#EC NEEDED
T_RETURN TYPE STANDARD TABLE OF BAPIRET2. CLEAR: W_ORDER_HEADER_IN,
W_ORDER_HEADER_INX.* LOOP AT T_IHEADER INTO W_IHEADER WHERE SELECT = C_X. W_ORDER_HEADER_IN-ORD_REASON = 'Q3'.
APPEND W_ORDER_HEADER_IN TO T_ORDER_HEADER_IN. W_ORDER_HEADER_INX-UPDATEFLAG = C_U.
W_ORDER_HEADER_INX-ORD_REASON = C_X.
APPEND W_ORDER_HEADER_INX TO T_ORDER_HEADER_INX.*--Bapi to change status of open sales IHEADERs CALL FUNCTION 'BAPI_SALESORDER_CHANGE'
EXPORTING
SALESDOCUMENT = P_VBELN
ORDER_HEADER_IN = W_ORDER_HEADER_IN
ORDER_HEADER_INX = W_ORDER_HEADER_INX
TABLES
RETURN = T_RETURN. CLEAR W_RETURN.
READ TABLE T_RETURN INTO W_RETURN WITH KEY TYPE = 'E'.
IF SY-SUBRC = 0. CALL FUNCTION 'POPUP_WITH_TABLE_DISPLAY_OK'
EXPORTING
ENDPOS_COL = C_100
ENDPOS_ROW = C_25
STARTPOS_COL = C_5
STARTPOS_ROW = C_5
TITLETEXT = C_ERROR
TABLES
VALUETAB = T_RETURN
EXCEPTIONS
BREAK_OFF = 1
OTHERS = 2. IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF. ELSE. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = ' '.
ENDIF. CLEAR: W_ORDER_HEADER_IN,
W_ORDER_HEADER_INX.
* ENDLOOP.ENDFORM. " CHANGE_SALESDOCUMENT_STATUS
*&---------------------------------------------------------------------*
*& Form bdc_dynpro
*&---------------------------------------------------------------------*
* This form takes the program name and screen number
*----------------------------------------------------------------------*
* -->p_program Program Name
* -->p_screen Screen Number
*----------------------------------------------------------------------*
FORM BDC_DYNPRO USING P_PROGRAM TYPE BDCDATA-PROGRAM
P_SCREEN TYPE BDCDATA-DYNPRO. W_BDCDATA-PROGRAM = P_PROGRAM.
W_BDCDATA-DYNPRO = P_SCREEN.
W_BDCDATA-DYNBEGIN = C_X. APPEND W_BDCDATA TO T_BDCDATA. CLEAR W_BDCDATA.ENDFORM. " bdc_dynpro*&---------------------------------------------------------------------*
*& Form bdc_field
*&---------------------------------------------------------------------*
* This form takes the field name and field value
*----------------------------------------------------------------------*
* -->p_fnam Field Name
* -->p_fval Field Value
*----------------------------------------------------------------------*
FORM BDC_FIELD USING P_FNAM TYPE ANY
P_FVAL TYPE ANY. W_BDCDATA-FNAM = P_FNAM.
W_BDCDATA-FVAL = P_FVAL. APPEND W_BDCDATA TO T_BDCDATA. CLEAR W_BDCDATA.ENDFORM. " bdc_field*&---------------------------------------------------------------------*
*& Form DISPLAY_RESULT
*&---------------------------------------------------------------------*
* Displays all the messages regarding posting of Condition Records
*----------------------------------------------------------------------*FORM DISPLAY_RESULT .* Messages related to the First Access Sequence IF T_MESSAGE1 IS NOT INITIAL. WRITE : /70 TEXT-008.
SKIP 2. SORT T_MESSAGE1 BY VKORG. WRITE : /9 TEXT-010, 24 TEXT-011, 50 TEXT-012, 70 TEXT-013. CLEAR G_FLAG1. LOOP AT T_MESSAGE1 INTO W_MESSAGE1. AT NEW VKORG.
G_FLAG1 = 'X'.
ENDAT. AT NEW VTWEG.
G_FLAG1 = 'X'.
ENDAT. AT NEW KUNNR.
G_FLAG1 = 'X'.
ENDAT. AT NEW KONDM.
G_FLAG1 = 'X'.
ENDAT. IF G_FLAG1 = 'X'.
SKIP 1.
WRITE : /9 W_MESSAGE1-VKORG, 24 W_MESSAGE1-VTWEG,
50 W_MESSAGE1-KUNNR, 70 W_MESSAGE1-KONDM. SKIP 1.
WRITE: /9 TEXT-014, 23 TEXT-019, 45 TEXT-015. ENDIF. WRITE : /9 W_MESSAGE1-MSGTYP, 23 W_MESSAGE1-ZCOUNT, 45 W_MESSAGE1-TEXT. CLEAR: G_FLAG1,
W_MESSAGE1.
ENDLOOP. REFRESH T_MESSAGE1. ENDIF.* Messages related to the Second Access Sequence IF T_MESSAGE2 IS NOT INITIAL. SKIP 2.
WRITE : /70 TEXT-009.
SKIP 2. SORT T_MESSAGE2 BY VKORG. WRITE : /9 TEXT-010, 24 TEXT-011, 50 TEXT-012. CLEAR G_FLAG1. LOOP AT T_MESSAGE2 INTO W_MESSAGE2. AT NEW VKORG.
G_FLAG1 = 'X'.
ENDAT. AT NEW VTWEG.
G_FLAG1 = 'X'.
ENDAT. AT NEW KUNNR.
G_FLAG1 = 'X'.
ENDAT.
IF G_FLAG1 = 'X'. SKIP 1.
WRITE : /9 W_MESSAGE2-VKORG, 24 W_MESSAGE2-VTWEG, 50 W_MESSAGE2-KUNNR. SKIP 1.
WRITE: /9 TEXT-014, 23 TEXT-020, 45 TEXT-015. ENDIF.
WRITE : /9 W_MESSAGE2-MSGTYP, 23 W_MESSAGE2-MATNR, 45 W_MESSAGE2-TEXT. CLEAR: G_FLAG1,
W_MESSAGE2.
ENDLOOP. REFRESH T_MESSAGE2. ENDIF.ENDFORM. " DISPLAY_RESULT
*&---------------------------------------------------------------------*
*& Form CAPTURE_SCREEN
*&---------------------------------------------------------------------*
* Captures the Selection Screen Values of the present program
*----------------------------------------------------------------------*FORM CAPTURE_SCREEN . DATA L_REPID TYPE SY-REPID. REFRESH T_SELECT.
L_REPID = SY-REPID. CALL FUNCTION 'RS_REFRESH_FROM_SELECTOPTIONS'
EXPORTING
CURR_REPORT = L_REPID
* IMPORTING
* SP =
TABLES
SELECTION_TABLE = T_SELECT
EXCEPTIONS
NOT_FOUND = 1
NO_REPORT = 2
OTHERS = 3
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " CAPTURE_SCREEN*/

SAP ABAP - BDC code for ME31K - Open Contracts Creation

Description

This code is useful in Creating Open Contracts based on the information provided in the flat file. This code is special in a way that it uses complex logic instead of using AT NEW functionality. It deals with three levels of table controls, i.e. A table control within a table control and within it one more table control are to be dealt with. This was dealt with pure logic and not using AT .

/* REPORT ZMCG047CONTR NO STANDARD PAGE HEADING
LINE-SIZE 255
MESSAGE-ID ZM.
*
*&---------------------------------------------------------------------
*& Table declarations
*&---------------------------------------------------------------------
*
TABLES : T001W, "Plants/Branches
T024E, "Purchasing Organizations
T001. "Company Codes
*
*----------------------------------------------------------------------*
* TYPE-POOLS DECLARATION
*----------------------------------------------------------------------*
*
TYPE-POOLS : SLIS.
*
*----------------------------------------------------------------------
* Types Declaration *
*----------------------------------------------------------------------
*
TYPES: BEGIN OF T_RECORD, "record storing contract info
LIFNR(010), "Vendor Number
EVART(004), "Agreement Type
EKORG(004), "Purchasing Organization
EKGRP(003), "Purchasing Group
WERKS(004), "Plant
LGORT(004), "Storage Location
KDATB(010), "Valid start Date
KDATE(010), "Valid End Date
ZTERM(004), "Payment Terms
KTWRT(020), "Target Value
EPSTP(001), "Item Category
EMATN(018), "Material Number
KTMNG(017), "Target Quantity
NETPR(014), "Net Price
PEINH(006), "Net Price Unit
BPRME(003), "Net Price Order Price Unit
IDNLF(035), "Vendor Material number
WEBRE(001), "GR Based-IV
MEPRF(001), "Pricing Date Category
LTEX1(040), "Info Text
DATAB(010), "Valid From
DATBI(010), "Valid To
KSCHL(004), "Condition Type
KBETR(016), "Condition Rate if scale is not given
KONWA(005), "Currency
KPEIN(005), "Condition Pricing Unit
KMEIN(003), "Condition Unit of Measure
KSTBM(019), "Scale
KBETR_01(016), "Scale Rate
DEL_FLAG, "Delete Flag Indicator
ERR_MSG(100), "Error Message
END OF T_RECORD,
*
BEGIN OF T_ERR_RECORD, "to have error records stored
LIFNR(010), "Vendor Number
EVART(004), "Agreement Type
EKORG(004), "Purchasing Organization
EKGRP(003), "Purchasing Group
WERKS(004), "Plant
LGORT(004), "Storage Location
KDATB(010), "Valid start Date
KDATE(010), "Valid End Date
ZTERM(004), "Payment Terms
KTWRT(020), "Target Value
EPSTP(001), "Item Category
EMATN(018), "Material Number
KTMNG(017), "Target Quantity
NETPR(014), "Net Price
PEINH(006), "Net Price Unit
BPRME(003), "Net Price Order Price Unit
IDNLF(035), "Vendor Material number
WEBRE(001), "GR Based-IV
MEPRF(001), "Pricing Date Category
LTEX1(040), "Info Text
DATAB(010), "Valid From
DATBI(010), "Valid To
KSCHL(004), "Condition Type
KBETR(016), "Condition Rate if scale is not given
KONWA(005), "Currency
KPEIN(005), "Condition Pricing Unit
KMEIN(003), "Condition Unit of Measure
KSTBM(019), "Scale
KBETR_01(016), "Scale Rate
DEL_FLAG, "Delete Flag Indicator
ERR_MSG(100), "Error Message
END OF T_ERR_RECORD,
*
BEGIN OF T_LOEKZ, "To have deletion indicators for materials
LOEKZ(001), "Deletion indicator in purchasing document
EMATN(018), "Material Number
WERKS(004), "Plant
LGORT(004), "Storage Location
BSTYP(001), "Purchasing document category
END OF T_LOEKZ,
*
BEGIN OF T_MATNR, " Type definition to store details of materials
MATNR(018), "Material Number
END OF T_MATNR,
*
BEGIN OF T_T001, " Type definition for company codes
BUKRS(004), " Company Code
END OF T_T001,
*
BEGIN OF T_ZMVXREF, "Cross-Reference table type
D_ALTKN(10), "Legacy Vendor Number
D_BUKRS(4), "Legacy Company Code
M_ALTKN(10), "SAP Company Code
END OF T_ZMVXREF,
*
BEGIN OF T_LFA1, "Master data of vendors
LIFNR(10), "Vendor Number
END OF T_LFA1,
*
* Type Declaration for T024E (Company Codes)
BEGIN OF T_T024E,
EKORG LIKE T024E-EKORG, "Purchasing organization
BUKRS LIKE T024E-BUKRS, "Company Code
END OF T_T024E,
*
* Type Declaration for t001w (Plant)
BEGIN OF T_T001W,
WERKS LIKE T001W-WERKS, "Plant
END OF T_T001W,
*
* Type Declatation for String Line
BEGIN OF T_STR1, "#EC NEEDED
SLINE(6000) TYPE C,
END OF T_STR1.
*
TYPES: BEGIN OF T_BDCDATA. "BDC Data
INCLUDE STRUCTURE BDCDATA.
TYPES: END OF T_BDCDATA.
*
*----------------------------------------------------------------------
* Internal Tables Declaration *
*----------------------------------------------------------------------
*
DATA:
* Internal table to store input file data
I_RECORD TYPE STANDARD TABLE OF T_RECORD INITIAL SIZE 0,
* Internal table to capture errors
I_ERR_REC TYPE STANDARD TABLE OF T_ERR_RECORD INITIAL SIZE 0,
* Internal table to check for deletion indicators
I_LOEKZ TYPE STANDARD TABLE OF T_LOEKZ INITIAL SIZE 0,
* Internal table to check for material numbers
I_MATNR TYPE STANDARD TABLE OF T_MATNR INITIAL SIZE 0,
* Internal table used for storing Cross-Reference data of Vendor
I_ZMVXREF TYPE STANDARD TABLE OF T_ZMVXREF INITIAL SIZE 0,
* Internal table for holding Vendor Numbers from Master table
I_LFA1 TYPE STANDARD TABLE OF T_LFA1 INITIAL SIZE 0,
* Internal table for holding Purchase Org and Company Codes
I_T024E TYPE STANDARD TABLE OF T_T024E INITIAL SIZE 0,
* Internal table for holding Plants
I_T001W TYPE STANDARD TABLE OF T_T001W INITIAL SIZE 0,
* Internal table for storing a list of Company Codes
I_T001 TYPE STANDARD TABLE OF T_T001 INITIAL SIZE 0,
* Internal table used for ALV Reporting
I_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
* Internal table used for holding List Header
I_LISTHEADER TYPE SLIS_T_LISTHEADER, "EC NEEDED
* Internal table to hold ALV Event
I_ALV_EVENT TYPE SLIS_T_EVENT,
* Internal table to hold Sort Info for ALV Report
I_SORT TYPE SLIS_T_SORTINFO_ALV,
* Internal table for BDC Data
I_BDCDATA TYPE STANDARD TABLE OF T_BDCDATA INITIAL SIZE 0,
* Internal table for messages
I_MESSTAB TYPE TABLE OF BDCMSGCOLL,
* Internal table for String line
I_STR1 TYPE STANDARD TABLE OF T_STR1 INITIAL SIZE 0.
*
*----------------------------------------------------------------------
* Work Area Declaration *
*----------------------------------------------------------------------
*
DATA:
* Work Area to hold data for the Open Contract
WA_RECORD TYPE T_RECORD,
* Work Area to hold previous record data
WA_RECORDPREV TYPE T_RECORD,
* Work Area to hold errors
WA_ERR_REC TYPE T_ERR_RECORD,
* Work Area to hold the Deletion Indicator of materials
WA_LOEKZ TYPE T_LOEKZ,
* Work Area to hold Material numbers of required materials
WA_MATNR TYPE T_MATNR, "EC NEEDED
* Work Area to hold errors occured while performing BDC
WA_MESSTAB TYPE BDCMSGCOLL,
* Work Area to hold field catalog for ALV Reports
WA_FIELDCAT TYPE SLIS_FIELDCAT_ALV,
* Work Area to hold list header data for ALV reports
WA_LISTHEADER TYPE SLIS_LISTHEADER,
* Work Area to hold ALV Event
WA_ALV_EVENT LIKE LINE OF I_ALV_EVENT, "EC NEEDED
* Work Area to hold Layout of ALV Report
WA_LAYOUT TYPE SLIS_LAYOUT_ALV,
* Work Area to hold Cross-Reference data of Vendor
WA_ZMVXREF TYPE T_ZMVXREF,
* Work Area to hold Vendor Numbers from Master table
WA_LFA1 TYPE T_LFA1, "EC NEEDED
* Work Area to hold Purchase Org and Company Codes
WA_T024E TYPE T_T024E,
* Work Area to hold Company Codes
WA_T001 TYPE T_T001,
* Work Area to hold Plants
WA_T001W TYPE T_T001W,
* Work Area to hold Sort Info for ALV Report
WA_SORT TYPE SLIS_SORTINFO_ALV,
* Work Area to hold BDC Data
WA_BDCDATA TYPE T_BDCDATA,
* Work Area for String line
WA_STR1 TYPE T_STR1.
*
*----------------------------------------------------------------------
* Variables Declaration *
*----------------------------------------------------------------------
*
DATA: V_ERRMSG(500), "To temporarily store the error message
V_CONV_DATE(10) TYPE C, "To capture the converted date format
V_DATE LIKE SY-DATUM,
V_REPID LIKE SY-REPID, "holds report id
V_CROSS_REFERENCE_ERROR TYPE I, " cross-reference error
V_INPUTERROR_FLAG VALUE '', " input error status
V_FILENAME TYPE STRING, " File Name
VEN_FLAG(1), " at new status
MAT_FLAG(1), " at new status
V_IND(2) TYPE N, " index of table control
V_IND2(2) TYPE N, " index of table control
V_IND3(2) TYPE N, " index of table control
V_EVRTP1(20),
V_EPSTP1(20),
V_EMATN1(20),
V_KTMNG1(20),
V_NETPR1(20),
V_PEINH1(20),
V_BPRME1(20),
V_TCSELFLAG1(20),
V_KSCHL2(20),
V_KBETR2(20),
V_KONWA2(20),
V_KPEIN2(20),
V_KMEIN2(20),
V_SELKZ2(20),
V_KBETR3(20),
V_KSTBM3(20),
V_LINE TYPE I,
V_STR TYPE X VALUE '09',
V_EXIST TYPE C,
V_EXIST1 TYPE C,
V_ISDIR TYPE C,
V_ISDIR1 TYPE C.
*
*----------------------------------------------------------------------
* Constants Declaration *
*----------------------------------------------------------------------
*
CONSTANTS: C_TCODE(5) VALUE 'ME31K', "Trx code - Open Contract Creation
C_TRUE VALUE 'X', " Del_Flag indicator
C_LOEKZ_MARKED VALUE 'X', "Deletion indicator for material
C_INPUTERROR_FLAG_YES VALUE 'X', "Input File Indicator
C_VEN_ERR1 VALUE 1, "Error Indicator
C_16(2) VALUE '16',
C_VEN_ERR2 VALUE 2, "Error Indicator
C_VEN_ERR3 VALUE 3, "Error Indicator
C_VEN_SUCS VALUE 0, "Success Indicator
C_SUCCESS LIKE SY-SUBRC VALUE '0',
C_STRUE VALUE 'S', "Del_flag for SAP Errors
C_YTRUE VALUE 'Y', "Del_flag for Success Records
C_MSGTYP_E VALUE 'E', "holds error message type
C_MSGTYP_S VALUE 'S', "holds success message type
C_BSTYP VALUE 'K', "Purchasing Document type is Contract
C_BACKGROUND VALUE 'N', "Background mode
C_FOREGROUND VALUE 'A', "All Screen mode
C_ERRORS VALUE 'E', "Error screen mode
C_WK(2) VALUE 'WK'. "Value Contract
*
*----------------------------------------------------------------------
* Selection Screen *
*----------------------------------------------------------------------
*
SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-033.
*
SELECTION-SCREEN SKIP.
*
SELECT-OPTIONS:
* Plant
S_WERKS FOR T001W-WERKS OBLIGATORY,
* Purchase Organization
S_EKORG FOR T024E-EKORG OBLIGATORY.
* Company Code
PARAMETER P_BUKRS LIKE T001-BUKRS OBLIGATORY.
*
SELECTION-SCREEN SKIP.
SELECTION-SCREEN ULINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 3.
PARAMETER RB_SERVE RADIOBUTTON GROUP RBX DEFAULT 'X' USER-COMMAND U1.
SELECTION-SCREEN COMMENT 6(19) TEXT-036.
SELECTION-SCREEN POSITION 37.
PARAMETER RB_LOCAL RADIOBUTTON GROUP RBX.
SELECTION-SCREEN COMMENT 40(13) TEXT-035.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN SKIP.
*
PARAMETERS:
* Parameter holding Input File name
P_FILE LIKE RLGRAP-FILENAME
OBLIGATORY
LOWER CASE
DEFAULT 'C:\'
MODIF ID G1,
P_FILE1 LIKE RLGRAP-FILENAME
OBLIGATORY
LOWER CASE
DEFAULT '/celestica/interface/corp/in/work/'
MODIF ID G2,
* Parameter specifying Mode of calling the Transaction.
P_MODE DEFAULT 'N' OBLIGATORY,
* Check box used to test the input file.
P_TEST AS CHECKBOX DEFAULT 'X',
* Parameter holding Filename for holding Input File Errors
P_IPERR LIKE RLGRAP-FILENAME
OBLIGATORY
LOWER CASE
DEFAULT 'C:\'
MODIF ID G1,
P_IPERR1 LIKE RLGRAP-FILENAME
OBLIGATORY
LOWER CASE
DEFAULT '/celestica/interface/corp/in/work/047_Err.txt'
MODIF ID G2.
*
SELECTION-SCREEN END OF BLOCK B2.
*
*----------------------------------------------------------------------
* AT Selection Screen Events *
*----------------------------------------------------------------------
* Loop the screen to activate relative paths
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF RB_SERVE = C_TRUE AND SCREEN-GROUP1 = 'G1'.
SCREEN-OUTPUT = 0.
SCREEN-ACTIVE = 0.
SCREEN-INPUT = 0.
ELSEIF RB_LOCAL = C_TRUE AND SCREEN-GROUP1 = 'G2'.
SCREEN-OUTPUT = 0.
SCREEN-ACTIVE = 0.
SCREEN-INPUT = 0.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
*
AT SELECTION-SCREEN ON BLOCK B2.
* Checking Access Authorization for the user
CALL FUNCTION 'ZU_DATA_ACCESS_AUTH_CHECK'
EXPORTING
ACTVT = C_16
P_BUKRS = P_BUKRS
TABLES
S_WERKS = S_WERKS
S_EKORG = S_EKORG
EXCEPTIONS
BUKRS_FAILED = 1
VKORG_FAILED = 2
VTWEG_FAILED = 3
EKORG_FAILED = 4
WERKS_FAILED = 5
LGNUM_FAILED = 6
OTHERS = 7.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
*
AT SELECTION-SCREEN ON P_BUKRS.
IF NOT P_BUKRS IS INITIAL.
SELECT SINGLE BUKRS INTO T001
FROM T001
WHERE BUKRS EQ P_BUKRS.
IF SY-SUBRC NE 0.
MESSAGE I000 WITH TEXT-089.
STOP.
ENDIF.
ENDIF.*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
* Search Help to select Input File path.
PERFORM GET_FILE_NAME USING P_FILE.
*
* Check for the existence of the file.
IF RB_LOCAL EQ C_TRUE.
CALL FUNCTION 'TMP_GUI_GET_FILE_EXIST'
EXPORTING
FNAME = P_FILE
IMPORTING
EXIST = V_EXIST
ISDIR = V_ISDIR
EXCEPTIONS
FILEINFO_ERROR = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
IF V_ISDIR IS INITIAL.
IF V_EXIST IS INITIAL.
MESSAGE I000 WITH TEXT-018.
STOP.
ENDIF.
ELSEIF V_ISDIR EQ C_TRUE.
MESSAGE I000 WITH TEXT-068.
STOP.
ENDIF.
ENDIF.
*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_IPERR.
* Search Help to select Input Error File path.
PERFORM GET_FILE_NAME USING P_IPERR.
*
AT SELECTION-SCREEN.
* Validate Transaction Mode
IF P_MODE <> C_BACKGROUND AND
P_MODE <> C_FOREGROUND AND
P_MODE <> C_ERRORS.
MESSAGE I000 WITH TEXT-034.
STOP.
ENDIF.
*
START-OF-SELECTION.
*
* Get the Input File Data
V_FILENAME = P_FILE.
PERFORM UPLOAD_FLATFILE_DATA TABLES I_RECORD
USING V_FILENAME.
* Sorting the data by all fields
SORT I_RECORD.* Ensuring the padding of the empty spaces before the vendor No CLEAR WA_RECORD.
LOOP AT I_RECORD INTO WA_RECORD.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = WA_RECORD-LIFNR
IMPORTING
OUTPUT = WA_RECORD-LIFNR.
MODIFY I_RECORD FROM WA_RECORD
INDEX SY-TABIX
TRANSPORTING LIFNR.
CLEAR WA_RECORD.
ENDLOOP.* Input file validation
PERFORM VALIDATE_FLATFILE_DATA. IF P_TEST = C_TRUE.
IF I_ERR_REC[] IS INITIAL.
MESSAGE I000 WITH TEXT-032.
STOP.
ELSE.
* Display all the error records at the input level.
PERFORM DISPLAY_INPERR_RECORDS.
* Download Error File
PERFORM DOWNLOAD_ERROR_FILE.
ENDIF.
ELSE.
* Build BDC Data
PERFORM BUILD_BDC_DATA.
* Download Error File
PERFORM DOWNLOAD_ERROR_FILE.
* Display the status report.
PERFORM DISPLAY_PROCESSED_RECORDS.
ENDIF.END-OF-SELECTION. REFRESH: I_RECORD,
I_ERR_REC,
I_LOEKZ,
I_MATNR,
I_ZMVXREF,
I_LFA1,
I_T024E,
I_FIELDCAT,
I_LISTHEADER,
I_ALV_EVENT,
I_SORT,
I_BDCDATA,
I_MESSTAB,
I_STR1. FREE: I_RECORD,
I_ERR_REC,
I_LOEKZ,
I_MATNR,
I_ZMVXREF,
I_LFA1,
I_T024E,
I_FIELDCAT,
I_LISTHEADER,
I_ALV_EVENT,
I_SORT,
I_BDCDATA,
I_MESSTAB,
I_STR1.*&---------------------------------------------------------------------
*& Form GET_file_name
*&---------------------------------------------------------------------
* Fetches the file and path from the presentation system
*----------------------------------------------------------------------
* --> p1 Path along with the file name
*----------------------------------------------------------------------
*
FORM GET_FILE_NAME USING L_FILE LIKE RLGRAP-FILENAME. CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
MASK = ',*.TXT,*.txt.'
MODE = 'O'
TITLE = TEXT-011
IMPORTING
FILENAME = L_FILE
EXCEPTIONS
INV_WINSYS = 1
NO_BATCH = 2
SELECTION_CANCEL = 3
SELECTION_ERROR = 4
OTHERS = 5.
CASE SY-SUBRC.
WHEN 1.
MESSAGE I000 WITH TEXT-084.
STOP.
WHEN 2.
MESSAGE I000 WITH TEXT-085.
STOP.
WHEN 3.
MESSAGE I000 WITH TEXT-086.
STOP.
WHEN 4.
MESSAGE I000 WITH TEXT-087.
STOP.
ENDCASE.
*
ENDFORM. " GET_file_name*&---------------------------------------------------------------------*
*& Form upload_flatfile_data
*&---------------------------------------------------------------------*
* Uploading data from Flat File
*----------------------------------------------------------------------*
*
FORM UPLOAD_FLATFILE_DATA
TABLES I_L_RECORD STRUCTURE WA_RECORD
USING L_FILENAME TYPE STRING. DATA WA_L_RECORD TYPE T_RECORD.
* Upload the Flat file data
IF RB_LOCAL EQ C_TRUE. "File is on the Local System
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
FILENAME = L_FILENAME
FILETYPE = 'ASC'
HAS_FIELD_SEPARATOR = 'X'
TABLES
DATA_TAB = I_L_RECORD
EXCEPTIONS
FILE_OPEN_ERROR = 1
FILE_READ_ERROR = 2
NO_BATCH = 3
GUI_REFUSE_FILETRANSFER = 4
INVALID_TYPE = 5
NO_AUTHORITY = 6
UNKNOWN_ERROR = 7
BAD_DATA_FORMAT = 8
HEADER_NOT_ALLOWED = 9
SEPARATOR_NOT_ALLOWED = 10
HEADER_TOO_LONG = 11
UNKNOWN_DP_ERROR = 12
ACCESS_DENIED = 13
DP_OUT_OF_MEMORY = 14
DISK_FULL = 15
DP_TIMEOUT = 16
OTHERS = 17. CASE SY-SUBRC.
WHEN 0.
DESCRIBE TABLE I_L_RECORD LINES V_LINE.
IF V_LINE EQ 0.
MESSAGE I000 WITH TEXT-065.
STOP.
ENDIF.
WHEN 1.
MESSAGE I000 WITH TEXT-068.
STOP.
WHEN 2.
MESSAGE I000 WITH TEXT-069.
STOP.
WHEN 3.
MESSAGE I000 WITH TEXT-070.
STOP.
WHEN 4.
MESSAGE I000 WITH TEXT-071.
STOP.
WHEN 5.
MESSAGE I000 WITH TEXT-072.
STOP.
WHEN 6.
MESSAGE I000 WITH TEXT-073.
STOP.
WHEN 7.
MESSAGE I000 WITH TEXT-074.
STOP.
WHEN 8.
MESSAGE I000 WITH TEXT-075.
STOP.
WHEN 9.
MESSAGE I000 WITH TEXT-076.
STOP.
WHEN 10.
MESSAGE I000 WITH TEXT-077.
STOP.
WHEN 11.
MESSAGE I000 WITH TEXT-078.
STOP.
WHEN 12.
MESSAGE I000 WITH TEXT-079.
STOP.
WHEN 13.
MESSAGE I000 WITH TEXT-080.
STOP.
WHEN 14.
MESSAGE I000 WITH TEXT-081.
STOP.
WHEN 15.
MESSAGE I000 WITH TEXT-082.
STOP.
WHEN 16.
MESSAGE I000 WITH TEXT-083.
STOP.
ENDCASE.
CLEAR V_LINE.
ELSEIF RB_SERVE EQ C_TRUE. "File is on the Application Server
P_MODE = C_BACKGROUND.
OPEN DATASET P_FILE1 FOR INPUT IN TEXT MODE.
CHECK SY-SUBRC EQ C_SUCCESS.
CLEAR WA_STR1.
DO.
READ DATASET P_FILE1 INTO WA_STR1.
IF SY-SUBRC <> 0. " NE SUCCESS.
EXIT.
ELSEIF SY-SUBRC EQ C_SUCCESS.
APPEND WA_STR1 TO I_STR1.
CLEAR WA_STR1.
ENDIF. " ENDIF on SY-SUBRC 0 Check.
ENDDO. " ENDDO DELETE I_STR1 WHERE SLINE EQ ' '.
DESCRIBE TABLE I_STR1 LINES V_LINE.
IF V_LINE EQ 0.
MESSAGE S000 WITH TEXT-065.
STOP.
ENDIF.
LOOP AT I_STR1 INTO WA_STR1.
CLEAR: WA_L_RECORD.
SPLIT WA_STR1-SLINE AT V_STR
INTO WA_L_RECORD-LIFNR
WA_L_RECORD-EVART
WA_L_RECORD-EKORG
WA_L_RECORD-EKGRP
WA_L_RECORD-WERKS
WA_L_RECORD-LGORT
WA_L_RECORD-KDATB
WA_L_RECORD-KDATE
WA_L_RECORD-ZTERM
WA_L_RECORD-KTWRT
WA_L_RECORD-EPSTP
WA_L_RECORD-EMATN
WA_L_RECORD-KTMNG
WA_L_RECORD-NETPR
WA_L_RECORD-PEINH
WA_L_RECORD-BPRME
WA_L_RECORD-IDNLF
WA_L_RECORD-WEBRE
WA_L_RECORD-MEPRF
WA_L_RECORD-LTEX1
WA_L_RECORD-DATAB
WA_L_RECORD-DATBI
WA_L_RECORD-KSCHL
WA_L_RECORD-KBETR
WA_L_RECORD-KONWA
WA_L_RECORD-KPEIN
WA_L_RECORD-KMEIN
WA_L_RECORD-KSTBM
WA_L_RECORD-KBETR_01
WA_L_RECORD-DEL_FLAG
WA_L_RECORD-ERR_MSG.
APPEND WA_L_RECORD TO I_L_RECORD.
CLEAR: WA_L_RECORD,
WA_STR1.
ENDLOOP.
REFRESH I_STR1.
CLOSE DATASET P_FILE1.
ENDIF.
ENDFORM.
*
*&---------------------------------------------------------------------*
*& Form BDC_DYNPRO
*&---------------------------------------------------------------------*
* Data populated into i_bdcdata table for program
*----------------------------------------------------------------------*
FORM BDC_DYNPRO USING PROGRAM DYNPRO.
CLEAR WA_BDCDATA.
WA_BDCDATA-PROGRAM = PROGRAM.
WA_BDCDATA-DYNPRO = DYNPRO.
WA_BDCDATA-DYNBEGIN = C_TRUE.
APPEND WA_BDCDATA TO I_BDCDATA.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form BDC_FIELD
*&---------------------------------------------------------------------*
* Data populated into i_bdcdata table for fields
*----------------------------------------------------------------------*
FORM BDC_FIELD USING FNAM FVAL.
CLEAR WA_BDCDATA.
WA_BDCDATA-FNAM = FNAM.
WA_BDCDATA-FVAL = FVAL.
APPEND WA_BDCDATA TO I_BDCDATA.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form convert_date
*&---------------------------------------------------------------------*
* Converting the data from the file format to mm/dd/yyyy format
*----------------------------------------------------------------------*
* <--P_wa_record_kdatb Source Date * <--p_l_conv_date Target Date *----------------------------------------------------------------------* FORM CONVERT_DATE USING L_DATE L_TAR_DATE. CONCATENATE L_DATE+0(2) '/' L_DATE+3(2) '/' L_DATE+6(4) INTO L_TAR_DATE. ENDFORM. " convert_date *&---------------------------------------------------------------------* *& Form validate_flatfile_data *&---------------------------------------------------------------------* * Validating the input file *----------------------------------------------------------------------* FORM VALIDATE_FLATFILE_DATA. DATA: L_TODAY LIKE SY-DATUM, L_STARTDATE_C LIKE SY-DATUM, L_ENDDATE_C LIKE SY-DATUM, L_ENDDATE_C1 LIKE SY-DATUM, L_STARTDATE_C1 LIKE SY-DATUM, L_STARTDATE(8), L_ENDDATE(8).* Fetch indicator for all records on the material, plant & storage
* location combination.
IF NOT I_RECORD[] IS INITIAL.
REFRESH I_LOEKZ.
SELECT EMATN " Material Number
WERKS " Plant
LGORT " Storage Location
BSTYP " Purchasing Document Category
LOEKZ " Deletion indicator
INTO TABLE I_LOEKZ
FROM EKPO
FOR ALL ENTRIES IN I_RECORD
WHERE EMATN = I_RECORD-EMATN
AND WERKS = I_RECORD-WERKS
AND LGORT = I_RECORD-LGORT
AND BSTYP = C_BSTYP
AND LOEKZ = C_LOEKZ_MARKED.
IF SY-SUBRC EQ 0.
SORT I_LOEKZ BY EMATN WERKS LGORT BSTYP LOEKZ.
ENDIF.* Fetching Plants for all entries in the selection screen
REFRESH I_T001W.
SELECT WERKS "Plant
INTO TABLE I_T001W
FROM T001W
WHERE WERKS IN S_WERKS.
IF SY-SUBRC EQ 0.
SORT I_T001W BY WERKS.
ENDIF.* Fetching materials for the plants listed in flat file
REFRESH I_MATNR.
SELECT MATNR " Material Number
INTO TABLE I_MATNR
FROM MARC
FOR ALL ENTRIES IN I_RECORD
WHERE WERKS = I_RECORD-WERKS.
IF SY-SUBRC EQ 0.
SORT I_MATNR BY MATNR.
ENDIF.* Fetching Company Codes for repective Purchase Organizations
REFRESH I_T024E.
SELECT EKORG " Purchase Organization
BUKRS " Company Code
INTO TABLE I_T024E
FROM T024E
WHERE EKORG IN S_EKORG.
IF SY-SUBRC EQ 0.
SORT I_T024E BY EKORG.
ENDIF.* Fetching SAP Data using Legacy Data.
REFRESH I_ZMVXREF.
SELECT D_ALTKN
D_BUKRS
M_ALTKN
INTO TABLE I_ZMVXREF
FROM ZMVXREF
FOR ALL ENTRIES IN I_RECORD
WHERE D_ALTKN = I_RECORD-LIFNR.
IF SY-SUBRC EQ 0.
SORT I_ZMVXREF BY D_ALTKN D_BUKRS.
ENDIF.* Fetching Vendors from LFA1
IF NOT I_ZMVXREF[] IS INITIAL.
REFRESH I_LFA1.
SELECT LIFNR
INTO TABLE I_LFA1
FROM LFA1
FOR ALL ENTRIES IN I_ZMVXREF
WHERE LIFNR = I_ZMVXREF-M_ALTKN.
IF SY-SUBRC EQ 0.
SORT I_LFA1 BY LIFNR.
ENDIF.
ENDIF.* Start Validating the flat file
CLEAR: WA_RECORD,
WA_T024E,
WA_ZMVXREF,
WA_LFA1,
WA_LOEKZ,
WA_MATNR. LOOP AT I_RECORD INTO WA_RECORD.
L_TODAY = SY-DATUM.
L_STARTDATE = WA_RECORD-KDATB.
L_ENDDATE = WA_RECORD-KDATE. IF WA_RECORD-DEL_FLAG IS INITIAL.
READ TABLE I_T001W INTO WA_T001W
WITH KEY WERKS = WA_RECORD-WERKS
BINARY SEARCH.
IF SY-SUBRC EQ 0.
* Cross-Reference check performed for the given Vendors
READ TABLE I_T024E INTO WA_T024E
WITH KEY EKORG = WA_RECORD-EKORG
BINARY SEARCH.
IF SY-SUBRC NE 0.
V_CROSS_REFERENCE_ERROR = C_VEN_ERR3.
ELSE.
READ TABLE I_ZMVXREF INTO WA_ZMVXREF
WITH KEY D_ALTKN = WA_RECORD-LIFNR
D_BUKRS = P_BUKRS
BINARY SEARCH.
IF SY-SUBRC EQ 0.
READ TABLE I_LFA1 INTO WA_LFA1
WITH KEY LIFNR = WA_ZMVXREF-M_ALTKN
BINARY SEARCH.
IF SY-SUBRC EQ 0.
V_CROSS_REFERENCE_ERROR = C_VEN_SUCS.
ELSE.
V_CROSS_REFERENCE_ERROR = C_VEN_ERR2.
ENDIF.
ELSE.
V_CROSS_REFERENCE_ERROR = C_VEN_ERR1.
ENDIF.
ENDIF.
* Legacy Vendor could not be mapped
IF V_CROSS_REFERENCE_ERROR EQ C_VEN_ERR1.
V_INPUTERROR_FLAG = C_INPUTERROR_FLAG_YES. "Inp.file err. occurd
WA_RECORD-DEL_FLAG = C_TRUE.
WA_RECORD-ERR_MSG = TEXT-007.
MODIFY I_RECORD FROM WA_RECORD
TRANSPORTING DEL_FLAG
ERR_MSG
WHERE LIFNR = WA_RECORD-LIFNR.
* Legacy Vendor is mapped but the obtained SAP vendor doesn't exist.
ELSEIF V_CROSS_REFERENCE_ERROR EQ C_VEN_ERR2.
* Inp.file err. occurd
V_INPUTERROR_FLAG = C_INPUTERROR_FLAG_YES.
WA_RECORD-DEL_FLAG = C_TRUE.
WA_RECORD-ERR_MSG = TEXT-008.
MODIFY I_RECORD FROM WA_RECORD
TRANSPORTING DEL_FLAG
ERR_MSG
WHERE LIFNR = WA_RECORD-LIFNR.
* Purchase Organization doesn't exist in T024E.
ELSEIF V_CROSS_REFERENCE_ERROR EQ C_VEN_ERR3.
* Inp.file err. occurd
V_INPUTERROR_FLAG = C_INPUTERROR_FLAG_YES.
WA_RECORD-DEL_FLAG = C_TRUE.
WA_RECORD-ERR_MSG = TEXT-014.
MODIFY I_RECORD FROM WA_RECORD
TRANSPORTING DEL_FLAG
ERR_MSG
WHERE EKORG = WA_RECORD-EKORG.
* Vendor is mapped and validated successfully
ELSEIF V_CROSS_REFERENCE_ERROR EQ C_VEN_SUCS.* Checking for the deletion indicator for that record
CONCATENATE WA_RECORD-KDATB+6(4)
WA_RECORD-KDATB+3(2)
WA_RECORD-KDATB+0(2)
INTO
L_STARTDATE.
MOVE L_STARTDATE TO L_STARTDATE_C. CONCATENATE WA_RECORD-KDATB+6(4)
WA_RECORD-KDATB+0(2)
WA_RECORD-KDATB+3(2)
INTO
L_STARTDATE_C1. CONCATENATE WA_RECORD-KDATE+6(4)
WA_RECORD-KDATE+3(2)
WA_RECORD-KDATE+0(2)
INTO
L_ENDDATE.
MOVE L_ENDDATE TO L_ENDDATE_C. CONCATENATE WA_RECORD-KDATE+6(4)
WA_RECORD-KDATE+0(2)
WA_RECORD-KDATE+3(2)
INTO
L_ENDDATE_C1. READ TABLE I_LOEKZ INTO WA_LOEKZ WITH KEY
EMATN = WA_RECORD-EMATN
WERKS = WA_RECORD-WERKS
LGORT = WA_RECORD-LGORT
BINARY SEARCH.
IF SY-SUBRC EQ 0.
* Inpfle err.occured
V_INPUTERROR_FLAG = C_INPUTERROR_FLAG_YES.
WA_RECORD-ERR_MSG = TEXT-003.
WA_RECORD-DEL_FLAG = C_TRUE. "marking the record
MODIFY I_RECORD FROM WA_RECORD
TRANSPORTING DEL_FLAG
ERR_MSG
WHERE LIFNR = WA_RECORD-LIFNR
AND EVART = WA_RECORD-EVART
AND EKORG = WA_RECORD-EKORG
AND EKGRP = WA_RECORD-EKGRP
AND WERKS = WA_RECORD-WERKS
AND LGORT = WA_RECORD-LGORT
AND KDATB = WA_RECORD-KDATB
AND KDATE = WA_RECORD-KDATE
AND ZTERM = WA_RECORD-ZTERM
AND KTWRT = WA_RECORD-KTWRT
AND EPSTP = WA_RECORD-EPSTP
AND EMATN = WA_RECORD-EMATN.* Validating the Purchasing Organization for Blank/Null
ELSEIF WA_RECORD-EKORG IS INITIAL.
* Inpfle err.occured
V_INPUTERROR_FLAG = C_INPUTERROR_FLAG_YES.
WA_RECORD-ERR_MSG = TEXT-010.
WA_RECORD-DEL_FLAG = C_TRUE.
MODIFY I_RECORD FROM WA_RECORD
TRANSPORTING DEL_FLAG
ERR_MSG
WHERE LIFNR = WA_RECORD-LIFNR
AND EVART = WA_RECORD-EVART
AND EKORG = WA_RECORD-EKORG
AND EKGRP = WA_RECORD-EKGRP
AND WERKS = WA_RECORD-WERKS
AND LGORT = WA_RECORD-LGORT
AND KDATB = WA_RECORD-KDATB
AND KDATE = WA_RECORD-KDATE
AND ZTERM = WA_RECORD-ZTERM
AND KTWRT = WA_RECORD-KTWRT
AND EPSTP = WA_RECORD-EPSTP
AND EMATN = WA_RECORD-EMATN.* Validating the Plant for Blank/Null
ELSEIF WA_RECORD-WERKS IS INITIAL.
* Inpfle err.occured
V_INPUTERROR_FLAG = C_INPUTERROR_FLAG_YES.
WA_RECORD-ERR_MSG = TEXT-039.
WA_RECORD-DEL_FLAG = C_TRUE.
MODIFY I_RECORD FROM WA_RECORD
TRANSPORTING DEL_FLAG
ERR_MSG
WHERE LIFNR = WA_RECORD-LIFNR
AND EVART = WA_RECORD-EVART
AND EKORG = WA_RECORD-EKORG
AND EKGRP = WA_RECORD-EKGRP
AND WERKS = WA_RECORD-WERKS
AND LGORT = WA_RECORD-LGORT
AND KDATB = WA_RECORD-KDATB
AND KDATE = WA_RECORD-KDATE
AND ZTERM = WA_RECORD-ZTERM
AND KTWRT = WA_RECORD-KTWRT
AND EPSTP = WA_RECORD-EPSTP
AND EMATN = WA_RECORD-EMATN.* Validating the Contract Validity Start Date
ELSEIF L_STARTDATE_C1 GT L_TODAY. "#EC PORTABLE
* Inpfle err.occured
V_INPUTERROR_FLAG = C_INPUTERROR_FLAG_YES.
WA_RECORD-ERR_MSG = TEXT-004.
WA_RECORD-DEL_FLAG = C_TRUE. "marking the record
MODIFY I_RECORD FROM WA_RECORD
TRANSPORTING DEL_FLAG
ERR_MSG
WHERE LIFNR = WA_RECORD-LIFNR
AND EVART = WA_RECORD-EVART
AND EKORG = WA_RECORD-EKORG
AND EKGRP = WA_RECORD-EKGRP
AND WERKS = WA_RECORD-WERKS
AND LGORT = WA_RECORD-LGORT
AND KDATB = WA_RECORD-KDATB.
* Validating the Contract Validity End Date
ELSEIF L_ENDDATE_C1 LE L_TODAY. "#EC PORTABLE
* Inpfle err.ocrd
V_INPUTERROR_FLAG = C_INPUTERROR_FLAG_YES.
WA_RECORD-ERR_MSG = TEXT-005.
WA_RECORD-DEL_FLAG = C_TRUE. "marking the record
MODIFY I_RECORD FROM WA_RECORD
TRANSPORTING DEL_FLAG
ERR_MSG
WHERE LIFNR = WA_RECORD-LIFNR
AND EVART = WA_RECORD-EVART
AND EKORG = WA_RECORD-EKORG
AND EKGRP = WA_RECORD-EKGRP
AND WERKS = WA_RECORD-WERKS
AND LGORT = WA_RECORD-LGORT
AND KDATB = WA_RECORD-KDATB
AND KDATE = WA_RECORD-KDATE.
* Checking for Material under the Plant for Agreement Type 'WK'
ELSEIF WA_RECORD-EVART = C_WK.
READ TABLE I_MATNR INTO WA_MATNR
WITH KEY MATNR = WA_RECORD-EMATN
BINARY SEARCH.
IF SY-SUBRC NE 0.
V_INPUTERROR_FLAG = C_INPUTERROR_FLAG_YES. "Inpfle err.ocrd
WA_RECORD-ERR_MSG = TEXT-006.
WA_RECORD-DEL_FLAG = C_TRUE. "marking the record
MODIFY I_RECORD FROM WA_RECORD
TRANSPORTING DEL_FLAG
ERR_MSG
WHERE LIFNR = WA_RECORD-LIFNR
AND EVART = WA_RECORD-EVART
AND EKORG = WA_RECORD-EKORG
AND EKGRP = WA_RECORD-EKGRP
AND WERKS = WA_RECORD-WERKS
AND LGORT = WA_RECORD-LGORT
AND KDATB = WA_RECORD-KDATB
AND KDATE = WA_RECORD-KDATE
AND ZTERM = WA_RECORD-ZTERM
AND KTWRT = WA_RECORD-KTWRT
AND EPSTP = WA_RECORD-EPSTP
AND EMATN = WA_RECORD-EMATN.
ENDIF.
ENDIF. " checking of deletion indicator
ENDIF. " checking for success of vendor cross reference
ELSE.
V_INPUTERROR_FLAG = C_INPUTERROR_FLAG_YES. "Inpfle err.ocrd
WA_RECORD-ERR_MSG = TEXT-041.
WA_RECORD-DEL_FLAG = C_TRUE. "marking the record
MODIFY I_RECORD FROM WA_RECORD
TRANSPORTING DEL_FLAG
ERR_MSG
WHERE WERKS = WA_RECORD-WERKS.
ENDIF. " Plant checked to selection screen
ENDIF. " the records for which del_flag is initial
CLEAR: WA_RECORD,
WA_T024E,
WA_ZMVXREF,
WA_LFA1,
WA_LOEKZ,
WA_MATNR,
L_TODAY,
L_STARTDATE_C,
L_ENDDATE_C,
L_STARTDATE,
L_ENDDATE.
ENDLOOP. LOOP AT I_RECORD INTO WA_RECORD.
IF WA_RECORD-DEL_FLAG = C_TRUE.
APPEND WA_RECORD TO I_ERR_REC.
CLEAR WA_RECORD.
ENDIF.
ENDLOOP. ELSE.
MESSAGE E000 WITH TEXT-013. " no records in the flat file
STOP.
ENDIF.
ENDFORM. " validate_flatfile_data
*&---------------------------------------------------------------------*
*& Form DOWNLOAD_ERROR_FILE
*&---------------------------------------------------------------------*
* Downloads all records along with the records encountering the
* input file validation error
*----------------------------------------------------------------------*
FORM DOWNLOAD_ERROR_FILE. DATA L_ISDIR TYPE C. IF V_INPUTERROR_FLAG = C_INPUTERROR_FLAG_YES.
V_FILENAME = P_IPERR.* Check for the existence of the file.
IF RB_LOCAL EQ C_TRUE.
CALL FUNCTION 'TMP_GUI_GET_FILE_EXIST'
EXPORTING
FNAME = P_IPERR
IMPORTING
ISDIR = L_ISDIR
EXCEPTIONS
FILEINFO_ERROR = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
IF L_ISDIR EQ C_TRUE.
MESSAGE I000 WITH TEXT-088.
STOP.
ENDIF.
ENDIF. IF RB_LOCAL EQ C_TRUE.
* Download the Input Error File.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
FILENAME = V_FILENAME
FILETYPE = 'ASC'
WRITE_FIELD_SEPARATOR = '#'
TABLES
DATA_TAB = I_ERR_REC
EXCEPTIONS
FILE_WRITE_ERROR = 1
NO_BATCH = 2
GUI_REFUSE_FILETRANSFER = 3
INVALID_TYPE = 4
NO_AUTHORITY = 5
UNKNOWN_ERROR = 6
HEADER_NOT_ALLOWED = 7
SEPARATOR_NOT_ALLOWED = 8
FILESIZE_NOT_ALLOWED = 9
HEADER_TOO_LONG = 10
DP_ERROR_CREATE = 11
DP_ERROR_SEND = 12
DP_ERROR_WRITE = 13
UNKNOWN_DP_ERROR = 14
ACCESS_DENIED = 15
DP_OUT_OF_MEMORY = 16
DISK_FULL = 17
DP_TIMEOUT = 18
FILE_NOT_FOUND = 19
DATAPROVIDER_EXCEPTION = 20
CONTROL_FLUSH_ERROR = 21
OTHERS = 22.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ELSEIF RB_SERVE EQ C_TRUE.
OPEN DATASET P_IPERR1 FOR OUTPUT IN TEXT MODE.
CHECK SY-SUBRC EQ 0.
CLEAR WA_ERR_REC.
LOOP AT I_ERR_REC INTO WA_ERR_REC.
IF WA_ERR_REC-DEL_FLAG = C_TRUE.
TRANSFER WA_ERR_REC TO P_IPERR1.
ENDIF.
CLEAR WA_ERR_REC.
ENDLOOP.
CLOSE DATASET P_IPERR1.
ENDIF.
ENDIF.
ENDFORM. " DOWNLOAD_ERROR_FILE
*&---------------------------------------------------------------------*
*& Form BUILD_BDC_DATA
*&---------------------------------------------------------------------*
* Populates BDC for all the fields neccessary for Open Contract Creation
*----------------------------------------------------------------------*
FORM BUILD_BDC_DATA.
DATA: L_MAT_INDEX TYPE I,
L_CON_INDEX TYPE I,
L_SCA_INDEX TYPE I. CLEAR WA_BDCDATA.
REFRESH: I_BDCDATA,
I_MESSTAB.* Processing the bdc
CLEAR: WA_RECORD,
WA_RECORDPREV,
VEN_FLAG,
MAT_FLAG. LOOP AT I_RECORD INTO WA_RECORD.
* Checks for the del_flag of the record.
IF WA_RECORD-DEL_FLAG EQ C_TRUE
OR WA_RECORD-DEL_FLAG EQ C_STRUE.
CLEAR WA_RECORD.
CONTINUE.
ELSE. IF WA_RECORDPREV-LIFNR NE WA_RECORD-LIFNR
OR WA_RECORDPREV-EVART NE WA_RECORD-EVART
OR WA_RECORDPREV-EKORG NE WA_RECORD-EKORG
OR WA_RECORDPREV-EKGRP NE WA_RECORD-EKGRP
OR WA_RECORDPREV-WERKS NE WA_RECORD-WERKS
OR WA_RECORDPREV-LGORT NE WA_RECORD-LGORT
OR WA_RECORDPREV-KDATB NE WA_RECORD-KDATB
OR WA_RECORDPREV-KDATE NE WA_RECORD-KDATE
OR WA_RECORDPREV-ZTERM NE WA_RECORD-ZTERM
OR WA_RECORDPREV-KTWRT NE WA_RECORD-KTWRT. PERFORM BDC_DYNPRO USING 'SAPMM06E' '0200'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'RM06E-LGORT'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'/00'.
* Cross-Reference check performed for the given Vendors
CLEAR WA_T024E.
READ TABLE I_T024E INTO WA_T024E
WITH KEY EKORG = WA_RECORD-EKORG
BINARY SEARCH.
IF SY-SUBRC EQ 0.
CLEAR WA_ZMVXREF.
READ TABLE I_ZMVXREF INTO WA_ZMVXREF
WITH KEY D_ALTKN = WA_RECORD-LIFNR
D_BUKRS = P_BUKRS
BINARY SEARCH.
IF SY-SUBRC EQ 0.
PERFORM BDC_FIELD USING 'EKKO-LIFNR'
WA_ZMVXREF-M_ALTKN.
ENDIF.
CLEAR WA_ZMVXREF.
ENDIF.
CLEAR WA_T024E.
PERFORM BDC_FIELD USING 'RM06E-EVART'
WA_RECORD-EVART.
PERFORM BDC_FIELD USING 'EKKO-EKORG'
WA_RECORD-EKORG.
PERFORM BDC_FIELD USING 'EKKO-EKGRP'
WA_RECORD-EKGRP.
PERFORM BDC_FIELD USING 'RM06E-WERKS'
WA_RECORD-WERKS.
PERFORM BDC_FIELD USING 'RM06E-LGORT'
WA_RECORD-LGORT.
PERFORM BDC_DYNPRO USING 'SAPMM06E' '0201'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'EKKO-KTWRT'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=AB'.
PERFORM CONVERT_DATE USING WA_RECORD-KDATB V_CONV_DATE.
PERFORM BDC_FIELD USING 'EKKO-KDATB'
V_CONV_DATE.
PERFORM CONVERT_DATE USING WA_RECORD-KDATE V_CONV_DATE.
PERFORM BDC_FIELD USING 'EKKO-KDATE'
V_CONV_DATE.
PERFORM BDC_FIELD USING 'EKKO-ZTERM'
WA_RECORD-ZTERM.
PERFORM BDC_FIELD USING 'EKKO-KTWRT'
WA_RECORD-KTWRT.
VEN_FLAG = 1.
L_MAT_INDEX = 1. "index for table-control of material
ENDIF.
* "first check for itemline
IF WA_RECORDPREV-EPSTP NE WA_RECORD-EPSTP
OR WA_RECORDPREV-EMATN NE WA_RECORD-EMATN
OR WA_RECORDPREV-KTMNG NE WA_RECORD-KTMNG
OR WA_RECORDPREV-NETPR NE WA_RECORD-NETPR
OR WA_RECORDPREV-PEINH NE WA_RECORD-PEINH
OR WA_RECORDPREV-BPRME NE WA_RECORD-BPRME
OR WA_RECORDPREV-IDNLF NE WA_RECORD-IDNLF
OR WA_RECORDPREV-WEBRE NE WA_RECORD-WEBRE
OR WA_RECORDPREV-MEPRF NE WA_RECORD-MEPRF
OR WA_RECORDPREV-LTEX1 NE WA_RECORD-LTEX1
OR VEN_FLAG EQ 1.
V_IND = L_MAT_INDEX.
IF V_IND GT 1.
V_IND = 2.
ENDIF. CONCATENATE 'RM06E-EVRTP(' V_IND ')' INTO V_EVRTP1.
CONCATENATE 'RM06E-EPSTP(' V_IND ')' INTO V_EPSTP1.
CONCATENATE 'EKPO-EMATN(' V_IND ')' INTO V_EMATN1.
CONCATENATE 'EKPO-KTMNG(' V_IND ')' INTO V_KTMNG1.
CONCATENATE 'EKPO-NETPR(' V_IND ')' INTO V_NETPR1.
CONCATENATE 'EKPO-PEINH(' V_IND ')' INTO V_PEINH1.
CONCATENATE 'EKPO-BPRME(' V_IND ')' INTO V_BPRME1.
CONCATENATE 'RM06E-TCSELFLAG(' V_IND ')' INTO V_TCSELFLAG1. PERFORM BDC_DYNPRO USING 'SAPMM06E' '0220'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=NP'.
PERFORM BDC_DYNPRO USING 'SAPMM06E' '0220'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
V_EVRTP1.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=DETA'.
PERFORM BDC_FIELD USING V_EPSTP1
WA_RECORD-EPSTP.
PERFORM BDC_FIELD USING V_EMATN1
WA_RECORD-EMATN.
PERFORM BDC_FIELD USING V_KTMNG1
WA_RECORD-KTMNG.
PERFORM BDC_FIELD USING V_NETPR1
WA_RECORD-NETPR.
PERFORM BDC_FIELD USING V_PEINH1
WA_RECORD-PEINH.
PERFORM BDC_FIELD USING V_BPRME1
WA_RECORD-BPRME.
PERFORM BDC_DYNPRO USING 'SAPMM06E' '0211'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'EKPO-WEBRE'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=DETZ'.
PERFORM BDC_FIELD USING 'EKPO-IDNLF'
WA_RECORD-IDNLF.
TRANSLATE WA_RECORD-EVART TO UPPER CASE.
IF WA_RECORD-EVART EQ C_WK.
PERFORM BDC_FIELD USING 'EKPO-WEBRE' 'X'.
ENDIF.
PERFORM BDC_DYNPRO USING 'SAPMM06E' '0212'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'EKPO-MEPRF'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=TXP'.
PERFORM BDC_FIELD USING 'EKPO-MEPRF'
WA_RECORD-MEPRF. IF NOT WA_RECORD-LTEX1 IS INITIAL. "NE space.
PERFORM BDC_DYNPRO USING 'SAPMM06E' '0106'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'RM06E-SELKZ(02)'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'/00'.
PERFORM BDC_FIELD USING 'RM06E-LTEX1(02)'
WA_RECORD-LTEX1.
PERFORM BDC_FIELD USING 'RM06E-SELKZ(02)' 'X'. PERFORM BDC_DYNPRO USING 'SAPMM06E' '0106'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'RM06E-LTEX1(01)'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=BACK'.
ELSE.
PERFORM BDC_DYNPRO USING 'SAPMM06E' '0212'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=BACK'.
ENDIF.
PERFORM BDC_DYNPRO USING 'SAPMM06E' '0220'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
V_EVRTP1.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=KO'.
PERFORM BDC_FIELD USING V_TCSELFLAG1 'X'. MAT_FLAG = 1.
L_CON_INDEX = 1.
CLEAR VEN_FLAG.
L_MAT_INDEX = L_MAT_INDEX + 1. ENDIF. IF WA_RECORDPREV-DATAB NE WA_RECORD-DATAB
OR WA_RECORDPREV-DATBI NE WA_RECORD-DATBI
OR WA_RECORDPREV-KSCHL NE WA_RECORD-KSCHL
OR WA_RECORDPREV-KBETR NE WA_RECORD-KBETR
OR WA_RECORDPREV-KONWA NE WA_RECORD-KONWA
OR WA_RECORDPREV-KPEIN NE WA_RECORD-KPEIN
OR WA_RECORDPREV-KMEIN NE WA_RECORD-KMEIN
OR MAT_FLAG = 1. V_IND2 = L_CON_INDEX.
CONCATENATE 'KONP-KSCHL(' V_IND2 ')' INTO V_KSCHL2.
CONCATENATE 'KONP-KBETR(' V_IND2 ')' INTO V_KBETR2.
CONCATENATE 'KONP-KONWA(' V_IND2 ')' INTO V_KONWA2.
CONCATENATE 'KONP-KPEIN(' V_IND2 ')' INTO V_KPEIN2.
CONCATENATE 'KONP-KMEIN(' V_IND2 ')' INTO V_KMEIN2.
CONCATENATE 'RV130-SELKZ(' V_IND2 ')' INTO V_SELKZ2. PERFORM BDC_DYNPRO USING 'SAPMV13A' '0201'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
V_KSCHL2.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=PSTF'.
PERFORM CONVERT_DATE USING WA_RECORD-DATAB V_CONV_DATE.
PERFORM BDC_FIELD USING 'RV13A-DATAB'
V_CONV_DATE.
PERFORM CONVERT_DATE USING WA_RECORD-DATBI V_CONV_DATE.
PERFORM BDC_FIELD USING 'RV13A-DATBI'
V_CONV_DATE. IF L_CON_INDEX > 1. "added on 9th sep
PERFORM BDC_FIELD USING V_KSCHL2
WA_RECORD-KSCHL.
ENDIF. "added on 9th sep
PERFORM BDC_FIELD USING V_KBETR2
WA_RECORD-KBETR.
PERFORM BDC_FIELD USING V_KONWA2
WA_RECORD-KONWA.
PERFORM BDC_FIELD USING V_KPEIN2
WA_RECORD-KPEIN.
PERFORM BDC_FIELD USING V_KMEIN2
WA_RECORD-KMEIN.
PERFORM BDC_FIELD USING V_SELKZ2
'X'.
CLEAR MAT_FLAG.
L_SCA_INDEX = 1.
L_CON_INDEX = L_CON_INDEX + 1.
ENDIF. V_IND3 = L_SCA_INDEX.
IF V_IND3 GT 1.
V_IND3 = 2.
ENDIF. CONCATENATE 'KONM-KSTBM(' V_IND3 ')' INTO V_KSTBM3.
CONCATENATE 'KONM-KBETR(' V_IND3 ')' INTO V_KBETR3. PERFORM BDC_DYNPRO USING 'SAPMV13A' '0303'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=NEWP'.
PERFORM BDC_DYNPRO USING 'SAPMV13A' '0303'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'/00'.
IF WA_RECORD-KBETR IS INITIAL.
PERFORM BDC_FIELD USING V_KSTBM3
WA_RECORD-KSTBM.
PERFORM BDC_FIELD USING V_KBETR3
WA_RECORD-KBETR_01.
ENDIF. L_SCA_INDEX = L_SCA_INDEX + 1.
ENDIF. " check the c_true, c_strue. AT END OF KMEIN.
PERFORM BDC_DYNPRO USING 'SAPMV13A' '0303'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
V_KSTBM3.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=BACK'.
ENDAT. AT END OF LTEX1.
PERFORM BDC_DYNPRO USING 'SAPMV13A' '0201'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'RV13A-DATAB'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=BACK'.
ENDAT. AT END OF KTWRT.
PERFORM BDC_DYNPRO USING 'SAPMM06E' '0220'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
V_EVRTP1.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=BU'.
PERFORM BDC_DYNPRO USING 'SAPLSPO1' '0300'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=YES'. CALL TRANSACTION C_TCODE USING I_BDCDATA MODE P_MODE
MESSAGES INTO I_MESSTAB. IF SY-SUBRC <> 0.
PERFORM GET_MESSAGE USING C_MSGTYP_E
CHANGING V_ERRMSG.
WA_RECORD-ERR_MSG = V_ERRMSG.
WA_RECORD-DEL_FLAG = C_STRUE.
* Since all the related line items are to be dealt such modify is used
MODIFY I_RECORD FROM WA_RECORD
TRANSPORTING DEL_FLAG
ERR_MSG
WHERE LIFNR = WA_RECORD-LIFNR
AND EVART = WA_RECORD-EVART
AND EKORG = WA_RECORD-EKORG
AND EKGRP = WA_RECORD-EKGRP
AND WERKS = WA_RECORD-WERKS
AND LGORT = WA_RECORD-LGORT
AND KDATB = WA_RECORD-KDATB
AND KDATE = WA_RECORD-KDATE
AND ZTERM = WA_RECORD-ZTERM
AND KTWRT = WA_RECORD-KTWRT.
CLEAR V_ERRMSG.
ELSEIF SY-SUBRC EQ 0.
PERFORM GET_MESSAGE USING C_MSGTYP_S
CHANGING V_ERRMSG.
WA_RECORD-ERR_MSG = V_ERRMSG.
WA_RECORD-DEL_FLAG = C_YTRUE.
* Since all the related line items are to be dealt such modify is used
MODIFY I_RECORD FROM WA_RECORD
TRANSPORTING DEL_FLAG
ERR_MSG
WHERE LIFNR = WA_RECORD-LIFNR
AND EVART = WA_RECORD-EVART
AND EKORG = WA_RECORD-EKORG
AND EKGRP = WA_RECORD-EKGRP
AND WERKS = WA_RECORD-WERKS
AND LGORT = WA_RECORD-LGORT
AND KDATB = WA_RECORD-KDATB
AND KDATE = WA_RECORD-KDATE
AND ZTERM = WA_RECORD-ZTERM
AND KTWRT = WA_RECORD-KTWRT.
CLEAR V_ERRMSG.
ENDIF. CLEAR WA_BDCDATA.
REFRESH: I_BDCDATA,
I_MESSTAB.
ENDAT.
MOVE WA_RECORD TO WA_RECORDPREV.
CLEAR WA_RECORD.
ENDLOOP. LOOP AT I_RECORD INTO WA_RECORD.
IF WA_RECORD-DEL_FLAG = C_STRUE.
APPEND WA_RECORD TO I_ERR_REC.
ENDIF.
CLEAR WA_RECORD.
ENDLOOP.
ENDFORM. " BUILD_BDC_DATA*&---------------------------------------------------------------------*
*& Form get_message
*&---------------------------------------------------------------------*
* Obtains message from the message table
*----------------------------------------------------------------------*
* <--GV_ERRMSG Error Message generated by SAP *----------------------------------------------------------------------* FORM GET_MESSAGE USING L_MSGTYP TYPE C CHANGING L_MSGTX LIKE V_ERRMSG. DATA: L_MSTRING(500) TYPE C, L_MESSAGES TYPE T100. CLEAR: WA_MESSTAB, L_MSTRING, L_MSGTX. LOOP AT I_MESSTAB INTO WA_MESSTAB WHERE MSGTYP = L_MSGTYP. SELECT SINGLE * FROM T100 INTO L_MESSAGES WHERE SPRSL = WA_MESSTAB-MSGSPRA AND ARBGB = WA_MESSTAB-MSGID AND MSGNR = WA_MESSTAB-MSGNR. IF SY-SUBRC = 0. L_MSTRING = L_MESSAGES-TEXT. IF L_MSTRING CS '&1'. CONDENSE WA_MESSTAB-MSGV1. CONDENSE WA_MESSTAB-MSGV2. CONDENSE WA_MESSTAB-MSGV3. CONDENSE WA_MESSTAB-MSGV4. REPLACE '&1' WITH WA_MESSTAB-MSGV1 INTO L_MSTRING. REPLACE '&2' WITH WA_MESSTAB-MSGV2 INTO L_MSTRING. REPLACE '&3' WITH WA_MESSTAB-MSGV3 INTO L_MSTRING. REPLACE '&4' WITH WA_MESSTAB-MSGV4 INTO L_MSTRING. ELSE. CONDENSE WA_MESSTAB-MSGV1. CONDENSE WA_MESSTAB-MSGV2. CONDENSE WA_MESSTAB-MSGV3. CONDENSE WA_MESSTAB-MSGV4. REPLACE '&' WITH WA_MESSTAB-MSGV1 INTO L_MSTRING. REPLACE '&' WITH WA_MESSTAB-MSGV2 INTO L_MSTRING. REPLACE '&' WITH WA_MESSTAB-MSGV3 INTO L_MSTRING. REPLACE '&' WITH WA_MESSTAB-MSGV4 INTO L_MSTRING. ENDIF. CONDENSE L_MSTRING. ENDIF. CONCATENATE L_MSGTX L_MSTRING INTO L_MSGTX SEPARATED BY SPACE. CLEAR WA_MESSTAB. ENDLOOP. * ENDFORM. " get_message *&---------------------------------------------------------------------* *& Form display_inperr_records *&---------------------------------------------------------------------* * Diplays the records with the input file validation errors in ALV
*----------------------------------------------------------------------*
FORM DISPLAY_INPERR_RECORDS. WRITE SY-DATUM TO V_DATE DD/MM/YYYY.
REFRESH I_ALV_EVENT.
CLEAR WA_ALV_EVENT. WA_LISTHEADER-TYP = 'H'.
WA_LISTHEADER-KEY = ''.
WA_LISTHEADER-INFO = TEXT-029.
APPEND WA_LISTHEADER TO I_LISTHEADER. WA_LISTHEADER-TYP = 'S'.
WA_LISTHEADER-KEY = TEXT-030.
WA_LISTHEADER-INFO = V_DATE.
APPEND WA_LISTHEADER TO I_LISTHEADER. WA_LISTHEADER-TYP = 'S'.
WA_LISTHEADER-KEY = TEXT-031.
WA_LISTHEADER-INFO = SY-UZEIT.
APPEND WA_LISTHEADER TO I_LISTHEADER. PERFORM BUILD_FC USING '1' 'LIFNR' 'I_ERR_REC' TEXT-020 '10'.
PERFORM BUILD_FC USING '2' 'EVART' 'I_ERR_REC' TEXT-021 '4'.
PERFORM BUILD_FC USING '3' 'EKORG' 'I_ERR_REC' TEXT-022 '4'.
PERFORM BUILD_FC USING '4' 'EKGRP' 'I_ERR_REC' TEXT-023 '3'.
PERFORM BUILD_FC USING '5' 'WERKS' 'I_ERR_REC' TEXT-024 '4'.
PERFORM BUILD_FC USING '6' 'LGORT' 'I_ERR_REC' TEXT-025 '4'.
PERFORM BUILD_FC USING '7' 'KDATB' 'I_ERR_REC' TEXT-042 '10'.
PERFORM BUILD_FC USING '8' 'KDATE' 'I_ERR_REC' TEXT-043 '10'.
PERFORM BUILD_FC USING '9' 'ZTERM' 'I_ERR_REC' TEXT-044 '4'.
PERFORM BUILD_FC USING '10' 'KTWRT' 'I_ERR_REC' TEXT-045 '20'.
PERFORM BUILD_FC USING '11' 'EPSTP' 'I_ERR_REC' TEXT-046 '1'.
PERFORM BUILD_FC USING '12' 'EMATN' 'I_ERR_REC' TEXT-026 '18'.
PERFORM BUILD_FC USING '13' 'KTMNG' 'I_ERR_REC' TEXT-047 '17'.
PERFORM BUILD_FC USING '14' 'NETPR' 'I_ERR_REC' TEXT-048 '14'.
PERFORM BUILD_FC USING '15' 'PEINH' 'I_ERR_REC' TEXT-049 '6'.
PERFORM BUILD_FC USING '16' 'BPRME' 'I_ERR_REC' TEXT-050 '3'.
PERFORM BUILD_FC USING '17' 'IDNLF' 'I_ERR_REC' TEXT-051 '35'.
PERFORM BUILD_FC USING '18' 'WEBRE' 'I_ERR_REC' TEXT-052 '1'.
PERFORM BUILD_FC USING '19' 'MEPRF' 'I_ERR_REC' TEXT-053 '1'.
PERFORM BUILD_FC USING '20' 'LTEX1' 'I_ERR_REC' TEXT-054 '40'.
PERFORM BUILD_FC USING '21' 'DATAB' 'I_ERR_REC' TEXT-055 '10'.
PERFORM BUILD_FC USING '22' 'DATBI' 'I_ERR_REC' TEXT-056 '10'.
PERFORM BUILD_FC USING '23' 'KSCHL' 'I_ERR_REC' TEXT-057 '4'.
PERFORM BUILD_FC USING '24' 'KBETR' 'I_ERR_REC' TEXT-058 '16'.
PERFORM BUILD_FC USING '25' 'KONWA' 'I_ERR_REC' TEXT-059 '5'.
PERFORM BUILD_FC USING '26' 'KPEIN' 'I_ERR_REC' TEXT-060 '5'.
PERFORM BUILD_FC USING '27' 'KMEIN' 'I_ERR_REC' TEXT-061 '3'.
PERFORM BUILD_FC USING '28' 'KSTBM' 'I_ERR_REC' TEXT-062 '19'.
PERFORM BUILD_FC USING '29' 'KBETR_01' 'I_ERR_REC' TEXT-063 '16'.
PERFORM BUILD_FC USING '30' 'DEL_FLAG' 'I_ERR_REC' TEXT-064 '1'.
PERFORM BUILD_FC USING '31' 'ERR_MSG' 'I_ERR_REC' TEXT-027 '100'. WA_LAYOUT-ZEBRA = 'X'.
WA_LAYOUT-COLWIDTH_OPTIMIZE = 'X'. PERFORM SORTBUILD USING I_SORT[]. V_REPID = SY-REPID. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = V_REPID
I_GRID_TITLE = TEXT-009
IT_FIELDCAT = I_FIELDCAT
IS_LAYOUT = WA_LAYOUT
I_DEFAULT = 'X'
I_SAVE = 'X'
IT_SORT = I_SORT
IT_EVENTS = I_ALV_EVENT
TABLES
T_OUTTAB = I_ERR_REC
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.ENDFORM. " display_inperr_records
*&---------------------------------------------------------------------*
*& Form display_processed_records
*&---------------------------------------------------------------------*
* Diplays the processed records with their status in ALV Grid
*----------------------------------------------------------------------*
FORM DISPLAY_PROCESSED_RECORDS. WRITE SY-DATUM TO V_DATE DD/MM/YYYY.
REFRESH I_ALV_EVENT.
CLEAR WA_ALV_EVENT. WA_LISTHEADER-TYP = 'H'.
WA_LISTHEADER-KEY = ''.
WA_LISTHEADER-INFO = TEXT-029.
APPEND WA_LISTHEADER TO I_LISTHEADER. WA_LISTHEADER-TYP = 'S'.
WA_LISTHEADER-KEY = TEXT-030.
WA_LISTHEADER-INFO = V_DATE.
APPEND WA_LISTHEADER TO I_LISTHEADER. WA_LISTHEADER-TYP = 'S'.
WA_LISTHEADER-KEY = TEXT-031.
WA_LISTHEADER-INFO = SY-UZEIT.
APPEND WA_LISTHEADER TO I_LISTHEADER. PERFORM BUILD_FC USING '1' 'LIFNR' 'I_RECORD' TEXT-020 '10'.
PERFORM BUILD_FC USING '2' 'EVART' 'I_RECORD' TEXT-021 '4'.
PERFORM BUILD_FC USING '3' 'EKORG' 'I_RECORD' TEXT-022 '4'.
PERFORM BUILD_FC USING '4' 'EKGRP' 'I_RECORD' TEXT-023 '3'.
PERFORM BUILD_FC USING '5' 'WERKS' 'I_RECORD' TEXT-024 '4'.
PERFORM BUILD_FC USING '6' 'LGORT' 'I_RECORD' TEXT-025 '4'.
PERFORM BUILD_FC USING '7' 'KDATB' 'I_RECORD' TEXT-042 '10'.
PERFORM BUILD_FC USING '8' 'KDATE' 'I_RECORD' TEXT-043 '10'.
PERFORM BUILD_FC USING '9' 'ZTERM' 'I_RECORD' TEXT-044 '4'.
PERFORM BUILD_FC USING '10' 'KTWRT' 'I_RECORD' TEXT-045 '20'.
PERFORM BUILD_FC USING '11' 'EPSTP' 'I_RECORD' TEXT-046 '1'.
PERFORM BUILD_FC USING '12' 'EMATN' 'I_RECORD' TEXT-026 '18'.
PERFORM BUILD_FC USING '13' 'KTMNG' 'I_RECORD' TEXT-047 '17'.
PERFORM BUILD_FC USING '14' 'NETPR' 'I_RECORD' TEXT-048 '14'.
PERFORM BUILD_FC USING '15' 'PEINH' 'I_RECORD' TEXT-049 '6'.
PERFORM BUILD_FC USING '16' 'BPRME' 'I_RECORD' TEXT-050 '3'.
PERFORM BUILD_FC USING '17' 'IDNLF' 'I_RECORD' TEXT-051 '35'.
PERFORM BUILD_FC USING '18' 'WEBRE' 'I_RECORD' TEXT-052 '1'.
PERFORM BUILD_FC USING '19' 'MEPRF' 'I_RECORD' TEXT-053 '1'.
PERFORM BUILD_FC USING '20' 'LTEX1' 'I_RECORD' TEXT-054 '40'.
PERFORM BUILD_FC USING '21' 'DATAB' 'I_RECORD' TEXT-055 '10'.
PERFORM BUILD_FC USING '22' 'DATBI' 'I_RECORD' TEXT-056 '10'.
PERFORM BUILD_FC USING '23' 'KSCHL' 'I_RECORD' TEXT-057 '4'.
PERFORM BUILD_FC USING '24' 'KBETR' 'I_RECORD' TEXT-058 '16'.
PERFORM BUILD_FC USING '25' 'KONWA' 'I_RECORD' TEXT-059 '5'.
PERFORM BUILD_FC USING '26' 'KPEIN' 'I_RECORD' TEXT-060 '5'.
PERFORM BUILD_FC USING '27' 'KMEIN' 'I_RECORD' TEXT-061 '3'.
PERFORM BUILD_FC USING '28' 'KSTBM' 'I_RECORD' TEXT-062 '19'.
PERFORM BUILD_FC USING '29' 'KBETR_01' 'I_RECORD' TEXT-063 '16'.
PERFORM BUILD_FC USING '30' 'DEL_FLAG' 'I_RECORD' TEXT-064 '1'.
PERFORM BUILD_FC USING '31' 'ERR_MSG' 'I_RECORD' TEXT-027 '100'. WA_LAYOUT-ZEBRA = 'X'.
WA_LAYOUT-COLWIDTH_OPTIMIZE = 'X'. PERFORM SORTBUILD USING I_SORT[]. V_REPID = SY-REPID. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = V_REPID
I_GRID_TITLE = TEXT-066
IT_FIELDCAT = I_FIELDCAT
IS_LAYOUT = WA_LAYOUT
I_DEFAULT = 'X'
I_SAVE = 'X'
IT_SORT = I_SORT
IT_EVENTS = I_ALV_EVENT
TABLES
T_OUTTAB = I_RECORD
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.ENDFORM. " display_processed_records
*&---------------------------------------------------------------------*
*& Form BUILD_FC
*&---------------------------------------------------------------------*
* Populating the Field Catalog for the ALV
*----------------------------------------------------------------------*
FORM BUILD_FC USING VALUE(L_COPOS)
VALUE(L_FNAME)
VALUE(L_TABNAME)
VALUE(L_TITLE)
VALUE(L_WIDTH). WA_FIELDCAT-COL_POS = L_COPOS.
WA_FIELDCAT-FIELDNAME = L_FNAME.
WA_FIELDCAT-TABNAME = L_TABNAME.
WA_FIELDCAT-REPTEXT_DDIC = L_TITLE.
WA_FIELDCAT-OUTPUTLEN = L_WIDTH. APPEND WA_FIELDCAT TO I_FIELDCAT.
ENDFORM. " BUILD_FC
*&---------------------------------------------------------------------*
*& Form SORTBUILD
*&---------------------------------------------------------------------*
* Sorting the fields in the ALV report
*----------------------------------------------------------------------*
FORM SORTBUILD USING I_SORT TYPE SLIS_T_SORTINFO_ALV. CLEAR WA_SORT.
WA_SORT-FIELDNAME = 'LIFNR'.
WA_SORT-SPOS = 1.
WA_SORT-UP = 'X'.
APPEND WA_SORT TO I_SORT. CLEAR WA_SORT.
WA_SORT-FIELDNAME = 'EVART'.
WA_SORT-SPOS = 2.
WA_SORT-UP = 'X'.
APPEND WA_SORT TO I_SORT. CLEAR WA_SORT.
WA_SORT-FIELDNAME = 'EKORG'.
WA_SORT-SPOS = 3.
WA_SORT-UP = 'X'.
APPEND WA_SORT TO I_SORT. CLEAR WA_SORT.
WA_SORT-FIELDNAME = 'EKGRP'.
WA_SORT-SPOS = 4.
WA_SORT-UP = 'X'.
APPEND WA_SORT TO I_SORT. CLEAR WA_SORT.
WA_SORT-FIELDNAME = 'WERKS'.
WA_SORT-SPOS = 5.
WA_SORT-UP = 'X'.
APPEND WA_SORT TO I_SORT. CLEAR WA_SORT.
WA_SORT-FIELDNAME = 'LGORT'.
WA_SORT-SPOS = 6.
WA_SORT-UP = 'X'.
APPEND WA_SORT TO I_SORT. CLEAR WA_SORT.
WA_SORT-FIELDNAME = 'EMATN'.
WA_SORT-SPOS = 7.
WA_SORT-UP = 'X'.
APPEND WA_SORT TO I_SORT.ENDFORM. " SORTBUILD */

Archives