Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

Change Schedule-Lines with BAPI_SALESORDER_CHANGE

Former Member
0 Likes
10,653

Hello,

I want to change Sales Orders with given schedule-dates using the function module "BAPI_SALESORDER_CHANGE".

It seems, that this FM ignores the table-parameters schedule_lines and schedulde_linesx.

Here's the code of a small test-program:

REPORT zschoe1.

TABLES: vbak, vbap, vbep.

PARAMETERS p_vbeln LIKE vbak-vbeln DEFAULT 15003132.

DATA: lt_schdl TYPE TABLE OF bapischdl WITH HEADER LINE,
      ls_ord_header_inx TYPE bapisdh1x,
      ls_return LIKE bapiret2,
      lt_return TYPE TABLE OF bapiret2 WITH HEADER LINE,
      lt_schdlx TYPE TABLE OF bapischdlx WITH HEADER LINE.



*--------------------------------------------------------------------*
START-OF-SELECTION.

  SELECT SINGLE * FROM vbap WHERE vbeln = p_vbeln.
  CHECK sy-subrc = 0.

  SELECT * FROM vbep WHERE vbeln = p_vbeln.
    WRITE: / 'Before:',  vbep-posnr, vbep-etenr,
             'EDATU', vbep-edatu,
             'MBDAT', vbep-mbdat.
  ENDSELECT.

  SELECT SINGLE * FROM vbep WHERE vbeln = vbap-vbeln
                              AND posnr = vbap-posnr.

  CHECK sy-subrc = 0.

  CLEAR lt_schdl.
  lt_schdl-itm_number = vbep-posnr.
  lt_schdl-sched_line = vbep-etenr.

* Einteilungsdatum
  lt_schdl-req_date   = vbep-edatu + 1.
  lt_schdl-date_type  = '1'.
* Materialbereitstellungsdatum
  lt_schdl-ms_date    = vbep-mbdat - 1.

  SKIP.
  WRITE: /  'WANTED:', lt_schdl-itm_number,
         /  'DLV_DATE  ', lt_schdl-dlv_date,
         /  'MS_DATE   ', lt_schdl-ms_date,
         /  'GI_DATE   ', lt_schdl-gi_date,
         /  'TP_DATE   ', lt_schdl-tp_date,
         /  'LOAD_DATE ', lt_schdl-load_date,
         /  'REQ_DATE  ', lt_schdl-req_date.

  APPEND lt_schdl.

  ls_ord_header_inx-updateflag = 'U'.

  lt_schdlx-updateflag = 'U'.
  lt_schdlx-req_date   = 'X'.
  lt_schdlx-ms_date    = 'X'.

**  lt_schdlx-date_type  = 'X'.
**  lt_schdlx-dlv_date   = 'X'.
**  lt_schdlx-load_date  = 'X'.
**  lt_schdlx-gi_date    = 'X'.
**  lt_schdlx-tp_date    = 'X'.
  APPEND lt_schdlx.



  CALL FUNCTION 'BAPI_SALESORDER_CHANGE'
       EXPORTING
            salesdocument    = p_vbeln
            order_header_inx = ls_ord_header_inx
       TABLES
            return           = lt_return
            schedule_lines   = lt_schdl
            schedule_linesx  = lt_schdlx.
  .
  CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
       EXPORTING
            wait   = 'X'
       IMPORTING
            return = ls_return.

  SKIP.
  LOOP AT lt_return.
    WRITE: / lt_return-message(100).
  ENDLOOP.

  SKIP.
  SELECT * FROM vbep WHERE vbeln = p_vbeln
                      AND posnr = vbep-posnr.
    WRITE: / 'After:',  vbep-posnr, vbep-etenr,
             'EDATU', vbep-edatu,
             'MBDAT', vbep-mbdat.
  ENDSELECT.
 

Output of this program is:

Before: 001000 0001 EDATU 07.11.2006 MBDAT 02.11.2006   
                                                        
WANTED: 001000                                          
DLV_DATE   00.00.0000                                   
MS_DATE    01.11.2006                                   
GI_DATE    00.00.0000                                   
TP_DATE    00.00.0000                                   
LOAD_DATE  00.00.0000                                   
REQ_DATE   08.11.2006                                                                                
ORDER_HEADER_IN erfolgreich verarbeitet                 
Interner Auftrag 0015003132 wurde gesichert             
                                                        
