03.07.2024, 11:14 | #14 |
Участник
|
Тоже недавно ковырялся с данной проблемой.
Мои варианты решения, на основе советов из данной темы: 1) Изменить контрол формы на string и перекрыть lookup. Для этого можно использовать SysLookup::lookupEnum Проблемы данного решения в том, что проблематично оставить на нем фильтрацию, так как данный контрол будет edit методом и тогда пользовательские фильтры можно будет делать только через отдельную кнопку или поле-фильтр. 2) Самый простой вариант, навесить проверки на выбор значения и выдавать ошибку, если пользователь выбрал неподходящий элемент enum. 3) Если же все таки необходимо скрыть значения enum при выборе, можно посмотреть, как реализован класс SalesPurchSummarySumByCtrl и вариант его использования в SalesEditLinesForm.setupSumByControl(). В нем создаются мапы с соответствием index элемента контрола и id enum. И при выборе элемента можно через map посмотреть, какое значение необходимо вписать в итоговую таблицу. Какие есть проблемы в нем: при повторном установке курсора аксапта, думая, что она привязана к enum, будет пытаться обновить index не из сформированного программно списка, а из enum по названию. И, поэтому, выбор визуально будет "скакать". Но, это только визуально. Если перейти на другую строку, либо выбрать новое значение, то все подставится корректно. Победить это у меня не получилось, так как lookup на FormComboBoxControl не вызывается, а других точек входа - нет. А в стандарте нет такой проблемы, потому что их элемент - последний в списке выбора Еще, возможно проблема, не тестировал - как отрабатывают modifiedField и validateField на форме, когда мы так подменяем значения. Поэтому, я их перекрыл и переписал, чтоб точно быть уверенным что они вызовутся. И, данный класс сделан для конкретного enum. Можно написать аналогичный класс под себя, сделав его общим, отвязав от конкретного enum, передавая enumId. Он тогда будет похож на SysFormEnumComboBox, который в теме тоже предлагался, но, SysFormEnumComboBox - у меня не взлетел, поэтому я написал свой |
|
|
За это сообщение автора поблагодарили: Logger (3), Alucardkds (1). |
Теги |
ax2012, enum, ограничить |
|
|