AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 26.10.2009, 17:16   #1  
decoder is offline
decoder
Участник
Аватар для decoder
 
63 / 15 (1) ++
Регистрация: 19.12.2008
Адрес: Москва
Отображение десятичных знаков в форме
Привет всем!
Одно и то же поле таблицы должно отображаться в 2х разных формах по разному: в одной - количество знаков после запятой - 11 (как указано в EDT), а в другой - 2.
Как сделать второй вариант?

PS NoOfDecimals в свойствах контрола не доступно из-за AutoDataGroup..

Последний раз редактировалось decoder; 26.10.2009 в 17:23.
Старый 26.10.2009, 17:24   #2  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
в десигне формы у полей типа RealEdit есть свойство NoOfDecimals (число десятичных знаков отображения). Выставляете там такую цифирку сколько хотите видеть на форме, и будет вам счастье.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 26.10.2009, 17:26   #3  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Вы же понимаете, что если во второй форме вы ограничите количество отображаемых знаков после запятой двумя, то и ввести в этой форме вы сможете только 2 знака после запятой, а не 11..

Просто предупреждаю заранее
Старый 26.10.2009, 17:27   #4  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
Цитата:
Сообщение от decoder Посмотреть сообщение
Привет всем!
Одно и то же поле таблицы должно отображаться в 2х разных формах по разному: в одной - количество знаков после запятой - 11 (как указано в EDT), а в другой - 2.
Как сделать второй вариант?

PS NoOfDecimals в свойствах контрола не доступно из-за AutoDataGroup..

element.control(control::ControlName).NoOfDecimals
Старый 26.10.2009, 17:28   #5  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
поставить AutoDataGroup в No, и выставить нужное свойство
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 26.10.2009, 19:00   #6  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Не, отказываться от AutoDataGroup == Yes из-за такой мелочи не стоит - уж слишком полезное это свойство Более, на мой взгляд, гибкое решения можно найти тут: Итератор с поддержкой методов обратного вызова для обработки контролов на форме. В данном конкретном случае можно в методе обратного вызова у FormRealControl проверять свойства dataSource() и dataField(): первое должно совпадать с MyTable_DS.id() (к которому относится поле), а второе - с extendedFieldId поля в таблице, т.е., например, с fieldId2Ext( fieldnum(MyTable, MyRealField), 1 ). Если совпали, значит, итератор передал контрол, связанный с нужным полем, и надо выставить у него свойство NoOfDecimals. Учтите, что таких контролов на форме может быть несколько, поэтому, в частности, варианты с использованием enum'а Control не являются надежным решением, кроме того, так вы привязываетесь к конкретному названию контрола на форме, хотя по постановке задачи скорее должны привязываться к полю таблицы.
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Вы же понимаете, что если во второй форме вы ограничите количество отображаемых знаков после запятой двумя, то и ввести в этой форме вы сможете только 2 знака после запятой, а не 11.
Я так думаю, 2 знака всегда и вводятся, а 11 нужны для отображения реального числа в поле и проверки каких-нить косяков с округлением

Последний раз редактировалось gl00mie; 26.10.2009 в 19:05.
Старый 26.10.2009, 20:27   #7  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,438 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Как вариант. Сделать display или даже edit метод (если необходимо редактирование), который будет возвращать/принимать расширенный тип данных с заранее настроенной точностью. Вынести созданный метод в нужную группу полей.

Преимущество: AutoDataGroup == Yes; отсутствие кода на форме
Недостаток: будет невозможно сортировать и фильтровать по дисплэйному полю
Старый 27.10.2009, 12:43   #8  
decoder is offline
decoder
Участник
Аватар для decoder
 
63 / 15 (1) ++
Регистрация: 19.12.2008
Адрес: Москва
Цитата:
Сообщение от DSPIC Посмотреть сообщение
element.control(control::ControlName).NoOfDecimals
оч удобно, но порождает ошибку run-time..

