В ряде случаев из-за кое-каких недотестированных доработок потребовалась возможность оперативно выяснять на формах, какие «на самом деле» суммы содержатся в отображаемых полях типа real. К примеру, забыли где-нить в импорте сумму округлять перед записью в поле таблицы, а потом - пойди, разберись, почему что-то не работает, ведь FormRealControl по умолчанию показывает значения с точностью лишь до двух знаков. Так вот, коллега на базе выложенного итератора реализовал возможность увидеть вещественные значения с большей точностью, приделав кнопку «Увеличить точность» к форме пользовательской настройки (SysSetupForm). На кнопке дергается такой код:
X++:
void clicked()
{
super();
infolog.startLengthyOperation();
DEV_iterateThroughFormControls( sysSetupForm.getFormRun().design(),
element, // объект, чей метод обратного вызова будет задействован
@"DEV_setRealEditPrecision", // название метода обратного вызова на форме SysSetupForm
DEV_FormHelpers::addRealCtrlId2Set()
);
infolog.endLengthyOperation();
element.close(); // показалось удобнее сразу закрывать форму настроек
}
В свою очередь, DEV_setRealEditPrecision() - это метод на форме SysSetupForm такого содержания:
X++:
// устанавливает для контролов RealEdit точность отображения минимум 6 знаков
#define.NewNoOfDecimals (6)
public void DEV_setRealEditPrecision(FormRealControl _formControl)
{
if (!( _formControl.noOfDecimalsMode() == AutoMode::Fixed
&& _formControl.noOfDecimalsValue() > #NewNoOfDecimals
))
{
_formControl.noOfDecimals( #NewNoOfDecimals, AutoMode::Fixed );
}
}
Таким образом, за счет минимума кода стало можно на любой форме увидеть суммы/количества с большей точностью: