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

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


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


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



Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
 Заголовок сообщения: Выполнение транзакции через BDC
СообщениеДобавлено: Пт, окт 12 2007, 09:50 
Специалист
Специалист

Зарегистрирован:
Чт, май 19 2005, 10:10
Сообщения: 202
Здравствуйте, уважаемые коллеги.
Вот разработал программку формирование батч-импута через bdc для загрузки данных в migo, программа читает данные из файла, хранит их в таблице в абап словаре и затем формирует батч-импут, который можно выполнить и сформировать временный документ в migo. Может кому поможет моя программа. Как говориться - надо не только брать, но и отдавать.
Есть только один вопросик к вам, батч импут для MIGO не хочет запускаться в фоновом режиме, может у кого есть решение, хотя сап и пишет, что это в принципе не возможно, система у нас 4.6с.
С наилучшими пожеланиями.
Тексты инклуда и основной программы ниже:
Code:
===================================

Программа upload - загрука данных в таблицу в абап словаре

*&---------------------------------------------------------------------*
*& Report  Z_UPLOAD                                                    *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*&                                                                     *
*&---------------------------------------------------------------------*

REPORT  Z_UPLOAD                      .

selection-screen: begin of tabbed block sub for 15 lines,
                  end of block sub.

selection-screen begin of screen 100 as subscreen.
selection-screen begin of block b1 with frame title text-001.
parameters: p-file like rlgrap-filename default
                                 'c:\sapdata\TEST.txt'.
parameters: xpost like sy-datum default sy-datum.
selection-screen end of block b1.
selection-screen end of screen 100.

* Инициализация

initialization.
  sub-prog = sy-repid.
  sub-dynnr = 100.

module init_screen_0100 output.
  set pf-status 'STATUS_100'.
  set titlebar '100'.
endmodule.

start-of-selection.

tables mara.

data: begin of pcitab occurs 100,
        doc_date(8),           "Document Date
        post_date(8),          "Posting Date
        nom_pos(4),            "Номер позиции
        material(18),          "Material Number
        qty(10),               "Quantity
        plant(4),              "Plant
        lgort(4),              "Склад
        nam_act(40),           "Название акта
end of pcitab.

types: begin of itab1,
        mandt(3),              "Mandant
        nom_pos(4),            "Номер позиции
        doc_date(8),           "Document Date
        post_date(8),          "Posting Date
        material(18),          "Material Number
        qty(10),               "Quantity
        ediz(4),               "Edinica izmerenia
        plant(4),              "Plant
        lgort(4),              "Склад
        nam_act(40),           "Название акта
end of itab1.

data: p_meins like mara-meins.
data: p_ediz like mara-meins.
data: i like mara-matkl.
data: j like mara-matkl.
data: itab type itab1.
data: irez type standard table of itab1.

call function 'WS_UPLOAD'
  exporting
    filename                      = p-file
    filetype                      = 'DAT'
* IMPORTING
*   FILELENGTH                    =
  tables
    data_tab                      = pcitab
* EXCEPTIONS
*   FILE_OPEN_ERROR               = 1
*   FILE_READ_ERROR               = 2
*   NO_BATCH                      = 3
*   GUI_REFUSE_FILETRANSFER       = 4
*   INVALID_TYPE                  = 5
*   OTHERS                        = 6
          .
if sy-subrc <> 0.
  message id sy-msgid type sy-msgty number sy-msgno
          with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  exit.
endif.

loop at pcitab.

select single meins into p_ediz from mara
where matnr = pcitab-material.

select single tt~mseh3
into p_meins
from ( t006 as t6 inner join t006a as tt on t6~msehi = tt~msehi )
where tt~spras = 'RU' and
      t6~msehi = p_ediz.

  itab-plant      = pcitab-plant.
  itab-material   = pcitab-material.
  itab-qty        = pcitab-qty.
  itab-ediz       = p_meins.
  itab-lgort      = pcitab-lgort.
  itab-doc_date   = pcitab-doc_date.
  itab-post_date  = pcitab-post_date.
  itab-nom_pos    = pcitab-nom_pos.
  itab-nam_act    = pcitab-nam_act.

  append itab to irez.

endloop.

delete from ZFILE_UPL where MATERIAL <> ''.

loop at irez into itab.
  write:/ itab-material, itab-qty, itab-ediz,
          itab-plant, itab-lgort, itab-doc_date,
          itab-post_date, itab-nom_pos, itab-nam_act.

  itab-mandt = sy-mandt.
  insert ZFILE_UPL from itab.

endloop.

