05-29-2007 3:27 AM
Hi Experts,
Is it possible to run the BDC but in test run mode.
If possible please guide me how to do that.
Let say i'm doing BDC for VA01.
If i tick the test run, means no need to create the Sales Order Document just test run.
If i untick the test run, create the Sales Order document.
I'm using Call transcation method to doing the BDC
CALL TRANSACTION fu_tcode USING ft_bdcdata
MODE fu_mode
MESSAGES INTO ft_bdcmsg
UPDATE 'S'.
Best Regards,
Victor.
05-29-2007 3:37 AM
05-29-2007 3:37 AM
05-29-2007 3:45 AM
Hi Rich,
Thanks for your reply.
If can't using call transaction method. Is it another method in BDC instead of Call transcation that can doing the test run? without commit, and we have to commit manually?
Best Regards,
Victor.
05-29-2007 3:44 AM
It is not possible in BDC,so you can use one check box as test run.
when user click on this ,do not save it like do not use ok_code is SAVE.
05-29-2007 3:57 AM
Hi Sheshu,
I thought this way also, but wondering is there others option to doing this.
Or anyone know BAPI for Appraisal (HR) ?
Best Regards,
Victor.
05-29-2007 4:39 AM
Try this
BAPI_APPRAISAL_CHANGE Change appraisals
BAPI_APPRAISAL_CREATE Create appraisals
BAPI_APPRAISAL_DELETE Delete appraisals
BAPI_APPRAISAL_GETDETAIL Read appraisal
BAPI_APPRAISAL_GETLIST Display appraisals
BAPI_APPRAISAL_STATUS_CHANGE Change appraisal status
BAPI_APPRAISAL_MODEL_GETDETAIL Read appraisal model
BAPI_APPRAISAL_MODEL_GETLIST Display Appraisal Model
BAPI_APPRAISAL_SCALE_GETDETAIL Read proficiencies and texts for scale
Reward points to all useful answers.
Regards,
SaiRam
09-23-2008 11:36 AM
Hi Victor Wijaya,
Where you able to solve your issue?
I'm dealing with same problem, need to add appraisal to empoyees (like in PA30 infotype 0147).
Tried with HR_INFOTYPE_OPERATIONS, but with no results.
Could you help?! thanks.
05-29-2007 3:58 AM
Hi
You can try using BAPI's
You can try BAPI_SALESORDER_CREATEFROMDAT2 and mark the TESTRUN import parameter = 'X'.
Let me know, if you need further info
Regards
MD
05-29-2007 4:05 AM
Hi Madhan,
Sorry for the miss understanding to you.
I need the BAPI for HR appraisal (infotype 25), sales order case only my example to explain BDC test run case.
Best Regards,
Victor.
06-09-2008 7:49 AM
06-09-2008 7:58 AM
try this.
REPORT zcrdtdaupld
NO STANDARD PAGE HEADING LINE-SIZE 255.
************************************************************************
I N T E R N A L T A B L E *
************************************************************************
TYPES: BEGIN OF it_output,
bldat(10) TYPE c, "Document Date
blart TYPE bkpf-blart, "Document Type
bukrs TYPE bkpf-bukrs, "Company Code
budat(10) TYPE c, "Posting Date
monat TYPE bkpf-monat, "Period
waers TYPE bkpf-waers, "Currency
xblnr TYPE bkpf-xblnr, "Reference Field
docid TYPE fs006-docid, "Document ID
newbs TYPE rf05a-newbs, "Posting Key
newko TYPE rf05a-newko, "Account Code
newko(10) TYPE c, "Account,
wrbtr(16) TYPE c, "Amount in Document currency
zfbdt(10) TYPE c, "Baseline Date
newbs2 TYPE rf05a-newbs, "Account Key2
newko2 TYPE rf05a-newko, "Account code2
wrbtr2(16) TYPE c, "Amount2
END OF it_output.
DATA : BEGIN OF wa_error,
index TYPE c LENGTH 1,
text TYPE c LENGTH 100,
END OF wa_error.
DATA lt_output TYPE it_output OCCURS 0 WITH HEADER LINE.
DATA i_bdcdata TYPE bdcdata OCCURS 0 WITH HEADER LINE.
DATA it_messtab LIKE TABLE OF bdcmsgcoll.
DATA wa_messtab LIKE LINE OF it_messtab.
DATA it_error LIKE TABLE OF wa_error.
************************************************************************
D A T A *
************************************************************************
DATA: message TYPE string.
DATA: v_index TYPE i.
DATA: v_text(100) TYPE c.
DATA: c_x TYPE char01 VALUE 'X',
c_n(01) TYPE c.
TYPES: BEGIN OF t_proc_tab,
xblnr LIKE bkpf-xblnr, "Reference number
bldat(10) TYPE c, "Document date
blart LIKE bkpf-blart, "Document type
bukrs LIKE bkpf-bukrs, "Company code
budat(10) TYPE c, "Posting date
monat LIKE bkpf-monat, "Period
waers LIKE bkpf-waers, "Currency
docid TYPE fs006-docid, "Document ID
bktxt LIKE bkpf-bktxt, "Document header text
newbs LIKE rf05a-newbs, "Posting key
newko LIKE rf05a-newko, "Account
newko(10) TYPE c, "Account
wrbtr(12) TYPE c, "Amount
zfbdt(10) TYPE c, "Baseline Date
zuonr LIKE bseg-zuonr, "Assignment
xmwst LIKE bkpf-xmwst, "Calculate tax flag
mwskz LIKE bseg-mwskz, "Tax code
sgtxt LIKE bseg-sgtxt, "Text
kostl LIKE cobl-kostl, "Cost center
nwbs2 LIKE rf05a-newbs, "Posting key for next record
nwko2 LIKE lfb1-lifnr, "Account for next record
wrbtr2(16) TYPE c,
END OF t_proc_tab.
DATA: wa_input_file TYPE it_output.
Internal table for the processed records
*DATA: i_proc_tab TYPE STANDARD TABLE OF t_proc_tab,
wa_proc_tab TYPE t_proc_tab,
wa_bdc_tab TYPE t_proc_tab.
Structure for table T003
TYPES: BEGIN OF t_t003,
blart LIKE t003-blart, "Document type
END OF t_t003.
Structure for table T001
TYPES: BEGIN OF t_t001,
bukrs LIKE t001-bukrs, "Company code
END OF t_t001.
Structure for table TCURC
TYPES: BEGIN OF t_tcurc,
waers LIKE tcurc-waers, "Currency code
END OF t_tcurc.
Structure for table TBSL
TYPES: BEGIN OF t_tbsl,
bschl LIKE tbsl-bschl, "Posting key1
END OF t_tbsl.
Structure for table LFB1
TYPES: BEGIN OF t_lfb1,
lifnr LIKE lfb1-lifnr, "Account number
bukrs LIKE lfb1-bukrs, "Company code
END OF t_lfb1.
Structure for table KNB1
TYPES: BEGIN OF t_knb1,
kunnr LIKE lfb1-lifnr, "Cust Account number
bukrs LIKE knb1-bukrs, "Company code
END OF t_knb1.
Structure for table SKA1
TYPES: BEGIN OF t_ska1,
saknr LIKE ska1-saknr, "G/L Account number
END OF t_ska1.
Structure for table T007A
TYPES: BEGIN OF t_t007a,
mwskz LIKE t007a-mwskz, "Tax code
END OF t_t007a.
Structure for table CSKS
TYPES: BEGIN OF t_csks,
kostl LIKE csks-kostl, "Cost center
END OF t_csks.
Structure to hold the error records
TYPES: BEGIN OF t_error_file,
row LIKE alsmex_tabline-row,
col LIKE alsmex_tabline-col,
value LIKE alsmex_tabline-value,
mssg(100) TYPE c,
END OF t_error_file.
Structure to hold the BDC error records
TYPES: BEGIN OF t_bdc_error,
error_msg(100) TYPE c,
END OF t_bdc_error.
----
INTERNAL TABLE/STRUCTURE POOL DECLARATION *
----
In this section you can define internal table and sturcture. *
----
Internal table for the input file
*DATA: i_input_file TYPE STANDARD TABLE OF t_input_file,
wa_input_file TYPE t_input_file.
*
Internal table for T003
DATA: i_t003 TYPE STANDARD TABLE OF t_t003,
wa_t003 TYPE t_t003.
Internal table for T001
DATA: i_t001 TYPE STANDARD TABLE OF t_t001,
wa_t001 TYPE t_t001.
Internal table for TCURC
DATA: i_tcurc TYPE STANDARD TABLE OF t_tcurc,
wa_tcurc TYPE t_tcurc.
Internal table for TBSL
DATA: i_tbsl TYPE STANDARD TABLE OF t_tbsl,
i_tbsl_2 TYPE STANDARD TABLE OF t_tbsl,
wa_tbsl TYPE t_tbsl.
Internal table for LFB1
DATA: i_lfb1 TYPE STANDARD TABLE OF t_lfb1,
i_lfb1_2 TYPE STANDARD TABLE OF t_lfb1,
wa_lfb1 TYPE t_lfb1.
Internal table for KNB1.
DATA: i_knb1 TYPE STANDARD TABLE OF t_knb1,
i_knb1_2 TYPE STANDARD TABLE OF t_knb1,
wa_knb1 TYPE t_knb1.
Internal table for SKA1
DATA: i_ska1 TYPE STANDARD TABLE OF t_ska1,
i_ska1_2 TYPE STANDARD TABLE OF t_ska1,
wa_ska1 TYPE t_ska1.
Internal table for T007A
DATA: i_t007a TYPE STANDARD TABLE OF t_t007a,
wa_t007a TYPE t_t007a.
Internal table for CSKS
DATA: i_csks TYPE STANDARD TABLE OF t_csks,
wa_csks TYPE t_csks.
Internal table for the processed records
DATA: i_proc_tab TYPE STANDARD TABLE OF t_proc_tab,
wa_proc_tab TYPE t_proc_tab,
wa_bdc_tab TYPE t_proc_tab.
Internal table for the processed records
DATA: BEGIN OF i_bdc_tab OCCURS 0.
INCLUDE STRUCTURE wa_proc_tab.
DATA: END OF i_bdc_tab.
Internal table for the erroneous records
DATA: i_error_file TYPE STANDARD TABLE OF t_error_file,
wa_error_file TYPE t_error_file.
Internal table for the BDC error records
DATA: i_bdc_error TYPE STANDARD TABLE OF t_bdc_error,
wa_bdc_error TYPE t_bdc_error.
----
DATA/VARIABLE DECLARATION *
----
In this section you can define internal tables,variables and etc. *
----
DATA : v_xblnr_cnt TYPE i.
----
CONSTANTS DECLARATION *
----
Constants are named data objects that you create statically using *
a declarative statement. They allow you to store data under a *
particular name within the memory area of a program. *
The value of a constant cannot be changed during the execution of *
the program. *
----
CONSTANTS: c_asc TYPE char10 VALUE 'ASC',
c_x TYPE char01 VALUE 'X',
c_01(02) TYPE c VALUE '01',
c_02(02) TYPE c VALUE '02',
c_03(02) TYPE c VALUE '03',
c_04(02) TYPE c VALUE '04',
c_05(02) TYPE c VALUE '05',
c_06(02) TYPE c VALUE '06',
c_07(02) TYPE c VALUE '07',
c_08(02) TYPE c VALUE '08',
c_09(02) TYPE c VALUE '09',
c_10(02) TYPE c VALUE '10',
c_11(02) TYPE c VALUE '11',
c_12(02) TYPE c VALUE '12',
c_dymd(04) TYPE c VALUE 'DDMY',
c_a(01) TYPE c VALUE 'A',
c_n(01) TYPE c VALUE 'N',
c_f63(04) TYPE c VALUE 'F-63'.
************************************************************************
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 BEGIN OF BLOCK block0 WITH FRAME.
PARAMETERS : p_file LIKE rlgrap-filename OBLIGATORY.
SELECTION-SCREEN SKIP.
PARAMETERS:p_test RADIOBUTTON GROUP rec,
p_back RADIOBUTTON GROUP rec DEFAULT 'X',
p_onli RADIOBUTTON GROUP rec.
SELECTION-SCREEN END OF BLOCK block0.
************************************************************************
A T S E L E C T I O N - S C R E E N *
************************************************************************
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
CALL FUNCTION 'KD_GET_FILENAME_ON_F4'
EXPORTING
static = 'X'
mask = space
CHANGING
file_name = p_file.
************************************************************************
S T A R T - O F - S E L E C T I O N
*
************************************************************************
START-OF-SELECTION.
PERFORM upload USING p_file.
Validate the input file records
PERFORM f_validate_records.
IF NOT p_test EQ c_x.
PERFORM bdc.
ENDIF.
PERFORM f_audit_report. " for test mode option
&----
*& Form bdc
&----
text
----
FORM bdc.
IF p_onli = c_x.
c_n = 'A'.
ELSE.
c_n = 'N'.
ENDIF.
LOOP AT i_bdc_tab.
v_index = sy-tabix.
REFRESH i_bdcdata.
CLEAR i_bdcdata.
READ TABLE lt_output INDEX 1.
PERFORM bdc_dynpro USING 'SAPMF05A' '0100' c_x.
PERFORM bdc_field USING 'BDC_CURSOR' 'RF05A-NEWKO'.
PERFORM bdc_field USING 'BDC_OKCODE' '/00'.
PERFORM bdc_field USING 'BKPF-BLDAT' i_bdc_tab-bldat.
PERFORM bdc_field USING 'BKPF-BLART' i_bdc_tab-blart.
PERFORM bdc_field USING 'BKPF-BUKRS' i_bdc_tab-bukrs.
PERFORM bdc_field USING 'BKPF-BUDAT' i_bdc_tab-budat.
PERFORM bdc_field USING 'BKPF-MONAT' i_bdc_tab-monat.
PERFORM bdc_field USING 'BKPF-WAERS' i_bdc_tab-waers.
PERFORM bdc_field USING 'BKPF-XBLNR' i_bdc_tab-xblnr.
PERFORM bdc_field USING 'FS006-DOCID' i_bdc_tab-docid.
PERFORM bdc_field USING 'RF05A-NEWBS' i_bdc_tab-newbs.
PERFORM bdc_field USING 'RF05A-NEWKO' i_bdc_tab-newko.
PERFORM bdc_dynpro USING 'SAPMF05A' '0302' c_x.
PERFORM bdc_field USING 'BDC_CURSOR' 'RF05A-NEWKO'.
PERFORM bdc_field USING 'BDC_OKCODE' '/00'.
PERFORM bdc_field USING 'BSEG-WRBTR' i_bdc_tab-wrbtr.
PERFORM bdc_field USING 'BSEG-ZFBDT' i_bdc_tab-zfbdt.
PERFORM bdc_field USING 'RF05A-NEWBS' i_bdc_tab-nwbs2.
PERFORM bdc_field USING 'RF05A-NEWKO' i_bdc_tab-nwko2.
PERFORM bdc_dynpro USING 'SAPMF05A' '0301' c_x.
PERFORM bdc_field USING 'BDC_CURSOR' 'BSEG-WRBTR'.
PERFORM bdc_field USING 'BDC_OKCODE' '=BU'.
PERFORM bdc_field USING 'BSEG-WRBTR' i_bdc_tab-wrbtr2.
CALL TRANSACTION 'F-27' USING i_bdcdata
MODE c_n
UPDATE 'A'
MESSAGES INTO it_messtab.
PERFORM f_error_handling.
ENDLOOP.
ENDFORM. "bdc
----
FORM BDC_DYNPRO *
----
........ *
----
--> PROGRAM *
--> DYNPRO *
----
FORM bdc_dynpro USING program dynpro dynbegin.
i_bdcdata-program = program.
i_bdcdata-dynpro = dynpro.
i_bdcdata-dynbegin = dynbegin.
APPEND i_bdcdata.
CLEAR i_bdcdata.
ENDFORM. "BDC_DYNPRO
----
FORM *
----
........ *
----
FORM bdc_field USING fnam fval.
i_bdcdata-fnam = fnam.
i_bdcdata-fval = fval.
APPEND i_bdcdata.
CLEAR i_bdcdata.
ENDFORM. "BDC_FIELD
&----
*& Form upload
&----
text
----
--> p1 text
<-- p2 text
----
FORM upload USING p_filename.
DATA: p_file1 TYPE string.
p_file1 = p_file.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = p_file1
filetype = 'DAT'
TABLES
data_tab = lt_output.
ENDFORM. " upload
*----
FORM f_error_handling
*----
This subroutine populates the BDC table
*----
FORM f_error_handling .
LOOP AT it_messtab INTO wa_messtab.
CLEAR v_text.
CALL FUNCTION 'FORMAT_MESSAGE'
EXPORTING
id = wa_messtab-msgid
lang = 'EN'
no = wa_messtab-msgnr
v1 = wa_messtab-msgv1
v2 = wa_messtab-msgv2
v3 = wa_messtab-msgv3
v4 = wa_messtab-msgv4
IMPORTING
msg = v_text.
IF sy-subrc = 0.
CASE wa_messtab-msgtyp.
WHEN 'S'.
IF p_test NE c_x.
WRITE:/ v_text.
ENDIF.
CLEAR v_text.
SKIP 1.
WHEN 'E'.
wa_error-index = v_index. "record num
wa_error-text = v_text . "message text
APPEND wa_error TO it_error.
CLEAR wa_error.
ENDCASE.
ENDIF.
ENDLOOP.
REFRESH it_messtab.
CLEAR wa_messtab.
display error messages
IF p_test NE c_x.
IF NOT it_error[] IS INITIAL.
WRITE: /30 'ERROR RECORDS DETAILS'.
SKIP 1.
WRITE: /5 'RECORD NO', 15 sy-vline,
16 'ERROR MESSAGE'.
ULINE.
LOOP AT it_error INTO wa_error.
WRITE : /5 wa_error-index LEFT-JUSTIFIED,
15 sy-uline,
16 wa_error-text.
CLEAR wa_error.
ENDLOOP.
ENDIF.
ENDIF.
ENDFORM. " f_error_handling
************************************************************************
F O R M A L E N D - O F - P R O G R A M *
************************************************************************
&----
*& Form f_validate_records
&----
text
----
--> p1 text
<-- p2 text
----
FORM f_validate_records .
DATA: lw_tabix LIKE sy-tabix,
lw_rowno LIKE sy-tabix,
lw_xblnr LIKE bkpf-xblnr.
LOOP AT lt_output INTO wa_input_file.
Convert the document date into system date format
PERFORM f_convert_date USING wa_input_file-bldat
CHANGING wa_input_file-bldat.
Convert the posting date into system date format
PERFORM f_convert_date USING wa_input_file-budat
CHANGING wa_input_file-budat.
Popoulate the account code with leading zeroes
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = wa_input_file-newko
IMPORTING
output = wa_input_file-newko
EXCEPTIONS
OTHERS = 1.
IF sy-subrc NE 0.
ENDIF.
Populate the i_proc_tab internal table.
wa_proc_tab-xblnr = wa_input_file-xblnr. "Reference number
wa_proc_tab-bldat = wa_input_file-bldat. "Document date
wa_proc_tab-blart = wa_input_file-blart. "Document type
wa_proc_tab-bukrs = wa_input_file-bukrs. "Company code
wa_proc_tab-budat = wa_input_file-budat. "Posting date
wa_proc_tab-monat = wa_input_file-monat. "Period
wa_proc_tab-waers = wa_input_file-waers. "Currency
wa_proc_tab-bktxt = wa_input_file-bktxt. "Document header text
wa_proc_tab-docid = wa_input_file-docid . "Document ID
wa_proc_tab-newbs = wa_input_file-newbs. "Posting key
wa_proc_tab-newko = wa_input_file-newko. "Account
wa_proc_tab-wrbtr = wa_input_file-wrbtr. "Amount
wa_proc_tab-zfbdt = wa_input_file-zfbdt. "Baseline Date
wa_proc_tab-zuonr = wa_input_file-zuonr. "Assignment
wa_proc_tab-xmwst = wa_input_file-xmwst. "Calculate tax flag
wa_proc_tab-mwskz = wa_input_file-mwskz. "Tax code
wa_proc_tab-sgtxt = wa_input_file-sgtxt. "Text
wa_proc_tab-kostl = wa_input_file-kostl. "Cost center
wa_proc_tab-nwbs2 = wa_input_file-newbs2 . "Posting key for next record
wa_proc_tab-nwko2 = wa_input_file-newko2.
wa_proc_tab-wrbtr2 = wa_input_file-wrbtr2 .
APPEND wa_proc_tab TO i_proc_tab.
CLEAR: wa_input_file,
wa_proc_tab.
ENDLOOP.
Get the list of document types from table T003
SELECT blart
INTO TABLE i_t003
FROM t003
FOR ALL ENTRIES IN i_proc_tab
WHERE blart EQ i_proc_tab-blart.
IF sy-subrc NE 0.
CLEAR i_t003.
ENDIF.
Get the list of company code from table T001
SELECT bukrs
INTO TABLE i_t001
FROM t001
FOR ALL ENTRIES IN i_proc_tab
WHERE bukrs EQ i_proc_tab-bukrs.
IF sy-subrc NE 0.
CLEAR i_t001.
ENDIF.
Get the list of currency code from table TCURC
SELECT waers
INTO TABLE i_tcurc
FROM tcurc
FOR ALL ENTRIES IN i_proc_tab
WHERE waers EQ i_proc_tab-waers.
IF sy-subrc NE 0.
CLEAR i_tcurc.
ENDIF.
Get the list of posting key from table TBSL
SELECT bschl
INTO TABLE i_tbsl
FROM tbsl
FOR ALL ENTRIES IN i_proc_tab
WHERE bschl EQ i_proc_tab-newbs.
IF sy-subrc NE 0.
CLEAR i_tbsl.
ENDIF.
Get the list of account number from table LFB1
SELECT lifnr
bukrs
INTO TABLE i_lfb1
FROM lfb1
FOR ALL ENTRIES IN i_proc_tab
WHERE lifnr EQ i_proc_tab-newko
AND bukrs EQ i_proc_tab-bukrs.
IF sy-subrc NE 0.
CLEAR i_lfb1.
ENDIF.
Get the list of account number from table KNB1
SELECT kunnr
bukrs
INTO TABLE i_knb1
FROM knb1
FOR ALL ENTRIES IN i_proc_tab
WHERE kunnr EQ i_proc_tab-newko
AND bukrs EQ i_proc_tab-bukrs.
IF sy-subrc NE 0.
CLEAR i_knb1.
ENDIF.
Get the list of account number from table SKA1
SELECT saknr
INTO TABLE i_ska1
FROM ska1
FOR ALL ENTRIES IN i_proc_tab
WHERE saknr EQ i_proc_tab-newko.
IF sy-subrc NE 0.
ENDIF.
Get the list of posting key from table TBSL
SELECT bschl
INTO TABLE i_tbsl_2
FROM tbsl
FOR ALL ENTRIES IN i_proc_tab
WHERE bschl EQ i_proc_tab-nwbs2.
IF sy-subrc NE 0.
CLEAR i_tbsl_2.
ENDIF.
Get the list of account number from table LFB1
SELECT lifnr
bukrs
INTO TABLE i_lfb1_2
FROM lfb1
FOR ALL ENTRIES IN i_proc_tab
WHERE lifnr EQ i_proc_tab-nwko2
AND bukrs EQ i_proc_tab-bukrs.
IF sy-subrc NE 0.
CLEAR i_lfb1_2.
ENDIF.
Get the list of account number from table KNB1
SELECT kunnr
bukrs
INTO TABLE i_knb1_2
FROM knb1
FOR ALL ENTRIES IN i_proc_tab
WHERE kunnr EQ i_proc_tab-nwko2
AND bukrs EQ i_proc_tab-bukrs.
IF sy-subrc NE 0.
CLEAR i_knb1_2.
ENDIF.
Get the list of account number from table SKA1
SELECT saknr
INTO TABLE i_ska1_2
FROM ska1
FOR ALL ENTRIES IN i_proc_tab
WHERE saknr EQ i_proc_tab-nwko2.
IF sy-subrc NE 0.
ENDIF.
CLEAR lw_rowno.
LOOP AT i_proc_tab INTO wa_proc_tab.
lw_tabix = sy-tabix + 1.
lw_rowno = lw_rowno + 1.
IF lw_xblnr NE wa_proc_tab-xblnr.
ADD 1 TO v_xblnr_cnt.
lw_xblnr = wa_proc_tab-xblnr.
ENDIF.
Validate the document type
READ TABLE i_t003 INTO wa_t003
WITH KEY blart = wa_proc_tab-blart.
IF sy-subrc NE 0.
wa_error_file-row = lw_rowno.
wa_error_file-col = 2.
wa_error_file-value = wa_proc_tab-blart.
wa_error_file-mssg = text-002.
APPEND wa_error_file TO i_error_file.
DELETE i_proc_tab.
CONTINUE.
ENDIF.
Validate the company code
READ TABLE i_t001 INTO wa_t001
WITH KEY bukrs = wa_proc_tab-bukrs.
IF sy-subrc NE 0.
wa_error_file-row = lw_rowno.
wa_error_file-col = 3.
wa_error_file-value = wa_proc_tab-bukrs.
wa_error_file-mssg = text-003.
APPEND wa_error_file TO i_error_file.
DELETE i_proc_tab.
CONTINUE.
ENDIF.
Validate the period
IF NOT wa_proc_tab-monat EQ c_01 AND
NOT wa_proc_tab-monat EQ c_02 AND
NOT wa_proc_tab-monat EQ c_03 AND
NOT wa_proc_tab-monat EQ c_04 AND
NOT wa_proc_tab-monat EQ c_05 AND
NOT wa_proc_tab-monat EQ c_06 AND
NOT wa_proc_tab-monat EQ c_07 AND
NOT wa_proc_tab-monat EQ c_08 AND
NOT wa_proc_tab-monat EQ c_09 AND
NOT wa_proc_tab-monat EQ c_10 AND
NOT wa_proc_tab-monat EQ c_11 AND
NOT wa_proc_tab-monat EQ c_12.
wa_error_file-row = lw_rowno.
wa_error_file-col = 5.
wa_error_file-value = wa_proc_tab-monat.
wa_error_file-mssg = text-004.
APPEND wa_error_file TO i_error_file.
DELETE i_proc_tab.
CONTINUE.
ENDIF.
Validate the currency
READ TABLE i_tcurc INTO wa_tcurc
WITH KEY waers = wa_proc_tab-waers.
IF sy-subrc NE 0.
wa_error_file-row = lw_rowno.
wa_error_file-col = 6.
wa_error_file-value = wa_proc_tab-waers.
wa_error_file-mssg = text-005.
APPEND wa_error_file TO i_error_file.
DELETE i_proc_tab.
CONTINUE.
ENDIF.
Validate the posting key
READ TABLE i_tbsl INTO wa_tbsl
WITH KEY bschl = wa_proc_tab-newbs.
IF sy-subrc NE 0.
wa_error_file-row = lw_rowno.
wa_error_file-col = 9.
wa_error_file-value = wa_proc_tab-newbs.
wa_error_file-mssg = text-006.
APPEND wa_error_file TO i_error_file.
DELETE i_proc_tab.
CONTINUE.
ENDIF.
IF wa_tbsl = '31' . " then its a vendor account no
Validate the account number
READ TABLE i_lfb1 INTO wa_lfb1
WITH KEY lifnr = wa_proc_tab-newko
bukrs = wa_proc_tab-bukrs.
IF sy-subrc NE 0.
READ TABLE i_ska1 INTO wa_ska1
WITH KEY saknr = wa_proc_tab-newko.
IF sy-subrc NE 0.
wa_error_file-row = lw_rowno.
wa_error_file-col = 10.
wa_error_file-value = wa_proc_tab-newko.
wa_error_file-mssg = text-007. "Invalid Vendor account
APPEND wa_error_file TO i_error_file.
DELETE i_proc_tab.
CONTINUE.
ENDIF.
ENDIF.
ENDIF.
IF wa_tbsl = '11' OR wa_tbsl = '01'. "Then its customer no.
Validate the account number
READ TABLE i_knb1 INTO wa_knb1
WITH KEY kunnr = wa_proc_tab-newko
bukrs = wa_proc_tab-bukrs.
IF sy-subrc NE 0.
READ TABLE i_ska1 INTO wa_ska1
WITH KEY saknr = wa_proc_tab-newko.
IF sy-subrc NE 0.
wa_error_file-row = lw_rowno.
wa_error_file-col = 10.
wa_error_file-value = wa_proc_tab-newko.
wa_error_file-mssg = text-026. " Invalid Customer account
APPEND wa_error_file TO i_error_file.
DELETE i_proc_tab.
CONTINUE.
ENDIF.
ENDIF.
ENDIF.
Validate the posting key2
CLEAR wa_tbsl.
READ TABLE i_tbsl_2 INTO wa_tbsl
WITH KEY bschl = wa_proc_tab-nwbs2.
IF sy-subrc NE 0.
wa_error_file-row = lw_rowno.
wa_error_file-col = 13.
wa_error_file-value = wa_proc_tab-nwbs2.
wa_error_file-mssg = text-006.
APPEND wa_error_file TO i_error_file.
DELETE i_proc_tab.
CONTINUE.
ENDIF.
IF wa_tbsl = '31' . " then its a vendor account no
Validate the account number2
CLEAR wa_lfb1.
READ TABLE i_lfb1_2 INTO wa_lfb1
WITH KEY lifnr = wa_proc_tab-nwko2
bukrs = wa_proc_tab-bukrs.
IF sy-subrc NE 0.
CLEAR wa_ska1.
READ TABLE i_ska1_2 INTO wa_ska1
WITH KEY saknr = wa_proc_tab-nwko2.
IF sy-subrc NE 0.
wa_error_file-row = lw_rowno.
wa_error_file-col = 14.
wa_error_file-value = wa_proc_tab-nwko2.
wa_error_file-mssg = text-007. "Invalid Vendor account
APPEND wa_error_file TO i_error_file.
DELETE i_proc_tab.
CONTINUE.
ENDIF.
ENDIF.
ENDIF.
IF wa_tbsl = '11' OR wa_tbsl = '01'. "Then its customer no.
Validate the account number2
CLEAR wa_knb1.
READ TABLE i_knb1_2 INTO wa_knb1
WITH KEY kunnr = wa_proc_tab-nwko2
bukrs = wa_proc_tab-bukrs.
IF sy-subrc NE 0.
CLEAR wa_ska1.
READ TABLE i_ska1_2 INTO wa_ska1
WITH KEY saknr = wa_proc_tab-nwko2.
IF sy-subrc NE 0.
wa_error_file-row = lw_rowno.
wa_error_file-col = 14.
wa_error_file-value = wa_proc_tab-nwko2.
wa_error_file-mssg = text-026. " Invalid Customer account
APPEND wa_error_file TO i_error_file.
DELETE i_proc_tab.
CONTINUE.
ENDIF.
ENDIF.
ENDIF.
Populate the i_bdc_tab internal table.
MOVE-CORRESPONDING wa_proc_tab TO i_bdc_tab.
Get the posting key and account for the next records
READ TABLE i_proc_tab INTO wa_proc_tab INDEX lw_tabix.
IF i_bdc_tab-xblnr EQ wa_proc_tab-xblnr.
IF sy-subrc EQ 0.
i_bdc_tab-nwbs2 = wa_proc_tab-newbs.
i_bdc_tab-nwko2 = wa_proc_tab-newko.
ENDIF.
ENDIF.
APPEND i_bdc_tab.
ENDLOOP.
ENDFORM. " f_validate_records
&----
*& Form f_convert_date
&----
text
----
-->P_WA_INPUT_FILE_BLDAT text
<--P_WA_INPUT_FILE_BLDAT text
----
FORM f_convert_date USING fp_in_date
CHANGING fp_out_date.
DATA: lw_in_date(10) TYPE c,
lw_out_date(10) TYPE c.
lw_in_date = fp_in_date.
CALL FUNCTION '/SAPDMC/LSM_DATE_CONVERT'
EXPORTING
date_in = lw_in_date
date_format_in = c_dymd
to_output_format = c_x
IMPORTING
date_out = lw_out_date
EXCEPTIONS
illegal_date = 1
illegal_date_format = 2
no_user_date_format = 3
OTHERS = 4.
IF sy-subrc EQ 0.
fp_out_date = lw_out_date.
ENDIF.
ENDFORM. " f_convert_date
&----
*& Form f_audit_report
&----
text
----
--> p1 text
<-- p2 text
----
FORM f_audit_report .
DATA: lv_input TYPE i,
lv_process TYPE i,
lv_error TYPE i,
lv_bdc_error TYPE i.
DESCRIBE TABLE lt_output LINES lv_input.
DESCRIBE TABLE i_bdc_tab LINES lv_process.
DESCRIBE TABLE i_error_file LINES lv_error.
DESCRIBE TABLE it_error LINES lv_bdc_error.
IF p_test = c_x.
Audit report when the program is executed in test mode
ULINE.
WRITE:/ text-011.
ULINE.
WRITE: /5 text-012,
50 lv_input,
/5 text-013,
50 lv_process,
/5 text-014,
50 lv_error,
/5 text-025,
50 v_xblnr_cnt.
SKIP 2.
WRITE: 1 text-015.
ULINE.
WRITE: /5 text-016,
20 text-017,
40 text-018,
55 text-019.
ULINE.
LOOP AT i_error_file INTO wa_error_file.
WRITE: /5 wa_error_file-row,
20 wa_error_file-col,
40 wa_error_file-value,
55 wa_error_file-mssg.
ENDLOOP.
ENDIF.
ENDFORM. " f_audit_report
check it is according to ur requirement.
thanks jayant