Цитата:
Сообщение от gl00mie Посмотреть сообщение
В данном конкретном случае можно в методе обратного вызова у FormRealControl проверять свойства dataSource() и dataField(): первое должно совпадать с MyTable_DS.id() (к которому относится поле), а второе - с extendedFieldId поля в таблице, т.е., например, с fieldId2Ext( fieldnum(MyTable, MyRealField), 1 ). Если совпали, значит, итератор передал контрол, связанный с нужным полем, и надо выставить у него свойство NoOfDecimals..
честно, не понял как это должно выглядеть

Последний раз редактировалось decoder; 27.10.2009 в 12:54.
Старый 27.10.2009, 12:54   #9  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
Цитата:
Сообщение от decoder Посмотреть сообщение
оч удобно, но порождает ошибку run-time..
Какую именно ошибку? Я привел "сырой" код, ест-но нужно оформить немножко.

Пример для формы tutorial_Form_Controls:

X++:
public void init()
{
    super();

    element.setPrecision();
}
X++:
void setPrecision()
{
    FormRealControl formRealControl;
    ;

    formRealControl = element.control(control::RealEdit);
    
    if (formRealControl)
    {
        formRealControl.NoOfDecimals(16);
    }
}
Старый 27.10.2009, 13:04   #10  
decoder is offline
decoder
Участник
Аватар для decoder
 
63 / 15 (1) ++
Регистрация: 19.12.2008
Адрес: Москва
Цитата:
Сообщение от DSPIC Посмотреть сообщение
X++:
void setPrecision()
{
    FormRealControl formRealControl;
    ;

    formRealControl = element.control(control::RealEdit);
 
    formRealControl.NoOfDecimals(16);
}
у меня "Ошибка времени выполнения. : FormRealControl Объект не инициализирован." при любом RealEdit
Старый 27.10.2009, 13:16   #11  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
очень странно... Вы вместо "RealEdit" подставляете имя контрола?
Вот, попробуйте рабочие примеры:

DAX 3.0: tutorial_Form_Controls_30.xpo
DAX 4.0: Form_tutorial_Form_Controls_40.xpo
DAX 5.0: Form_tutorial_Form_Controls_50.xpo
Старый 27.10.2009, 13:28   #12  
decoder is offline
decoder
Участник
Аватар для decoder
 
63 / 15 (1) ++
Регистрация: 19.12.2008
Адрес: Москва
Цитата:
Сообщение от DSPIC Посмотреть сообщение
очень странно... Вы вместо "RealEdit" подставляете имя контрола?..
ошибка проявляется не каждый раз
про тож самое Итератор с поддержкой методов обратного вызова для обработки контролов на форме
За это сообщение автора поблагодарили: DSPIC (1).
Старый 27.10.2009, 13:57   #13  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от decoder Посмотреть сообщение
честно, не понял как это должно выглядеть
где-нить после super() в init() формы пишем примерно следующее:
X++:
DEV_iterateThroughFormControls( element.design(), element, @"setFieldPrecision", DEV_FormHelpers::addRealCtrlId2Set() );
на форме делаем метод обратного вызова setFieldPrecision() такого вида:
X++:
public void setFieldPrecision(FormRealControl _formControl)
{
    // проверяем, связан ли контрол с нужным полем datasource'а на форме
    if (    _formControl.dataSource()   == MyTable_DS.id()
        &&  _formControl.dataField()    == fieldId2Ext( fieldnum(MyTable, MyRealField), 1 )
       )
    {
        _formControl.noOfDecimals( 11, AutoMode::Fixed );
    }
}
всё.
За это сообщение автора поблагодарили: decoder (1).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Отображение AOT_Query на форме часть 2 radya DAX: Программирование 7 05.06.2008 17:33
отображение значений query на форме fialka DAX: Программирование 13 31.07.2007 14:31
Кол-во десятичных знаков в EDT chi DAX: Программирование 1 20.10.2006 11:49
Разделитель десятичных знаков в отчетах dirigente DAX: Функционал 0 20.11.2003 12:28
как повлиять на число десятичных знаков в формах? puz DAX: Программирование 7 12.11.2003 12:28

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 03:03.