commit work.

write:/ '*********************************************'.

end-of-selection.

==================================================================
==================================================================

Инклуд для формирования батч импута

*&---------------------------------------------------------------------*
*& Include Z_BDC_TOP                                                   *
*&                                                                     *
*&---------------------------------------------------------------------*

***INCLUDE ZSTANDARD_BDC .

*======================================================================*
*      Данный инклуд предоставляет возможность стандартизировать
*   ваши программы, предназначенные для производства пакетных вводов
*   (с созданием автономных сеансов ПВ, для дальнейшего их выполнения
*    с помощью транзакции SM35, или с непосредственным производством
*  ПВ прямо в программе путем вызова "CALL TRANSACTION ... USING ..."),
*             придав им при этом дополнительного изящества.
*    Просто пропишите этот инклуд в своей программе и запустите ее.
*    Далее, изучите три ключевых FORM, находящихся в конце инклуда.
*       И Вам сразу станет ясно, как работать с данным инклудом.
*
*======================================================================*

*--------------------------------------------------------------------
TABLES: SSCRFIELDS .
* Для обработки нажатий кнопок на экране параметров
*======================================================================*
*                       Объявления данных
*======================================================================*
*--------------------------------------------------------------------
*            копии стандартных САПовских объявлений данных
*--------------------------------------------------------------------
DATA: BEGIN OF BDCDATA OCCURS 100.
        INCLUDE STRUCTURE BDCDATA.
DATA: END OF BDCDATA,

      BEGIN OF _MESSTAB OCCURS 5.
        INCLUDE STRUCTURE BDCMSGCOLL.
DATA: END OF _MESSTAB,

*--------------------------------------------------------------------
*                 объявления специфических данных
*--------------------------------------------------------------------
  SUCC_COUNT TYPE I, ERR_COUNT TYPE I,
  BDC_PERC TYPE I, OBDC_PERC TYPE I, BDC_COUNTER TYPE I,
  BDC_TRNAME(20), BDC_TRCOUNT TYPE I .

*======================================================================*
*                        Экраны параметров
*--------------------------------------------------------------------
*     Прописав мой инклуд в своей программе, Вы автоматом добавляете
*      описанные ниже экраны параметров в свою программу, включая
*                       тексты параметров
*======================================================================*
SELECTION-SCREEN ULINE.
*                   Блок выбора вида обработки ПВ
SELECTION-SCREEN BEGIN OF BLOCK 900 WITH FRAME TITLE BDCTYP.
*--------------------------------
SELECTION-SCREEN BEGIN OF LINE .
SELECTION-SCREEN POSITION 1.
PARAMETERS: CRSEA RADIOBUTTON GROUP MT.
SELECTION-SCREEN COMMENT 4(20) CSEACAP FOR FIELD CRSEA.
SELECTION-SCREEN END OF LINE .
*                        Создать сеанс
*--------------------------------
SELECTION-SCREEN BEGIN OF LINE .
SELECTION-SCREEN POSITION 1.
PARAMETERS: ONPRG RADIOBUTTON GROUP MT.
SELECTION-SCREEN COMMENT 4(30) CPRGCAP FOR FIELD ONPRG.
SELECTION-SCREEN END OF LINE .
*                    Выполнить ПВ в программе
*--------------------------------
SELECTION-SCREEN BEGIN OF LINE .
SELECTION-SCREEN POSITION 1.
PARAMETERS: ONUSR RADIOBUTTON GROUP MT.
SELECTION-SCREEN COMMENT 4(30) CUSRCAP FOR FIELD ONUSR.
SELECTION-SCREEN END OF LINE .
*                    Другой вид обработки
*--------------------------------
SELECTION-SCREEN BEGIN OF LINE .
SELECTION-SCREEN POSITION 5.
PARAMETERS: POSTPR AS CHECKBOX MEMORY ID BDCP.
SELECTION-SCREEN COMMENT 9(30) CPOSCAP FOR FIELD POSTPR.
SELECTION-SCREEN END OF LINE .
*                   Включить постобработку
*------------------------------------------------------
SELECTION-SCREEN PUSHBUTTON 5(50) PUBU USER-COMMAND SETP.
*           Кнопка вызова окна настройки параметров ПВ
*      Все остальные элементы экранов параметров выбора можно скрыть
*            в варианте запуска, кроме этой кнопки
SELECTION-SCREEN END OF BLOCK 900 .
*              Конец экрана выбора вида обработки ПВ
*======================================================================*

