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

Проблема с переключением экранов при работе пакетника.



 
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> ABAP
View previous topic :: View next topic  
Author Message
vad-anatolij
Специалист
Специалист



Joined: 17 Dec 2007
Posts: 51

PostPosted: Wed Aug 06, 2008 3:55 pm    Post subject: Проблема с переключением экранов при работе пакетника. Reply with quote

Доброго дня коллеги.
Небольшая проблема, при записи макроса переключение между экранами происходит нормально, когда же запускаешь его, то он останавливается на первом экране и переключается на другой только с помощью нажатия кнопки "Enter". Может это известные грабли? В чем может быть проблема?
На всякий случай кусок кода
Code:

perform bdc_dynpro      using 'SAPLCLMO' '0100'.
perform bdc_field       using 'BDC_CURSOR'
                              'RMCLM-KLART'.
perform bdc_field       using 'BDC_OKCODE'
                              '=BASD'.
perform bdc_field       using 'RMCLM-CLASS'
                               ztab-class.
perform bdc_field       using 'RMCLM-KLART'
                              '002'.
perform bdc_dynpro      using 'SAPLCLMO' '0100'.
perform bdc_field       using 'BDC_CURSOR'
                              'RMCLM-CLASS'.
perform bdc_field       using 'BDC_OKCODE'
                              '/00'.
perform bdc_field       using 'RMCLM-CLASS'
                               ztab-class.
perform bdc_field       using 'RMCLM-KLART'
                              '002'.
perform bdc_dynpro      using 'SAPLCLMO' '7777'.
perform bdc_field       using 'BDC_OKCODE'
                              '=MERK'.
perform bdc_field       using 'BDC_CURSOR'
                              'RMCLM-KLBEZ'.
perform bdc_field       using 'RMCLM-KLBEZ'
                               ztab-class.
perform bdc_field       using 'RMCLM-STATU'
                              '1'.

Спасибо.
Back to top
View user's profile Send private message Blog
Armann
Модератор
Модератор



Joined: 01 Jan 2008
Posts: 422
Location: Moscow

PostPosted: Wed Aug 06, 2008 4:12 pm    Post subject: Reply with quote

vad-anatolij, а покажите место с CALL TRANSACTION

UPD: поглядите параметр MODE у команды CALL TRANSACTION
Back to top
View user's profile Send private message Blog
vad-anatolij
Специалист
Специалист



Joined: 17 Dec 2007
Posts: 51

PostPosted: Thu Aug 07, 2008 6:12 am    Post subject: Reply with quote

Armann wrote:
vad-anatolij, а покажите место с CALL TRANSACTION

UPD: поглядите параметр MODE у команды CALL TRANSACTION


Так нет ее, по крайней мере в явном виде. Остаток кода:
Code:

perform bdc_field       using 'RMCLM-KLAGR'
                              'Бла-Бла'.
perform bdc_field       using 'RMCLM-VONDT'
                              '31.07.2008'.
perform bdc_field       using 'RMCLM-BISDT'
                              '31.12.9999'.
perform bdc_field       using 'RMCLM-PRAUS'
                              'X'.
perform bdc_dynpro      using 'SAPLCLMO' '7777'.
perform bdc_field       using 'BDC_OKCODE'
                              '=MWRT'.
perform bdc_field       using 'BDC_CURSOR'
                              'RMCLM-MERKMA(03)'.
perform bdc_field       using 'RMCLM-EINTRAG'
                              '1'.
perform bdc_field       using 'RMCLM-MARK(03)'
                              'X'.
perform bdc_dynpro      using 'SAPLCTMV' '0200'.
perform bdc_field       using 'BDC_CURSOR'
                              'CAWN-ATWRT(01)'.
perform bdc_field       using 'BDC_OKCODE'
                              '=SICH'.
perform bdc_field       using 'CABN-ATSON'
                              'X'.
perform bdc_field       using 'RCTMV-PAGAC'
                              '1'.
perform bdc_field       using 'CAWN-ATWRT(01)'
*                              '11'.
                               ztab-atwrt.
perform bdc_field       using 'CAWN-ATWRT(02)'
                              ''.
perform bdc_field       using 'CAWN-ATWRT(03)'
                              ''.
perform bdc_transaction using 'CL02'.


Вот и все)).
Back to top
View user's profile Send private message Blog
Armann
Модератор
Модератор



Joined: 01 Jan 2008
Posts: 422
Location: Moscow

PostPosted: Thu Aug 07, 2008 8:38 am    Post subject: Reply with quote

