powered by simpleCommunicator - 2.0.18     © 2024 Programmizd 02
Map
Форумы / Oracle Forms [игнор отключен] [закрыт для гостей] / Маска формата для отображения отрицательного числа с разделителем разрядов
15 сообщений из 15, страница 1 из 1
Маска формата для отображения отрицательного числа с разделителем разрядов
    #39851912
oracletbm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброе утро!

Такая проблема.
В Forms для отображения числа с разделителем разрядов используется такая маска: FM999" "999" "999" "990

Всё хорошо отрабатывает для положительных чисел.
При этом, если встречается отрицательное небольшое число, то минус сдвигается от первой цифры числа на кол-во символов в маске.

Пример,
число -1455 выглядит как
-______1 455 (нижними подчёркиваниями заменил пробелы, т.к. схлопываются в редакторе в один)

Соответственно, для каких-то чисел данный минус вообще становится не видно в небольших элементах.
А если и видно, то такое отображение сложно назвать удобным для восприятия.

Может кто подскажет другой формат или простые пути решения (без замены числовых элементов на символьные)?

Спасибо.
...
Рейтинг: 0 / 0
Маска формата для отображения отрицательного числа с разделителем разрядов
    #39852833
Александр Спелицин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что за пробелы в маске?
Если это групповые разделители, то нужно использовать стандартный символ "G". Под рукой нет тестового истнанса с Forms, так что на чистом PL SQL:
Код: plsql
1.
2.
3.
4.
5.
SQL> select to_char (-1234560.986, 'fm99G999G999G999G999G990') test_val from dual;
 
TEST_VAL
-----------------------
-1 234 561
...
Рейтинг: 0 / 0
Маска формата для отображения отрицательного числа с разделителем разрядов
    #39852875
oracletbm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Александр СпелицинЧто за пробелы в маске?
Если это групповые разделители, то нужно использовать стандартный символ "G". Под рукой нет тестового истнанса с Forms, так что на чистом PL SQL:
Код: plsql
1.
2.
3.
4.
5.
SQL> select to_char (-1234560.986, 'fm99G999G999G999G999G990') test_val from dual;
 
TEST_VAL
-----------------------
-1 234 561



Замечательно. Спасибо. Всё получилось в лучшем виде. :)
...
Рейтинг: 0 / 0
Маска формата для отображения отрицательного числа с разделителем разрядов
    #39853086
oracletbm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
К сожалению, новая проблема появилась при использовании нового формата "FM999G999G999G990":
в FORMS-ах символ разделения групп разрядов отображается как точка , а не пробел .
И как это поменять - пока нет никакого представления.
Настройка
Код: plsql
1.
ALTER SESSION SET NLS_NUMERIC_CHARACTERS=', ';


не работает.

