Posted: Fri Feb 17, 2012 4:00 pm Post subject: Господа абаперы!Помогите новечку.
Code:
REPORT z_upload_debitor.
DATA: BEGIN OF debitor,
id TYPE i,
bukrs LIKE rf02d-bukrs,
ktokd LIKE rf02d-ktokd,
name1 LIKE kna1-name1,
sortl LIKE kna1-sortl,
stras LIKE kna1-stras,
orto1 LIKE kna1-ort01,
pstlz LIKE kna1-pstlz,
land1 LIKE kna1-land1,
spras LIKE kna1-spras,
stcd1 LIKE kna1-stcd1,
stcd2 LIKE kna1-stcd2,
banks LIKE knbk-banks,
bankl LIKE knbk-bankl,
bankn LIKE knbk-bankn,
* CIVVE like KNA1-CIVVE,
akont LIKE knb1-akont,
zuawa LIKE knb1-zuawa,
zterm LIKE knb1-zterm,
hbkid LIKE knb1-hbkid,
END OF debitor.
DATA: BEGIN OF bdcdata OCCURS 100.
INCLUDE STRUCTURE bdcdata.
DATA: END OF bdcdata.
DATA: BEGIN OF messtab OCCURS 10.
INCLUDE STRUCTURE bdcmsgcoll.
DATA: END OF messtab.
DATA: wa TYPE char14,
wu TYPE char14,
wi TYPE char14,
i TYPE num.
DATA: it_debit LIKE debitor OCCURS 0 WITH HEADER LINE.
PARAMETERS: filenam TYPE rlgrap-filename OBLIGATORY.
AT SELECTION-SCREEN.
CASE sy-ucomm.
WHEN 'ONLI'.
CALL FUNCTION 'ZPP_EXCEL_UPLOAD_TO_INTTAB'
EXPORTING
p_filename = filenam
start_row = 3
TABLES
p_tab = it_debit.
DATA: a TYPE num.
LOOP AT it_debit .
CLEAR: i.
CLEAR bdcdata. REFRESH bdcdata.
" Заголовок спецификации
PERFORM bdc_dynpro USING 'SAPMF02B' '0100'.
PERFORM bdc_field USING 'BDC_CURSOR' 'RF02D-KTOKD'.
PERFORM bdc_field USING 'BDC_OKCODE' '/00'.
PERFORM bdc_field USING 'RF02D-BUKRS' it_debit-bukrs.
PERFORM bdc_field USING 'RF02D-KTOKD' it_debit-ktokd.
PERFORM bdc_dynpro USING 'SAPMF02B' '0110'.
PERFORM bdc_field USING 'BDC_CURSOR' 'KNA1-SORTL'.
PERFORM bdc_field USING 'BDC_OKCODE' '/00'.
PERFORM bdc_field USING 'KNA1-NAME1' it_debit-name1.
PERFORM bdc_field USING 'KNA1-SORTL' it_debit-sortl.
PERFORM bdc_field USING 'KNA1-STRAS' it_debit-stras.
PERFORM bdc_field USING 'KNA1-ORT01' it_debit-orto1.
PERFORM bdc_field USING 'KNA1-PSTLZ' it_debit-pstlz.
PERFORM bdc_field USING 'KNA1-LAND1' it_debit-land1.
PERFORM bdc_field USING 'KNA1-SPRAS' it_debit-spras.
PERFORM bdc_dynpro USING 'SAPMF02B' '0120'.
PERFORM bdc_field USING 'BDC_CURSOR' 'KNA1-STKZN'.
PERFORM bdc_field USING 'BDC_OKCODE' '/00 '.
PERFORM bdc_field USING 'KNA1-STCD1' it_debit-stcd1.
PERFORM bdc_field USING 'KNA1-STCD2' it_debit-stcd2.
PERFORM bdc_dynpro USING 'SAPMF02B' '0125'.
PERFORM bdc_field USING 'BDC_CURSOR' 'KNA1-NIELS'.
PERFORM bdc_field USING 'BDC_OKCODE' '/00 '.
PERFORM bdc_dynpro USING 'SAPMF02B' '0130'.
PERFORM bdc_field USING 'BDC_CURSOR' 'KNBK-BANKN'.
PERFORM bdc_field USING 'BDC_OKCODE' '=ENTR '.
a = it_debit-id.
LOOP AT it_debit WHERE id = a.
IF it_debit-id = a.
CLEAR: wa , wu , wi .
ELSE.
a = it_debit-id.
CLEAR i.
endif.
IF it_debit-id = a.
CLEAR: wa , wu , wi .
ADD 1 TO i.
CONCATENATE 'KNBK-BANKS(' i ')' INTO wa.
CONCATENATE 'KNBK-BANKL(' i ')' INTO wu.
CONCATENATE 'KNBK-BANKN(' i ')' INTO wi.
PERFORM bdc_field USING wa it_debit-banks.
PERFORM bdc_field USING wu it_debit-bankl.
PERFORM bdc_field USING wi it_debit-bankn.
ENDIF.
ENDLOOP.
PERFORM bdc_dynpro USING 'SAPMF02B' '0130'.
PERFORM bdc_field USING 'BDC_CURSOR' 'KNBK-BANKN'.
PERFORM bdc_field USING 'BDC_OKCODE' '=VW'.
PERFORM bdc_dynpro USING 'SAPMF02B' '0340'.
PERFORM bdc_field USING 'BDC_CURSOR' 'RF02D-KUNNR'.
PERFORM bdc_field USING 'BDC_OKCODE' '=VW'.
PERFORM bdc_dynpro USING 'SAPMF02B' '0370'.
PERFORM bdc_field USING 'BDC_CURSOR' 'RF02D-KUNNR'.
PERFORM bdc_field USING 'BDC_OKCODE' '=VW'.
* PERFORM bdc_field USING 'KNA1-CIVVE' It_debit-CIVVE.
PERFORM bdc_dynpro USING 'SAPMF02B' '0360'.
PERFORM bdc_field USING 'BDC_CURSOR' 'KNVK-NAMEV'.
PERFORM bdc_field USING 'BDC_OKCODE' '=VW'.
PERFORM bdc_dynpro USING 'SAPMF02B' '0210'.
PERFORM bdc_field USING 'BDC_CURSOR' 'KNB1-ZUAWA'.
PERFORM bdc_field USING 'BDC_OKCODE' '=VW'.
PERFORM bdc_field USING 'KNB1-AKONT' it_debit-akont.
PERFORM bdc_field USING 'KNB1-ZUAWA' it_debit-zuawa.
PERFORM bdc_dynpro USING 'SAPMF02B' '0215'.
PERFORM bdc_field USING 'BDC_CURSOR' 'KNB1-ZAHLS'.
PERFORM bdc_field USING 'BDC_OKCODE' '=VW'.
PERFORM bdc_field USING 'KNB1-ZTERM' it_debit-zterm.
PERFORM bdc_field USING 'KNB1-HBKID' it_debit-hbkid.
PERFORM bdc_dynpro USING 'SAPMF02B' '0220'.
PERFORM bdc_field USING 'BDC_CURSOR' 'KNB5-MAHNA'.
PERFORM bdc_field USING 'BDC_OKCODE' '=VW'.
PERFORM bdc_dynpro USING 'SAPMF02B' '0230'.
PERFORM bdc_field USING 'BDC_CURSOR' 'KNB1-VRSNR'.
PERFORM bdc_field USING 'BDC_OKCODE' '=VW'.
CALL TRANSACTION 'XD01' USING bdcdata MODE 'D' UPDATE 'S'
MESSAGES INTO messtab.
*&---------------------------------------------------------------------*
*& Form bdc_dynpro
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->PROGRAM text
* -->DYNPRO text
*----------------------------------------------------------------------*
FORM bdc_dynpro USING program dynpro.
CLEAR bdcdata.
bdcdata-program = program. " Имя программы
bdcdata-dynpro = dynpro. " Номер экрана
bdcdata-dynbegin = 'X'.
APPEND bdcdata.
ENDFORM. "bdc_dynpro
*&---------------------------------------------------------------------*
*& Form BDC_FIELD
*&---------------------------------------------------------------------*
FORM bdc_field USING fnam fval.
CLEAR bdcdata.
bdcdata-fnam = fnam. " Имя поля
bdcdata-fval = fval. " Значание поля
APPEND bdcdata.
ENDFORM. "bdc_field
суть программы создать дебитора по данным импортированых из внешнего фаила (EXCEL). Я получаю данный из екселя в внутрению таблицу it_debit.
но есть поля в этои таблице KNBK-BANKN(01) я создал вот этот цикл в цикл
a = it_debit-id.
LOOP AT it_debit WHERE id = a.
IF it_debit-id = a.
CLEAR: wa , wu , wi .
ELSE.
a = it_debit-id.
CLEAR i.
endif.
IF it_debit-id = a.
CLEAR: wa , wu , wi .
ADD 1 TO i.
CONCATENATE 'KNBK-BANKS(' i ')' INTO wa.
CONCATENATE 'KNBK-BANKL(' i ')' INTO wu.
CONCATENATE 'KNBK-BANKN(' i ')' INTO wi.
PERFORM bdc_field USING wa it_debit-banks.
PERFORM bdc_field USING wu it_debit-bankl.
PERFORM bdc_field USING wi it_debit-bankn.
ENDIF.
ENDLOOP.
для добавления как я понимаю в кнбк данных каждого дебитора.
и потом вызываю транзакцию CALL TRANSACTION 'XD01'
как я понял для добавления данных из bdcdata в транзакцию
'XD01'. Но при выполнения программы поевляется вот это (ecran.jpg.)
Пожалуйста вы меня сильно не пинаите. Я еще не до конца понял как сам процес идет . Помогите пожалуиста разобратся. и фаил EXCEL выложу.
Age: 48 Joined: 25 Jan 2008 Posts: 580 Location: Москва
Posted: Mon Feb 20, 2012 11:10 am Post subject:
1.Сначала в транзакции SHDB создайте сценарий ввода.
2.Сгенерируйте программу на основе записанного сценария.
3.Запустите программу.
4.Если все заработает, изучайте код. И не забудьте почитать справку по приложению на первом экране транзакции SHDB.
И это..Прочитайте сначала курс BC400, он есть в соответствующем разделе сайта. _________________ С уважением,
Удав.
У меня никак не получается.
Я создал 2 внутренних таблиц it_debit и it_zbank.
в it_zbank я сохраняю банки и ид из it_debit .
потом я в цикле loop at it_debit ищу по id
и добаляю в bdcdata
и если я доиду до KNBK-BANKS(01) Я считаю данные из it_zbank.
и добавляю в bdcdata.
потом вызываю транзакцию XD01
CALL TRANSACTION 'XD01' USING bdcdata MODE 'D' UPDATE 'S'
MESSAGES INTO messtab.
Вот здесь и у меня ничего не получается .
на что мне обратить внимание , я поискал в BC400 но толком ничего не нашел.
и никаких данных в нет.
Нашел по интернету BAPI_CUSTOMER_CREATEFROMDATA1.
Может сночало надо создать дебитора и получить его номер который САп создает?
или этот номер мы создаём?
Или я логику путаю с други языками програмирования _________________ Начинаюший ABAP-er
Age: 41 Joined: 01 Feb 2008 Posts: 387 Location: Воронеж
Posted: Tue Feb 21, 2012 5:47 pm Post subject:
а что именно не получается при запуске транзакции? не отображаются экраны или что? поставьте моде А.
FI уже смутно помню, некоторые транзакции там пакетником нельзя сделать или очень сложно и вместо этого нужно делать через какой нибудь ФМ. Возможно тот который вы написали и подойдет. Номер создаст САП либо через ФМ, либо через транзакцию. _________________ Hормальные люди делают вещи намного более безумные чем всё, что делают сумасшедшие (c) С.Лем
У меня выходит тока Первый экран ввода тот который на рисунке.
И все . Может значение полей неправильные я поставил.
Вроде бы проверил все.
Может есть какой то нюанс который я еще не понял. _________________ Начинаюший ABAP-er
Age: 41 Joined: 01 Feb 2008 Posts: 387 Location: Воронеж
Posted: Thu Feb 23, 2012 11:30 am Post subject:
Можно запустить без 1 экрана, нужно написать skip first screen(в хелпе об этом написано). Если вы запускаете с mode A, то вам и должны показывать экраны, это что то типа режима отладки, чтобы по нему перемещаться нужно enter нажимать, ну а на 1 экране кажется F8. Если все создается хорошо, то замените mode A на другой, который вам подходит. _________________ Hормальные люди делают вещи намного более безумные чем всё, что делают сумасшедшие (c) С.Лем
Age: 41 Joined: 01 Feb 2008 Posts: 387 Location: Воронеж
Posted: Mon Feb 27, 2012 4:45 pm Post subject:
Я конкретно с вашей транзакцией если и работал, то было давно. Времени повторять опыт или искать вам ссылки как правильно это делается у меня, к сожалению, нет. Но попробуйте сделать не пакетником, а с помощью соответствующих ФМ-ов, или коллега vvk рекомендовал функционал. Задача имеет как правило много решений. Не получается одно, попробуй другое.
Сам я пакетниками пользуюсь крайне редко. _________________ Hормальные люди делают вещи намного более безумные чем всё, что делают сумасшедшие (c) С.Лем
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum You cannot attach files in this forum You can download files in this forum
All product names are trademarks of their respective companies. SAPNET.RU websites are in no way affiliated with SAP AG. SAP, SAP R/3, R/3 software, mySAP, ABAP, BAPI, xApps, SAP NetWeaver and any other are registered trademarks of SAP AG. Every effort is made to ensure content integrity. Use information on this site at your own risk.