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

Часовой пояс: 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 часа


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

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


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

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