Текущее время: Пн, июл 28 2025, 01:59

Часовой пояс: UTC + 3 часа


Правила форума


Вопросы по ППМ (MRP) - сюда.
Вопросы по классификации - сюда.
Вопросы по входящим поставкам - сюда.



Начать новую тему Ответить на тему  [ Сообщений: 15 ] 
Автор Сообщение
 Заголовок сообщения: Массовое перемещение со склада на склад
СообщениеДобавлено: Вт, апр 01 2008, 15:14 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, ноя 28 2006, 15:02
Сообщения: 55
Добрый день!
Помогите, пожалуйста, у нас такая проблема:
необходимо осуществить массовое перемещение всех материалов со склада на склад внутри одного завода. При чем, грубо говоря, лучше это делать одной кнопкой, указав только завод и склады. Т.е. не нужно отслеживать что за материалы были и прочее. Просто все массово переместить.
Может посоветуете как лучше сделать данную разработку?
Спасибо заранее за ответ.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Массовое перемещение со склада на склад
СообщениеДобавлено: Вт, апр 01 2008, 15:20 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Ср, июн 13 2007, 16:36
Сообщения: 585
Откуда: Belarus
Пол: Мужской
Asya написал(а):
Добрый день!
Помогите, пожалуйста, у нас такая проблема:
необходимо осуществить массовое перемещение всех материалов со склада на склад внутри одного завода. При чем, грубо говоря, лучше это делать одной кнопкой, указав только завод и склады. Т.е. не нужно отслеживать что за материалы были и прочее. Просто все массово переместить.
Может посоветуете как лучше сделать данную разработку?
Спасибо заранее за ответ.

Если имеется в виду разработка в АВАР, то:
1. поднять запасы с исходного склада
2. пакетным вводом переместить на целевой склад.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, апр 01 2008, 15:30 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, ноя 28 2006, 15:02
Сообщения: 55
Т.е. все-таки вторую часть предлагаете пакетником?
А есть ли стандартные транзакции?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, апр 01 2008, 15:51 
Директор
Директор
Аватара пользователя

Зарегистрирован:
Вт, окт 04 2005, 10:21
Сообщения: 972
Откуда: Киев
Пол: Мужской
Если не ошибаюсь для пакетника как и для BAPI нужен исходный файл *.xls или *.txt
Так что сначала необходимо остатки из отпускающего склада выгрузить и подготовить.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, апр 01 2008, 16:02 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Пн, сен 03 2007, 13:20
Сообщения: 1658
Откуда: Пермь, Москва
Пол: Мужской
rosomann написал:
Если не ошибаюсь для пакетника как и для BAPI нужен исходный файл *.xls или *.txt
Так что сначала необходимо остатки из отпускающего склада выгрузить и подготовить.


Можно чуть чуть поабапить и данные по остаткам брать, например, из таблицы MARD. А завод и склад остатков и Завод и склад получатель вводить на селекционном экране


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, апр 01 2008, 16:11 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Ср, июн 13 2007, 16:36
Сообщения: 585
Откуда: Belarus
Пол: Мужской
rosomann написал:
Если не ошибаюсь для пакетника как и для BAPI нужен исходный файл *.xls или *.txt
Так что сначала необходимо остатки из отпускающего склада выгрузить и подготовить.

Ошибаешься :)
Данные можно подготовить и внутри программы, а затем подсунуть их в бапишку. В данной ситуации данных самый минимум: материал, партия, количество.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, апр 01 2008, 17:49 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Вт, май 17 2005, 13:35
Сообщения: 4871
Откуда: Москва
Пол: Мужской
Бапи современнее, чем пакетник и удобнее.
Так что на селекционник выносим завод, склад откуда, склад куда.
При запуске программы считаваем все запасы из mard (если без партий) и запускаем для них bapi BAPI_GOODSMVT_CREATE. Только не забыть про ограничение на количество позиций в FI документе.

_________________
Удача - результат нашего желания (© А. Нортон)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, апр 01 2008, 20:26 
Директор
Директор
Аватара пользователя

