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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 26.10.2009, 19:00   #1  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5813 (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.
Старый 27.10.2009, 12:43   #2  
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   #3  
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   #4  
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:57   #5  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5813 (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, время: 15:42.