Измените версию билета для BDC

У BAPI нет одношагового решения, используйте BDC напрямую

 

ДЕМО

цикл в gt_alv1, где sel = 'X'.

    если gt_alv1-app_date не является начальным.

      gt_alv1-rtype = 'S'.

      gt_alv1-rtmsg = 'Нет необходимости повторять утверждение'.

      изменить gt_alv1.

      Продолжить.

    endif.

 

* выполнить frm_pro_head_change с помощью gt_alv1-aufnr gt_alv1-gamng_new gt_alv1-xianb с изменением gt_alv1-rtype gt_alv1-rtmsg.

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

 

    выполнить frm_req_get с помощью gt_alv1-reqnm.

* Введите экран заказа

    выполнить frm_bdc_dynnr, используя 'SAPLCOKO1' '0110'.

    выполнить frm_bdc_field, используя 'CAUFVD-AUFNR' gt_alv1-aufnr.

    выполнить frm_bdc_field, используя 'R62CLORD-FLG_OVIEW' 'X'.

    выполнить frm_bdc_field, используя 'BDC_OKCODE' '= KPU2'. "组件

 

    lt_alv2 [] = gt_alv2 [].

    sort lt_alv2 по убыванию ewahr. "Сначала измените на тот, который с наибольшей вероятностью использования, иначе будет сообщено об ошибке

    цикл на lt_alv2.

      если lt_alv2-new_flag = 'X'. "新增

* Компонентный экран

        выполнить frm_bdc_dynnr, используя SAPLCOMK '0120'.

        выполнить frm_bdc_field с помощью'BDC_CURSOR''RESBD-MATNR (01) '. «Найдите первую строку

        выполнить frm_bdc_field, используя 'BDC_OKCODE' '= KEIN'. "差 入 行

* Компонентный экран

        выполнить frm_bdc_dynnr, используя SAPLCOMK '0120'.

        выполнить frm_bdc_field с помощью RESBD-POSNR (01) lt_alv2-posnr_pro. "项目

        выполнить frm_bdc_field с помощью 'RESBD-MATNR (01)' lt_alv2-matnr_new. "物料

        выполнить frm_bdc_field, используя RESBD-MENGE (01) lt_alv2-bdmng_new. "数量

        выполнить frm_bdc_field, используя RESBD-VORNR (01) '0010'. "工序

        выполнить frm_bdc_field с помощью'RESBD-POSTP (01) '' L '. "Категория проекта

        выполнить frm_bdc_field, используя 'BDC_OKCODE' '/ 00'. "Enter (выведет фабрику)

* Детали компонента

        выполнить frm_bdc_dynnr, используя SAPLCOMD '0110'.

        выполнить frm_bdc_field, используя 'BDC_OKCODE' '= BACK'. "返回

      else .. "Удалить и изменить должны войти и найти

* Компонентный экран

        выполнить frm_bdc_dynnr, используя SAPLCOMK '0120'.

        выполнить frm_bdc_field, используя 'BDC_OKCODE' '= P--'. "Первая страница

 

* Компонентный экран

        выполнить frm_bdc_dynnr, используя SAPLCOMK '0120'.

        выполнить frm_bdc_field, используя 'BDC_OKCODE' '= AUFS'. "定位

 

* Экран ориентации

        выполнить frm_bdc_dynnr, используя SAPLCO05 '0110'.

        выполнить frm_bdc_field, используя 'RCOSU-POSNR' lt_alv2-posnr_pro.

        выполнить frm_bdc_field, используя 'RCOSU-MATNR' lt_alv2-matnr.

        выполнить frm_bdc_field, используя 'RCOSU-BDMNG' lt_alv2-bdmng.

        выполнить frm_bdc_field, используя 'BDC_OKCODE' '= MORE'. "确认

        если lt_alv2-del = 'X'. "Удалить

* Компонентный экран

          выполнить frm_bdc_dynnr, используя SAPLCOMK '0120'.

          выполнить frm_bdc_field, используя'RC27X-FLG_SEL (01) '' X '. "Первая строка

          выполнить frm_bdc_field, используя 'BDC_OKCODE' '= DEL'. "删除

        else. "Изменить

* Компонентный экран

          выполнить frm_bdc_dynnr, используя SAPLCOMK '0120'.

          выполнить frm_bdc_field с помощью'BDC_CURSOR''RESBD-POSNR (01) '. "Первая строка

          выполнить frm_bdc_field, используя 'BDC_OKCODE' '= PICK'. "Сведения об элементе (двойной щелчок)

 

* Детали компонента

          выполнить frm_bdc_dynnr, используя SAPLCOMD '0110'.

          если lt_alv2-alpgr является начальным.

            если lt_alv2-matnr_new не является исходным.

              выполнить frm_bdc_field с помощью 'RESBD-MATNR' lt_alv2-matnr_new. "物料

            endif.

            если lt_alv2-bdmng_new не является начальным.

              выполнить frm_bdc_field с помощью'RESBD-MENGE 'lt_alv2-bdmng_new. "Требуемое количество

            endif.

          еще.

            если lt_alv2-nomng_new не является исходным.

              выполнить frm_bdc_field, используя 'RESBD-NOMNG' lt_alv2-nomng_new. "原始 数量

            endif.

            если lt_alv2-ewahr_new не является начальным.

              выполнить frm_bdc_field с помощью RESBD-EWAHR lt_alv2-ewahr_new. "使用率

            endif.

          endif.

          выполнить frm_bdc_field, используя 'BDC_OKCODE' '= BACK'. "返回

        endif.

      endif.

    конец петли.

 

* Детали компонента

    выполнить frm_bdc_dynnr, используя SAPLCOMK '0120'.

    выполнить frm_bdc_field, используя 'BDC_OKCODE' '= KOZE'. "抬头

 

* Обзорный экран

    выполнить frm_bdc_dynnr, используя 'SAPLCOKO1' '0115'.

    если gt_alv1-gamng_new не является начальным.

      выполнить frm_bdc_field с помощью'CAUFVD-GAMNG 'gt_alv1-gamng_new. "Количество (общее количество необходимо изменить в последнюю очередь, иначе компоненты не будут совпадать, если они соответствуют количеству)

    endif.

    выполнить frm_bdc_field, используя 'BDC_OKCODE' '= + COI'. "Экран клиента

 

* Экран клиента

    выполнить frm_bdc_dynnr, используя 'SAPLCOKO1' '0115'.

    если gt_alv1-xianb_new не является начальным.

      выполнить frm_bdc_field, используя 'Z_COCI_AUFK-ZZLINE' gt_alv1-xianb_new. "线 别

    endif.

    выполнить frm_bdc_field, используя 'BDC_OKCODE' '= BU'. "保存

 

    выполнить frm_bdc_call, используя 'CO02', изменив gt_alv1-rtype gt_alv1-rtmsg.

    если gt_alv1-rtype = 'S'.

      gt_alv1-app_date = sy-datum.

      gt_alv1-app_name = sy-uname.

    endif.

    изменить gt_alv1.

 

    обновить ztpp0023a set app_date = gt_alv1-app_date app_name = gt_alv1-app_name

    где reqnm = gt_alv1-reqnm.

    обновить ztpp0023b set app_date = gt_alv1-app_date app_name = gt_alv1-app_name

    где reqnm = gt_alv1-reqnm.

  конец петли.

 

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

отblog.csdn.net/cylcylcylcylwo/article/details/113929323
BDC