Текущее время: Ср, июл 30 2025, 17:56

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: ошибка при вызове perform
СообщениеДобавлено: Вт, мар 02 2010, 16:39 
Специалист
Специалист

Зарегистрирован:
Вт, июл 07 2009, 13:24
Сообщения: 235
Hello,

есть следующая проблема в программе объявлена таблица (в самой программе не используется только в перформах ) и структура
Code:
*Tabelle
DATA:
      lt_user_name TYPE TABLE OF v_username ,
      lt_messages_detail TYPE TABLE OF bapiret2,
      lt_messages_change TYPE TABLE OF bapiret2 .

*Type

TYPES: BEGIN  OF  type_protokol,
  bname TYPE bapibname,
  alt_nachname TYPE bu_namep_l,
  symbol(3) TYPE c,
  new_nachname TYPE bu_namep_l,
  tatigkeit(1) TYPE c,
  t_meldung LIKE lt_messages_detail,
END OF type_protokol.

*Tabelle
DATA:  lt_protokol TYPE TABLE OF type_protokol .

*Struckure
DATA:
      ls_user_name TYPE  v_username ,
      ls_person_data TYPE bapibus1006_central_person,
      ls_protokol TYPE type_protokol.


***
вызывается перформа к примеру

Code:
    CLEAR lv_type_protokol.
          lv_type_protokol = 1.
PERFORM schreiben_protokol       TABLES lt_protokol using lv_type_protokol .


ее код
Code:
FORM schreiben_protokol  TABLES pt_protokol  STRUCTURE ls_protokol using pv_type_protokol like lv_type_protokol.

  CASE lv_type_protokol.
    WHEN 1.         "Fehler bei Lese der Daten des Users, keine Änderung
      ls_protokol-bname = lv_username.
      ls_protokol-tatigkeit = space.
      REFRESH ls_protokol-t_meldung .
      MOVE lt_messages_detail TO ls_protokol-t_meldung .


    WHEN 2.          "Fehler bei der Änderung, Return-Tabelle der Funktion 'BBP_USER_CHANGE' ist nicht leer.

      ls_protokol-bname = lv_username.
      ls_protokol-symbol = '->'.
      ls_protokol-new_nachname = ls_person_data-lastname.
      ls_protokol-tatigkeit = space.
      REFRESH ls_protokol-t_meldung .
      MOVE lt_messages_change TO ls_protokol-t_meldung .

    WHEN 3.         " Ordnung, Anderung wurde erfolgreich gemacht
      ls_protokol-bname = lv_username.
      ls_protokol-symbol = '->'.
      ls_protokol-new_nachname = ls_person_data-lastname.
      ls_protokol-tatigkeit = 'X'.
  ENDCASE.

  APPEND ls_protokol TO pt_protokol.


при расширенной проверка возникает предупреждение, что в стороке FORM schreiben_protokol TABLES pt_protokol STRUCTURE ls_protokol
таблица pt_protokol относится к двум полям pt_protokol[] и header line,

как Вы думаете из-за чего такое может быть?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: ошибка при вызове perform
СообщениеДобавлено: Вт, мар 02 2010, 17:44 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, авг 28 2006, 11:24
Сообщения: 292
Пол: Мужской
После передачи параметра как TABLE таблица стала со строкой заголовка. Т.е появилось два объекта с одинаковым именем - структура и таблица. Об этом вас предупреждают.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ошибка при вызове perform
СообщениеДобавлено: Вт, мар 02 2010, 19:03 
Специалист
Специалист

Зарегистрирован:
Вт, июл 07 2009, 13:24
Сообщения: 235
Rokhay написал:
После передачи параметра как TABLE таблица стала со строкой заголовка. Т.е появилось два объекта с одинаковым именем - структура и таблица


но при вызове другой перформы с той же самой таблицей такого предупреждения нет


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: ошибка при вызове perform
СообщениеДобавлено: Вт, мар 02 2010, 21:01 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
DaV написал(а):

но при вызове другой перформы с той же самой таблицей такого предупреждения нет

Какой другой?

_________________
"После" - не значит "вследствие"


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ошибка при вызове perform
СообщениеДобавлено: Ср, мар 03 2010, 09:02 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, авг 28 2006, 11:24
Сообщения: 292
Пол: Мужской
DaV написал(а):
но при вызове другой перформы с той же самой таблицей такого предупреждения нет


