У 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.
конец петли.