SAP R/3 форум ABAP консультантов
Russian ABAP Developer's Club

Home - FAQ - Search - Memberlist - Usergroups - Profile - Log in to check your private messages - Register - Log in - English
Blogs - Weblogs News

Господа абаперы!Помогите новечку.


Goto page 1, 2  Next
 
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> Talks | Беседка
View previous topic :: View next topic  
Author Message
sergiucz
Специалист
Специалист


Age: 41
Joined: 17 Feb 2012
Posts: 62

PostPosted: Fri Feb 17, 2012 4:00 pm    Post subject: Господа абаперы!Помогите новечку. Reply with quote

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  ON VALUE-REQUEST FOR filenam.

  CALL FUNCTION 'KD_GET_FILENAME_ON_F4'
   EXPORTING
*   PROGRAM_NAME        = SYST-REPID
*   DYNPRO_NUMBER       = SYST-DYNNR
*   FIELD_NAME          = ' '
*   STATIC              = ' '
     mask                = '*.xls , *.xlsx'
    CHANGING
      file_name           = filenam
* EXCEPTIONS
*   MASK_TOO_LONG       = 1
*   OTHERS              = 2
            .
  IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

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.

        LOOP AT messtab.
          WRITE: / messtab-tcode,
            messtab-dyname,
            messtab-dynumb,
            messtab-msgtyp,
            messtab-msgspra,
            messtab-msgid,
            messtab-msgnr.
        ENDLOOP.



      ENDLOOP.

  ENDCASE.








*&---------------------------------------------------------------------*
*&      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 выложу.



ecran.jpg
 Description:
 Filesize:  80.05 KB
 Viewed:  30010 Time(s)

ecran.jpg



_________________
Начинаюший ABAP-er
Back to top
View user's profile Send private message
Удав
Гуру
Гуру


Age: 48
Joined: 25 Jan 2008
Posts: 580
Location: Москва

PostPosted: Mon Feb 20, 2012 11:10 am    Post subject: Reply with quote

1.Сначала в транзакции SHDB создайте сценарий ввода.
2.Сгенерируйте программу на основе записанного сценария.
3.Запустите программу.
4.Если все заработает, изучайте код. И не забудьте почитать справку по приложению на первом экране транзакции SHDB.

И это..Прочитайте сначала курс BC400, он есть в соответствующем разделе сайта. Wink

_________________
С уважением,
Удав.
Back to top
View user's profile Send private message
sergiucz
Специалист
Специалист


Age: 41
Joined: 17 Feb 2012
Posts: 62

PostPosted: Mon Feb 20, 2012 11:15 am    Post subject: Reply with quote

Спасибо !!
_________________
Начинаюший ABAP-er
Back to top
View user's profile Send private message
sergiucz
Специалист
Специалист


Age: 41
Joined: 17 Feb 2012
Posts: 62

PostPosted: Tue Feb 21, 2012 3:18 pm    Post subject: Reply with quote

У меня никак не получается.
Я создал 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
Back to top
View user's profile Send private message
XXX_:)
Аналитик
Аналитик


Age: 40
Joined: 01 Feb 2008
Posts: 387
Location: Воронеж

PostPosted: Tue Feb 21, 2012 5:47 pm    Post subject: Reply with quote

а что именно не получается при запуске транзакции? не отображаются экраны или что? поставьте моде А.

FI уже смутно помню, некоторые транзакции там пакетником нельзя сделать или очень сложно и вместо этого нужно делать через какой нибудь ФМ. Возможно тот который вы написали и подойдет. Номер создаст САП либо через ФМ, либо через транзакцию.

_________________
Hормальные люди делают вещи намного более безумные чем всё, что делают сумасшедшие (c) С.Лем
Back to top
View user's profile Send private message Blog
sergiucz
Специалист
Специалист


Age: 41
Joined: 17 Feb 2012
Posts: 62

PostPosted: Tue Feb 21, 2012 9:14 pm    Post subject: Reply with quote