В региональных параметрах в ОС установлен пробел...
Откуда FORMS-ы тянут точку - загадка... ((

Может кто знает? И как её поменять на пробел...
...
Рейтинг: 0 / 0
Маска формата для отображения отрицательного числа с разделителем разрядов
    #39853251
Александр Спелицин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
oracletbmНастройка
Код: plsql
1.
ALTER SESSION SET NLS_NUMERIC_CHARACTERS=', ';


не работает.

Где именно выполняется этот код? В этот блок действительно управление передается?


oracletbmВ региональных параметрах в ОС установлен пробел...
Откуда FORMS-ы тянут точку - загадка... ((
Формсам до лампочки Ваши региональные параметры ОС. Смотрите настройки Вашего Forms сервера. Именно оттуда все берется.
...
Рейтинг: 0 / 0
Маска формата для отображения отрицательного числа с разделителем разрядов
    #39853271
oracletbm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Александр Спелицин Где именно выполняется этот код? В этот блок действительно управление передается?

В триггере WHEN-NEW-FORM-INSTANCE

Код: plsql
1.
forms_DDL('ALTER SESSION SET NLS_NUMERIC_CHARACTERS='', ''');



Александр Спелицин Формсам до лампочки Ваши региональные параметры ОС. Смотрите настройки Вашего Forms сервера. Именно оттуда все берется.

А где именно смотреть настройки Forms сервера? Это именно настройки сервера или локальные настройки Forms?
АБД посоветовал внести настройку в реестр для ORACLE, при этом данные в SQL PLUS стали цеплять указанный формат, а FORMS-ам хоть бы что...
Может можно в реестре и для FORMS-ов такой же параметр указать, но пока информации об этом нет...
...
Рейтинг: 0 / 0
Маска формата для отображения отрицательного числа с разделителем разрядов
    #39853345
oracletbm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Александр Спелицин Где именно выполняется этот код? В этот блок действительно управление передается?

В триггере WHEN-NEW-FORM-INSTANCE

Код: plsql
1.
forms_DDL('ALTER SESSION SET NLS_NUMERIC_CHARACTERS='', ''');



Александр Спелицин Формсам до лампочки Ваши региональные параметры ОС. Смотрите настройки Вашего Forms сервера. Именно оттуда все берется.

А где именно смотреть настройки Forms сервера? Это именно настройки сервера или локальные настройки Forms?
АБД посоветовал внести настройку в реестр для ORACLE, при этом данные в SQL PLUS стали цеплять указанный формат, а FORMS-ам хоть бы что...
Может можно в реестре и для FORMS-ов такой же параметр указать, но пока информации об этом нет...
...
Рейтинг: 0 / 0
Маска формата для отображения отрицательного числа с разделителем разрядов
    #39853394
Александр Спелицин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
oracletbmВ триггере WHEN-NEW-FORM-INSTANCE

Перенесите в PRE-FORM
oracletbmА где именно смотреть настройки Forms сервера? Это именно настройки сервера или локальные настройки Forms?
Это настройки продукта "Oracle Forms Server".
Формсы и репортсы держат все свои настройки в конфиг-файлах. Причем от версии к версии эти файлы меняются, как и ссылки на вложенные файлы.
Начтите с того места, где Вы определяли переменную NLS_LANG на сервере. Если не поможет, то смотрите в default.env (Точное имя и место этого файла прописана в forms.cfg).
За подробностями в Google

oracletbmАБД посоветовал внести настройку в реестр для ORACLE, при этом данные в SQL PLUS стали цеплять указанный формат, а FORMS-ам хоть бы что...
Может можно в реестре и для FORMS-ов такой же параметр указать, но пока информации об этом нет...
И каким образом программа запущенная на UNIX сервере полезет в Ваш виндовый локальный реестр???????
...
Рейтинг: 0 / 0
Маска формата для отображения отрицательного числа с разделителем разрядов
    #39853668
oracletbm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Александр Спелицин,

Спасибо.

Перенос в PRE-FORM не помогает. Да и в инете написано, что команда SET NLS_NUMERIC_CHARACTERS в FORMS-ах не работает...

По словам АБД
"мы не используем Oracle Forms Server там настройки иные
у нас же локальный Oracle Forms Runtime"


Файла forms.cfg вообще не нашёл, но нашёл formsweb.cfg и в папке с ним и default.env .

Добавил в файл параметр NLS_NUMERIC_CHARACTERS=, но к сожалению пробел так и не появился...

Изучение подробностей в GOOGLE к сожалению ничего не добавило...
Пишут, что если настроек в файле нет, то они берутся из реестра, т.е. в реестр всё-таки программа заглядывает тоже...
Но относится это только к Oracle Forms Server или и локальной части - непонятно. Да и где именно это указывать в реестре тоже непонятно.

В общем прошу прощения за надоедливость, но что делать так и непонятно... Неужели никому в Forms-ах не требовалось выводить числа в наглядном виде... Или всех точка устраивала...

P.S.
Судя по всему первичный формат, который в начале темы указан ( FM999" "999" "999" "990 ) был в своё время использован для борьбы с проблемой точки в FORMS-ах, но он влечёт другую проблему - сдвиг минуса от числа...

Неужели решить обе проблемы невозможно?!
...
Рейтинг: 0 / 0
Маска формата для отображения отрицательного числа с разделителем разрядов
    #39853770
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
oracletbmПишут, что если настроек в файле нет, то они берутся из реестра, т.е. в реестр всё-таки программа заглядывает тоже...
Но относится это только к Oracle Forms Server или и локальной части - непонятно. Да и где именно это указывать в реестре тоже непонятно.

1. К Client-Server относится.
Параметры берутся из переменных окружения (environment), если их там нет из реестра
2. Насчет "где именно указывает" - указывается в DEFAULT_HOME, в принципе, можно указать во всех ветках, хуже не будет. (банальный поиск по реестру например ключика NLS_LANG)

note1: NLS_LANG менял, NLS_NUMERIC_CHARACTERS сам никогда не трогал
note2: не будет ли проблем как указывать пробел в значении параметра в окружении или реестре, с ходу не сообразить.
...
Рейтинг: 0 / 0
Маска формата для отображения отрицательного числа с разделителем разрядов
    #39853772
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
oracletbmНеужели решить ... проблемы невозможно?!
возможно, т.к. проблемы нет как таковой. Нужно просто прочитать доки, как правильно указать настроики.
...
Рейтинг: 0 / 0
Маска формата для отображения отрицательного числа с разделителем разрядов
    #39853777
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S.
Сейчас запустил нашу систему, формат вывода для денег у нас с пробелом.

Маска на итеме указана: FM999G999G999G990D00
NLS_NUMERIC_CHARACTERS указан в реестре в HKEY_LOCAL_MACHINE \ Software \ Oracle
концевой пробел в реестре указывается нормально
(на 64 битной операционке нужна 32-битная ветка реестр ! AFAIK)
...
Рейтинг: 0 / 0
Маска формата для отображения отрицательного числа с разделителем разрядов
    #39853989
oracletbm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev,

Спасибо.
Концевой пробел не работает в реестре (по крайней мере на моём компе).

АБД накопали где-то, что нужно такой формат использовать: NLS_NUMERIC_CHARACTERS=, ( d => \",\" g => \" \")

Всем спасибо! Проблема решена.
...
Рейтинг: 0 / 0
Маска формата для отображения отрицательного числа с разделителем разрядов
    #39854023
oracletbm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
oracletbm,

автортакой формат использовать: NLS_NUMERIC_CHARACTERS=, ( d => \",\" g => \" \")

Оказалось даже проще. Система не понимает конечный символ пробела (видимо делает внутри RTRIM или TRIM). поэтому нужно ввести нужный формат, чтобы пробел был закрыт любым другим символом.

Например, NLS_NUMERIC_CHARACTERS=, 1
...
Рейтинг: 0 / 0
Маска формата для отображения отрицательного числа с разделителем разрядов
    #39854639
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у нас в реестре просто пробел, без всяких добавочных символов
настраивал не я, т.ч. как такого добились - не знаю
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Oracle Forms [игнор отключен] [закрыт для гостей] / Маска формата для отображения отрицательного числа с разделителем разрядов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (1): Анонимы (1)
Читали форум (1): Анонимы (1)
Пользователи онлайн (8): Анонимы (6), Cat2, Yandex Bot 1 мин.
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]