Modify the plan line BAPI_SCHEDULE_MAINTAIN of the plan agreement

Note

1. The fixed logo is X by default and needs to be written in through enhancement

2. Delete delete_ind to pass L, EKET physically delete, if lt_schedulex-sched_linex ='X' is not passed, BAPI may recalculate sched_line after deletion, and then press the transferred value

3. The enhanced structure name of the extension can be taken out first through BAPI_SAG_GETDETAIL, the test is not written in, it is updated, it should be missing the enhancement

4. If you have already received the goods, if you modify other plan lines, an error will be reported as MEOUT 200. The subcontracting component to 5500006237 00010 can no longer be changed, and the front desk can modify it, directly and implicitly enhance to skip the error.

5. Error 61 781 error occurred when determining material parts, it may be that the component demand date is greater than the schedule line date

 

 

DEMO 1

at end of ebeln.

      read table gt_alv index lv_tabix.

 

 

*      call function 'BAPI_SAG_GETDETAIL'

*        exporting

*          purchasingdocument = gt_alv-ebeln

*          item_data          = 'X'

*          schedule_data      = 'X'

*        tables

*          item               = lt_item

*          schedule           = lt_schedule

**         extensionout       = extensionout

**         return             = lt_return

*        .

 

      call function 'BAPI_SCHEDULE_MAINTAIN'

        exporting

          purchasingdocument = gt_alv-ebeln

        tables

          schedule           = lt_schedule

          schedulex          = lt_schedulex

*         EXTENSIONIN        = EXTENSIONIN

*         EXTENSIONOUT       = EXTENSIONOUT

          return             = lt_return.

 

 

      loop at lt_return where type ca 'AEX'.

        message id lt_return-id type lt_return-type number lt_return-number

          with lt_return-message_v1 lt_return-message_v2

               lt_return-message_v3 lt_return-message_v4

               into  data(lv_msg).

        gt_alv-rtmsg = gt_alv-rtmsg && lv_msg && ';'.

      endloop.

      if sy-subrc = 0.

        call function 'BAPI_TRANSACTION_ROLLBACK'.

        gt_alv-led = 1.

*      lt_ekko-rtmsg = 1.

      else.

        call function 'BAPI_TRANSACTION_COMMIT'

          exporting

            wait = 'X'.

        gt_alv-led = 3.

        gt_alv-rtmsg ='Success'.

      endif.

 

      modify gt_alv transporting led rtmsg where ebeln = gt_alv-ebeln.

      clear:lt_item,lt_item[],lt_schedule,lt_schedule[],lt_return,lt_return[].

    endat.

 

DEMO 2

form frm_data_import .

* BAPI

  data :

    lt_return        type bapiret2 occurs 0 with header line.

  data lt_item                  type standard table of bapimeoutitem with header line.

  data lt_schedule              type standard table of bapimeoutschedule with header line.

  data lt_schedulex          type standard table of bapimeoutschedulex with header line.

 

  data:begin of lt_ekko occurs 0,

         ebeln like ekpo-ebeln,

*         ebelp like ekpo-ebelp,

         led,

         rtmsg type bapi_msg,

       end of lt_ekko.

  data:

        lv_eindt like eket-eindt.

  data: begin of ls_zmmr007,

          ebeln type eket-ebeln,

          ebelp type eket-ebelp,

          etenr type eket-etenr,

          fixkz type eket-fixkz,

        end of ls_zmmr007.

  data lt_zmmr007 like table of ls_zmmr007.

 

  loop at <gt_out> into <gs_out>.

    move-corresponding <gs_out> to lt_ekko.

    collect lt_ekko.

  endloop.

  select ebeln,ebelp,etenr,eindt,fixkz,glmng

    into table @data(lt_eket)

    from eket

    for all entries in @lt_ekko

    where ebeln = @lt_ekko-ebeln.

  sort lt_eket by ebeln ebelp etenr descending.

  data (lt_eket2) = lt_eket.

  sort lt_eket2 by ebeln ebelp etenr fixkz.

 

  loop at lt_ekko.

    clear:lt_item,lt_item[],lt_schedule,lt_schedule[],lt_return,lt_return[],ls_zmmr007,lt_zmmr007.

 

    call function 'BAPI_SAG_GETDETAIL'

      exporting

        purchasingdocument = lt_ekko-ebeln

        item_data          = 'X'

        schedule_data      = 'X'

      tables

        item               = lt_item

        schedule           = lt_schedule