Зарегистрирован:
Вт, окт 04 2005, 10:21
Сообщения: 972
Откуда: Киев
Пол: Мужской
Ну спасибо, просветили :D


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, апр 02 2008, 08:28 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, авг 24 2004, 07:19
Сообщения: 3952
Откуда: ECC 6.0, South Kazakhstan
+ не забываем про особые запасы


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, апр 02 2008, 09:55 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, ноя 28 2006, 15:02
Сообщения: 55
Спасибо большое. Вроде понятно стало, как ТЗ прогерам писать.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, апр 02 2008, 15:55 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, ноя 28 2006, 15:02
Сообщения: 55
А вот еще вопрос, а если запасы ведутся по партиям, тогда лучше использовать таблицу MCHB? И, как вы думаете, можно ли для начальных данных (т.е. запасы на складе) использовать документы инвентаризации???


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, апр 03 2008, 07:29 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, авг 24 2004, 07:19
Сообщения: 3952
Откуда: ECC 6.0, South Kazakhstan
Asya написал(а):
А вот еще вопрос, а если запасы ведутся по партиям, тогда лучше использовать таблицу MCHB?


смотря на каком уровне партии ведутся: MCH1 или MCHB.

Asya написал(а):
И, как вы думаете, можно ли для начальных данных (т.е. запасы на складе) использовать документы инвентаризации???


при чем тут документы инвентаризации, если речь идет о массовом перемещении со склада на склад?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, апр 03 2008, 08:35 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, ноя 28 2006, 15:02
Сообщения: 55
Да в том-то и дело, что у нас склады - МОЛы, сейчас проводится реорганизация предприятия, и все сотрудники увольняются. Соответственно, необходимо провести инвентаризацию на складе, до передачи со склада на склад. Вот и получается, что пользователи делают инвентаризацию, а потом массово, "по одной" кнопке хотят переместить все запасы со склада на склад.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, апр 09 2008, 06:20 
Специалист
Специалист

