‎2012 Feb 08 11:03 AM
Hi,
We have an existing problem in Production wherein the program encounters ABAP dump (details below).
OBJECTS_WA_NOT_COMPATIBLE
Error analysis
The statement
"DELETE TABLE itab FROM wa ..."
requires the lines of the internal table "IT_ZPA2003[]" and the
work area " wa" to be compatible. Compatibility means
equivalence in the context of ABAP/4 type checking.
In this case, the condition is not satisfied because the internal table
"IT_ZPA2003[]" has the line type "ZPA2003" and the length 301, but the work
area " wa"
has the type "PA2003" and the length 269.
For our common reference, ZPA2003 is really different from PA2003. ZPA2003 has additional customized fields.
Below is the problematic code:
FUNCTION ZSHIFT_DELIMIT.
...
DATA: it_zpa2003 LIKE zpa2003 OCCURS 0 WITH HEADER LINE.
...
PERFORM delimit TABLES itab
it_zpa2003
new_records
old_records
it_old
temp_zpa2003.
Below is the definition of the subroutine delimit :
FORM delimit TABLES itab STRUCTURE zpa2003
it_zpa2003 STRUCTURE pa2003 " This seems wrong, should be ZPA2003
new_records STRUCTURE zpa2003
old_records STRUCTURE zpa2003
it_old STRUCTURE zpa2003
temp_zpa2003 STRUCTURE zpa2003.
LOOP AT it_zpa2003
WHERE ( begda LE itab-begda AND endda GE itab-begda )
OR ( begda LE itab-endda AND endda GE itab-endda )
OR ( begda GE itab-begda AND endda LE itab-endda ).
...
DELETE TABLE it_zpa2003.
...
ENDLOOP.
ENDFORM.
This is code already existing in Production, so pardon the usage of obsolete statements.
i.e. internal table with header line, passing using TABLES for subroutine
And yes, the variable name of the internal table in the FM is the same as the variable name of the receiving parameter in the subroutine (i.e. IT_ZPA2003).
Anyway if you look at the code, there really is a problem since in the Function Module *it_zpa2003* is defined as *ZPA2003* while in the subroutine, the structure is defined to be *PA2003* only (no Z).
The weird part is -- this code is actually working in our Development environment.
And yes, the tables are the same versions, the function modules have the same versions, the include programs have the same versions.
I tried to debug this, and observed the following:
In Development, once inside the subroutine, header line IT_ZPA2005 still has the type as the table passed which is ZPA2003.
In Production, once inside the subroutine, header line IT_ZPA2005 changes type to PA2003.
I am not all that familiar as to how SAP actually executes ABAP code. We're not really sure as well if our SysAds updated anything in the backend.
I'm hoping someone can shed some light as to why the behavior is different.
I've tried to debug and the ABAP code is identical line per line...
As additional data, we have 2 other boxes -- Sandbox and Testing environment.
Development and Sandbox behave the same --the header line data type does not change.
Testing and Production behave the same -- the header line data type changes to the defined structure in the subroutine.
However, our Sandbox was refreshed from Production middle of last year, then our Testing was refreshed late last year, both from Production.
Edited by: Alexandra Co on Feb 8, 2012 12:08 PM
‎2012 Feb 08 11:13 AM
What i feel is that in development the structure PA2003 matches with ZPA2003. The custom fields would be existing in PA2003 and both the structure could be similar in Development. In production PA2003 will not be having any changes. May be the extended syntax check or the code inspector check will help you.
‎2012 Feb 08 11:19 AM
In Development, ZPA2003 is really not identical to PA2003.
In debugging I can see that the table IT_ZPA2003 has length 303 which is the length of the Z table.
But thanks though. I am wondering if this is even the correct forum to post this, or if this should be in Application Server?
‎2012 Feb 08 11:21 AM
In Development, once inside the subroutine, header line IT_ZPA2005 still has the type as the table passed which is ZPA2003.
In Production, once inside the subroutine, header line IT_ZPA2005 changes type to PA2003.
Correction above, I meant header line IT_ZPA2003
Edited by: Alexandra Co on Feb 8, 2012 12:21 PM
‎2012 Feb 08 12:43 PM
Hi,
One more query
You dump says
{quote]
"DELETE TABLE itab FROM wa ..." requires the lines of the internal table "IT_ZPA2003[]"
{quote}
In Development , is the control reaching this delete statement ?
WA has less fields than the internal table ITAB. So try changing the structure of WA to that of the internal table and re transport it.