*       extensionout       = extensionout

*       return             = lt_return

      .

    data(lt_schedule2) = lt_schedule[].

    sort lt_schedule2 by item_no sched_line descending.

    loop at lt_item.

      clear lv_eindt. "A po line is cleared once, in order to delete the following line once

      read table lt_schedule2 into data(ls_schedule2) with key item_no = lt_item-item_no.

      read table <gt_out> into <gs_out> with key ('EBELN') = lt_ekko-ebeln ('EBELP') = lt_item-item_no binary search.

      if sy-subrc = 0.

        loop at <gt_out> into <gs_out> from sy-tabix.

          assign component 'EBELN' of structure <gs_out> to field-symbol(<lv_ebeln>).

          assign component 'EBELP' of structure <gs_out> to field-symbol(<lv_ebelp>).

          if <lv_ebeln> ne lt_ekko-ebeln or <lv_ebelp> ne lt_item-item_no.

            exit.

          endif.

          loop at gt_fieldcat into data(ls_fieldcat).

            if sy-tabix> = 11 and sy-tabix <= gv_counts.

              assign component ls_fieldcat-fieldname of structure <gs_out> to field-symbol(<lv_menge>).

              split ls_fieldcat-coltext at '-' into data(lv_date) data(lv_type) data(lv_week).

              if lv_type = '02'. "Build a new plan line

 

              elseif lv_type = '03'.

                if lv_eindt is initial. "One po line is deleted once

                  lv_eindt = lv_date. "Early forecast date

                  if lt_item-plant = '2031' or lt_item-plant = '2041'.

                    loop at lt_schedule

*                      where delivery_date >= lv_eindt "delivery_date居然是c

                      . "The forecast plan lines after the earliest forecast date are covered,

                      data lv_datum like sy-datum.

                      lv_datum = lt_schedule-delivery_date(4) && lt_schedule-delivery_date+5(2) && lt_schedule-delivery_date+8(2).

                      if lv_datum >= lv_eindt.

                        read table lt_eket2 into data(ls_eket2) with key ebeln = lt_ekko-ebeln ebelp = lt_schedule-item_no etenr = lt_schedule-sched_line fixkz = 'X' binary search.

                        if sy-subrc = 0 and ls_eket2-glmng is initial. "The delivered ones cannot be deleted

                          lt_schedulex-item_no = lt_schedule-item_no.

                          lt_schedulex-sched_line = lt_schedule-sched_line .

                          lt_schedulex-delete_ind = 'X'.

                          append lt_schedulex.

                          lt_schedule-delete_ind = 'L'.

                          modify lt_schedule.

                        endif.

                      endif.

                    endloop.

                  else.

                    loop at lt_schedule. "Delete all forecasts

                      read table lt_eket2 into ls_eket2 with key ebeln = lt_ekko-ebeln ebelp = lt_schedule-item_no etenr = lt_schedule-sched_line fixkz = 'X' binary search.

                      if sy-subrc = 0 and ls_eket2-glmng is initial. "The delivered ones cannot be deleted

                        lt_schedulex-item_no = lt_schedule-item_no.

                        lt_schedulex-sched_line = lt_schedule-sched_line .

                        lt_schedulex-delete_ind = 'X'.

                        append lt_schedulex.

                        lt_schedule-delete_ind = 'L'.

                        modify lt_schedule.

                      endif.

                    endloop.

                  endif.

                endif.

              endif.

              if <lv_menge> is not initial.

                clear:lt_schedule,lt_schedulex.

                ls_schedule2-sched_line = ls_schedule2-sched_line + 1.

                lt_schedule-item_no = lt_item-item_no.

                lt_schedule-sched_line = ls_schedule2-sched_line.

                lt_schedule-delivery_date = lv_date.

                lt_schedule-quantity = <lv_menge>.

                append lt_schedule.

                lt_schedulex-item_no = lt_schedule-item_no.

                lt_schedulex-sched_line = lt_schedule-sched_line .

                lt_schedulex-delivery_date = 'X'.

                lt_schedulex-quantity = 'X'.

                append lt_schedulex.

 

                clear ls_zmmr007.

                ls_zmmr007-ebeln = lt_ekko-ebeln.

                ls_zmmr007-ebelp = lt_schedule-item_no.

                ls_zmmr007-etenr = lt_schedule-sched_line.

                if lv_type = '02'.

                  ls_zmmr007-fixkz = ''.

                elseif lv_type = '03'.

                  ls_zmmr007-fixkz = 'X'.

                endif.

                append ls_zmmr007 to lt_zmmr007.

              endif.

            endif.

          endloop.

          clear:ls_schedule2.

        endloop.

      endif.

 

    endloop.

 

    export lt_zmmr007 = lt_zmmr007 to memory id 'ZMMR007'.

    call function 'BAPI_SCHEDULE_MAINTAIN'

      exporting

        purchasingdocument = lt_ekko-ebeln

      tables

        schedule           = lt_schedule

        schedulex          = lt_schedulex

