Глубоко не копал, но, "на вскидку" сразу же наткнулся на ограничение количества отображаемых 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()