*======================================================================*
*        Окно настройки параметров сеанса ПВ при его создании
*======================================================================*
SELECTION-SCREEN BEGIN OF SCREEN 902 AS WINDOW .
SELECTION-SCREEN BEGIN OF LINE .
selection-screen position 1.
SELECTION-SCREEN COMMENT 1(20) GRCAP FOR FIELD GROUP.
PARAMETERS: GROUP(12) MEMORY ID GROU .
*                       Имя сеанса
SELECTION-SCREEN END OF LINE .
*----------------------------------------------------------------
SELECTION-SCREEN BEGIN OF LINE .
selection-screen position 1.
SELECTION-SCREEN COMMENT 1(20) USCAP FOR FIELD USER .
PARAMETERS: USER(12)  MEMORY ID USER.
*                   Имя пользователя
SELECTION-SCREEN END OF LINE .
*----------------------------------------------------------------
SELECTION-SCREEN BEGIN OF LINE .
selection-screen position 1.
SELECTION-SCREEN COMMENT 1(20) KPCAP  ."for field keep .
PARAMETERS: KEEP AS CHECKBOX MEMORY ID KEEP .
*               Не удалять после завершения
*          ' ' = delete session if finished
*          'X' = keep   session if finished
SELECTION-SCREEN END OF LINE .
*----------------------------------------------------------------
SELECTION-SCREEN BEGIN OF LINE .
selection-screen position 1.
SELECTION-SCREEN COMMENT 1(20) HDCAP FOR FIELD HOLDDATE.
PARAMETERS: HOLDDATE LIKE SY-DATUM MEMORY ID HOLD.
*                    Дата блокировки
SELECTION-SCREEN END OF LINE .
*----------------------------------------------------------------
SELECTION-SCREEN END OF SCREEN 902 .
*                   Конец экрана параметров сеанса
*======================================================================*

*======================================================================*
*          Экран параметров запуска ПВ в программе
*======================================================================*
SELECTION-SCREEN BEGIN OF SCREEN 903 AS WINDOW .
*                    Выбор режима запуска:
*--------------------------------
SELECTION-SCREEN BEGIN OF LINE .
SELECTION-SCREEN POSITION 1.
PARAMETERS: FON RADIOBUTTON GROUP MD .
SELECTION-SCREEN COMMENT 4(17) PFONCAP FOR FIELD FON.
*                      Фоновый режим
SELECTION-SCREEN END OF LINE .
*--------------------------------
SELECTION-SCREEN BEGIN OF LINE .
SELECTION-SCREEN POSITION 1.
PARAMETERS: ERR RADIOBUTTON GROUP MD .
SELECTION-SCREEN COMMENT 4(17) PERRCAP FOR FIELD ERR.
*                 Фоновый с показом ошибок режим
SELECTION-SCREEN END OF LINE .
*--------------------------------------------------------------
SELECTION-SCREEN BEGIN OF LINE .
SELECTION-SCREEN POSITION 1.
PARAMETERS: DISP RADIOBUTTON GROUP MD .
SELECTION-SCREEN COMMENT 4(17) PDISCAP FOR FIELD DISP.
*               Видимый режим (с показом всех экранов)
SELECTION-SCREEN END OF LINE .
*--------------------------------------------------------------
SELECTION-SCREEN END OF SCREEN 903.
*         Конец экрана параметров запуска ПВ в программе
*======================================================================*

DATA: BDC_MODE .

INITIALIZATION .
*======================================================================*
*           Установка текстов параметров выбора
*======================================================================*
*------------------------------------------------------------------
*                Окно "Выбор вида обработки ПВ"
*------------------------------------------------------------------
*                     Заголовок окна
  BDCTYP = 'Настройка обработки пакетного ввода' .
*              Радиобатоны видов обработки ПВ
  CSEACAP = 'Создать сеанс'.
  CPRGCAP = 'Выполнить программно'.
  CUSRCAP = 'Пользовательская обработка'.
*             Чекбокс включения постобработки
  CPOSCAP = 'Выполнять постобработку'.
*         Кнопка вызова окна настройки параметров ПВ
  PUBU = 'Параметры пакетного ввода'.
*------------------------------------------------------------------
*                Экран настройки сеанса при его создании
*------------------------------------------------------------------
  GRCAP = 'Название сеанса'.
  USCAP = 'Имя пользователя'.
  KPCAP = 'Сохранить сессию'.
  HDCAP = 'Хранить до'.
*------------------------------------------------------------------
*              Экран параметров запуска ПВ в программе
*------------------------------------------------------------------
  PFONCAP = 'Выполнить в фоне'.
  PERRCAP = 'С показом ошибок'.
  PDISCAP = 'Выполнить видимо'.