У меня выходит тока Первый экран ввода тот который на рисунке.
И все . Может значение полей неправильные я поставил.
Вроде бы проверил все.
Может есть какой то нюанс который я еще не понял.

_________________
Начинаюший ABAP-er
Back to top
View user's profile Send private message
Нюша
Участник
Участник



Joined: 01 Jan 2012
Posts: 2

PostPosted: Wed Feb 22, 2012 1:44 pm    Post subject: Reply with quote

А таблицу bdcdata перед вызовом транзакции Вы заполнили?
Back to top
View user's profile Send private message
sergiucz
Специалист
Специалист


Age: 41
Joined: 17 Feb 2012
Posts: 62

PostPosted: Wed Feb 22, 2012 3:24 pm    Post subject: Reply with quote

Да заполнил . Вот этим
Code:
SAPMF02B   0100   X      
   0000      BDC_CURSOR   RF02D-KTOKD
   0000      BDC_OKCODE   /00
   0000      RF02D-REF_KUNNR   2500000011
   0000      RF02D-BUKRS   1010
   0000      RF02D-KTOKD   DBMD
   0000      RF02D-REF_BUKRS   1010
   0000      RF02D-REF_VKORG   
   0000      RF02D-REF_VTWEG   
   0000      RF02D-REF_SPART   
SAPMF02B   0110   X      
   0000      BDC_CURSOR   KNA1-SORTL
   0000      BDC_OKCODE   /00
   0000      KNA1-NAME1   Vasea Habibulin
   0000      KNA1-SORTL   Брынза
   0000      KNA1-STRAS   str.Puskin 13
   0000      KNA1-ORT01   Chisinau
   0000      KNA1-PSTLZ   2020
   0000      KNA1-LAND1   MDA
   0000      KNA1-SPRAS   R
SAPMF02B   0120   X      
   0000      BDC_CURSOR   KNA1-STKZN
   0000      BDC_OKCODE   /00
   0000      KNA1-STCD1   7800043
   0000      KNA1-STCD2   
SAPMF02B   0125   X      
   0000      BDC_CURSOR   KNA1-NIELS
   0000      BDC_OKCODE   /00
SAPMF02B   0130   X      
   0000      BDC_CURSOR   KNBK-BANKL(01)
   0000      BDC_OKCODE   =ENTR
   0000      KNBK-BANKS(01)   MDA
   0000      KNBK-BANKL(01)   AGRNMd2X725
   0000      KNBK-BANKN(01)   225180101342
SAPMF02B   0130   X      
   0000      BDC_CURSOR   KNBK-BANKN(01)
   0000      BDC_OKCODE   =VW
SAPMF02B   0130   X      
   0000      BDC_CURSOR   KNBK-BANKL(02)
   0000      BDC_OKCODE   =ENTR
   0000      KNBK-BANKS(02)   MDA
   0000      KNBK-BANKL(02)   AGRNMd2X725
   0000      KNBK-BANKN(02)   225180107777
SAPMF02B   0130   X      
   0000      BDC_CURSOR   KNBK-BANKN(02)
   0000      BDC_OKCODE   =VW
SAPMF02B   0340   X      
   0000      BDC_CURSOR   RF02D-KUNNR
   0000      BDC_OKCODE   =VW
SAPMF02B   0370   X      
   0000      BDC_CURSOR   RF02D-KUNNR
   0000      BDC_OKCODE   =VW
SAPMF02B   0360   X      
   0000      BDC_CURSOR   KNVK-NAMEV
   0000      BDC_OKCODE   =VW
SAPMF02B   0210   X      
   0000      BDC_CURSOR   KNB1-ZUAWA
   0000      BDC_OKCODE   =VW
   0000      KNB1-AKONT   1234567890
   0000      KNB1-ZUAWA   221
SAPMF02B   0215   X      
   0000      BDC_CURSOR   KNB1-ZAHLS
   0000      BDC_OKCODE   =VW
   0000      KNB1-ZTERM   4444
   0000      KNB1-HBKID   2X444
