Показать сообщение отдельно
Старый 27.12.2020, 22:27   #13  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,654 / 1158 (42) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Глубоко не копал, но, "на вскидку" сразу же наткнулся на ограничение количества отображаемых Range на форме диалога в классе \Classes\RunBaseDialogModify

X++:
// \Classes\RunBaseDialogModify\addQueryDatasource - здесь инициализация при открытии диалога

    // Add ranges defined in datasource
    while (curRangeFields <= #MAXRANGES && currentRange <= rangeCount)

(...)

// Add the specific element of the array field
// that has been specified by the query.

// Тут все правильно. Если поле то же самое, то счетчик curRangeFields не увеличивается

curRangeFields += this.addField(
		sysDictField, 
		fieldNameSet, 
		sysDictField.label(), 
		queryBuildRange.value());

(...)
Как следствие, при первом открытии формы - все значения на месте. Нигде ничего не потеряли.

Теперь жмем кнопку расширенного фильтра и после сохранения попадаем вот сюда

X++:
// \Classes\RunBaseDialogModify\updateQuery - это обновление после кнопки расширенного фильтра

        // Loop through the ranges for the data source.
        while (curRangeFields <= #MAXRANGES && currentRange <= rangeCount)

(...)

fieldNameEnabledSet  = this.addRangeAndFilterToDialog(
		sysDictField, 
		queryBuildRange.value(),
		fieldNameEnabledSet,
		dialogGroupTable,
		curRangeFields);

// И вот здесь безусловное увеличение счетчика
curRangeFields++;

(...)
И вот насколько я вижу, здесь счетчик curRangeFields увеличивается вне зависимости от того, есть уже это поле на форме или нет.

Т.е. отображать-то отображает, но не более указанного количества. По умолчанию, не более 8 Range. Причем в данном синтаксисе каждое значение пойдет как отдельный Range. Вот их и обрезали. Просто достигли предела цикла

Видимо, тут надо добавить проверку на количество элементов в возвращенном fieldNameEnabledSet. Т.е. цикл ограничить не переменной curRangeFields, а как-то так

X++:
        // Loop through the ranges for the data source.
        while (fieldNameEnabledSet.elements() <= #MAXRANGES && currentRange <= rangeCount)
Но это "на вскидку". Могу и ошибаться. Тут надо более внимательно анализировать метод \Classes\RunBaseDialogModify\updateQuery()
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...