*------------------------------------------------------------------
*======================================================================*
* Настройка параметров - вытащить из памяти или установить по умолчанию
*======================================================================*
GET: PARAMETER ID 'GROU' FIELD GROUP,
     PARAMETER ID 'USER' FIELD USER,
     PARAMETER ID 'HOLD' FIELD HOLDDATE .
  IF GROUP IS INITIAL .
     GROUP = SY-REPID .
  ENDIF.
  IF USER IS INITIAL.
     USER = SY-UNAME .
  ENDIF.
  IF HOLDDATE IS INITIAL .
     HOLDDATE = SY-DATUM .
  ENDIF.
*======================================================================*
*Если все же оставили параметры пустыми, предложить заполнить их еще раз
*======================================================================*
AT SELECTION-SCREEN ON RADIOBUTTON GROUP MT .
  IF CRSEA EQ 'X'.
    IF GROUP IS INITIAL OR USER IS INITIAL .
     CALL SELECTION-SCREEN '902' STARTING AT 5 10 ENDING AT 37 13 .
    ENDIF.
*======================================================================*
*      Если все же заполнять параметры упорно не хотят - заполнить
*                      их значениями по умолчанию.
*Создать сеанс, не имеющий имени и присвоения пользователя - невозможно.
*======================================================================*
  IF GROUP IS INITIAL .
     GROUP = SY-REPID .
  ENDIF.
  IF USER IS INITIAL.
     USER = SY-UNAME .
  ENDIF.
  IF HOLDDATE IS INITIAL .
     HOLDDATE = SY-DATUM .
  ENDIF.
  ENDIF.
*======================================================================*
AT SELECTION-SCREEN.
*======================================================================*
*     Обработка нажатий клавиши "Настройка параметров ПВ" с вызовом
*                    соответствующих экранов
*======================================================================*
  IF SSCRFIELDS-UCOMM = 'SETP'.
  IF CRSEA EQ 'X'.
     CALL SELECTION-SCREEN '902' STARTING AT 5 10 ENDING AT 37 13 .
  ELSEIF ONPRG EQ 'X'.
     CALL SELECTION-SCREEN '903' STARTING AT 5 10 ENDING AT 25 10 .
  ENDIF.
  ENDIF.
*======================================================================*

*======================================================================*
*&                     Функции пакетного ввода
*======================================================================*

*&---------------------------------------------------------------------*
*            BDC_DYNPRO - абсолютно идентичная САПовской
*&---------------------------------------------------------------------*
FORM BDC_DYNPRO USING PROGRAM DYNPRO.
  CLEAR BDCDATA.
  BDCDATA-PROGRAM  = PROGRAM.
  BDCDATA-DYNPRO   = DYNPRO.
  BDCDATA-DYNBEGIN = 'X'.
  APPEND BDCDATA.
ENDFORM.

*----------------------------------------------------------------------*
*            BDC_FIELD - абсолютно идентичная САПовской
*----------------------------------------------------------------------*
FORM BDC_FIELD USING FNAM FVAL.
  CLEAR BDCDATA.
  BDCDATA-FNAM = FNAM.
  WRITE FVAL TO BDCDATA-FVAL NO-ZERO.
  APPEND BDCDATA.
ENDFORM.
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
*            START_BDC - производит ПВ в программе
*                   TNAME - имя транзакции
*----------------------------------------------------------------------*
FORM START_BDC USING TNAME.

  IF SY-BATCH IS INITIAL .
    CALL TRANSACTION TNAME USING BDCDATA MODE BDC_MODE UPDATE 'S'
                          MESSAGES INTO _MESSTAB .
  ELSE.
    CALL TRANSACTION TNAME USING BDCDATA MODE 'N' UPDATE 'S' .
  ENDIF.

IF POSTPR EQ 'X'.
   PERFORM SHOW_MESSAGES .
ENDIF.

  REFRESH: BDCDATA, _MESSTAB.
  CLEAR: BDCDATA, _MESSTAB.
ENDFORM.
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
*   create batchinput session                                          *
*               OPEN_GROUP - идентично САПовской
*----------------------------------------------------------------------*
FORM OPEN_GROUP.
  CALL FUNCTION 'BDC_OPEN_GROUP'
       EXPORTING
            CLIENT   = SY-MANDT
            GROUP    = GROUP
            USER     = USER
            KEEP     = KEEP
            HOLDDATE = HOLDDATE.
  CLEAR: SUCC_COUNT, ERR_COUNT .
