Измените плановую строку BAPI_SCHEDULE_MAINTAIN планового соглашения

Примечание

1. Фиксированным логотипом по умолчанию является X, и его необходимо дополнить.

2. Удалите delete_ind, чтобы передать L, EKET физически удалить, если lt_schedulex-sched_linex = 'X' не передан, BAPI может пересчитать sched_line после удаления, а затем нажать переданное значение

3. Расширенное имя структуры расширения может быть извлечено сначала через BAPI_SAG_GETDETAIL, тест не записывается, он обновляется, в нем должно отсутствовать расширение

4. Если вы уже получили товары, то при изменении других строк плана об ошибке будет сообщено как MEOUT 200. Компонент субподряда на 5500006237 00010 больше не может быть изменен, и администратор может изменить его, прямо и неявно улучшив чтобы пропустить ошибку.

5. Ошибка 61 781 Произошла ошибка при определении деталей материала, возможно, дата потребности в компонентах больше даты строки графика.

 

 

ДЕМО 1

в конце ebeln.

      читать таблицу gt_alv index lv_tabix.

 

 

* вызов функции 'BAPI_SAG_GETDETAIL'

* экспорт

* Purchasedocument = gt_alv-ebeln

* item_data = 'X'

* schedule_data = 'X'

* столы

* item = lt_item

* расписание = lt_schedule

** extensionout = extensionout

** return = lt_return

*.

 

      вызвать функцию 'BAPI_SCHEDULE_MAINTAIN'

        экспорт

          Purchasedocument = gt_alv-ebeln

        столы

          schedule = lt_schedule

          schedulex = lt_schedulex

* EXTENSIONIN = EXTENSIONIN

* EXTENSIONOUT = РАСШИРЕНИЕ

          return = lt_return.

 

 

      цикл в lt_return, где введите ca 'AEX'.

        идентификатор сообщения lt_return-id тип lt_return-type номер lt_return-number

          с lt_return-message_v1 lt_return-message_v2

               lt_return-message_v3 lt_return-message_v4

               в данные (lv_msg).

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

      конец петли.

      если sy-subrc = 0.

        вызовите функцию 'BAPI_TRANSACTION_ROLLBACK'.

        gt_alv-led = 1.

* lt_ekko-rtmsg = 1.

      еще.

        вызвать функцию 'BAPI_TRANSACTION_COMMIT'

          экспорт

            ждать = 'X'.

        gt_alv-led = 3.

        gt_alv-rtmsg = "Успех".

      endif.

 

      изменить gt_alv, транспортирующий led rtmsg, где ebeln = gt_alv-ebeln.

      очистить: lt_item, lt_item [], lt_schedule, lt_schedule [], lt_return, lt_return [].

    эндат.

 

ДЕМО 2

форма frm_data_import.

* BAPI

  данные :

    lt_return типа bapiret2 встречается 0 со строкой заголовка.

  data lt_item тип стандартной таблицы bapimeoutitem со строкой заголовка.

  data lt_schedule тип стандартной таблицы bapimeoutschedule со строкой заголовка.

  data lt_schedulex тип стандартной таблицы bapimeoutschedulex со строкой заголовка.

 

  данные: начало lt_ekko встречается 0,

         ебельн, как экпо-ебельн,

* ебельп вроде экпо-ебельп,

         вел,

         rtmsg типа bapi_msg,

       конец lt_ekko.

  данные:

        lv_eindt, как eket-eindt.

  данные: начало ls_zmmr007,

          ebeln type eket-ebeln,

          эбелп типа экет-эбельп,

          этэнр типа экет-этэнр,

          fixkz типа eket-fixkz,

        конец ls_zmmr007.

  data lt_zmmr007 как таблица ls_zmmr007.

 

  цикл из <gt_out> в <gs_out>.

    переместить соответствующий <gs_out> в lt_ekko.

    собираем lt_ekko.

  конец петли.

  выберите ebeln, ebelp, etenr, eindt, fixkz, glmng

    в таблицу @data (lt_eket)

    из экета

    для всех записей в @lt_ekko

    где ebeln = @ lt_ekko-ebeln.

  сортировать lt_eket по ebeln ebelp etenr по убыванию.

  данные (lt_eket2) = lt_eket.

  sort lt_eket2 по ebeln ebelp etenr fixkz.

 

  петля на lt_ekko.

    очистить: lt_item, lt_item [], lt_schedule, lt_schedule [], lt_return, lt_return [], ls_zmmr007, lt_zmmr007.

 

    вызвать функцию 'BAPI_SAG_GETDETAIL'

      экспорт

        Purchasedocument = lt_ekko-ebeln

        item_data = 'X'

        schedule_data = 'X'

      столы

        item = lt_item

        schedule = lt_schedule