тогда попробуйте вместо этого:
Code:
perform bdc_transaction using 'CL02'.


написать так:
Code:
CALL TRANSACTION ''CL02'  USING bdcdata MODE 'N'.

я не особенно силен в пакетном вводе, но должно помочь Smile
Back to top
View user's profile Send private message Blog
XXX_:)
Аналитик
Аналитик


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

PostPosted: Thu Aug 07, 2008 8:41 am    Post subject: Reply with quote

прочитайте хелп к CALL TRANSACTION, вы по-видимому используете стандартную программу FORM BDC_TRANSACTION из инклуда BDCRECX1. В ней не указан параметер MODE, а по умолчанию, если не ошибаюсь он установлен в режим "А", вам нужен режим "N". Вам Armann совершенно правельно сказал, где нужно посмотреть.
_________________
Hормальные люди делают вещи намного более безумные чем всё, что делают сумасшедшие (c) С.Лем
Back to top
View user's profile Send private message Blog
vad-anatolij
Специалист
Специалист



Joined: 17 Dec 2007
Posts: 51

PostPosted: Thu Aug 07, 2008 11:03 am    Post subject: Reply with quote

Спасибо. Работает. Smile
Back to top
View user's profile Send private message Blog
vad-anatolij
Специалист
Специалист



Joined: 17 Dec 2007
Posts: 51

PostPosted: Tue Sep 02, 2008 1:13 pm    Post subject: Reply with quote

Как говорят на западе "Упсссс".. Работать работает, выдает отчет что записи введены с указанием колчества (так сделано специально), но вот данные туда не заносит. Sad
Дальнейший разбор показал:
1) изначально режим мод был "Е" ,т.е. показывать экраны когда ошибка.
2) При переходе на "N" все пошло без экранов, никаких сообщений не выдается (те что в хелпе) , но данные в нужных транзакциях не вводяться.
3) При переходе опять к "Е" начинает выдавать каждый раз первый экран ,но зато данные вводяться.
Как можно еще вычислить проблему?
Вроде задача то простая - что бы не выскакивали экраны и все вводилось Smile .
Back to top
View user's profile Send private message Blog
XXX_:)
Аналитик
Аналитик


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

PostPosted: Tue Sep 02, 2008 1:39 pm    Post subject: Reply with quote

vad-anatolij wrote:
Как говорят на западе "Упсссс".. Работать работает, выдает отчет что записи введены с указанием колчества (так сделано специально), но вот данные туда не заносит. Sad
Дальнейший разбор показал:
1) изначально режим мод был "Е" ,т.е. показывать экраны когда ошибка.
3) При переходе опять к "Е" начинает выдавать каждый раз первый экран ,но зато данные вводяться.


Я правильно понял, что у вас на первом экране ошибка? Тогда выход очевиден, исправьте ошибку и поставьте MODE N, если ваша ошибка понятно кто виноват, если пользователь ввел некоректные данные, то это его проблема, тогда используете MESSAGES INTO itab, там находятся все сообщения которые выдавались во время работы пакетника. После транзакции можете сделать журнал, в котором видно что за ошибки были во время отработки. Соответственно пользователь увидит почему программа не сработала и скорректирует данные, которые ввел.

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



Joined: 17 Dec 2007
Posts: 51

PostPosted: Tue Sep 02, 2008 3:16 pm    Post subject: Reply with quote

XXX_:) wrote:
Я правильно понял, что у вас на первом экране ошибка? .


Ошибку не выдает. Просто показывает первый экран. По режиму "Е" я предполагаю что есть ошибка. Если есть, то ошибка однозначно моя, а не пользователя, т.к. данные беруться пакетником из таблицы вне САПА.

XXX_:) wrote:
После транзакции можете сделать журнал, в котором видно что за ошибки были во время отработки. .


Это можно как то прописать в конце программы? К сожалению я пришел недавно в SAP. Если не трудно код подскажите, или ссылку.
Back to top
View user's profile Send private message Blog
XXX_:)
Аналитик
Аналитик


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

PostPosted: Tue Sep 02, 2008 4:02 pm    Post subject: Reply with quote

можно например вот так, но способ вывода на экран зависит от вкуса программиста.
Code:

TYPES: t_bdcd TYPE TABLE OF bdcdata.
TYPES: t_bdcm TYPE TABLE OF bdcmsgcoll.

DATA: it_bdcd TYPE t_bdcd,
      it_bdcm TYPE t_bdcm,
      h_rc    TYPE sy-subrc.

*создание журнала
  PERFORM log_create.