Зарегистрирован:
Ср, ноя 14 2007, 13:09
Сообщения: 114
Лучше пакетником. На входе список матеиалов с указанием передаваемого количества.
Вот пример.
    REPORT ZMOVESPARE MESSAGE-ID MG
    LINE-SIZE 80 LINE-COUNT 65 NO STANDARD PAGE HEADING.
    TABLES: MARD,MCHB,MARC.
    DATA: KK(15),DD1(8),DD2(8),I(3) TYPE N.
    DATA: N LIKE SY-TABIX, S LIKE SY-TABIX.
    SELECTION-SCREEN BEGIN OF BLOCK BL1 WITH FRAME TITLE TEXT-M01.
    PARAMETERS:
    WERKS LIKE MARD-WERKS MEMORY ID WRK OBLIGATORY, " Завод
    LGORT LIKE MARD-LGORT OBLIGATORY, " Склад
    UMLGO LIKE MARD-LGORT OBLIGATORY,
    BLDAT LIKE MKPF-BLDAT DEFAULT SY-DATUM,
    BUDAT LIKE MKPF-BUDAT DEFAULT SY-DATUM,
    FILENAME LIKE RLGRAP-FILENAME MEMORY ID ZSZ,
    ZMODE(1) TYPE C DEFAULT 'E'. "Режим обработки транзакц.
    * lll default 'X' as checkbox.
    RANGES L_LGORT FOR T001L-LGORT.
    SELECTION-SCREEN END OF BLOCK BL1.
    DATA : BEGIN OF OS OCCURS 100, "Структура входного файла
    MATNR(6) TYPE C, " Номер материала
    KOLVO LIKE MSEG-ERFMG, " Количество
    END OF OS.
    DATA: BEGIN OF BDC OCCURS 5000. "Структура BDC
    INCLUDE STRUCTURE BDCDATA.
    DATA: END OF BDC.
    DATA: BEGIN OF TAB OCCURS 5000, "Структура рабочей таблицы мат-лов
    MATNR(18), " Номер материала
    CHARG LIKE MCHB-CHARG, " Номер партии, или склада
    ERFMG LIKE MSEG-ERFMG. " Количество
    DATA:END OF TAB.
    DATA: CH(5) TYPE N,L(4),KODMTR(18) TYPE C,LINE_NUMB TYPE N.
    INITIALIZATION.
    *ПРи выборе имени файла
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR FILENAME .
    CALL FUNCTION 'WS_FILENAME_GET'
    EXPORTING
    DEF_FILENAME = SPACE
    DEF_PATH = SPACE
    MASK = ',*.txt ,*.txt.'
    MODE = 'O'
    IMPORTING
    FILENAME = FILENAME
    EXCEPTIONS
    INV_WINSYS = 01
    NO_BATCH = 02
    SELECTION_CANCEL = 03
    SELECTION_ERROR = 04.

    AT SELECTION-SCREEN .
    IF BLDAT = '00000000'.BLDAT = SY-DATUM.ENDIF.
    IF BUDAT = '00000000'.BUDAT = SY-DATUM.ENDIF.
    DD1 = BLDAT+6(2).MOVE BLDAT+4(2) TO DD1+2(2).MOVE BLDAT(4) TO DD1+4(4).
    DD2 = BUDAT+6(2).MOVE BUDAT+4(2) TO DD2+2(2).MOVE BUDAT(4) TO DD2+4(4).
    AUTHORITY-CHECK OBJECT 'M_MSEG_WWA'
    ID 'ACTVT' FIELD '02'
    ID 'WERKS' FIELD WERKS.
    IF SY-SUBRC NE 0.
    MESSAGE E002 WITH 'Нет полномочий на движение материала по заводу'.
    ENDIF.
    *-------------- START-OF-SELECTION --------------------
    START-OF-SELECTION.
    CLEAR OS.
    CALL FUNCTION 'UPLOAD' "Загрузка списка матералов"
    EXPORTING
    FILENAME = FILENAME
    FILETYPE = 'DAT'
    TABLES DATA_TAB = OS.
    CLEAR OS.
    DESCRIBE TABLE OS LINES LINE_NUMB.
    IF LINE_NUMB = 0.
    WRITE / 'Список материалов пуст!'.
    EXIT.
    ENDIF.

    *if lll = 'X'. l = '=NO'.else.l = '=YES'.endif.
    FREE TAB.
    * Выбор данных записей материала в раб.табл. STR
    LOOP AT OS.
    KODMTR = '000000000000'.
    KODMTR+12(6) = OS-MATNR.
    SELECT SINGLE * FROM MARD
    WHERE WERKS = WERKS
    AND LGORT = LGORT
    AND MATNR = KODMTR.
    IF SY-SUBRC EQ 0.
    CHECK MARD-LABST NE 0. CLEAR TAB.MOVE MARD-MATNR TO TAB-MATNR.
    SELECT SINGLE * FROM MARC
    WHERE MATNR = MARD-MATNR
    AND WERKS = MARD-WERKS .
    IF MARC-XCHAR = ' '.
    MOVE MARD-LABST TO TAB-ERFMG.
    I = I + 1.
    IF I > 100.
    EXIT.
    ENDIF.
    IF OS-KOLVO GT TAB-ERFMG. "В списке количество превышает складское?
    WRITE: / 'Ошибка ', OS-MATNR, OS-KOLVO, 'Больше чем на складе', TAB-ERFMG, 'Строка пропускается'.
    ELSE.
    MOVE OS-KOLVO TO TAB-ERFMG.
    APPEND TAB.
    ENDIF.
    ELSE. "ведение партиями
    SELECT * FROM MCHB
    WHERE MATNR = MARD-MATNR
    AND WERKS = MARD-WERKS
    AND LGORT = MARD-LGORT.
    CHECK MCHB-CLABS NE 0.
    MOVE MCHB-CLABS TO TAB-ERFMG.MOVE MCHB-CHARG TO TAB-CHARG.
    ENDSELECT.
    I = I + 1.
    IF I > 100.
    EXIT.
    ENDIF.
    IF OS-KOLVO GT TAB-ERFMG. "В списке количество превышает складское?
    WRITE: / 'Ошибка ', OS-MATNR, OS-KOLVO, 'Больше чем на складе', TAB-ERFMG, 'Строка пропускается'.
    ELSE.
    MOVE OS-KOLVO TO TAB-ERFMG.
    APPEND TAB.
    ENDIF.

    ENDIF.
    ENDIF.
    *ENDSELECT.
    ENDLOOP.
    SORT TAB BY MATNR CHARG.
    DESCRIBE TABLE TAB LINES N.
    IF N = 0.WRITE: 'Указанных запасов нет на складе',LGORT.EXIT.
    ENDIF.
    END-OF-SELECTION.
    *-------------- END-OF-SELECTION --------------------
    * Заполнение динпро 400 и переход на 421
    S = 0.
    PERFORM ZAP_D400. " Заполнение динпро 400 и переход на 421
    CLEAR TAB.
    LOOP AT TAB.
    ADD 1 TO S.
    I = SY-TABIX.
    WRITE TAB-ERFMG LEFT-JUSTIFIED TO KK.
    * Заполнение строк экрана 410
    PERFORM ZAP_421.
    ENDLOOP.
    CALL TRANSACTION 'MB1B' USING BDC MODE ZMODE UPDATE 'N'.
    IF SY-SUBRC NE 0.
    WRITE :/ TAB-MATNR,SY-MSGID,SY-MSGNO.
    WRITE: '-не перенесен'.
    ENDIF.
    * Заполнение динпро 400
    FORM ZAP_D400.
    REFRESH BDC. CLEAR BDC.
    PERFORM DYNPRO USING:
    * 0400
    'X' 'SAPMM07M' '0400',
    ' ' 'BDC_CURSOR' 'MKPF-BUDAT',
    ' ' 'MKPF-BLDAT' DD1, " Дата документа
    ' ' 'MKPF-BUDAT' DD2, " Дата поставки
    ' ' 'RM07M-BWARTWA' '311', " Вид движения
    ' ' 'RM07M-WERKS' WERKS, " ЗАВОД
    ' ' 'RM07M-LGORT' LGORT, " СКЛАД
    ' ' 'RM07M-XNAPR' 'X', " Печать
    ' ' 'RM07M-WVERS3' 'X', " Сводная накладная
    ' ' 'BDC_OKCODE' '/00'. " Переход на d421
    ENDFORM.
    * Заполнение строк экрана 421
    FORM ZAP_421.
    IF N = 1. "если входной файл состоит из 1 записи
    PERFORM DYNPRO USING:
    'X' 'SAPMM07M' '0421',
    ' ' 'BDC_OKCODE' '=BU',
    ' ' 'MSEGK-UMLGO' UMLGO,
    ' ' 'MSEG-MATNR(01)' TAB-MATNR+12(6),
    ' ' 'MSEG-ERFMG(01)' KK,
    ' ' 'MSEG-CHARG(01)' TAB-CHARG.
    PERFORM D002.
    ELSEIF SY-TABIX = 1."если не одна строка во внеш.файле, но первая,
    PERFORM DYNPRO USING: " пока не сохраняем
    'X' 'SAPMM07M' '0421',
    ' ' 'BDC_OKCODE' '=NLE',
    ' ' 'MSEGK-UMLGO' UMLGO,
    ' ' 'MSEG-MATNR(01)' TAB-MATNR+12(6),
    ' ' 'MSEG-ERFMG(01)' KK,
    ' ' 'MSEG-CHARG(01)' TAB-CHARG.
    PERFORM D002.
    ELSEIF SY-TABIX = N. "последняя, надо сохранить
    PERFORM DYNPRO USING:
    'X' 'SAPMM07M' '0421',
    ' ' 'BDC_OKCODE' '=BU',
    ' ' 'MSEGK-UMLGO' UMLGO,
    ' ' 'MSEG-MATNR(01)' TAB-MATNR+12(6),
    ' ' 'MSEG-ERFMG(01)' KK,
    ' ' 'MSEG-CHARG(01)' TAB-CHARG.
    PERFORM D002.
    ELSE. "запись в средине файла
    PERFORM DYNPRO USING:
    'X' 'SAPMM07M' '0421',
    ' ' 'BDC_OKCODE' '=NLE',
    ' ' 'MSEGK-UMLGO' UMLGO,
    ' ' 'MSEG-MATNR(01)' TAB-MATNR+12(6),
    ' ' 'MSEG-ERFMG(01)' KK,
    ' ' 'MSEG-CHARG(01)' TAB-CHARG.
    PERFORM D002.
    ENDIF.
    ENDFORM. " ZAP_421
    * Заполнение таблицы BDC
    FORM DYNPRO USING DYNBEGIN NAME VALUE.
    IF DYNBEGIN = 'X'.
    CLEAR BDC.
    MOVE: NAME TO BDC-PROGRAM,
    VALUE TO BDC-DYNPRO,
    'X' TO BDC-DYNBEGIN.

    APPEND BDC.
    ELSE.
    CLEAR BDC.
    MOVE: NAME TO BDC-FNAM,
    VALUE TO BDC-FVAL.
    APPEND BDC.
    ENDIF.
    ENDFORM.
    *&---------------------------------------------------------------------*
    FORM D002.
    PERFORM DYNPRO USING:
    'X' 'SAPLKACB' '0002',
    ' ' 'BDC_OKCODE' '=ENTE',
    'X' 'SAPLKACB' '0002',
    ' ' 'BDC_OKCODE' '=ENTE'.
    ENDFORM. " D002



    *&---------------------------------------------------------------------*