* extensionout = extensionout

* return = lt_return

      .

    данные (lt_schedule2) = lt_schedule [].

    отсортировать lt_schedule2 по элементу_no sched_line по убыванию.

    цикл в lt_item.

      clear lv_eindt. "Строка po очищается один раз, чтобы удалить следующую строку один раз

      читать таблицу lt_schedule2 в данные (ls_schedule2) с ключом item_no = lt_item-item_no.

      прочитать таблицу <gt_out> в <gs_out> с ключом ('EBELN') = lt_ekko-ebeln ('EBELP') = lt_item-item_no двоичный поиск.

      если sy-subrc = 0.

        цикл из <gt_out> в <gs_out> из sy-tabix.

          назначить компонент 'EBELN' структуры <gs_out> полю-символу (<lv_ebeln>).

          назначить компонент 'EBELP' структуры <gs_out> полю-символу (<lv_ebelp>).

          если <lv_ebeln> ne lt_ekko-ebeln или <lv_ebelp> ne lt_item-item_no.

            выход.

          endif.

          цикл из gt_fieldcat в данные (ls_fieldcat).

            если sy-tabix> = 11 и sy-tabix <= gv_counts.

              назначить компонент ls_fieldcat-fieldname структуры <gs_out> символу поля (<lv_menge>).

              разделить ls_fieldcat-coltext в '-' на данные (lv_date) data (lv_type) data (lv_week).

              if lv_type = '02'. "Создайте новую строку плана

 

              elseif lv_type = '03'.

                если lv_eindt является начальным. "Одна строка po удаляется один раз

                  lv_eindt = lv_date. "Дата раннего прогноза

                  если lt_item-plant = '2031' или lt_item-plant = '2041'.

                    цикл в lt_schedule

* где delivery_date> = lv_eindt "delivery_date 居然 是 c

                      . "Строки плана прогноза после самой ранней даты прогноза покрываются,

                      data lv_datum как sy-datum.

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

                      если lv_datum> = lv_eindt.

                        читать таблицу lt_eket2 в данные (ls_eket2) с ключом ebeln = lt_ekko-ebeln ebelp = lt_schedule-item_no etenr = lt_schedule-sched_line fixkz = 'X' двоичный поиск.

                        если sy-subrc = 0 и ls_eket2-glmng является начальным. "Доставленные не могут быть удалены

                          lt_schedulex-item_no = lt_schedulex-item_no.

                          lt_schedulex-sched_line = lt_schedulex-sched_line.

                          lt_schedulex-delete_ind = «Х».

                          добавьте lt_schedulex.

                          lt_schedule-delete_ind = «L».

                          изменить lt_schedule.

                        endif.

                      endif.

                    конец петли.

                  еще.

                    цикл в lt_schedule. "Удалить все прогнозы

                      прочитать таблицу lt_eket2 в ls_eket2 с ключом ebeln = lt_ekko-ebeln ebelp = lt_schedule-item_no etenr = lt_schedule-sched_line fixkz = 'X' двоичный поиск.

                      если sy-subrc = 0 и ls_eket2-glmng является начальным. "Доставленные не могут быть удалены

                        lt_schedulex-item_no = lt_schedulex-item_no.

                        lt_schedulex-sched_line = lt_schedulex-sched_line.

                        lt_schedulex-delete_ind = «Х».

                        добавьте lt_schedulex.

                        lt_schedule-delete_ind = «L».

                        изменить lt_schedule.

                      endif.

                    конец петли.

                  endif.

                endif.

              endif.

              если <lv_menge> не является начальным.

                ясно: 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>.

                добавьте lt_schedule.

                lt_schedulex-item_no = lt_schedulex-item_no.

                lt_schedulex-sched_line = lt_schedulex-sched_line.

                lt_schedulex-delivery_date = «Х».

                lt_schedulex-quantity = 'X'.

                добавьте lt_schedulex.

 

                очистить ls_zmmr007.

                ls_zmmr007-ebeln = lt_ekko-ebeln.

                ls_zmmr007-ebelp = lt_schedule-item_no.

                ls_zmmr007-etenr = lt_schedule-sched_line.

                если lv_type = '02'.

                  ls_zmmr007-fixkz = ''.

                elseif lv_type = '03'.

                  ls_zmmr007-fixkz = "Х".

                endif.

                добавьте ls_zmmr007 в lt_zmmr007.

              endif.

            endif.

          конец петли.

          ясно: ls_schedule2.

        конец петли.

      endif.

 

    конец петли.

 

    экспорт lt_zmmr007 = lt_zmmr007 в память с идентификатором 'ZMMR007'.

    вызвать функцию 'BAPI_SCHEDULE_MAINTAIN'

      экспорт

        Purchasedocument = lt_ekko-ebeln

      столы

        schedule = lt_schedule

        schedulex = lt_schedulex

