Тут по случаю надо было быстро накидать пример программки, которая по документу ММ, для поступившего материала делает перемещение всего поступившего запаса на другой завод/склад. В общем за склетик можно использовать, запас поступивший по документу ММ вроде как перемещает куда скажешь. Можно допиливать и даже нужно, например проверку на получение серийных номеров и документа ММ (там может быть не 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.
Цитата: Uukrul від Липень 09, 2008, 04:40:24 ПП
Тут по случаю надо было быстро накидать пример программки, которая по документу ММ, для поступившего материала делает перемещение всего поступившего запаса на другой завод/склад. В
День добрый. Я еще совсем новичек и У меня такая проблемка... Начальство задало сделать загрузочку остатков модуля ММ в САП, но поля не предоставили, сказали только транзакцию МВ1С по 561 ВДвиж и через "БАБИХУ" работать... Помогите советом... как подступиться... может есть какой шаблончик ... :'( :'( :'( :'(
PS: Uukrul, ну цитировать то предыдущее сообщение было излишним...
Что касается вопроса.. то тут даже не знаю кроме как за вас написать программу больше ничего не видится, потому что предложенного примера должно хватить что бы начинать разбираться. Я честно даже не знаю что вам сказать типа с чего начинать. Ну скажем так MB1C отношения к этой BAPI не имеет в принципе.
:( Понял... просто мне посоветовал комсультант по АВАР работать через ФМ BAPI... Чтож, простите за беспокойство, буду что-нибудь пытаться сделать...
PS: я так понимаю, вы бы не использовали БАПи для решения моей задачи ? ???
Цитата: e.gorscov від Березень 27, 2012, 04:26:37 ПП
PS: я так понимаю, вы бы не использовали БАПи для решения моей задачи ? ???
Выложенный выше пример и есть как это сказать пример использования BAPI, все что нужно сделать вам, это правильно передать параметры в данную BAPI-функцию и она вам сделает поступление материала аналогичное транзакции MB1C.
Из подсказки, запускать нужно с параметрами:
GMCODE - Тип движения материала = 05
KZBEW - Индикатор движения = space
Таблица позиций, по минимуму должна быть заполнена так:
MATERIAL_NO – Код материала = <Код>
PLANT – Код завода = <Завод>
SLOC – Код склада = <Склад>
VENDOR – Код поставщика = <Поставщик>, если нужен можно и без него.
MOV_TYPE – Код вида движения = 561
QTY – Количество поступающего материала = <Кол-во>