01-21-2008 10:55 AM
hi to all experts
when i use mode 'A' in call transaction records are inserted into database and sy-subrc is zero but wen i
use mode 'N' it is giving error and sy-subrc is 1.001.
can anyone explain me the reason for this error
REPORT ZSESSION NO STANDARD PAGE HEADING LINE-SIZE 56.
****************************************************************************
TYPES DECLARATION
****************************************************************************
TYPES : BEGIN OF TY_CUST,
KUNNR(10),
BUKRS(4),
KTOKD(4),
ANRED(15),
NAME1(35),
SORTL(10),
STRAS(35),
ORT01(10),
PSTLZ(10),
LAND1(3),
LZONE(10),
SPRAS(2),
AKONT(10),
END OF TY_CUST.
TYPES: BEGIN OF TY_ECUST,
KUNNR(10),
ERRORMSG(255),
END OF TY_ECUST.
TYPES: BEGIN OF TY_SCUST,
KUNNR(10),
SUCESSMSG(255),
END OF TY_SCUST.
******************************************************************************
INTERNAL TABLE AND WORK AREAS
******************************************************************************
DATA : IT_CUST TYPE STANDARD TABLE OF TY_CUST INITIAL SIZE 0,
RAW_DATA TYPE TABLE OF TY_CUST,
W_RAW_DATA LIKE LINE OF RAW_DATA,
WA_CUST LIKE LINE OF IT_CUST.
DATA: IT_ECUST TYPE TABLE OF TY_ECUST,
WA_ECUST LIKE LINE OF IT_ECUST.
DATA : IT_SCUST TYPE TABLE OF TY_SCUST,
WA_SCUST LIKE LINE OF IT_SCUST.
*********************************************************************************
INTERANAL TABLE FOR STORING BDCDATA
********************************************************************************
DATA: BEGIN OF IT_BDCDATA OCCURS 0.
INCLUDE STRUCTURE BDCDATA.
DATA: END OF IT_BDCDATA.
*********************************************************************************
INTERNAL TABLE FOR STORING MESSAGES
*********************************************************************************
DATA: BEGIN OF IT_CUSTMSG OCCURS 0.
INCLUDE STRUCTURE BDCMSGCOLL.
DATA: END OF IT_CUSTMSG.
DATA: V_FLAG(1) VALUE '',"FLAG FOR OPENING OF SESSION
V_TLINES TYPE SY-TABIX,"TOTAL NO RECORDS PROCESSED
V_SLINES TYPE SY-TABIX,"TOTAL NO OF SUCESS RECORDS PROCESSED
V_ELINES TYPE SY-TABIX."TOTAL NO OF ERROR RECORDS
********************************************************************************
SELECTION SCREEN
********************************************************************************
SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-001.
PARAMETERS : V_FNAME TYPE RLGRAP-FILENAME,
V_SESS TYPE RLGRAP-FILENAME.
SELECTION-SCREEN END OF BLOCK B2.
INITIALIZATION.
V_FNAME = 'C:\Documents and Settings\Administrator\Desktop\2.TXT'.
TOP-OF-PAGE.
WRITE: / 'DETAILS OF ALL SESSIONS'.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR V_FNAME.
CALL FUNCTION 'F4_FILENAME'
EXPORTING
PROGRAM_NAME = SYST-CPROG
DYNPRO_NUMBER = SYST-DYNNR
FIELD_NAME = ' '
IMPORTING
FILE_NAME = V_FNAME
.
START-OF-SELECTION.
PERFORM F_UPLOAD USING V_FNAME
CHANGING IT_CUST.
END-OF-SELECTION.
PERFORM F_BDCGENERATE.
PERFORM F_WRITE_TOP.
&----
*& Form F_UPLOAD
&----
text
----
-->P_V_FNAME text
<--P_IT_CUST text
----
FORM F_UPLOAD USING P_V_FNAME LIKE V_FNAME
CHANGING P_IT_CUST LIKE IT_CUST.
DATA: LV_FILE TYPE STRING.
LV_FILE = P_V_FNAME.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
FILENAME = LV_FILE
TABLES
DATA_TAB = P_IT_CUST
.
IF SY-SUBRC = 0.
DESCRIBE TABLE P_IT_CUST LINES V_TLINES.
ENDIF.
*
*CALL FUNCTION 'TEXT_CONVERT_CSV_TO_SAP'
EXPORTING
I_FIELD_SEPERATOR = ';'
I_LINE_HEADER =
I_TAB_RAW_DATA = P_IT_CUST
I_FILENAME = 'C:\Documents and Settings\Administrator\Desktop\2.TXT'
TABLES
I_TAB_CONVERTED_DATA = P_IT_CUST
EXCEPTIONS
CONVERSION_FAILED = 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. " F_UPLOAD
&----
*& Form F_BDCGENERATE
&----
text
----
--> p1 text
<-- p2 text
----
FORM F_BDCGENERATE .
LOOP AT IT_CUST INTO WA_CUST.
SPLIT WA_CUST AT ';' INTO WA_CUST-KUNNR
WA_CUST-BUKRS
WA_CUST-KTOKD
WA_CUST-ANRED
WA_CUST-NAME1
WA_CUST-SORTL
WA_CUST-STRAS
WA_CUST-ORT01
WA_CUST-PSTLZ
WA_CUST-LAND1
WA_CUST-LZONE
WA_CUST-SPRAS
WA_CUST-AKONT.
perform F_POPULATE_BDC using:
'X' 'SAPMF02D' '0100',
' ' 'BDC_CURSOR' 'RF02D-KTOKD',
' ' 'BDC_OKCODE' '/00',
' ' 'RF02D-KUNNR' WA_CUST-KUNNR,
' ' 'RF02D-BUKRS' WA_CUST-BUKRS,
' ' 'RF02D-KTOKD' WA_CUST-KTOKD,
'X' 'SAPLSHL2' '1600',
' ' 'BDC_CURSOR' 'HELP_INFO-DYNPPROG',
' ' 'BDC_OKCODE' '=TCAL',
'X' 'SAPMF02D' '0110',
' ' 'BDC_CURSOR' 'KNA1-SPRAS',
' ' 'BDC_OKCODE' '/00',
' ' 'KNA1-ANRED' WA_CUST-ANRED,
' ' 'KNA1-NAME1' WA_CUST-NAME1,
' ' 'KNA1-SORTL' WA_CUST-SORTL,
' ' 'KNA1-STRAS' WA_CUST-STRAS,
' ' 'KNA1-ORT01' WA_CUST-ORT01,
' ' 'KNA1-PSTLZ' WA_CUST-PSTLZ,
' ' 'KNA1-LAND1' WA_CUST-LAND1,
' ' 'KNA1-SPRAS' WA_CUST-SPRAS,
'X' 'SAPMF02D' '0120',
' ' 'BDC_CURSOR' 'KNA1-LZONE',
' ' 'BDC_OKCODE' '/00',
' ' 'KNA1-LZONE' WA_CUST-LZONE ,
'X' 'SAPMF02D' '0125',
' ' 'BDC_CURSOR' 'KNA1-NIELS',
' ' 'BDC_OKCODE' '/00',
'X' 'SAPMF02D' '0130',
' ' 'BDC_CURSOR' 'KNBK-BANKS(01)',
' ' 'BDC_OKCODE' '=ENTR',
'X' 'SAPMF02D' '0340',
' ' 'BDC_CURSOR' 'RF02D-KUNNR',
' ' 'BDC_OKCODE' '=ENTR',
'X' 'SAPMF02D' '0370',
' ' 'BDC_CURSOR' 'RF02D-KUNNR',
' ' 'BDC_OKCODE' '=ENTR',
' ' 'KNA1-CIVVE' 'X',
'X' 'SAPMF02D' '0360',
' ' 'BDC_CURSOR' 'KNVK-NAMEV(01)',
' ' 'BDC_OKCODE' '=ENTR',
'X' 'SAPMF02D' '0210',
' ' 'BDC_CURSOR' 'KNB1-AKONT',
' ' 'BDC_OKCODE' '/00',
' ' 'KNB1-AKONT' WA_CUST-AKONT ,
'X' 'SAPMF02D' '0215',
' ' 'BDC_CURSOR' 'KNB1-ZTERM',
' ' 'BDC_OKCODE' '/00',
'X' 'SAPMF02D' '0220',
' ' 'BDC_CURSOR' 'KNB5-MAHNA',
' ' 'BDC_OKCODE' '/00',
'X' 'SAPMF02D' '0230',
' ' 'BDC_CURSOR' 'KNB1-VRSNR',
' ' 'BDC_OKCODE' '/00'.
IF NOT IT_BDCDATA[] IS INITIAL.
CALL TRANSACTION 'XD01' USING IT_BDCDATA[] MODE 'N' UPDATE 'A'
MESSAGES INTO IT_CUSTMSG.
IF SY-SUBRC NE 0.
*POPULATING ERROR RECORDS IN AN INTERNAL TABLE
WA_ECUST-KUNNR = WA_CUST-KUNNR.
APPEND WA_ECUST TO IT_ECUST.
CLEAR wa_ECUST.
*OPENING A SESSION IF THERE IS AN ERROR RECORDS
IF V_FLAG = ''.
PERFORM F_OPEN_SESSION.
V_FLAG = 'X'.
ENDIF.
*INSERTING ERROR RECORDS IN AN ALREADY OPEN SESSION
IF V_FLAG = 'X'.
PERFORM F_BDC_INSERT.
ENDIF.
*POPULATING SUCESS RECORDS IN AN INTERNAL TABLE
ELSE.
WA_SCUST-KUNNR = WA_CUST-KUNNR.
APPEND WA_SCUST TO IT_SCUST.
CLEAR wa_SCUST.
ENDIF.
*DISPLAYING THE MESSAGES
IF NOT IT_CUSTMSG[] IS INITIAL.
PERFORM F_FORMAT_MESSAGE.
ENDIF.
*CLERAING BDCDATA AND CUST MESSAGES
CLEAR: IT_BDCDATA,IT_CUSTMSG.
*--Getting the total no of error records.
DESCRIBE TABLE IT_ECUST LINES V_ELINES.
*--Getting the total no of successful records.
DESCRIBE TABLE IT_SCUST LINES V_SLINES.
*CLOSING A SESSION ONLY IF IT IS OPENED
IF V_FLAG = 'X'.
PERFORM F_CLOSE_SESSION.
ENDIF.
ENDIF.
endloop.
ENDFORM. " F_BDCGENERATE
&----
*& Form F_POPULATE_BDC
&----
text
----
-->P_0243 text
-->P_0244 text
-->P_0245 text
----
FORM F_POPULATE_BDC USING VALUE(P_0243)
VALUE(P_0244)
VALUE(P_0245).
IF P_0243 = 'X'.
IT_BDCDATA-PROGRAM = P_0244.
IT_BDCDATA-DYNPRO = P_0245.
IT_BDCDATA-DYNBEGIN = 'X'.
ELSE.
IT_BDCDATA-FNAM = P_0244.
IT_BDCDATA-FVAL = P_0245.
ENDIF.
APPEND IT_BDCDATA.
CLEAR IT_BDCDATA.
ENDFORM. " F_POPULATE_BDC
&----
*& Form F_OPEN_SESSION
&----
text
----
--> p1 text
<-- p2 text
----
FORM F_OPEN_SESSION .
DATA: LV_SESSION(12).
LV_SESSION = V_SESS.
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
CLIENT = SY-MANDT
GROUP = LV_SESSION
HOLDDATE = '20080121'
KEEP = 'X'
USER = SY-UNAME
PROG = SY-CPROG
IMPORTING
QID =
EXCEPTIONS
CLIENT_INVALID = 1
DESTINATION_INVALID = 2
GROUP_INVALID = 3
GROUP_IS_LOCKED = 4
HOLDDATE_INVALID = 5
INTERNAL_ERROR = 6
QUEUE_ERROR = 7
RUNNING = 8
SYSTEM_LOCK_ERROR = 9
USER_INVALID = 10
OTHERS = 11
.
IF SY-SUBRC <> 0.
MESSAGE E000(ZHNC) WITH 'SESSION NOT OPENED'.
ENDIF.
ENDFORM. " F_OPEN_SESSION
&----
*& Form F_BDC_INSERT
&----
text
----
--> p1 text
<-- p2 text
----
FORM F_BDC_INSERT .
CALL FUNCTION 'BDC_INSERT'
EXPORTING
TCODE = 'XD01'
TABLES
DYNPROTAB = IT_bdcdata
EXCEPTIONS
INTERNAL_ERROR = 1
NOT_OPEN = 2
QUEUE_ERROR = 3
TCODE_INVALID = 4
PRINTING_INVALID = 5
POSTING_INVALID = 6
OTHERS = 7
.
IF SY-SUBRC <> 0.
MESSAGE E000(ZHNC) WITH 'UNABLE TO INSERT'.
ENDIF.
ENDFORM. " F_BDC_INSERT
&----
*& Form F_FORMAT_MESSAGE
&----
text
----
--> p1 text
<-- p2 text
----
FORM F_FORMAT_MESSAGE .
DATA:LV_MSG(255).
CALL FUNCTION 'FORMAT_MESSAGE'
EXPORTING
ID = SY-MSGID
LANG = '-D'
NO = SY-MSGNO
V1 = SY-MSGV1
V2 = SY-MSGV2
V3 = SY-MSGV3
V4 = SY-MSGV4
IMPORTING
MSG = LV_MSG
EXCEPTIONS
NOT_FOUND = 1
OTHERS = 2
.
IF SY-SUBRC = 0.
WRITE: / LV_MSG.
ENDIF.
ENDFORM. " F_FORMAT_MESSAGE
&----
*& Form F_CLOSE_SESSION
&----
text
----
--> p1 text
<-- p2 text
----
FORM F_CLOSE_SESSION .
CALL FUNCTION 'BDC_CLOSE_GROUP'
EXCEPTIONS
NOT_OPEN = 1
QUEUE_ERROR = 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. " F_CLOSE_SESSION
&----
*& Form F_WRITE_TOP
&----
text
----
--> p1 text
<-- p2 text
----
FORM F_WRITE_TOP .
WRITE: / 'TOTAL NO OF RECORDS PROCESSED =', V_TLINES,
'TOTAL NO OF ERROR RECORDS PROCESSED =', V_ELINES,
'TOTAL NO OF SUCESS RECORDS PROCESSED =', V_SLINES,
'NAME OF THE SESSION',V_SESS.
ENDFORM. " F_WRITE_TOP
01-22-2008 10:16 AM
Screens in background do behave differently. To find the error you can simulate background mode while running the BDC session in foreground.
Choose "foreground processing" and mark the flag "simulate background mode" with an 'X'. In this way you will see the exact screen sequence as it is in background.