Текущее время: Вт, апр 23 2024, 14:53

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 17 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Присвоение структуры структуре
СообщениеДобавлено: Пн, май 22 2017, 14:19 
Начинающий
Начинающий

Зарегистрирован:
Пн, май 22 2017, 13:34
Сообщения: 6
Добрый день.
Существует UNICODE ошибка, исходный код выглядит так:
DATA BEGIN OF ABSENCE OCCURS 2.
INCLUDE STRUCTURE P2007.
DATA END OF ABSENCE.

DATA BEGIN OF BUFFER OCCURS 2.
INCLUDE STRUCTURE PRELP.
DATA END OF BUFFER.

ABSENCE[] = BUFFER[]. "ошибка "ABSENCE" and "BUFFER" are not mutually convertible. In Unicode programs, "ABSENCE" must have the same structure layout as "BUFFER", independent of the length of a Unicode character.


Моя задача эту ошибку исправить, но я до конца не понимаю, как это вообще должно работать (я сам новичок в САПе). P2007 имеет 45 столпцов, PRELP - 34. Как в таком случае происходит копирование?
Как мне надо изменить код, что-бы сохранился исходный функционал и не было ошибки юникода?

Заранее спасибо


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Присвоение структуры структуре
СообщениеДобавлено: Пн, май 22 2017, 21:00 
Специалист
Специалист

Зарегистрирован:
Чт, дек 02 2010, 08:37
Сообщения: 156
Поищите, что пишут о MOVE-CORRESPONDING.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Присвоение структуры структуре
СообщениеДобавлено: Вт, май 23 2017, 06:04 
Специалист
Специалист

Зарегистрирован:
Чт, мар 25 2010, 09:02
Сообщения: 207
move-corresponding по смыслу здесь врятли подойдет. Проверьте есть ли в этих структурах поля с типом X (RAW) или может быть какие-то поля с неплоской структурой. Если там есть бинарные поля вам надо разобраться в какой кодировке приходят данные и аккуратно отконвертировать их в саповский Юникод.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Присвоение структуры структуре
СообщениеДобавлено: Вт, май 23 2017, 08:25 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3074
Откуда: Москва
MOVE-CORRESPONDING, как написал baboon, но в цикле.

AFH написал(а):
move-corresponding по смыслу здесь врятли подойдет. Проверьте есть ли в этих структурах поля с типом X (RAW) или может быть какие-то поля с неплоской структурой. Если там есть бинарные поля вам надо разобраться в какой кодировке приходят данные и аккуратно отконвертировать их в саповский Юникод.

AFN, здесь речь идет об HR. Там нет ни RAW-полей, ни неплоских структур, можете сами посмотреть :wink:

_________________
С уважением,
Удав.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Присвоение структуры структуре
СообщениеДобавлено: Вт, май 23 2017, 08:41 
Специалист
Специалист

Зарегистрирован:
Чт, мар 25 2010, 09:02
Сообщения: 207
Я к тому что существующий код может опираться на то что исходная и целевая структура имеют поля с разными именами, но присвоение происходит "байт в байт". Например, первое поле в одной структуре, условно, pernr, а во второй per.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Присвоение структуры структуре
СообщениеДобавлено: Вт, май 23 2017, 12:12 
Начинающий
Начинающий

Зарегистрирован:
Пн, май 22 2017, 13:34
Сообщения: 6
То бишь, что-то такое?

*ABSENCE[] = BUFFER[].
DATA: wa_buffer LIKE LINE OF BUFFER[],
wa_absence LIKE LINE OF ABSENCE[].

LOOP AT BUFFER[] INTO wa_buffer.
CLEAR wa_absence.
MOVE-CORRESPONDING wa_buffer TO wa_absence.
APPEND wa_absence TO ABSENCE[].
ENDLOOP.

Удав написал(а):
MOVE-CORRESPONDING, как написал baboon, но в цикле.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Присвоение структуры структуре
СообщениеДобавлено: Вт, май 23 2017, 12:42 
Специалист
Специалист

Зарегистрирован:
Пт, июл 27 2007, 13:06
Сообщения: 137
Если система более-менее свежая, то move-corresponding работает с таблицами.
Тогда достаточно будет сделать так:
Code:
move-corresponding buffer[] to absence[].


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Присвоение структуры структуре
СообщениеДобавлено: Вт, май 23 2017, 12:48 
Начинающий
Начинающий

Зарегистрирован:
Пн, май 22 2017, 13:34
Сообщения: 6
Code:
MOVE-CORRESPONDING BUFFER[] TO ABSENCE[]. " "BUFFER" is not a structure or internal table with header line.


Видимо, не особо свежая :)

Sam Stone написал(а):
Если система более-менее свежая, то move-corresponding работает с таблицами.
Тогда достаточно будет сделать так:


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Присвоение структуры структуре
СообщениеДобавлено: Вт, май 23 2017, 14:48 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, сен 19 2011, 13:29
Сообщения: 475
Пол: Мужской
Chapla написал(а):
Видимо, не особо свежая :)
Тогда можно так:
Code:
cl_issr_tools=>move_corresponding_table
      EXPORTING
        it_src = BUFFER[]
      CHANGING
        ct_trg = ABSENCE[] )


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Присвоение структуры структуре
СообщениеДобавлено: Вт, май 23 2017, 23:02 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3074
Откуда: Москва
Korvax написал:
Тогда можно так:
Code:
cl_issr_tools=>move_corresponding_table
      EXPORTING
        it_src = BUFFER[]
      CHANGING
        ct_trg = ABSENCE[] )