[/list][/list]


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, апр 09 2008, 06:21 
Специалист
Специалист

Зарегистрирован:
Ср, ноя 14 2007, 13:09
Сообщения: 114
Лучше пакетником. На входе список матеиалов с указанием передаваемого количества.
Вот пример.
    REPORT ZMOVESPARE MESSAGE-ID MG
    LINE-SIZE 80 LINE-COUNT 65 NO STANDARD PAGE HEADING.
    TABLES: MARD,MCHB,MARC.
    DATA: KK(15),DD1(8),DD2(8),I(3) TYPE N.
    DATA: N LIKE SY-TABIX, S LIKE SY-TABIX.
    SELECTION-SCREEN BEGIN OF BLOCK BL1 WITH FRAME TITLE TEXT-M01.
    PARAMETERS:
    WERKS LIKE MARD-WERKS MEMORY ID WRK OBLIGATORY, " Завод
    LGORT LIKE MARD-LGORT OBLIGATORY, " Склад
    UMLGO LIKE MARD-LGORT OBLIGATORY,
    BLDAT LIKE MKPF-BLDAT DEFAULT SY-DATUM,
    BUDAT LIKE MKPF-BUDAT DEFAULT SY-DATUM,
    FILENAME LIKE RLGRAP-FILENAME MEMORY ID ZSZ,
    ZMODE(1) TYPE C DEFAULT 'E'. "Режим обработки транзакц.
    * lll default 'X' as checkbox.
    RANGES L_LGORT FOR T001L-LGORT.
    SELECTION-SCREEN END OF BLOCK BL1.
    DATA : BEGIN OF OS OCCURS 100, "Структура входного файла
    MATNR(6) TYPE C, " Номер материала
    KOLVO LIKE MSEG-ERFMG, " Количество
    END OF OS.
    DATA: BEGIN OF BDC OCCURS 5000. "Структура BDC
    INCLUDE STRUCTURE BDCDATA.
    DATA: END OF BDC.
    DATA: BEGIN OF TAB OCCURS 5000, "Структура рабочей таблицы мат-лов
    MATNR(18), " Номер материала
    CHARG LIKE MCHB-CHARG, " Номер партии, или склада
    ERFMG LIKE MSEG-ERFMG. " Количество
    DATA:END OF TAB.
    DATA: CH(5) TYPE N,L(4),KODMTR(18) TYPE C,LINE_NUMB TYPE N.
    INITIALIZATION.
    *ПРи выборе имени файла
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR FILENAME .
    CALL FUNCTION 'WS_FILENAME_GET'
    EXPORTING
    DEF_FILENAME = SPACE
    DEF_PATH = SPACE
    MASK = ',*.txt ,*.txt.'
    MODE = 'O'
    IMPORTING
    FILENAME = FILENAME
    EXCEPTIONS
    INV_WINSYS = 01
    NO_BATCH = 02
    SELECTION_CANCEL = 03
    SELECTION_ERROR = 04.

    AT SELECTION-SCREEN .
    IF BLDAT = '00000000'.BLDAT = SY-DATUM.ENDIF.
    IF BUDAT = '00000000'.BUDAT = SY-DATUM.ENDIF.
    DD1 = BLDAT+6(2).MOVE BLDAT+4(2) TO DD1+2(2).MOVE BLDAT(4) TO DD1+4(4).
    DD2 = BUDAT+6(2).MOVE BUDAT+4(2) TO DD2+2(2).MOVE BUDAT(4) TO DD2+4(4).
    AUTHORITY-CHECK OBJECT 'M_MSEG_WWA'
    ID 'ACTVT' FIELD '02'
    ID 'WERKS' FIELD WERKS.
    IF SY-SUBRC NE 0.
    MESSAGE E002 WITH 'Нет полномочий на движение материала по заводу'.
    ENDIF.
    *-------------- START-OF-SELECTION --------------------
    START-OF-SELECTION.
    CLEAR OS.
    CALL FUNCTION 'UPLOAD' "Загрузка списка матералов"
    EXPORTING
    FILENAME = FILENAME
    FILETYPE = 'DAT'
    TABLES DATA_TAB = OS.
    CLEAR OS.
    DESCRIBE TABLE OS LINES LINE_NUMB.
    IF LINE_NUMB = 0.
    WRITE / 'Список материалов пуст!'.
    EXIT.
    ENDIF.

    *if lll = 'X'. l = '=NO'.else.l = '=YES'.endif.
    FREE TAB.
    * Выбор данных записей материала в раб.табл. STR
    LOOP AT OS.
    KODMTR = '000000000000'.
    KODMTR+12(6) = OS-MATNR.
    SELECT SINGLE * FROM MARD
    WHERE WERKS = WERKS
    AND LGORT = LGORT
    AND MATNR = KODMTR.
    IF SY-SUBRC EQ 0.
    CHECK MARD-LABST NE 0. CLEAR TAB.MOVE MARD-MATNR TO TAB-MATNR.
    SELECT SINGLE * FROM MARC
    WHERE MATNR = MARD-MATNR
    AND WERKS = MARD-WERKS .
    IF MARC-XCHAR = ' '.
    MOVE MARD-LABST TO TAB-ERFMG.
    I = I + 1.
    IF I > 100.
    EXIT.
    ENDIF.
    IF OS-KOLVO GT TAB-ERFMG. "В списке количество превышает складское?
    WRITE: / 'Ошибка ', OS-MATNR, OS-KOLVO, 'Больше чем на складе', TAB-ERFMG, 'Строка пропускается'.
    ELSE.
    MOVE OS-KOLVO TO TAB-ERFMG.
    APPEND TAB.
    ENDIF.
    ELSE. "ведение партиями
    SELECT * FROM MCHB
    WHERE MATNR = MARD-MATNR
    AND WERKS = MARD-WERKS
    AND LGORT = MARD-LGORT.
    CHECK MCHB-CLABS NE 0.
    MOVE MCHB-CLABS TO TAB-ERFMG.MOVE MCHB-CHARG TO TAB-CHARG.
    ENDSELECT.
    I = I + 1.
    IF I > 100.
    EXIT.
    ENDIF.
    IF OS-KOLVO GT TAB-ERFMG. "В списке количество превышает складское?
    WRITE: / 'Ошибка ', OS-MATNR, OS-KOLVO, 'Больше чем на складе', TAB-ERFMG, 'Строка пропускается'.
    ELSE.
    MOVE OS-KOLVO TO TAB-ERFMG.
    APPEND TAB.
    ENDIF.

    ENDIF.
    ENDIF.
    *ENDSELECT.
    ENDLOOP.
    SORT TAB BY MATNR CHARG.
    DESCRIBE TABLE TAB LINES N.
    IF N = 0.WRITE: 'Указанных запасов нет на складе',LGORT.EXIT.
    ENDIF.
    END-OF-SELECTION.
    *-------------- END-OF-SELECTION --------------------
    * Заполнение динпро 400 и переход на 421
    S = 0.
    PERFORM ZAP_D400. " Заполнение динпро 400 и переход на 421
    CLEAR TAB.
    LOOP AT TAB.
    ADD 1 TO S.
    I = SY-TABIX.
    WRITE TAB-ERFMG LEFT-JUSTIFIED TO KK.
    * Заполнение строк экрана 410
    PERFORM ZAP_421.
    ENDLOOP.
    CALL TRANSACTION 'MB1B' USING BDC MODE ZMODE UPDATE 'N'.
    IF SY-SUBRC NE 0.
    WRITE :/ TAB-MATNR,SY-MSGID,SY-MSGNO.
    WRITE: '-не перенесен'.
    ENDIF.
    * Заполнение динпро 400
    FORM ZAP_D400.
    REFRESH BDC. CLEAR BDC.
    PERFORM DYNPRO USING:
    * 0400
    'X' 'SAPMM07M' '0400',
    ' ' 'BDC_CURSOR' 'MKPF-BUDAT',
    ' ' 'MKPF-BLDAT' DD1, " Дата документа
    ' ' 'MKPF-BUDAT' DD2, " Дата поставки
    ' ' 'RM07M-BWARTWA' '311', " Вид движения
    ' ' 'RM07M-WERKS' WERKS, " ЗАВОД
    ' ' 'RM07M-LGORT' LGORT, " СКЛАД
    ' ' 'RM07M-XNAPR' 'X', " Печать
    ' ' 'RM07M-WVERS3' 'X', " Сводная накладная
    ' ' 'BDC_OKCODE' '/00'. " Переход на d421
    ENDFORM.
    * Заполнение строк экрана 421
    FORM ZAP_421.
    IF N = 1. "если входной файл состоит из 1 записи
    PERFORM DYNPRO USING:
    'X' 'SAPMM07M' '0421',
    ' ' 'BDC_OKCODE' '=BU',
    ' ' 'MSEGK-UMLGO' UMLGO,
    ' ' 'MSEG-MATNR(01)' TAB-MATNR+12(6),
    ' ' 'MSEG-ERFMG(01)' KK,
    ' ' 'MSEG-CHARG(01)' TAB-CHARG.
    PERFORM D002.
    ELSEIF SY-TABIX = 1."если не одна строка во внеш.файле, но первая,
    PERFORM DYNPRO USING: " пока не сохраняем
    'X' 'SAPMM07M' '0421',
    ' ' 'BDC_OKCODE' '=NLE',
    ' ' 'MSEGK-UMLGO' UMLGO,
    ' ' 'MSEG-MATNR(01)' TAB-MATNR+12(6),
    ' ' 'MSEG-ERFMG(01)' KK,
    ' ' 'MSEG-CHARG(01)' TAB-CHARG.
    PERFORM D002.
    ELSEIF SY-TABIX = N. "последняя, надо сохранить
    PERFORM DYNPRO USING:
    'X' 'SAPMM07M' '0421',
    ' ' 'BDC_OKCODE' '=BU',
    ' ' 'MSEGK-UMLGO' UMLGO,
    ' ' 'MSEG-MATNR(01)' TAB-MATNR+12(6),
    ' ' 'MSEG-ERFMG(01)' KK,
    ' ' 'MSEG-CHARG(01)' TAB-CHARG.
    PERFORM D002.
    ELSE. "запись в средине файла
    PERFORM DYNPRO USING:
    'X' 'SAPMM07M' '0421',
    ' ' 'BDC_OKCODE' '=NLE',
    ' ' 'MSEGK-UMLGO' UMLGO,
    ' ' 'MSEG-MATNR(01)' TAB-MATNR+12(6),
    ' ' 'MSEG-ERFMG(01)' KK,
    ' ' 'MSEG-CHARG(01)' TAB-CHARG.
    PERFORM D002.
    ENDIF.
    ENDFORM. " ZAP_421
    * Заполнение таблицы BDC
    FORM DYNPRO USING DYNBEGIN NAME VALUE.
    IF DYNBEGIN = 'X'.
    CLEAR BDC.
    MOVE: NAME TO BDC-PROGRAM,
    VALUE TO BDC-DYNPRO,
    'X' TO BDC-DYNBEGIN.

    APPEND BDC.
    ELSE.
    CLEAR BDC.
    MOVE: NAME TO BDC-FNAM,
    VALUE TO BDC-FVAL.
    APPEND BDC.
    ENDIF.
    ENDFORM.
    *&---------------------------------------------------------------------*
    FORM D002.
    PERFORM DYNPRO USING:
    'X' 'SAPLKACB' '0002',
    ' ' 'BDC_OKCODE' '=ENTE',
    'X' 'SAPLKACB' '0002',
    ' ' 'BDC_OKCODE' '=ENTE'.
    ENDFORM. " D002



    *&---------------------------------------------------------------------*
[/list][/list]


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 15 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB