Текущее время: Вс, июл 27 2025, 23:00

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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