After: 001000 0001 EDATU 07.11.2006 MBDAT 02.11.2006   

As you can see, the situation "Before" and "After" ist the same, although the FM-Call was successfully. (Sorry - I just recognize, that the message-output after "ORDER_HEADER_IN" is in german).

With transaction VA02 it is possible to change the sales order manually to this schedule-parameters. So my very last solution will be, to try batch-input or call transaction instead of the function module.

But I still hope, that somebody can help me regarding the FM BAPI_SALESORDER_CHANGE

Regards

Juergen Schoetteler

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
4,232

Hi Jurgen

Have done some minor modifications to your program. Please check if this helps you.

TABLES: vbak, vbap, vbep.

PARAMETERS p_vbeln LIKE vbak-vbeln DEFAULT 15003132.

DATA: lt_schdl TYPE TABLE OF bapischdl WITH HEADER LINE,

ls_ord_header_inx TYPE bapisdh1x,

ls_return LIKE bapiret2,

lt_return TYPE TABLE OF bapiret2 WITH HEADER LINE,

lt_schdlx TYPE TABLE OF bapischdlx WITH HEADER LINE.

----


START-OF-SELECTION.

SELECT SINGLE * FROM vbap WHERE vbeln = p_vbeln.

CHECK sy-subrc = 0.

SELECT * FROM vbep WHERE vbeln = p_vbeln.

WRITE: / 'Before:', vbep-posnr, vbep-etenr,

'EDATU', vbep-edatu,

'MBDAT', vbep-mbdat.

ENDSELECT.

SELECT SINGLE * FROM vbep WHERE vbeln = vbap-vbeln

AND posnr = vbap-posnr.

CHECK sy-subrc = 0.

CLEAR lt_schdl.

lt_schdl-itm_number = lt_schdlx-itm_number = vbep-posnr.

lt_schdl-sched_line = lt_schdlx-sched_line = vbep-etenr.

  • Einteilungsdatum

lt_schdl-req_date = vbep-edatu + 1.

lt_schdl-date_type = '1'.

  • Materialbereitstellungsdatum

lt_schdl-ms_date = vbep-mbdat - 1.

SKIP.

WRITE: / 'WANTED:', lt_schdl-itm_number,

/ 'DLV_DATE ', lt_schdl-dlv_date,

/ 'MS_DATE ', lt_schdl-ms_date,

/ 'GI_DATE ', lt_schdl-gi_date,

/ 'TP_DATE ', lt_schdl-tp_date,

/ 'LOAD_DATE ', lt_schdl-load_date,

/ 'REQ_DATE ', lt_schdl-req_date.

APPEND lt_schdl.

ls_ord_header_inx-updateflag = 'U'.

lt_schdlx-updateflag = 'U'.

lt_schdlx-req_date = 'X'.

lt_schdlx-ms_date = 'X'.

    • lt_schdlx-date_type = 'X'.

    • lt_schdlx-dlv_date = 'X'.

    • lt_schdlx-load_date = 'X'.

    • lt_schdlx-gi_date = 'X'.

    • lt_schdlx-tp_date = 'X'.

APPEND lt_schdlx.

ls_ord_header_inx-updateflag = 'X'.

CALL FUNCTION 'BAPI_SALESORDER_CHANGE'

EXPORTING

salesdocument = p_vbeln

order_header_inx = ls_ord_header_inx

TABLES

return = lt_return

schedule_lines = lt_schdl

schedule_linesx = lt_schdlx.

.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'

EXPORTING

wait = 'X'

IMPORTING

return = ls_return.

SKIP.

LOOP AT lt_return.

WRITE: / lt_return-message(100).

ENDLOOP.

SKIP.

SELECT * FROM vbep WHERE vbeln = p_vbeln

AND posnr = vbep-posnr.

WRITE: / 'After:', vbep-posnr, vbep-etenr,

'EDATU', vbep-edatu,

'MBDAT', vbep-mbdat.

ENDSELECT.

Kind Regards

Eswar

Note: Reward for helpful answers

Hello,

I want to change Sales Orders with given schedule-dates using the function module "BAPI_SALESORDER_CHANGE".

