Текущее время: Вт, мар 19 2024, 09:27

Часовой пояс: 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
Сообщения: 473
Пол: Мужской
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
Сообщения: 473
Пол: Мужской
Удав написал(а):
Вы внутрь метода смотрели? :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 часа


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

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


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

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