Sapforum.Biz
Инструменты => ABAP - Инструментальные средства => SE38 - ABAP Редактор => Тема начата: Uukrul от Июль 09, 2008, 04:40:24 pm
-
Тут по случаю надо было быстро накидать пример программки, которая по документу ММ, для поступившего материала делает перемещение всего поступившего запаса на другой завод/склад. В общем за склетик можно использовать, запас поступивший по документу ММ вроде как перемещает куда скажешь. Можно допиливать и даже нужно, например проверку на получение серийных номеров и документа ММ (там может быть не SER03, а другая табличка, зависит от профиля серийных номеров), потом опять же можно добить если это особые запасы и т.д, да и много чего другого...
REPORT yuuk_move_materials .
TABLES: mseg.
SELECT-OPTIONS: p_mblnr FOR mseg-mblnr OBLIGATORY MEMORY ID mbn.
PARAMETERS p_mjahr LIKE mseg-mjahr OBLIGATORY MEMORY ID mja.
SELECTION-SCREEN BEGIN OF BLOCK block001 WITH FRAME TITLE text-001.
PARAMETERS: p_bwart LIKE mseg-bwart DEFAULT '301' OBLIGATORY,
p_umwrk LIKE mseg-umwrk OBLIGATORY MEMORY ID wrk,
p_umlgo LIKE mseg-umlgo OBLIGATORY MEMORY ID lag.
SELECTION-SCREEN END OF BLOCK block001.
************************************************************************
DATA: l_goodsmvt_header LIKE bapi2017_gm_head_01,
l_goodsmvt_headret LIKE bapi2017_gm_head_ret,
lt_goodsmvt_item LIKE bapi2017_gm_item_create
OCCURS 0 WITH HEADER LINE,
lt_goodsmvt_serialnumber LIKE bapi2017_gm_serialnumber
OCCURS 0 WITH HEADER LINE,
lt_return LIKE bapiret2 OCCURS 0 WITH HEADER LINE.
DATA: l_count LIKE sy-tabix,
sy_tabix LIKE sy-tabix,
l_marc LIKE marc,
l_testrun LIKE bapi2017_gm_gen-testrun,
lt_mkpf LIKE mkpf OCCURS 1 WITH HEADER LINE,
lt_mseg LIKE mseg OCCURS 1 WITH HEADER LINE,
lt_sernr LIKE objk OCCURS 1 WITH HEADER LINE.
************************************************************************
SELECT * INTO CORRESPONDING FIELDS OF TABLE lt_mkpf
FROM mkpf WHERE mblnr IN p_mblnr AND
mjahr = p_mjahr.
IF sy-subrc <> 0. EXIT. ENDIF.
SELECT * INTO CORRESPONDING FIELDS OF TABLE lt_mseg
FROM mseg WHERE mblnr IN p_mblnr AND
mjahr = p_mjahr AND
xauto <> 'X'.
CLEAR: l_goodsmvt_header,
lt_goodsmvt_item[], lt_goodsmvt_serialnumber[], lt_return[].
SORT lt_mkpf BY budat DESCENDING.
READ TABLE lt_mkpf INDEX 1.
DESCRIBE TABLE lt_mkpf LINES l_count.
* Заполнить заголовок документа
l_goodsmvt_header-pstng_date = lt_mkpf-budat. "Дата проводки
l_goodsmvt_header-doc_date = lt_mkpf-budat. "Дата документа
l_goodsmvt_header-pr_uname = sy-uname. "Имя пользователя
IF l_count = 1.
CONCATENATE lt_mkpf-mblnr lt_mkpf-mjahr
INTO l_goodsmvt_header-ref_doc_no SEPARATED BY '/'.
ELSE.
l_goodsmvt_header-ref_doc_no = 'no referens'.
ENDIF.
l_goodsmvt_header-gr_gi_slip_no = space.
l_goodsmvt_header-ver_gr_gi_slip = '3'. "Версия печати
l_goodsmvt_header-header_txt = 'EXTMOVE'.
LOOP AT lt_mseg.
sy_tabix = sy-tabix.
CLEAR: lt_goodsmvt_item.
lt_goodsmvt_item-move_type = p_bwart. "Вид движения
lt_goodsmvt_item-spec_stock = lt_mseg-sobkz. "Код особого запаса
lt_goodsmvt_item-material = lt_mseg-matnr. "Код материала
lt_goodsmvt_item-plant = lt_mseg-werks. "Завод отпуска
lt_goodsmvt_item-stge_loc = lt_mseg-lgort. "Склад отпуска
lt_goodsmvt_item-batch = lt_mseg-charg. "Партия отпуска
lt_goodsmvt_item-move_plant = p_umwrk. "Принимающий завод
lt_goodsmvt_item-move_stloc = p_umlgo. "Принимающий склад
lt_goodsmvt_item-move_batch = lt_mseg-charg. "принимающая партия
lt_goodsmvt_item-entry_qnt = lt_mseg-menge. "Количество
lt_goodsmvt_item-entry_uom = lt_mseg-meins. "ЕдИзм
CONCATENATE lt_mseg-mblnr lt_mseg-mjahr lt_mseg-zeile
INTO lt_goodsmvt_item-item_text SEPARATED BY '/'.
* Определиться с серийными номерами для позиции материала
SELECT SINGLE * INTO l_marc
FROM marc WHERE matnr = lt_mseg-matnr AND
werks = lt_mseg-werks.
IF l_marc-sernp <> space.
SELECT * INTO CORRESPONDING FIELDS OF TABLE lt_sernr
FROM ser03 AS sr
JOIN objk AS ob ON sr~obknr = ob~obknr
WHERE sr~mblnr = lt_mseg-mblnr AND
sr~mjahr = lt_mseg-mjahr AND
sr~zeile = lt_mseg-zeile.
lt_goodsmvt_serialnumber-matdoc_itm = sy_tabix.
LOOP AT lt_sernr.
lt_goodsmvt_serialnumber-serialno = lt_sernr-sernr.
APPEND lt_goodsmvt_serialnumber.
ENDLOOP.
ENDIF.
APPEND lt_goodsmvt_item.
ENDLOOP.
l_testrun = space.
CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
EXPORTING
goodsmvt_header = l_goodsmvt_header
goodsmvt_code = '04'
testrun = l_testrun
IMPORTING
goodsmvt_headret = l_goodsmvt_headret
TABLES
goodsmvt_item = lt_goodsmvt_item
goodsmvt_serialnumber = lt_goodsmvt_serialnumber
return = lt_return
EXCEPTIONS
OTHERS = 1.
* Проверим как прошло сохранение документа
IF sy-subrc <> 0.
ROLLBACK WORK. "Неизвестная ошибка
EXIT.
ENDIF.
LOOP AT lt_return WHERE type = 'E' OR type = 'A'.
ROLLBACK WORK.
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.
EXIT.
ENDLOOP.
IF l_testrun = space.
COMMIT WORK AND WAIT.
* Номер проведенного документа в l_goodsmvt_headret
ENDIF.
-
Тут по случаю надо было быстро накидать пример программки, которая по документу ММ, для поступившего материала делает перемещение всего поступившего запаса на другой завод/склад. В
День добрый. Я еще совсем новичек и У меня такая проблемка... Начальство задало сделать загрузочку остатков модуля ММ в САП, но поля не предоставили, сказали только транзакцию МВ1С по 561 ВДвиж и через "БАБИХУ" работать... Помогите советом... как подступиться... может есть какой шаблончик ... :'( :'( :'( :'(
PS: Uukrul, ну цитировать то предыдущее сообщение было излишним...
-
Что касается вопроса.. то тут даже не знаю кроме как за вас написать программу больше ничего не видится, потому что предложенного примера должно хватить что бы начинать разбираться. Я честно даже не знаю что вам сказать типа с чего начинать. Ну скажем так MB1C отношения к этой BAPI не имеет в принципе.
-
:( Понял... просто мне посоветовал комсультант по АВАР работать через ФМ BAPI... Чтож, простите за беспокойство, буду что-нибудь пытаться сделать...
PS: я так понимаю, вы бы не использовали БАПи для решения моей задачи ? ???
-
PS: я так понимаю, вы бы не использовали БАПи для решения моей задачи ? ???
Выложенный выше пример и есть как это сказать пример использования BAPI, все что нужно сделать вам, это правильно передать параметры в данную BAPI-функцию и она вам сделает поступление материала аналогичное транзакции MB1C.
-
Из подсказки, запускать нужно с параметрами:
GMCODE - Тип движения материала = 05
KZBEW - Индикатор движения = space
Таблица позиций, по минимуму должна быть заполнена так:
MATERIAL_NO – Код материала = <Код>
PLANT – Код завода = <Завод>
SLOC – Код склада = <Склад>
VENDOR – Код поставщика = <Поставщик>, если нужен можно и без него.
MOV_TYPE – Код вида движения = 561
QTY – Количество поступающего материала = <Кол-во>