Текущее время: Вс, авг 03 2025, 08:46

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: Сроки (продолжительность)
СообщениеДобавлено: Чт, окт 25 2007, 17:51 
Специалист
Специалист

Зарегистрирован:
Вс, фев 26 2006, 14:33
Сообщения: 171
Здравствуйте.

Вот какая ситуация:
в транзакции есть 2 поля: кол-во и ед.изм (в них можно например записать 5 месяцев или 12 лет и т.д.), а в таблице это хранится в одном поле типа char25 и выглядет вот так "DUR#######MONTHтут_семь_пробеловX##" - в таком представлении можно прочитать ед. изм -- месяц (MONTH). Если перевести в код ASCII, то будет выглядеть так
"4455520000000000021C4D4F4E544820202020202020580000"
и тогда уже можно будет прочитать кол-во -- 21 (перед C4 )

В дебаггере при просмотре
"DUR#######MONTHтут_семь_пробеловX##" пишется в строке "значение",
а "4455520000000000021C4D4F4E544820202020202020580000" - в строке "шестнадцатиричный код"

Вопрос: как программно из "DUR#######MONTHтут_семь_пробеловX##" получить "21 месяц"?

P.S. Речь о стандарте: таблица SCAPPTSEG, поле TXT_PUB_ID, тр. CRMD_BUS2000115
тут_семь_пробелов - пришлось вписать потому как большое количество пробелов превращается в один :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сроки (продолжительность)
СообщениеДобавлено: Чт, окт 25 2007, 21:28 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
Mugunhwa написал(а):
"4455520000000000021C4D4F4E544820202020202020580000"
и тогда уже можно будет прочитать кол-во -- 21 (перед C4 )

Опечаточка: не 21, а 02 1С, и это отнюдь не двадцать один месяц!
А по сути выделить подстроку с 7 по 10 байт и, если они действительно представляют собой целое, то с помощью assign ... casting преобразовать в int4.

Было бы неплохо найти место, где эта строка расщепляется в стандарте. Тогда всё встанет на свои места. Может даже структурка есть в словаре, куда это хозяйство присваивается и автоматически разбивается на поля.

Посмотрел в Solution Manager'e, там поле SCAPPTSEG-TXT_PUB_ID заполняется текстовой строкой, похожей на base64: rxyQoDmepaAcm}ha1anRhW


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, окт 26 2007, 13:30 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, апр 13 2006, 12:32
Сообщения: 1503
Откуда: Питер
45 55 20 00 00 00 00 00 21 C4 D4F4E544820202020202020580000

Сильно сомневаюсь, что в SAP стали бы хранить 4 байтовое целое в символьной строке из-за кросплатформенной несовместимости при сборке в целое и ограничения связанные с выравниваем. Его, конечно, можно собрать платформонезависимо через сдвиги, но вроде в абапе сишные технологии не практикуются.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, окт 26 2007, 14:17 
Специалист
Специалист

Зарегистрирован:
Вс, фев 26 2006, 14:33
Сообщения: 171
sibrin написал:
Mugunhwa написал(а):
"4455520000000000021C4D4F4E544820202020202020580000"
и тогда уже можно будет прочитать кол-во -- 21 (перед C4 )

Опечаточка: не 21, а 02 1С, и это отнюдь не двадцать один месяц!

Это не опечатка, но корректнее с моей стороны было бы написать просто "перед С". А 21 - это сто пудов количество месяцев, проверено опытным путем: если в заказе 150 месяцев, то 4455520000000000150C4D4F4E544820202020202020580000; если 11725- то 4455520000000011725C4D4F4E544820202020202020580000.

Спасибо за ответы. Проблема уже решена: добрые люди подсказали использовать метод cl_xms_main=>convert_string_to_xstring.


Последний раз редактировалось Mugunhwa Пт, окт 26 2007, 14:19, всего редактировалось 1 раз.

Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, окт 26 2007, 14:19 
Специалист
Специалист

Зарегистрирован:
Вс, фев 26 2006, 14:33
Сообщения: 171
vga написал(а):
45 55 20 00 00 00 00 00 21 C4 D4F4E544820202020202020580000

исходно было
44 55 52 00 00 00 00 00 02 1C 4D4F4E544820202020202020580000 :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, окт 26 2007, 16:09 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
Mugunhwa написал(а):
vga написал(а):
45 55 20 00 00 00 00 00 21 C4 D4F4E544820202020202020580000

исходно было
44 55 52 00 00 00 00 00 02 1C 4D4F4E544820202020202020580000 :)


Неважно, как было.
Очевидно же, что 4D = 'M', 4F = 'O', ...


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

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


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

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


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

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