*       EXTENSIONIN        = EXTENSIONIN

*       EXTENSIONOUT       = EXTENSIONOUT

        return             = lt_return.

 

 

    loop at lt_return where type ca 'AEX'.

      message id lt_return-id type lt_return-type number lt_return-number

        with lt_return-message_v1 lt_return-message_v2

             lt_return-message_v3 lt_return-message_v4

             into  data(lv_msg).

      lt_ekko-rtmsg = lt_ekko-rtmsg && lv_msg && ';'.

    endloop.

    if sy-subrc = 0.

      call function 'BAPI_TRANSACTION_ROLLBACK'.

      lt_ekko-led = 1.

*      lt_ekko-rtmsg = 1.

    else.

      call function 'BAPI_TRANSACTION_COMMIT'

        exporting

          wait = 'X'.

      lt_ekko-led = 3.

      lt_ekko-rtmsg ='Success'.

    endif.

    modify lt_ekko.

  endloop.

 

  loop at <gt_out> into <gs_out>.

    assign component 'EBELN' of structure <gs_out> to <lv_ebeln>.

    assign component 'LED' of structure <gs_out> to field-symbol(<lv_led>).

    assign component 'RTMSG' of structure <gs_out> to field-symbol(<lv_rtmsg>).

    read table lt_ekko with key ebeln = <lv_ebeln> binary search.

    <lv_led> = lt_ekko-led.

    <lv_rtmsg> = lt_ekko-rtmsg.

    modify <gt_out> from <gs_out>.

  endloop.

 

*Save table

  data:

        lt_ztmm007a like table of ztmm007a with header line.

  loop at <gt_out> into <gs_out>.

    move-corresponding <gs_out> to lt_ztmm007a.

    lt_ztmm007a-version = gv_version.

    assign component 'LED' of structure <gs_out> to <lv_led>.

    if <lv_led> = 3.

      loop at gt_fieldcat into ls_fieldcat from 11 to gv_counts.

        lt_ztmm007a-zjhrq = ls_fieldcat-fieldname.

        assign component ls_fieldcat-fieldname of structure <gs_out> to <lv_menge>.

        lt_ztmm007a-amount = <lv_ amount>.

        split ls_fieldcat-coltext at '-' into lv_date lv_type lv_week.

        lt_ztmm007a-type = lv_type.

        lt_ztmm007a-erdat = sy-datum.

        lt_ztmm007a-erzet = sy-uzeit.

        lt_ztmm007a-ernam = sy-uname.

        lt_ztmm007a-aedat = sy-datum.

        lt_ztmm007a-aezet = sy-uzeit.

        lt_ztmm007a-aenam = sy-uname.

        append lt_ztmm007a.

      endloop.

    endif.

  endloop.

  if lt_ztmm007a is not initial.

    modify ztmm007a from table lt_ztmm007a.

    commit work and wait.

    message s001(00) with'Version data has been saved'.

  endif.

 

 

*  perform frm_alv_styl.

  perform frm_alv_refresh using go_alvgrid.

endform.

 

Guess you like

Origin blog.csdn.net/cylcylcylcylwo/article/details/114015060