Вы внутрь метода смотрели? :wink:

_________________
С уважением,
Удав.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Присвоение структуры структуре
СообщениеДобавлено: Ср, май 24 2017, 08:32 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, сен 09 2004, 07:32
Сообщения: 777
Откуда: Москва
Пол: Мужской
Да, смешной метод... :?
Я обычно для таких целей использую вызов:
Code:
cl_abap_tool=>move_complex(
  EXPORTING i_any = {tab_org}
  CHANGING  c_any = {tab_trg} ).

_________________
"Прежде чем сделать что-то, подумай, к чему это может привести..."


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Присвоение структуры структуре
СообщениеДобавлено: Ср, май 24 2017, 09:15 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, сен 19 2011, 13:29
Сообщения: 475
Пол: Мужской
Удав написал(а):
Вы внутрь метода смотрели? :wink:
Смотрели.. :) и радовались что не надо писать свой LOOP и MOVE-CORRESPONDING


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Присвоение структуры структуре
СообщениеДобавлено: Чт, май 25 2017, 14:45 
Начинающий
Начинающий

Зарегистрирован:
Пн, май 22 2017, 13:34
Сообщения: 6
Этот метод мне, вроде бы, помог. Я проверил его на тестовом сервере и всё работает, спасибо большое. Есть еще одна проблема - я вообще без понятия, как добраться до той части программы и проверить перенос данных в дебагере. Но с этим я как-нибудь разберусь.

nicky555 написал:
Да, смешной метод... :?
Я обычно для таких целей использую вызов:
Code:
cl_abap_tool=>move_complex(
  EXPORTING i_any = {tab_org}
  CHANGING  c_any = {tab_trg} ).


Дальше в коде идёт вот такой вот цикл. Объясните мне, пожалуйста, что должна делать выделенная строка кода?? Что вообще означает запись имя_структуры+число?

ошибка юникода (на помеченной строке) выглядит так: "Sum of offset and len. (=172) exceeds the len. of the character-type start (=93) of the structure. This is not allowed in Unicode programs programs."

Code:
*    ABSENCE[] = BUFFER[]. "предыдущий вариант
    CALL METHOD cl_abap_tool=>move_complex(
      EXPORTING
        i_any = BUFFER[]
      CHANGING
        c_any = ABSENCE[] ).
LOOP AT ABSENCE WHERE SUBTY EQ OBJECT-KEY-SUBTYPE
                      AND OBJPS EQ OBJECT-KEY-OBJECTID
                      AND SPRPS EQ OBJECT-KEY-LOCKINDICATOR
                      AND ENDDA EQ OBJECT-KEY-VALIDITYEND
                      AND BEGDA EQ OBJECT-KEY-VALIDITYBEGIN
                      AND SEQNR EQ OBJECT-KEY-RECORDNUMBER.
      PA2007+11      = ABSENCE+12."ВОТ ЭТА СТРОКА ВЫДЕЛЕНА
      PA2007-MANDT   = SY-MANDT.
      PA2007-PERNR   = OBJECT-KEY-EMPLOYEENUMBER.
      OBJECT-_PA2001 = PA2007.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Присвоение структуры структуре
СообщениеДобавлено: Чт, май 25 2017, 18:14 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3074
Откуда: Москва
Имя структуры с числом - это смещение от начала структуры в символах.
См. структуру PA2007:с 12 символа начинается поле SUBTY
На самом деле здесь тоже нужен MOVE-CORRESPONDING

_________________
С уважением,
Удав.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Присвоение структуры структуре
СообщениеДобавлено: Пт, май 26 2017, 12:15 
Начинающий
Начинающий

Зарегистрирован:
Пн, май 22 2017, 13:34
Сообщения: 6
Если это просто копирование поля в другое поле, почему я не могу записать вот так?
Code:
PA2007-SUBTY = ABSENCE-SUBTY.

Такая запись, вроде бы, выглядит лучше и логичнее, ведь если когда-нибудь будет изменена длина одного из начальных полей структуры или таблицы, то запись ABSENCE+12 будет указывать на другое поле, и тогда будут записаны неверные данные. Или я как-то не правильно понял принцип?

Удав написал(а):
Имя структуры с числом - это смещение от начала структуры в символах.
См. структуру PA2007:с 12 символа начинается поле SUBTY
На самом деле здесь тоже нужен MOVE-CORRESPONDING


Если использовать MOVE-CORRESPONDING ABSENCE+12 TO PA2007+11, то я получаю ошибку "1020#12#160#14 is not a structure of internal table with header line."

PS еще есть сомнения по поводу самого цикла. Разве можно использовать LOOP на структуру? В структуре ведь всего одна запись, ведь структура - это не таблица.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 17 ]  На страницу 1, 2  След.

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


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

Сейчас этот форум просматривают: Yandex [Bot]


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

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