Текущее время: Вт, июл 01 2025, 14:35

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 15 ] 
Автор Сообщение
 Заголовок сообщения: Узнать локальный формат чисел (или привести число в нужное строкове представление).
СообщениеДобавлено: Пт, апр 07 2006, 10:59 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, окт 11 2005, 12:10
Сообщения: 687
Откуда: Москва
Пол: Мужской
Мне нужно с помощью ABAP сконвертировать число в строку определенного формата, например:

1234,56

а у пользователя может быть такая настройка:

1,234,567.89

т.е. при присвоении числа строке, получается строка зависящая от настроек пользователя.

Как эту зависимость убрать?
Или может есть функция преобразующая числа к нужному формату?

Спасибо.

_________________
Глаза боятся, а руки крюки


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, апр 07 2006, 11:02 
Директор
Директор
Аватара пользователя

Зарегистрирован:
Ср, сен 22 2004, 08:42
Сообщения: 1079
Откуда: Москва
Пол: Мужской
Формат поля даты хранится в USR01-DATFM


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, апр 07 2006, 11:04 
Старший специалист
Старший специалист

Зарегистрирован:
Пт, сен 10 2004, 14:16
Сообщения: 342
Откуда: 4.6C->4.7->ERP Belarus
Пол: Мужской
Смотри поле USR01-DCPFM, а дальше по алгоритму меняй разделитель дробной части и грохай разделители разрядов

_________________
Ze dream vil finali kum tru! (C)EuroEnglish


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, апр 07 2006, 12:25 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Вт, авг 17 2004, 12:44
Сообщения: 305
Откуда: Жайрем -> Астана
как вариант можно сделать:
Code:
WRITE numeric TO str NO-GROUPING.
REPLACE '.' IN str WITH ','.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, апр 17 2006, 09:42 
Гость
А получить текущий разделитель можно например с помощью ФМ
UPARU_UI_GET_DECIMAL_SEPARATOR. Реализован он конечно очень тривиально(зато надёжно). Пишется константа c_example с помощью write в строковую переменную, потом из неё читается разделитель. Ещё надо не забыть, что при смене разделителя в настройках пользователя надо выходить и входить заново, чтобы настройки вступили в силу.


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, апр 17 2006, 10:05 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, окт 11 2005, 12:10
Сообщения: 687
Откуда: Москва
Пол: Мужской
2 flipper:
примерно так, в общем-то и сделано. :)

2 TanK:
Цитата:
Функциональный модуль UPARU_UI_GET_DECIMAL_SEPARATOR пока отсутствует.

_________________
Глаза боятся, а руки крюки


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, апр 17 2006, 16:34 
Гость
Да, посмотрел на дату последнего изменения SAP'ом = 15.11.2005. Вот исходник:

FUNCTION uparu_ui_get_decimal_separator.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" EXPORTING
*" VALUE(E_SUBRC) LIKE SY-SUBRC
*" VALUE(E_DECIMAL_SEP) LIKE UPARU_YS_L_PROPERTIES-DECIMAL_SEP_BW
*" TABLES
*" ETK_RETURN STRUCTURE BAPIRET2
*"----------------------------------------------------------------------

CONSTANTS: c_example TYPE p DECIMALS 1 VALUE '1.5'.

DATA: l_example_in_c(4) TYPE c.

* Init.
CLEAR: e_subrc.
REFRESH etk_return.

* Determine external decimal point:
WRITE c_example TO l_example_in_c.

* Take the R/3 user setting
e_decimal_sep = l_example_in_c+1(1).

ENDFUNCTION.

Примечание:
UPARU_YS_L_PROPERTIES-DECIMAL_SEP_BW = CHAR1


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

Зарегистрирован:
Вт, окт 11 2005, 12:10
Сообщения: 687
Откуда: Москва
Пол: Мужской
Кайф... Спасибо!

PS Сама идея кака красива!