дело вообще не в перформе, а в появлении структуры с тем же именем.
При повторной передаче параметров в другую подпрограмму никаких изменений в структуре глобальных данных не происходит.

Проверьте программу, состоящую из кода:
Code:
TYPES: BEGIN  OF  type_protokol,
  bname TYPE bapibname,
  alt_nachname TYPE bu_namep_l,
  symbol(3) TYPE c,
  new_nachname TYPE bu_namep_l,
  tatigkeit(1) TYPE c,
END OF type_protokol.

DATA:  lt_protokol TYPE TABLE OF type_protokol WITH HEADER LINE.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ошибка при вызове perform
СообщениеДобавлено: Ср, мар 03 2010, 11:32 
Специалист
Специалист

Зарегистрирован:
Вт, июл 07 2009, 13:24
Сообщения: 235
Rokhay написал:
дело вообще не в перформе, а в появлении структуры с тем же именем.
При повторной передаче параметров в другую подпрограмму никаких изменений в структуре глобальных данных не происходит.


сделал ошибка осталась.

sy-uname написал(а):
Какой другой?

к примеру
Code:
            PERFORM aenderung_nachname_erweitern TABLES lt_protokol .

Code:
FORM aenderung_nachname_erweitern TABLES lt_protokol .

  lv_len  = STRLEN( ls_person_data-lastname ) + STRLEN( p_zusatz ).
....
endform.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: ошибка при вызове perform
СообщениеДобавлено: Ср, мар 03 2010, 11:45 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, авг 28 2006, 11:24
Сообщения: 292
Пол: Мужской
DaV написал(а):
сделал ошибка осталась.

Ну да. А вы чего ожидали?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ошибка при вызове perform
СообщениеДобавлено: Ср, мар 03 2010, 13:53 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, окт 20 2008, 10:29
Сообщения: 339
Откуда: Мюнхен
Пол: Мужской
Сколько мучался с этими параметрами для подпрограмм, объявленных через TABLES ... STRUCTURE ..., что теперь просто пишу TABLES ... и все. И все работает.

_________________
Вежливость - лучшее оружие чайника :-)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ошибка при вызове perform
СообщениеДобавлено: Ср, мар 03 2010, 15:28 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Чт, мар 09 2006, 10:12
Сообщения: 565
Откуда: Волгодонск
Пол: Мужской
ИМНО
В вашем случае правильнее было бы написать:
Code:
FORM schreiben_protokol  TABLES pt_protokol TYPE STANDARD TABLE type_protokol USING pv_type_protokol like lv_type_protokol.

собственно что STRUCTURE что TYPE в данном случае нужны для того чтобы можно было по человечески обращаться к полям в header_line таблицы, если вы header_line использовать не собираетесь (а вы его и не используете) то и типизация его вам не нужна и можно делать как написал VID

ЗЫ хз почему САП отказался от header_line, а я их всё равно использую

_________________
Изображение Попытка не пытка


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ошибка при вызове perform
СообщениеДобавлено: Чт, мар 04 2010, 00:49 
Президент
Президент

Зарегистрирован:
Пт, апр 28 2006, 22:39
Сообщения: 2514
Откуда: North Taxolina, USA
Пол: Женский
IMHO Help все достаточно подробно объясняет:
Цитата:
... TABLES table_parameters

Effect
TABLES is used to declare table parameters table_parameters. Table parameters are obsolete formal parameters that are typed as internal standard tables with header lines. The addition TABLES can be listed only before USING or CHANGING.

If an internal table without header line or a table body is transferred as an actual parameter to this type of formal parameter, then an empty local header line is generated in the subroutine. If an internal table with header line is used as the actual parameter, then both the table body and the header line are passed to the subroutine. For formal parameters defined with TABLES, no pass by value is possible.

Notes
Formal parameters defined with TABLES can be replaced by formal parameters defined with USING or CHANGING. A local work area can also be created in the subroutine using the addition LIKE LINE OF itab of statement DATA.

_________________
"One of the symptoms of an approaching nervous breakdown is the belief that one's work is terribly important." Bertrand Russell


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Часовой пояс: UTC + 3 часа


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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