2006 Jan 30 10:43 PM
Hi friends,
ERLRE: Completion Rule
I need to create custom utility program to update ERLRE field(already it was set with B for thos specific orders,i need to upadte with null value for those) in production for specific orders.I checked FM: sd_salesdocument_change, but ITEM_IN STRUCTURE BAPISDITM ,ITEM_INX STRUCTURE BAPISDITMX OPTIONAL
those two structures not contain ERLRE field. Only ITEMS_EX STRUCTURE BAPISDIT OPTIONAL contain ERLRE field.
It does not have any x structure corresponding it.
Please help me how to update that field? Is there any other solution for that?
Thanks,
Monica
2006 Jan 31 12:15 AM
You would want to create a BDC session in this case. The BDC will "mimic" the end-user making the change manually. AND it will guarantee that your updates are done "correctly" from an SAP perspective.
2006 Jan 31 1:06 AM
Hi,
Thanks for your response.Its not changed by enduser, its incompletion log. When the order created or changed the incompletion log generated according to the input data. Can you plaese help me how to write BDC for va01 or va02.
Rather than BDC is there any FM or BAPI to update that field.
Thanks,
Monica
2006 Jan 31 1:17 AM
Monica - have a look at FMs SD_SALESDOCUMENT_CHANGE and SD_SALESDOCUMENT_CREATE. They aren't released, but they do have documentation indicating that they are BAPIS.
Rob
2006 Jan 31 1:27 AM
According to OSS note 93091:
For other business
objects in purchasing, there are no separate BAPIs. For
them, the rfc-capable function modules
SD_SALESDOCUMENT_CREATE and SD_SALESDOCUMENT_CHANGE can
be used. Those function modules can also be used in
production by the customers. Since they have not been
released, they may not be fully supported by SAP under
certain circumstances. This would have to be checked in
the individual cases.
Rob
2006 Jan 31 1:33 AM
Sorry - I missed, that this was what you were looking at. Can't you use table ITEMS_EX?
Rob
2006 Jan 31 1:42 AM
Hi Rob,
This is the code i tried with items_ex struature,but its not updating vbap-erlre.
DATA: header_in LIKE bapisdhd1,
header_in_x LIKE bapisdhd1x,
return LIKE bapiret2 OCCURS 0 WITH HEADER LINE,
ITEMS_EX LIKE BAPISDIT OCCURS 0 with header line.
DATA: rec_ok TYPE char1.
DATA: t_vbak LIKE vbak OCCURS 0 WITH HEADER LINE.
DATA: t_vbap LIKE vbap OCCURS 0 WITH HEADER LINE.
DATA: icnt TYPE i,
gcnt(1) TYPE c,
g_ordertype LIKE vbak-auart,
c_zso(3) TYPE c VALUE 'ZSO'. " sales order type
SELECT vbeln FROM vbak INTO corresponding fields of TABLE t_vbak
WHERE vbeln = '0070000007'.
CHECK sy-subrc = 0.
LOOP AT t_vbak.
Ini structures
CLEAR header_in.
CLEAR header_in_x.
Ini tables
CLEAR item_in.
REFRESH item_in.
CLEAR item_in_x.
REFRESH item_in_x.
CLEAR items_ex.
REFRESH items_ex.
CLEAR return.
REFRESH return.
SELECT vbeln posnr INTO CORRESPONDING FIELDS OF TABLE t_vbap
FROM vbap
WHERE vbeln = t_vbak-vbeln AND posnr = '000100'.
CHECK sy-subrc = 0.
Set header data
header_in_x-updateflag = 'U'.
Set line item data
LOOP AT t_vbap WHERE vbeln = t_vbak-vbeln.
items_ex-operation = 'UPD'.
items_ex-doc_number = t_vbap-vbeln.
items_ex-itm_number = t_vbap-posnr.
items_ex-updat_flag = 'U'.
items_ex-end_rule = ' '. "update end_rule(erlre)value B with null
APPEND items_ex.
CLEAR items_ex.
*
ENDLOOP.
Disable dialog
CALL FUNCTION 'DIALOG_SET_NO_DIALOG'.
Run BAPI
CALL FUNCTION 'SD_SALESDOCUMENT_CHANGE'
EXPORTING
salesdocument = t_vbak-vbeln
order_header_in = header_in
order_header_inx = header_in_x
behave_when_error = 'P'
call_from_bapi = 'X'
TABLES
return = return
items_ex = items_ex.
Check for errors
IF sy-subrc = 0.
LOOP AT return.
IF return-type = 'E'.
rec_ok = 'N'.
EXIT.
ENDIF.
IF return-type = 'S'.
write:/ 'success'.
ENDIF.
ENDLOOP.
IF rec_ok = 'N'.
ROLLBACK WORK.
ELSE.
COMMIT WORK AND WAIT.
WRITE:/ 'Success_flag?'.
ENDIF.
ENDIF.
ENDLOOP.
2006 Jan 31 3:47 AM
Have a look at the domain values for:
items_ex-operation and items_ex-updat_flag.
They are:
Operation:
003 Delete: Message contains objects to be deleted
004 Change: Message contains changes
005 Replace: This message replaces previous messages
009 Original: First message for process
023 Wait/Adjust: Data should not be imported
018 Resend
UPDAT_FLAG:
(blank) Do not create document flow records
X Create document flow records
2 Create doc. flow records except for dely/goods issue/billdoc
Rob
2006 Jan 31 4:08 PM
Hi Rob,
Thanks for helping me.I tried with this. Its not updating table field. Am i doing anything wrong.Please help me how to update. I am trying to update vbeln 0090000137 erlre already 'B' is there, i am trying to update with 'c',but its not and even its not showing any error message.
DATA: return LIKE bapiret2 OCCURS 0 WITH HEADER LINE,
ITEMS_EX LIKE BAPISDIT OCCURS 0 with header line.
DATA: rec_ok TYPE char1.
DATA: t_vbak LIKE vbak OCCURS 0 WITH HEADER LINE.
DATA: t_vbap LIKE vbap OCCURS 0 WITH HEADER LINE.
DATA: icnt TYPE i,
gcnt(1) TYPE c,
g_ordertype LIKE vbak-auart,
c_zso(3) TYPE c VALUE 'ZSO'. " sales order type
SELECT vbeln FROM vbak INTO corresponding fields of TABLE t_vbak
WHERE vbeln = '0090000137'.
CHECK sy-subrc = 0.
LOOP AT t_vbak.
Ini structures
CLEAR header_in.
CLEAR header_in_x.
Ini tables
CLEAR items_ex.
REFRESH items_ex.
CLEAR return.
REFRESH return.
SELECT vbeln posnr INTO CORRESPONDING FIELDS OF TABLE t_vbap
FROM vbap
WHERE vbeln = t_vbak-vbeln AND posnr = '000100'.
CHECK sy-subrc = 0.
Set header data
header_in_x-updateflag = 'U'.
Set line item data
LOOP AT t_vbap WHERE vbeln = t_vbak-vbeln.
items_ex-operation = '005'.
items_ex-doc_number = t_vbap-vbeln.
items_ex-itm_number = t_vbap-posnr.
items_ex-updat_flag = ' '.
items_ex-end_rule = 'C'. "already erlre in vbap is 'B' try to replace w
APPEND items_ex.
CLEAR items_ex.
*
ENDLOOP.
Disable dialog
CALL FUNCTION 'DIALOG_SET_NO_DIALOG'.
Run BAPI
CALL FUNCTION 'SD_SALESDOCUMENT_CHANGE'
EXPORTING
salesdocument = t_vbak-vbeln
order_header_in = header_in
order_header_inx = header_in_x
behave_when_error = 'P'
call_from_bapi = 'X'
TABLES
return = return
item_in = item_in
item_inx = item_in_x
items_ex = items_ex.
Check for errors
IF sy-subrc = 0.
LOOP AT return.
IF return-type = 'E'.
rec_ok = 'N'.
EXIT.
ENDIF.
IF return-type = 'S'.
write:/ 'success'.
ENDIF.
ENDLOOP.
IF rec_ok = 'N'.
ROLLBACK WORK.
ELSE.
COMMIT WORK AND WAIT.
WRITE:/ 'Success_flag?'.
ENDIF.
ENDIF.
ENDLOOP.
2006 Jan 31 4:44 PM
A shot in the dark - try using UPDAT_FLAG:
* Set line item data
LOOP AT t_vbap WHERE vbeln = t_vbak-vbeln.
items_ex-operation = '005'.
items_ex-doc_number = t_vbap-vbeln.
items_ex-itm_number = t_vbap-posnr.
items_ex-updat_flag = 'X'.
items_ex-end_rule = 'C'.
APPEND items_ex.
CLEAR items_ex.
*
ENDLOOP.
2006 Jan 31 9:53 PM
Hi Rob,
I am doing the same way what you told, but its not updation data in table. Can you please check my code what i had done.
DATA: header_in LIKE bapisdhd1,
header_in_x LIKE bapisdhd1x,
item_in LIKE bapisditm OCCURS 0 WITH HEADER LINE,
item_in_x LIKE bapisditmx OCCURS 0 WITH HEADER LINE,
return LIKE bapiret2 OCCURS 0 WITH HEADER LINE,
ITEMS_EX LIKE BAPISDIT OCCURS 0 with header line.
DATA: rec_ok TYPE char1.
DATA: t_vbak LIKE vbak OCCURS 0 WITH HEADER LINE.
DATA: t_vbap LIKE vbap OCCURS 0 WITH HEADER LINE.
DATA: icnt TYPE i,
gcnt(1) TYPE c,
g_ordertype LIKE vbak-auart,
c_zso(3) TYPE c VALUE 'ZSO'. " sales order type
SELECT vbeln FROM vbak INTO corresponding fields of TABLE t_vbak
WHERE vbeln = '0090000141'.
CHECK sy-subrc = 0.
LOOP AT t_vbak.
Ini structures
CLEAR header_in.
CLEAR header_in_x.
Ini tables
CLEAR item_in.
REFRESH item_in.
CLEAR item_in_x.
REFRESH item_in_x.
CLEAR items_ex.
REFRESH items_ex.
CLEAR return.
REFRESH return.
SELECT vbeln posnr INTO CORRESPONDING FIELDS OF TABLE t_vbap
FROM vbap
WHERE vbeln = t_vbak-vbeln AND posnr = '000100'.
CHECK sy-subrc = 0.
Set header data
header_in_x-updateflag = 'U'.
Set line item data
LOOP AT t_vbap WHERE vbeln = t_vbak-vbeln.
items_ex-operation = '005'.
items_ex-doc_number = t_vbap-vbeln.
items_ex-itm_number = t_vbap-posnr.
items_ex-updat_flag = 'X'.
items_ex-end_rule = 'C'.
APPEND items_ex.
CLEAR items_ex.
ENDLOOP.
Disable dialog
CALL FUNCTION 'DIALOG_SET_NO_DIALOG'.
Run BAPI
CALL FUNCTION 'SD_SALESDOCUMENT_CHANGE'
EXPORTING
salesdocument = t_vbak-vbeln
order_header_in = header_in
order_header_inx = header_in_x
behave_when_error = 'P'
call_from_bapi = 'X'
TABLES
return = return
item_in = item_in
item_inx = item_in_x
items_ex = items_ex.
Check for errors
IF sy-subrc = 0.
LOOP AT return.
IF return-type = 'E'.
rec_ok = 'N'.
EXIT.
ENDIF.
IF return-type = 'S'.
write:/ 'success'.
ENDIF.
ENDLOOP.
IF rec_ok = 'N'.
ROLLBACK WORK.
ELSE.
COMMIT WORK AND WAIT.
WRITE:/ 'Success_flag?'.
ENDIF.
ENDIF.
ENDLOOP.
2006 Jan 31 9:58 PM
Some things you can try:
What messages are in return?
Is the commit being performed? Try it without waiting.
Is the other data being updated.
Rob
2006 Feb 01 1:03 AM
Hi Rob,
In return i am getting two records:
1.
Type: S
ID :V4
Number: 233
Message: ORDER_HEADER_IN has been processed successfully
Message-v1:VBAKKOM
parameter:ORDER_HEADER_IN
system :dv1030
2.
Type: S
ID :V1
Number: 041
Message: No data was changed
parameter:ORDER_HEADER_IN
system :dv1030
I tried commit without wait, but its not updating.
2006 Feb 01 1:59 AM
Have you tried updating other fields in this segment? Does it work?
Rob
2006 Feb 01 3:13 AM
Hi Rob,
I tried with same program with item_in,item_in_x for abgru field,its updating in vbap. This is the first time i am using this items_ex structure. Have you ever used this structure to update any field . If you have anything,Can you please send me the tset code?
Thanks for your help.
2006 Feb 01 3:51 AM
2006 Feb 01 4:46 AM
2006 Feb 01 2:07 PM
I'm suggesting that you try updating other fields in items_ex.
Rob
2006 Feb 01 3:16 PM
Hi Rob,
I tried for this field.
LOOP AT t_vbap WHERE vbeln = t_vbak-vbeln.
items_ex-operation = '005'.
items_ex-doc_number = t_vbap-vbeln.
items_ex-itm_number = t_vbap-posnr.
items_ex-updat_flag = 'X'.
items_ex-item_categ = 'ZSO2'. "already set with zs01.
APPEND items_ex.
CLEAR items_ex.
ENDLOOP.
Its not updated. I was thinking that the way to use items_ex may be wrong to update field. I dont know exacatly how to use this structure to update field.
This is the first time i am using.
I appreciated your help.