_________________
Глаза боятся, а руки крюки


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, апр 18 2006, 11:42 
Гость
Мне тоже жутко понравилось, что в USR01 не надо лезть совсем :)


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения: *
СообщениеДобавлено: Пт, апр 21 2006, 13:01 
Гость
а мы сделали дубовым способом: столкнулись с проблемой неадэкватных массовых выгрузок (у разных пользователей разный формат настроен) и загрузок данных из txt-файлов ...
Дык в секцию initialization транзакций загрузки-выгрузки стали лепить
вот эдакое 8)

*мега-хак: настраиваем формат вывода денежных сумм
*!!!настройки будут работать только после пере-логинивания
select single * from USR01
where BNAME = sy-uname
.
if ( sy-subrc = 0 ) and ( USR01-DCPFM <> 'Y' ).
USR01-DCPFM = 'Y'. "# ##0,00
USR01-DATFM = '1'. "дд.мм.гггг
update USR01 from USR01.
commit work.
message W002(ZBC01).
endif.

Т.е. принудительная перенастройка денежного формата на "русский" (запятая и пробел) и сообщение "шагом марш на перезагрузку" ... Без перелогинивания в сап-клиенте настройка не действует.


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, апр 21 2006, 13:16 
Директор
Директор
Аватара пользователя

Зарегистрирован:
Ср, сен 22 2004, 08:42
Сообщения: 1079
Откуда: Москва
Пол: Мужской
Вопрос про расположение знака -
excel 2003 игнорирует настройки xp знак позади числа
Кто как решал?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, апр 21 2006, 15:05 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 10:03
Сообщения: 127
Кстати, мне тоже интересно, при выводе из программы в Excel если число отрицательное, то Excel не понимает знак минус справа.
Я сделал по простому, проверка, если число отрицательное, то в переменную кладу её с параметром NO-SIGN, а потом прилепливаю знак минус спереди.
Может что получше есть?

_________________
В пору рабочую
пашут и ночью!


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

Зарегистрирован:
Вт, окт 11 2005, 12:10
Сообщения: 687
Откуда: Москва
Пол: Мужской
Тут, наверное, все просто.
Нужно договориться что в передаче данных используется формат не из настороек Excel или юзера SAP просто какой-нить.
пишется форма которая приводит число к строке в один и тот же формат и Excel его точно также обрабатывает...

_________________
Глаза боятся, а руки крюки


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Узнать локальный формат чисел (или привести число в нужное строкове представление).
СообщениеДобавлено: Пн, апр 24 2006, 16:34 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
G написал:
Мне нужно с помощью ABAP сконвертировать число в строку определенного формата, например:

1234,56

а у пользователя может быть такая настройка:

1,234,567.89

т.е. при присвоении числа строке, получается строка зависящая от настроек пользователя.

Как эту зависимость убрать?

В принципе можно задать формат вывода чисел через настройку стран с помощью оператора SET LOCALE ...
В случае SET LOCALE space. будут браться настройки пользователя, в случае указания конкретной страны, например SET LOCALE 'RU'. формат будет браться из настройки страны.
А затем использовать WRITE ... TO ... :)

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Узнать локальный формат чисел (или привести число в нужное строкове представление).
СообщениеДобавлено: Пн, апр 24 2006, 20:20 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, окт 11 2005, 12:10
Сообщения: 687
Откуда: Москва
Пол: Мужской
Удав написал(а):
В принципе можно задать формат вывода чисел через настройку стран с помощью оператора SET LOCALE ...
В случае SET LOCALE space. будут браться настройки пользователя, в случае указания конкретной страны, например SET LOCALE 'RU'. формат будет браться из настройки страны.
А затем использовать WRITE ... TO ... :)


Тоже дело :)
А как вернуть ?
т.е. можно конечно:

Code:
SET LOCALE 'RU'.

* далее идет непереводимая игра  ABAP  операторов

SET LOCALE space.


Просто, если по честному, то надо сначала запомнить то что было, а затем уже установить это значение снова.

ЗЫ Знаю, знаю, что все дело, наверняка в волшебном sy-*, просто системы под рукой неделю не будет.

_________________
Глаза боятся, а руки крюки


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

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


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

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


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

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