* EXTENSIONIN = EXTENSIONIN

* EXTENSIONOUT = РАСШИРЕНИЕ

        return = lt_return.

 

 

    цикл в lt_return, где введите ca 'AEX'.

      идентификатор сообщения lt_return-id тип lt_return-type номер lt_return-number

        с lt_return-message_v1 lt_return-message_v2

             lt_return-message_v3 lt_return-message_v4

             в данные (lv_msg).

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

    конец петли.

    если sy-subrc = 0.

      вызовите функцию 'BAPI_TRANSACTION_ROLLBACK'.

      lt_ekko-led = 1.

* lt_ekko-rtmsg = 1.

    еще.

      вызвать функцию 'BAPI_TRANSACTION_COMMIT'

        экспорт

          ждать = 'X'.

      lt_ekko-led = 3.

      lt_ekko-rtmsg = «Успех».

    endif.

    изменить lt_ekko.

  конец петли.

 

  цикл из <gt_out> в <gs_out>.

    назначьте компонент 'EBELN' структуры <gs_out> на <lv_ebeln>.

    назначить компонент 'LED' структуры <gs_out> полю-символу (<lv_led>).

    присвоить полю-символу (<lv_rtmsg>) компонент RTMSG структуры <gs_out>.

    прочитать таблицу lt_ekko с ключом ebeln = <lv_ebeln> бинарного поиска.

    <lv_led> = lt_ekko-led.

    <lv_rtmsg> = lt_ekko-rtmsg.

    измените <gt_out> из <gs_out>.

  конец петли.

 

* Сохранить таблицу

  данные:

        lt_ztmm007a как таблица ztmm007a со строкой заголовка.

  цикл из <gt_out> в <gs_out>.

    переместить соответствующий <gs_out> в lt_ztmm007a.

    lt_ztmm007a-version = gv_version.

    назначьте компонент 'LED' структуры <gs_out> на <lv_led>.

    если <lv_led> = 3.

      цикл в gt_fieldcat в ls_fieldcat от 11 до gv_counts.

        lt_ztmm007a-zjhrq = ls_fieldcat-fieldname.

        присвоить компоненту ls_fieldcat-fieldname структуры <gs_out> <lv_menge>.

        lt_ztmm007a-amount = <lv_ amount>.

        разделить ls_fieldcat-coltext в '-' на 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.

        добавьте lt_ztmm007a.

      конец петли.

    endif.

  конец петли.

  если lt_ztmm007a не является начальным.

    измените ztmm007a из таблицы lt_ztmm007a.

    совершите работу и ждите.

    сообщение s001 (00) с «Данные версии были сохранены».

  endif.

 

 

* выполнить frm_alv_styl.

  выполнить frm_alv_refresh с помощью go_alvgrid.

конец формы.

 

рекомендация

отblog.csdn.net/cylcylcylcylwo/article/details/114015060