Здравствуйте, уважаемые коллеги.
Вот разработал программку формирование батч-импута через 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 . *
Желаю успехов!