SAPMF02B   0220   X      
   0000      BDC_CURSOR   KNB5-MAHNA
   0000      BDC_OKCODE   =VW
SAPMF02B   0230   X      
   0000      BDC_CURSOR   KNB1-VRSNR
   0000      BDC_OKCODE   =VW

_________________
Начинаюший ABAP-er


Last edited by sergiucz on Tue Mar 06, 2012 7:32 pm; edited 1 time in total
Back to top
View user's profile Send private message
sergiucz
Специалист
Специалист


Age: 41
Joined: 17 Feb 2012
Posts: 62

PostPosted: Wed Feb 22, 2012 3:25 pm    Post subject: Reply with quote

может неправельно заполнил .
Проверил поля несколько раз.

_________________
Начинаюший ABAP-er
Back to top
View user's profile Send private message
XXX_:)
Аналитик
Аналитик


Age: 40
Joined: 01 Feb 2008
Posts: 387
Location: Воронеж

PostPosted: Thu Feb 23, 2012 11:30 am    Post subject: Reply with quote

Можно запустить без 1 экрана, нужно написать skip first screen(в хелпе об этом написано). Если вы запускаете с mode A, то вам и должны показывать экраны, это что то типа режима отладки, чтобы по нему перемещаться нужно enter нажимать, ну а на 1 экране кажется F8. Если все создается хорошо, то замените mode A на другой, который вам подходит.
_________________
Hормальные люди делают вещи намного более безумные чем всё, что делают сумасшедшие (c) С.Лем
Back to top
View user's profile Send private message Blog
vvk
Гуру
Гуру



Joined: 17 Jan 2011
Posts: 14

PostPosted: Fri Feb 24, 2012 9:41 am    Post subject: Reply with quote

Для создания/изменения контрагентов используйте функциональность классов CMD_EI_API и VMD_EI_API.
Back to top
View user's profile Send private message
sergiucz
Специалист
Специалист


Age: 41
Joined: 17 Feb 2012
Posts: 62

PostPosted: Fri Feb 24, 2012 6:41 pm    Post subject: Reply with quote

CALL TRANSACTION 'XD01' USING bdcdata MODE 'D' UPDATE 'S'
мне пишет невозможно использовать AND SKIP FIRST SCREEN

_________________
Начинаюший ABAP-er
Back to top
View user's profile Send private message
sergiucz
Специалист
Специалист


Age: 41
Joined: 17 Feb 2012
Posts: 62

PostPosted: Fri Feb 24, 2012 6:43 pm    Post subject: Reply with quote

в режиме отладки А показывает "ecran.jpg" рисунок с верху.
_________________
Начинаюший ABAP-er
Back to top
View user's profile Send private message
XXX_:)
Аналитик
Аналитик


Age: 40
Joined: 01 Feb 2008
Posts: 387
Location: Воронеж

PostPosted: Mon Feb 27, 2012 4:45 pm    Post subject: Reply with quote

Я конкретно с вашей транзакцией если и работал, то было давно. Времени повторять опыт или искать вам ссылки как правильно это делается у меня, к сожалению, нет. Но попробуйте сделать не пакетником, а с помощью соответствующих ФМ-ов, или коллега vvk рекомендовал функционал. Задача имеет как правило много решений. Не получается одно, попробуй другое.

Сам я пакетниками пользуюсь крайне редко.

_________________
Hормальные люди делают вещи намного более безумные чем всё, что делают сумасшедшие (c) С.Лем
Back to top
View user's profile Send private message Blog
sergiucz
Специалист
Специалист


Age: 41
Joined: 17 Feb 2012
Posts: 62

PostPosted: Tue Feb 28, 2012 11:17 am    Post subject: Reply with quote

Спасибо вам за отклик ! И за советы. Как наиду в чем причина и зложу на форуме . Может комуто понадобится.

Всем спосибо!!

_________________
Начинаюший ABAP-er
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> Talks | Беседка All times are GMT + 4 Hours
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
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.