Заполняем табличку для вызова транзакции

  PERFORM call_transaction TABLES it_bdcd
                                  it_bdcm
                       USING      'FB01'
                                  'N'
                       CHANGING h_rc .

*вытаскиваем сообщения которые были в вызванной транзакции
  PERFORM get_prot USING it_bdcm.
___________________________________________________

FORM call_transaction TABLES lit_bdcd  TYPE t_bdcd
                             lit_bdcm  TYPE t_bdcm
                      USING  value(l_tcode)   TYPE c
                             value(l_mode)    TYPE c
                      CHANGING h_rc TYPE sy-subrc.

  DATA: lit_bdc TYPE TABLE OF bdcdata WITH HEADER LINE,
        lit_msg TYPE TABLE OF bdcmsgcoll WITH HEADER LINE.

  lit_bdc[] = lit_bdcd[].

  CALL TRANSACTION l_tcode USING lit_bdc MODE l_mode UPDATE 'S'
  MESSAGES INTO lit_msg.

  h_rc = sy-subrc.

  APPEND LINES OF lit_msg TO  lit_bdcm.

ENDFORM. "call_transaction
*---------------------------------------------------------------------*
*Обработка сообщений
*---------------------------------------------------------------------*
FORM get_prot USING it_bdcm TYPE t_bdcm.

  DATA: ls_bdcm TYPE bdcmsgcoll.

  LOOP AT it_bdcm INTO ls_bdcm.

    sy-msgty = ls_bdcm-msgtyp.
    sy-msgid = ls_bdcm-msgid.
    sy-msgno = ls_bdcm-msgnr.
    sy-msgv1 = ls_bdcm-msgv1.
    sy-msgv2 = ls_bdcm-msgv2.
    sy-msgv3 = ls_bdcm-msgv3.
    sy-msgv4 = ls_bdcm-msgv4.

    PERFORM msg_add.

  ENDLOOP.
ENDFORM. "get_prot

ENDFORM. "call_transaction

*&---------------------------------------------------------------------*
*&  Include           Z_LOG
*&---------------------------------------------------------------------*

DATA: gv_log_handle TYPE balloghndl.
DATA gv_dummy.
*&---------------------------------------------------------------------*
*&      Form  LOG_CREATE
*&---------------------------------------------------------------------*
FORM log_create.

  DATA ls_log TYPE bal_s_log.

  CALL FUNCTION 'BAL_LOG_CREATE'
    EXPORTING
      i_s_log      = ls_log
    IMPORTING
      e_log_handle = gv_log_handle
    EXCEPTIONS
      OTHERS       = 1.

  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

ENDFORM.                    " LOG_CREATE

*&---------------------------------------------------------------------*
*& Form MSG_ADD
*&---------------------------------------------------------------------*
********************* Message type ***************************
* A (Abend) Termination
* E (Error) Error
* I (Info) icon_information Information
* S (Status) Status message
* W (Warning) Warning
* X (Exit) Termination with short dump
*************************************************************
FORM msg_add.

  DATA ls_msg TYPE bal_s_msg.

  ls_msg-msgty = sy-msgty.
  ls_msg-msgid = sy-msgid.
  ls_msg-msgno = sy-msgno.
  ls_msg-msgv1 = sy-msgv1.
  ls_msg-msgv2 = sy-msgv2.
  ls_msg-msgv3 = sy-msgv3.
  ls_msg-msgv4 = sy-msgv4.

  CALL FUNCTION 'BAL_LOG_MSG_ADD'
    EXPORTING
      i_s_msg       = ls_msg
      i_log_handle  = gv_log_handle
    EXCEPTIONS
      log_not_found = 0
      OTHERS        = 1.

  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
ENDFORM. " MSG_ADD
*&---------------------------------------------------------------------*
*&      Form  LOG_DISPLAY
*&---------------------------------------------------------------------*
*вывод журнала сообщений
*----------------------------------------------------------------------*
FORM log_display .

  DATA: lt_log_handle TYPE bal_t_logh.

  APPEND gv_log_handle TO lt_log_handle.
  CALL FUNCTION 'BAL_DSP_LOG_DISPLAY'
    EXPORTING
      i_t_log_handle = lt_log_handle
    EXCEPTIONS
      OTHERS         = 1.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

  REFRESH lt_log_handle.

ENDFORM.                    " LOG_DISPLAY

_________________
Hормальные люди делают вещи намного более безумные чем всё, что делают сумасшедшие (c) С.Лем
Back to top
View user's profile Send private message Blog
Display posts from previous:   
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> ABAP All times are GMT + 4 Hours
Page 1 of 1

 
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.