ENDFORM.

*----------------------------------------------------------------------*
*   end batchinput session                                             *
*                CLOSE_GROUP - идентично САПовской
*----------------------------------------------------------------------*
FORM CLOSE_GROUP.
  DATA: GLOB_COUNT TYPE I.
* close batchinput group
  CALL FUNCTION 'BDC_CLOSE_GROUP'.
ENDFORM.

*----------------------------------------------------------------------*
*        Start new transaction                                         *
*           BDC_TRANSACTION - практически идентично САПовской
*----------------------------------------------------------------------*
FORM BDC_TRANSACTION USING TCODE.
  CALL FUNCTION 'BDC_INSERT'
       EXPORTING
            TCODE     = TCODE
       TABLES
            DYNPROTAB = BDCDATA.
  IF SY-SUBRC IS INITIAL.
    ADD 1 TO SUCC_COUNT.
  ELSE.
    ADD 1 TO ERR_COUNT.
  ENDIF.
  REFRESH BDCDATA .
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  SHOW_SEANS
*&---------------------------------------------------------------------*
*      Миниотчет, выдающий статистику по созданным сеансам
*      Используйте его взамен транзакции SM35, когда надо
*      выводить список сеансов и статистику по ним, но
*      нельзя давать пользователю доступ к транзакции SM35.
*   Честно говоря, сильно сомневаюсь, что кому-то она может всерьез
*      понадобиться, потому оставляю пока в "сыроватом" состоянии
*----------------------------------------------------------------------*
*  -->  SENAME - имя сеанса
*  -->  SDATE  - начальная дата периода анализа
*  -->  EDATE  - конечная дата периода анализа
*----------------------------------------------------------------------*
FORM SHOW_SEANS USING SENAME
                      SDATE TYPE D
                      EDATE TYPE D.

  DATA: TRANS LIKE APQI OCCURS 0 WITH HEADER LINE,
        STATEDESCR(64), SUMT LIKE TRANS-TRANSCNT,
                        SUMC LIKE TRANS-TRANSCNT,
                        LCOUNT TYPE I .

  CALL FUNCTION 'BDC_OBJECT_SELECT'
       EXPORTING
            NAME             = SENAME
            DATATYPE         = 'BDC'
*           CLIENT           = SY-MANDT
            DATE_FROM        = SDATE
            DATE_TO          = EDATE
*           QSTATE           = '*'
       TABLES
            APQITAB          = TRANS
       EXCEPTIONS
            INVALID_DATATYPE = 1
            OTHERS           = 2.

  DESCRIBE TABLE TRANS LINES LCOUNT .
  IF LCOUNT > 0.

    LOOP AT TRANS .
      IF TRANS-QSTATE IS INITIAL.
        STATEDESCR = 'Подлежит обработке'.
      ELSEIF TRANS-QSTATE EQ 'R'.
        STATEDESCR = 'В обработке'.
      ELSEIF TRANS-QSTATE EQ 'E'.
        STATEDESCR = 'Ошибочен'.
      ELSEIF TRANS-QSTATE EQ 'F'.
        STATEDESCR = 'Завершен'.
      ENDIF.

      IF NOT TRANS-QERASE IS INITIAL.
        CONCATENATE STATEDESCR ',' 'Удален' INTO STATEDESCR
           SEPARATED BY SPACE .
      ENDIF.

      WRITE: / 'Имя сеанса', SENAME,
             / 'Пользователь', TRANS-USERID,
             / 'Создан', TRANS-CREDATE, TRANS-CRETIME,
             / 'Статус', STATEDESCR .

      IF NOT TRANS-PUTDATE IS INITIAL .
        WRITE: / 'Запущен', TRANS-PUTDATE, TRANS-PUTTIME .
*          / 'Режим', TRANS-STARTMODE .
      ENDIF.

      IF TRANS-QSTATE EQ 'F' .
        WRITE: / 'Завершен', TRANS-GETDATE, TRANS-GETTIME .
      ENDIF.
      ULINE.
      WRITE: /
      '                   | Транзакций |' . " Экранов |' .
      ULINE .
      SUMT = TRANS-TRANSCNT - TRANS-TRANSCNTE - TRANS-TRANSCNTD -
                                                      TRANS-TRANSCNTF .
   SUMC = TRANS-MSGCNT - TRANS-MSGCNTE - TRANS-MSGCNTD - TRANS-MSGCNTF .
      WRITE:
       / 'Подлежит обработке',  SUMT,  "sumc ,
    / 'Ошибочных         ',          TRANS-TRANSCNTE,    "trans-msgcnte,
    / 'Удалено           ',          TRANS-TRANSCNTD,    "trans-msgcntd,
       / 'Завершено         ',          TRANS-TRANSCNTF, "trans-msgcntf,
       / 'Всего             ',  TRANS-TRANSCNT .    "trans-msgcnt .

      ULINE .
      SKIP.