It seems, that this FM ignores the table-parameters schedule_lines and schedulde_linesx.

Here's the code of a small test-program:

REPORT zschoe1.

TABLES: vbak, vbap, vbep.

PARAMETERS p_vbeln LIKE vbak-vbeln DEFAULT 15003132.

DATA: lt_schdl TYPE TABLE OF bapischdl WITH HEADER LINE,
      ls_ord_header_inx TYPE bapisdh1x,
      ls_return LIKE bapiret2,
      lt_return TYPE TABLE OF bapiret2 WITH HEADER LINE,
      lt_schdlx TYPE TABLE OF bapischdlx WITH HEADER LINE.



*--------------------------------------------------------------------*
START-OF-SELECTION.

  SELECT SINGLE * FROM vbap WHERE vbeln = p_vbeln.
  CHECK sy-subrc = 0.

  SELECT * FROM vbep WHERE vbeln = p_vbeln.
    WRITE: / 'Before:',  vbep-posnr, vbep-etenr,
             'EDATU', vbep-edatu,
             'MBDAT', vbep-mbdat.
  ENDSELECT.

  SELECT SINGLE * FROM vbep WHERE vbeln = vbap-vbeln
                              AND posnr = vbap-posnr.

  CHECK sy-subrc = 0.

  CLEAR lt_schdl.
  lt_schdl-itm_number = vbep-posnr.
  lt_schdl-sched_line = vbep-etenr.

* Einteilungsdatum
  lt_schdl-req_date   = vbep-edatu + 1.
  lt_schdl-date_type  = '1'.
* Materialbereitstellungsdatum
  lt_schdl-ms_date    = vbep-mbdat - 1.

  SKIP.
  WRITE: /  'WANTED:', lt_schdl-itm_number,
         /  'DLV_DATE  ', lt_schdl-dlv_date,
         /  'MS_DATE   ', lt_schdl-ms_date,
         /  'GI_DATE   ', lt_schdl-gi_date,
         /  'TP_DATE   ', lt_schdl-tp_date,
         /  'LOAD_DATE ', lt_schdl-load_date,
         /  'REQ_DATE  ', lt_schdl-req_date.

  APPEND lt_schdl.

  ls_ord_header_inx-updateflag = 'U'.

  lt_schdlx-updateflag = 'U'.
  lt_schdlx-req_date   = 'X'.
  lt_schdlx-ms_date    = 'X'.

**  lt_schdlx-date_type  = 'X'.
**  lt_schdlx-dlv_date   = 'X'.
**  lt_schdlx-load_date  = 'X'.
**  lt_schdlx-gi_date    = 'X'.
**  lt_schdlx-tp_date    = 'X'.
  APPEND lt_schdlx.



  CALL FUNCTION 'BAPI_SALESORDER_CHANGE'
       EXPORTING
            salesdocument    = p_vbeln
            order_header_inx = ls_ord_header_inx
       TABLES
            return           = lt_return
            schedule_lines   = lt_schdl
            schedule_linesx  = lt_schdlx.
  .
  CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
       EXPORTING
            wait   = 'X'
       IMPORTING
            return = ls_return.

  SKIP.
  LOOP AT lt_return.
    WRITE: / lt_return-message(100).
  ENDLOOP.

  SKIP.
  SELECT * FROM vbep WHERE vbeln = p_vbeln
                      AND posnr = vbep-posnr.
    WRITE: / 'After:',  vbep-posnr, vbep-etenr,
             'EDATU', vbep-edatu,
             'MBDAT', vbep-mbdat.
  ENDSELECT.
 

Output of this program is:

Before: 001000 0001 EDATU 07.11.2006 MBDAT 02.11.2006   
                                                        
WANTED: 001000                                          
DLV_DATE   00.00.0000                                   
MS_DATE    01.11.2006                                   
GI_DATE    00.00.0000                                   
TP_DATE    00.00.0000                                   
LOAD_DATE  00.00.0000                                   
REQ_DATE   08.11.2006                                                                                
ORDER_HEADER_IN erfolgreich verarbeitet                 
Interner Auftrag 0015003132 wurde gesichert             
                                                        
After: 001000 0001 EDATU 07.11.2006 MBDAT 02.11.2006   

