IDoc Inbound and Outbound statuses
Table TEDS1 contains list of all status codes.
Starting statuses may be: 01 (outbound), 50 (inbound), 42 (outbound test), 74 (inbound test)
OK / NOK
||Next success status
||Next error status
||Error reason and solution
||Outbound IDoc created
||Error passing data to port
||Correct the error and Execute RSEOUT00 program again
||Outbound IDoc successfully sent to port
||within control information on EDI subsystem
||Changed from status 03 by BD75 transaction (see below)
||Processing outbound IDoc despite syntax errors
||during syntax check of outbound IDoc
||Missing mandatory segment for example
||You may edit the IDoc or force it to be processed
||ALE service (for example
||Outbound IDoc ready for dispatch (ALE service)
||Partner profile customized to not run and execute RSEOUT00 program
||no further processing
||Outbound IDoc was edited
||There was a manual update of the IDoc in SAP tables, the original was saved to a new IDoc with status 33
||Original of an IDoc which was edited. It is not possible to post this IDoc
||Backup of another IDoc manually updated, see status 32
||IDoc reloaded from archive. Can’t be processed
||Erroneous control record (for example, “reference” field should be blank for outbound IDocs)
||Outbound IDoc manually created by WE19 test tool
||Inbound IDoc created
||inbound IDoc data contains errors
||51, 66, 68, 69
||Error triggered by SAP application, incorrect values in the IDoc data and ask functional people, modify erroneous values in the IDoc (WE02 for example) and run it again using BD87
||inbound IDoc posted
||IDoc with errors added (You should never see this error code)
||50, 51, 56, 62, 68
||syntax check of inbound IDoc
||56, 61, 62
||Processing inbound IDoc despite syntax error
||inbound IDoc passed to application
||passing IDoc to application
||Inbound IDoc ready to be passed to application
||51, 60, 63, 68, 69
|| execute BD20 transaction (RBDAPP01 program)
||ALE service – incorrect partner profiles
||Waiting for predecessor IDoc (Serialization)
||no further processing
||The IDoc was created using inbound test tool (WE19) and written to file to do file inbound test. Another IDoc is created if immediate processing is chosen
||IDoc was edited
||51, 68, 69
||There was a manual update of the IDoc in SAP tables, the original was saved to a new IDoc with status 70
||Original of an IDoc which was edited. It is not possible to post this IDoc
||Backup of another IDoc manually updated, see status 69
||Inbound IDoc reloaded from archive. Can’t be processed
||Inbound IDoc manually created by WE19 test tool
More information about Inbound statuses
- 64 -> 62: There is no way to distinguish automatic call from manual call (BD20, RBDAPP01)
- Though an IDoc may contain partner profile errors, we may force inbound processing (status becomes 62), but then an error will happen again
- RSEINB00 program to process IDocs from a file
- BD20 transaction (RBDAPP01 program) to process IDocs in status 64. If you want future IDocs to be processed immediately, change partner profile customizing (WE20).
- RBDINPUT program:
- status 51: BD73 / RBDMANIN
- Status 56, 61, 63, 65: BD84 / RBDAGAI2
- status 60: RBDSYNEI
- status 62: IDocs remaining in status 62 is abnormal. Use program RBDCHSTA (Note 92552 – IDocs-Status 62 cannot be processed), so that to change their status back to 64 and process them again
- status 64, 66: BD20 / RBDAPP01
- status 68: WPIE / RBDAGAIE
More information about Outbound statuses
- RBDOUTPU program:
- status 02, 04, 05, 25, 29: BD83 / RBDAGAIN
- status 26: RBDSYNEO
- status 30: WE14 / RSEOUT00
- status 32: WPIE / RBDAGAIE
- -> 03 : IDocs are sent to the tRFC queue.
03 -> 12 : use BD75 transaction (RBDMOIND program). Idocs with with status 03 are transferred to the tRFC queue. This does not mean that they are sent out, they may stuck up on that queue (e.g. receiver system is down) in that queue. BD75 checks if it can find the idoc in that queue. If so, it is not beeing send and status remains on 03. If it is not on the t-rfc queue, the systems considers that this icon is sent and change the status to 12.
You can check the tRfc queue with SM58 and initiate resending by right click choosing execute LUW.
in BD75 you can check “unsent idocs” and you will get a similar list.
- Note 189887 – ALE: Help report to search for IDocs sent twice: program ZDUPLICATEIDOC
- RC1_IDOC_SET_STATUS program to change IDoc status. Exists since 6.10
- Monitor for Inbound and Outbound: BD87 / RBDMON00 to restart erroneous IDocs
- RSEXARCA archives IDocs. They must be in an archivable status (not possible to archive IDocs in status 30 or 64, ie waiting to be processed).
- RSEXARCL to reload IDocs from archive to the database. Status will be either 35 (outbound) or 71 (inbound).
- WE47 to change STACUST table; see Note 26564 – IDoc: Can status values be defined?
- RSECSTAT include contains constants for status
ZTOAD – is an alternate SQL builder (SAPLink). It can be installed using SAPLink (SAPLink should be installed as well).
SAPLink is a tool for importing and exporting ABAP developments from one system to another. The main terms of SAPLink are nuggets and slinkies:
a) a slinkee file (.slnk) is used for single objects to be imported or exported. Slinkees are very quick and easy to use and recommended for single object collaboration. They can be imported and exported from the “Object” tab.
b) SAPLink nuggets are the SAPLink packaging system that enables multiple objects to be imported/exported in one handy dandy file (.nugg). Nuggets can be imported, created, and displayed from the “Nugget” tab.
With ZTOAD (called ZTOAD in reference of a famous query builder in the SQL) you can write and execute queries, in OpenSQL format (the format used in ABAP programs). Result is displayed in an ALV at bottom part of the screen:
The order is next:
1. Install SAPLink
2. Install DDic plugin (just import NUGG_SAPLINK_DDIC.nugg nugget file).
3. Install ZTOAD
4. Launch SE38 -> ZTOAD
P.S. In case of error “CLASS ZSAPLINK DEFINITION LOAD statement is missing.” just add the string
class zsaplink DEFINITION load. " Convenience for older SAP-Releases
after the string
in the ZSAPLINK program.
P.P.S. “Plugin for object type TRAN is not installed on this system”: CLAS_ZSAPLINK_TRANSACTIONS.slnk,
“Plugin for object type DEVC is not installed on this system”: CLAS_ZSAPLINK_DEVC.slnk
and activate “Inactive local objects” in SE80.
Q: How to convert CHAR type to RAW type?
Q: What does mean asterisk in front of the name?
types: begin of c16,
aaa(16) type c, "CHAR(16)
end of c16.
types: begin of r16,
aaa type guid_16, "RAW(16)
end of r16.
data: it_chars type table of c16,
it_raws type table of r16,
c1(16) type c.
c1 = '1234567890123456'.
append c1 to it_chars.
call method CL_RSZ_WWW_DB_INTERFACE=>CONVERT_CHAR_TO_RAW
I_T_IN = IT_chars
E_T_OUT = it_raws
A: EKPO and *EKPO are usually defined in TABLES statement, and both use the DDIC structure of EKPO. Classical usage is to distinguish between old and new value of the record.
SELECT SINGLE * FROM *bkpf is equal to SELECT SINGLE * FROM bkpf into *bkpf
the same as SELECT SINGLE * FROM bkpf is equal to SELECT SINGLE * FROM bkpf into bkpf
While declaring variables, always follow the naming conventions through out your code. Your variable names talks a lot about its usage.
Make sure your variables are of the form:
L – Local
I – Import
E – Export
G – Global
T – Table Type
V – Single Value
S – Structure
T – Table
R – Type ref to Data
O – Type ref to Object
E – Type ref to Exception objects
Name – name of the variable.
lt_sel – local table
lo_rvs – local object
and so on.
Before changing the parameters (type or name), make sure that you run “Where used”, make a note and change them as well.
While working on ABAP Classes and Interfaces, Never change a super class of a framework. It could potentially bring all applications down. Double check to make sure that the code you change is in your class only.
Ctrl + D Duplicate any line.
Ctrl + . & Ctrl + , Comment and Un-Comment selected lines.
Ctrl+Shift+X Deletes the whole line.
Ctrl+Shift+V Gives All Paste options.
To assist in locating codes, can be a bookmark, using a combination: CTRL + ALT + (0 to 9).
To go to bookmark created, use combination CTRL + (0 to 9).
Please ensure that IV_UNAME (SY-UNAME) and IV_LANGUAGE (SY_UNAME) are mandatory for all modules.
- Q: How to debug IDOCs inbound processing (most first FMs on receiver system (under ALEREMOTE non dialog user)?
A: Simple and stupid solution is to put eternal loop in form FA5_DOCUMENT_SYNTAX_CHECK (program LEDI1FA5):
data: x type flag.
*if sy-uname eq 'SAPSD'.
while x is initial.
Then the process will be available for debugging in the transaction SM50.
- Please create lock objects on the header tables and make sure that you obtain a lock before changes and release the lock after changes.
- Make sure that you transactions are atomic. Either commit your work after all changes are successful or Rollback in case of error. If you rollback, make sure that you have released the locks.
- Q: How to pass dynamic varable into SELECT … WHERE IN clause?
data: lv_pabprfs type string,
qry type string.
select single param from zparam into lv_pabprfs where paramid = 'PAPROFIL'.
"lv_pabprfs = 'M033', 'M833', 'M843'
qry = 'b~pabprf in (' && lv_pabprfs && ')'.
select single baset into myvar from jitoco where outpo = '3' and (qry).
- During save, please make sure that entries in all the text (_T_*) tables that relate to your modules are also saved. If no data exists, treat it as an error. (As across check, you can verify the same by executing the view and making sure that the data is returned correctly)
- The Function should be RFC Enabled. Never raise an exception. Always return errors in the ET_RETURN (Type BAPIRET2) structure.
- Never hardcode text strings. Make sure that you use a text element. But use it with text reference.
E.g. If you have an error during validating the email, use it as “Email ID is required”(001) instead of using text-001. This will ensure that error messages are displayed regardless of user logon language.
- At the end of the function, Always call “get details” and return the values as export/table values. This will serve the purpose of reflecting the data as-is in the DB back to the user and will save another round trip to retrieve it again.
- Q: How to get variable value from another running program?
ld_mem = '(SAPMV50A)XLIPS'.
ASSIGN (ld_mem) TO <mem>.
IF sy-subrc = 0. "if ld_mem is assigned
lt_xlips = <mem>.
- Update audit fields created by, created date, created time only during create.
- Please ensure that IV_UNAME (SY-UNAME) and IV_LANGUAGE (SY_UNAME) are mandatory for all modules. Extract the data for the language specified.
- Q: Where are the packing handling units data stored during execution of transaction VL01/VL02/VL32N”? CVEKP table is always empty.
A: The variable is (SAPLV51G)IVEKP
Получить внешние вызовы ФМ, транзакций и многого другого внутри программы можно с помощью программы — RSINCL00.
Транзакция ABAPDOCU — ABAP документация и примеры.
Транзакция BIBS — примеры пользовательского интерфейса для ABAP программ.
Транзакция DWDM — демо примеры с использованием Enjoy контролов.
Программа ADBC_DEMO — демо программа ADBC API (для подключения к внешним базам данных).
Транзакция SE83 — библиотека примеров с ALV и прочими контролами.
Программа BALVBT01 — демонстрация множественного использования ALV.
Программа SHOWICON — список всех иконок.
Программа SHOWCOLO — все цвета используемые во WRITE или ALV.
Программа SHOWLINE — всевозможные линии во write отчётах.
Программа SHOWSYMB — символы.
Программа AFX_CODE_SCANNER (или RPR_ABAP_SOURCE_SCAN) — поиск в исходных кодах.
Программа RSBDCOS0 — выполнение системных команд на сервере.
Программа REPTRAN — массовая выгрузка исходников.
All the problem related to running a SAP transaction can now be resolved with the help of execution of a debugger.
One of the major advantage of using the debugger is that while any changes are being made all those can be recorded in a log.
Various ways to skip the authorization check:
- Within Function module ‘SMTR_KERNEL_CHECK_AUTHORITY’ insert a break-point. Press F7, clear the variable P_CANCEL_FLAG.
- Within Function module ‘RS_TRANSACTION_TEST’ insert a break-point on the ABAP code line ‘if sy-subrc = 0.’, straight after the call ‘AUTH_CHECK_TCODE’ id ‘TCODE’ field objectname. And change sy-subrc to 0.
- Just run any transaction using functional module SMTR_KERNEL_CHECK_AUTHORITY (still works if correcting Note was not implemented).
P.S. Can’t run FM’s but can run programs? Just run the RSFUNCTIONBUILDER program.