*putactive
    ENDLOOP.
  ELSE.
    WRITE: / 'По заданным критериям транзакций не выбрано'.
  ENDIF.
ENDFORM.                               " SHOW_SEANS

*&---------------------------------------------------------------------*
*&      Form  SHOW_SM35
*&---------------------------------------------------------------------*
*    Осуществляет переход в транзакцию SM35, показывая созданные
*          сеансы (установив фильтр на имя сеансов)
*----------------------------------------------------------------------*
FORM SHOW_SM35.
  SET PARAMETER ID 'MPN' FIELD GROUP .
  CALL TRANSACTION 'SM35' AND SKIP FIRST SCREEN .
ENDFORM.                               " SHOW_SM35
*----------------------------------------------------------------------*

*&---------------------------------------------------------------------*
*&      Form  SHOW_MESSAGES
*&---------------------------------------------------------------------*
*    Предполагается сделать здесь вывод сообщений, собранных в ходе
*   выполнения BDC. Вывод предполагается сделать с использованием ALV.
*          Но пока мне, к сожалению, некогда этим заниматься.
*----------------------------------------------------------------------*
FORM SHOW_MESSAGES.
*                           EMPTY
ENDFORM.                    " SHOW_MESSAGES

*======================================================================*
*           Далее идут эти самые три ключевые подпрограммы.
*======================================================================*
*&---------------------------------------------------------------------*
*&      Form  BEGIN_BDC
*&---------------------------------------------------------------------*
*     Для начала работы с пакетным вводом. Вызывайте всегда перед
*                 началом "забивки" данных для ПВ.
*              В частности, ВМЕСТО вызова OPEN_GROUP
*----------------------------------------------------------------------*
*  -->  TRNAME  - имя транзакции, ПВ которой будет осуществляться.
*       Обязательный параметр.
*  -->  TRCOUNT - количество транзакций, которые будут введены
*        в результате осуществления данного пакетного ввода.
*     Можете передать в качестве параметра ноль, если Вам не нужен
*                       индикатор прогресса
*----------------------------------------------------------------------*
FORM BEGIN_BDC USING TRNAME
                     TRCOUNT TYPE I.
BDC_TRNAME = TRNAME .
BDC_TRCOUNT = TRCOUNT .

  CLEAR: BDC_PERC, OBDC_PERC, BDC_COUNTER .
  IF CRSEA EQ 'X'.
     PERFORM OPEN_GROUP.
  ENDIF.
ENDFORM.                    " BEGIN_BDC
*&---------------------------------------------------------------------*
*&      Form  END_TRANSACTION
*&---------------------------------------------------------------------*
*       Для завершения отдельной транзакции. Вызывайте всегда после
*         завершения "забивки" данных для очередной транзакции.
*    В частности, ВМЕСТО вызова "BDC_TRANSACTION" (когда создаете
*     сеанс ПВ) или "CALL TRANSACTION ... USING" (когда производите
*       ПВ в программе). Если было задано количество транзакций
*   в BEGIN_BDC, отличное от нуля, подсчитывается прогресс выполнения
*    и, если изменения прогресса после последнего обновления индикатора
*    составляет более 5%, обновляет значение индикатора (это сделано
*       для экономии ресурсов - индикатор может много их отнимать,
*       если будет обновляться слишком, неоправданно, часто).
*----------------------------------------------------------------------*
FORM END_TRANSACTION.
DATA: DLTA TYPE I.
IF CRSEA EQ 'X'.
  PERFORM BDC_TRANSACTION USING BDC_TRNAME.
ELSEIF ONPRG EQ 'X'.
  IF FON EQ 'X' .
    BDC_MODE = 'N' .
  ELSEIF ERR EQ 'X' .
    BDC_MODE = 'E' .
  ELSE.
    BDC_MODE = 'A' .
  ENDIF.

  PERFORM START_BDC USING BDC_TRNAME .
ENDIF.
IF SY-BATCH IS INITIAL .
IF BDC_TRCOUNT > 0 .
ADD 1 TO BDC_COUNTER .
BDC_PERC = BDC_COUNTER * 100 / BDC_TRCOUNT .
DLTA = BDC_PERC - OBDC_PERC .
ELSE.
CLEAR DLTA.
ENDIF.
IF  DLTA > 5.
   OBDC_PERC = BDC_PERC .

   CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
       EXPORTING
            PERCENTAGE = BDC_PERC
            TEXT       = 'Прогресс выполнения пакетного ввода'
        EXCEPTIONS
             OTHERS     = 1.
ENDIF.
ENDIF.
REFRESH BDCDATA.
CLEAR BDCDATA .
ENDFORM.                    " END_TRANSACTION
*&---------------------------------------------------------------------*
*&      Form  END_BDC
*&---------------------------------------------------------------------*
*     Для окончания работы с пакетным вводом. Вызывайте всегда после
*                 завершения "забивки" данных для ПВ.
*              В частности, ВМЕСТО вызова CLOSE_GROUP
*----------------------------------------------------------------------*
FORM END_BDC.
IF CRSEA EQ 'X' .
    PERFORM CLOSE_GROUP .

   IF POSTPR EQ 'X' AND SY-BATCH IS INITIAL .
      PERFORM SHOW_SM35 .
   ENDIF.
ENDIF.
ENDFORM.                    " END_BDC

=============================================
=============================================
=============================================

Основная программа для батч импута

*&---------------------------------------------------------------------*
*& Z_BDC_1                                           *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*&                                                                     *
*&---------------------------------------------------------------------*

REPORT Z_BDC_1.


INCLUDE Z_BDC.

types: begin of itab1,
        nom_pos        type zfile_upl-nom_pos,
        doc_date       type zfile_upl-doc_date,
        post_date      type zfile_upl-post_date,
        material       type zfile_upl-material,
        qty            type zfile_upl-qty,
        ediz           type zfile_upl-ediz,
        plant          type zfile_upl-plant,
        lgort          type zfile_upl-lgort,
        nam_act        type zfile_upl-nam_act,
end of itab1.

data: itab type itab1 occurs 10 with header line.
data: scht type zfile_upl-nom_pos.
data: cont type zfile_upl-nom_pos.

start-of-selection.

submit z_upload via selection-screen and return.

BDC_TRNAME = 'MIGO'.
BDC_MODE = 'N'.

select *
into corresponding fields of table itab
from ( zfile_upl as f )
where
    f~material  <>  ''.

scht = 0.
loop at itab.

scht = scht + 1.

endloop.

read table itab index 1.

*if scht > 1.

cont = 0.

loop at itab.

cont = cont + 1.

if cont < scht.

PERFORM BDC_DYNPRO USING 'SAPLMIGO' '0001'.

PERFORM BDC_FIELD USING 'BDC_OKCODE' '=MIGO_OK_NEXT_IT'.
if cont = 1.
PERFORM BDC_FIELD USING 'GODYNPRO-ACTION' 'A07'.
PERFORM BDC_FIELD USING 'GODYNPRO-REFDOC' 'R10'.
endif.
PERFORM BDC_FIELD USING 'GODEFAULT_TV-BWART' '201'.
* Заполнить из файла
PERFORM BDC_FIELD USING 'GOHEAD-BLDAT' itab-doc_date.
* Заполнить из файла
PERFORM BDC_FIELD USING 'GOHEAD-BUDAT' itab-post_date.
PERFORM BDC_FIELD USING 'GOHEAD-WEVER' '3'.
* Заполнить из файла
PERFORM BDC_FIELD USING 'GODYNPRO-DETAIL_ZEILE' itab-nom_pos.
* Заполнить из файла
PERFORM BDC_FIELD USING 'GOITEM-ERFMG' itab-qty.
* Заполнить из файла
PERFORM BDC_FIELD USING 'GOITEM-MAKTX' itab-material.
PERFORM BDC_FIELD USING 'BDC_CURSOR' 'GOITEM-LGOBE'.
PERFORM BDC_FIELD USING 'GOITEM-BWART' '201'.
* Заполнить из файла
PERFORM BDC_FIELD USING 'GOITEM-NAME1' itab-plant.
* Заполнить из файла
PERFORM BDC_FIELD USING 'GOITEM-LGOBE' itab-lgort.

******************************************

endif.

endloop.

read table itab index scht.

******************************************
PERFORM BDC_DYNPRO USING 'SAPLMIGO' '0001'.