As you can see, the situation "Before" and "After" ist the same, although the FM-Call was successfully. (Sorry - I just recognize, that the message-output after "ORDER_HEADER_IN" is in german).

With transaction VA02 it is possible to change the sales order manually to this schedule-parameters. So my very last solution will be, to try batch-input or call transaction instead of the function module.

But I still hope, that somebody can help me regarding the FM BAPI_SALESORDER_CHANGE

Regards

Juergen Schoetteler

3 REPLIES 3
Read only

Former Member
0 Likes
4,233

Hi Jurgen

Have done some minor modifications to your program. Please check if this helps you.

TABLES: vbak, vbap, vbep.

PARAMETERS p_vbeln LIKE vbak-vbeln DEFAULT 15003132.

DATA: lt_schdl TYPE TABLE OF bapischdl WITH HEADER LINE,

ls_ord_header_inx TYPE bapisdh1x,

ls_return LIKE bapiret2,

lt_return TYPE TABLE OF bapiret2 WITH HEADER LINE,

lt_schdlx TYPE TABLE OF bapischdlx WITH HEADER LINE.

----


START-OF-SELECTION.

SELECT SINGLE * FROM vbap WHERE vbeln = p_vbeln.

CHECK sy-subrc = 0.

SELECT * FROM vbep WHERE vbeln = p_vbeln.

WRITE: / 'Before:', vbep-posnr, vbep-etenr,

'EDATU', vbep-edatu,

'MBDAT', vbep-mbdat.

ENDSELECT.

SELECT SINGLE * FROM vbep WHERE vbeln = vbap-vbeln

AND posnr = vbap-posnr.

CHECK sy-subrc = 0.

CLEAR lt_schdl.

lt_schdl-itm_number = lt_schdlx-itm_number = vbep-posnr.

lt_schdl-sched_line = lt_schdlx-sched_line = vbep-etenr.

  • Einteilungsdatum

lt_schdl-req_date = vbep-edatu + 1.

lt_schdl-date_type = '1'.

  • Materialbereitstellungsdatum

lt_schdl-ms_date = vbep-mbdat - 1.

SKIP.

WRITE: / 'WANTED:', lt_schdl-itm_number,

/ 'DLV_DATE ', lt_schdl-dlv_date,

/ 'MS_DATE ', lt_schdl-ms_date,

/ 'GI_DATE ', lt_schdl-gi_date,

/ 'TP_DATE ', lt_schdl-tp_date,

/ 'LOAD_DATE ', lt_schdl-load_date,

/ 'REQ_DATE ', lt_schdl-req_date.

APPEND lt_schdl.

ls_ord_header_inx-updateflag = 'U'.

lt_schdlx-updateflag = 'U'.

lt_schdlx-req_date = 'X'.

lt_schdlx-ms_date = 'X'.

    • lt_schdlx-date_type = 'X'.

    • lt_schdlx-dlv_date = 'X'.

    • lt_schdlx-load_date = 'X'.

    • lt_schdlx-gi_date = 'X'.

    • lt_schdlx-tp_date = 'X'.

APPEND lt_schdlx.

ls_ord_header_inx-updateflag = 'X'.

CALL FUNCTION 'BAPI_SALESORDER_CHANGE'

EXPORTING

salesdocument = p_vbeln

order_header_inx = ls_ord_header_inx

TABLES

return = lt_return

schedule_lines = lt_schdl

schedule_linesx = lt_schdlx.

.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'

EXPORTING

wait = 'X'

IMPORTING

return = ls_return.

SKIP.

LOOP AT lt_return.

WRITE: / lt_return-message(100).

ENDLOOP.

SKIP.

SELECT * FROM vbep WHERE vbeln = p_vbeln

AND posnr = vbep-posnr.

WRITE: / 'After:', vbep-posnr, vbep-etenr,

'EDATU', vbep-edatu,

'MBDAT', vbep-mbdat.

ENDSELECT.

Kind Regards

Eswar

Note: Reward for helpful answers

Read only

0 Likes
4,232

Thank You Eswar!

Filling lt_schdlx-itm_number and -sched_line is the solution.

Regards

Read only

0 Likes
4,232

Glad could help you Jurgen

Eswar