27.08.2020, 08:01 | #1 |
Участник
|
DAX2009 обязательность заполнения поля RealEdit
Всем привет.
Подскажите, какое свойство поля отвечает за обязательность заполнения поля? Спрашиваю вот по чему: Если точнее есть форма LedgerJournalTransVendInvoice в ней есть поле RealEdit 'Вторичный валютный курс' / fieldExchRateSecond связанный с дата методом LedgerJournalTrans.editExchRateSecond() Хотелось бы что бы оно подсвечивалось красным и уведомляло что оно не заполнено. Но проблема в том что данное поле сразу же проставляется 0,0000 т.к. похоже дата метод уже туда пишет данные - нули. Подскажите как такую проблему решить грамотно (в плане кода) ? Что бы поле было пустое с самого начала, и пользователя уведомляло что бы перед разноской он должен проставлять сам либо 0 либо курс. Последний раз редактировалось oleggy; 27.08.2020 в 09:05. |
|
27.08.2020, 09:22 | #2 |
Участник
|
В аксапте в принципе нет пустого значения (null) у базовых типов данных (примитивов, в том числе строк). Есть значение по умолчанию. Например, для real - значение по умолчанию это ноль, для string - пустая строка, для date - 01\01\1900.
Некоторые элементы управления, например DateEdit, изначально вместо значения по умолчанию показывают пустую строку. У RealEdit для этого есть специальное свойство ShowZero. Нужно понимать что при включении обязательности для поля, система будет считать, что поле не заполнено, если его значение будет совпадать со значением по умолчанию базового типа данных (и не важно какой режим отображения этого значения используется) Если вам нужно отличать пустое значение и нулевое значение в RealEdit, то одного поля для этого вам будет не достаточно. |
|
27.08.2020, 09:39 | #3 |
Участник
|
Вы хотите чего-то странного с точки зрения ядра AX: чтобы поле типа real не отображало 0.0 по умолчанию, требовало ввода значения, но при этом чтобы значение 0.0 было допустимо для ввода и после ручного ввода отображалось. Насколько я знаю, стандарт так не умеет, это нужно программировать явным образом.
С учетом вышесказанного про значения по умолчанию для разных базовых типов решение описанной задачи может потребовать явно хранить на форме состояние того, вводил ли пользователь в текущей строке что-то в поле курса для триангуляции, и в зависимости от этого императивно либо "рисовать" обязательность поля и не отображать ноль, либо отображать нулевое значение, явно указанное пользователем. Декларативный подход - с использованием метаданных полей и EDT - для вашей задачи не подойдет. |
|
27.08.2020, 10:29 | #4 |
Участник
|
Я правильно понял, что :
1. корректнее всего для данного поля RealEdit в датасорсе или на форме перекрыть метод modified и в нем сделать переменную-защелку в true. А дальше в самой кнопки формы 'разноска' сделать проверку это переменной. Просто не хотелось бы создавать отдельное поле в таблице для данной строки, в которой будет хранится значение менял пользователь что либо или нет. 2. я слышал что есть полу mandatoy я думал что с помощью него реализовать было.. Последний раз редактировалось oleggy; 27.08.2020 в 10:47. |
|
27.08.2020, 11:44 | #5 |
Axapta
|
Нет, неправильно. Как вы сделаете одну переменную, когда поле с курсом у вас в каждой строке? Лучше сделать поле чек-бокс "нулевой курс" рядом в курсом, ну и если он проставлен, курс всегда обнуляется (можно еще и нередактируемым делать). Соответственно, пользователь должен проставить или этот чекбокс или ввести курс. Ну и при разноске уже легко проверять. За добавление полей в DAX деньги не берет, чтобы бояться их создавать. Кроме того, если вам так важен ввод курса, у вас в строке после разноски останется подтверждение, что пользователь в явном виде нулевой курс задал.
Второй вариант - это при разноске просто проверять и спрашивать, что "в таких-то строках нулевой курс. Продолжить?". Выбор варианта зависит от бизнес-процесса. Последний раз редактировалось oip; 27.08.2020 в 11:51. |
|
|
|