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

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


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

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


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

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