PERFORM BDC_FIELD USING 'BDC_OKCODE' '=OK_GO'.
PERFORM BDC_FIELD USING 'GOITEM-BWART' '201'.
* Заполнить из файла
PERFORM BDC_FIELD USING 'GOHEAD-BLDAT' itab-doc_date.
* Заполнить из файла
PERFORM BDC_FIELD USING 'GOHEAD-BUDAT' itab-post_date.
PERFORM BDC_FIELD USING 'GOHEAD-WEVER' '3'.
* Заполнить из файла
PERFORM BDC_FIELD USING 'GODYNPRO-DETAIL_ZEILE' itab-nom_pos.
* Заполнить из файла
PERFORM BDC_FIELD USING 'GOITEM-MAKTX' itab-material.
* Заполнить из файла
PERFORM BDC_FIELD USING 'GOITEM-ERFMG' itab-qty.
PERFORM BDC_FIELD USING 'BDC_CURSOR' 'GOITEM-LGOBE'.
PERFORM BDC_FIELD USING 'GOITEM-BWART' '201'.
* Заполнить из файла
PERFORM BDC_FIELD USING 'GOITEM-NAME1' itab-plant.
* Заполнить из файла
PERFORM BDC_FIELD USING 'GOITEM-LGOBE' itab-lgort.

******************************************
PERFORM BDC_DYNPRO USING 'SAPLMIGO' '0001'.

PERFORM BDC_FIELD USING 'BDC_OKCODE' '=OK_PREDOC'.
PERFORM BDC_FIELD USING 'GODEFAULT_TV-BWART' '201'.
* Заполнить из файла
PERFORM BDC_FIELD USING 'GOHEAD-BLDAT' itab-doc_date.
* Заполнить из файла
PERFORM BDC_FIELD USING 'GOHEAD-BUDAT' itab-post_date.
PERFORM BDC_FIELD USING 'GOHEAD-WEVER' '3'.
* Заполнить из файла
PERFORM BDC_FIELD USING 'GODYNPRO-DETAIL_ZEILE' itab-nom_pos.
* Заполнить из файла
PERFORM BDC_FIELD USING 'GOITEM-MAKTX' itab-material.
* Заполнить из файла
PERFORM BDC_FIELD USING 'GOITEM-ERFME' itab-ediz.
* Заполнить из файла
PERFORM BDC_FIELD USING 'GOITEM-ERFMG' itab-qty.
PERFORM BDC_FIELD USING 'BDC_CURSOR' 'GOITEM-LGOBE'.
PERFORM BDC_FIELD USING 'GOITEM-BWART' '201'.
* Заполнить из файла
PERFORM BDC_FIELD USING 'GOITEM-NAME1' itab-plant.
* Заполнить из файла
PERFORM BDC_FIELD USING 'GOITEM-LGOBE' itab-lgort.
PERFORM BDC_FIELD USING 'GODYNPRO-DETAIL_TAKE' 'X'.
******************************************


PERFORM BDC_DYNPRO USING 'SAPLSPO4' '0300'.
PERFORM BDC_FIELD USING 'BDC_CURSOR' 'SVALD-VALUE(01)'.
PERFORM BDC_FIELD USING 'BDC_OKCODE' '=FURT'.
* Заполнить из файла
PERFORM BDC_FIELD USING 'SVALD-VALUE(01)' itab-nam_act.


******************************************
PERFORM BDC_DYNPRO USING 'SAPLMIGO' '0001'.
PERFORM BDC_FIELD USING 'BDC_OKCODE' '/EOK_END'.

******************************************
PERFORM BDC_DYNPRO USING 'SAPLSPO1' '0100'.
PERFORM BDC_FIELD USING 'BDC_OKCODE' '=NO'.


PERFORM BEGIN_BDC USING 'MIGO' 1.

PERFORM END_TRANSACTION.

PERFORM END_BDC.

*end-of-selection.

*INCLUDE Z_STANDART_BDC.
* INCLUDE Z_BDC_O01                               .                    *
* INCLUDE Z_BDC_I01                               .                    *
* INCLUDE Z_BDC_F01                               .                    *

Желаю успехов!


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, окт 12 2007, 10:51 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, авг 24 2004, 07:19
Сообщения: 3952
Откуда: ECC 6.0, South Kazakhstan
если б не нужно было делать временное сохранение, то для этого (запуск в фоне) вполне подошел бы ФМ BAPI_GOODSMVT_CREATE


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, окт 12 2007, 12:32 
Специалист
Специалист

Зарегистрирован:
Чт, май 19 2005, 10:10
Сообщения: 202
Да, я использовал эту bapi, но для других решений, моя программа на bapi для загрузки начальных остатков также выложена на форуме, но задача стяла именно с созданием временного документа...


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

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


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

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


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

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