При программном создании отбора динамического списка возникает ошибка: "Ошибка в элементе отбора: глобальные элементы отбора обязательно должны использовать поля"
На форме есть динамический список. Выведены поля "номенклатура, код"
Добавляю отбор программно по полю булевного типа "номенклатура.условие1" (равно истина)
отбор корректно добавляется, но вылезает такая ошибка
Не понимаю чего не хватает. Это из-за того, что это поле не выведено в динамическом списке?
Добавляю отбор программно по полю булевного типа "номенклатура.условие1" (равно истина)
отбор корректно добавляется, но вылезает такая ошибка
Ошибка в элементе отбора: глобальные элементы отбора обязательно должны использовать поля "номенклатура.условие1 Равно ..."
Не понимаю чего не хватает. Это из-за того, что это поле не выведено в динамическом списке?
По теме из базы знаний
Найденные решения
Нашел в чем была трабла. При поиске в уже имеющихся отборах случайно присваивал не то значение.
В итоге вот процедурка для установки произвольного отбора (вытаскивать явно в запросе динамического списка ничего не надо)
В итоге вот процедурка для установки произвольного отбора (вытаскивать явно в запросе динамического списка ничего не надо)
//Параметры:
// ПолеОтбора - тип строка
// ДСП - Динамический список
// УстановитьОтбор - условие по которому либо устанавливаем отбор, либо удаляем его
&НаСервере
Процедура УстановитьПараметрыОтбораДинамическогоСписка(ПолеОтбора, ДСП, УстановитьОтбор)
ИскомоеПолеОтбора = Новый ПолеКомпоновкиДанных(ПолеОтбора);
//Проверяем возможность установки отбора
ПолеОтбораДоступно = ложь;
Для Каждого ДоступныйЭлементОтбора из ДСП.Отбор.ДоступныеПоляОтбора.Элементы Цикл
Если ДоступныйЭлементОтбора.Поле = ИскомоеПолеОтбора Тогда
ПолеОтбораДоступно = истина;
Прервать;
КонецЕсли;
КонецЦикла;
Если ПолеОтбораДоступно Тогда
Если УстановитьОтбор Тогда
ОтборУжеЕсть = ложь;
//Проверяем установлен ли уже отбор
СписокОтборов = ОбщегоНазначенияКлиентСервер.НайтиЭлементыИГруппыОтбора(ДСП.Отбор, ПолеОтбора);
Для каждого ОтборИзСписка Из СписокОтборов Цикл
Если ТипЗнч(ОтборИзСписка.ЛевоеЗначение) = Тип("ПолеКомпоновкиДанных") Тогда
Если ОтборИзСписка.ЛевоеЗначение = ИскомоеПолеОтбора Тогда
ОтборУжеЕсть = истина;
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
//если отбор не установлен, то добавляем его
Если не ОтборУжеЕсть Тогда
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ДСП,ПолеОтбора,Истина,ВидСравненияКомпоновкиДанных.Равно,,истина);
КонецЕсли;
Иначе
//очищаем параметры отбора динамического списка, если такой отбор есть
СписокОтборов = ОбщегоНазначенияКлиентСервер.НайтиЭлементыИГруппыОтбора(ДСП.Отбор,ПолеОтбора);
Для каждого ОтборИзСписка Из СписокОтборов Цикл
Если ОтборИзСписка.ЛевоеЗначение = ИскомоеПолеОтбора Тогда
ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбораДинамическогоСписка(ДСП, ПолеОтбора);
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Нашел в чем была трабла. При поиске в уже имеющихся отборах случайно присваивал не то значение.
В итоге вот процедурка для установки произвольного отбора (вытаскивать явно в запросе динамического списка ничего не надо)
В итоге вот процедурка для установки произвольного отбора (вытаскивать явно в запросе динамического списка ничего не надо)
//Параметры:
// ПолеОтбора - тип строка
// ДСП - Динамический список
// УстановитьОтбор - условие по которому либо устанавливаем отбор, либо удаляем его
&НаСервере
Процедура УстановитьПараметрыОтбораДинамическогоСписка(ПолеОтбора, ДСП, УстановитьОтбор)
ИскомоеПолеОтбора = Новый ПолеКомпоновкиДанных(ПолеОтбора);
//Проверяем возможность установки отбора
ПолеОтбораДоступно = ложь;
Для Каждого ДоступныйЭлементОтбора из ДСП.Отбор.ДоступныеПоляОтбора.Элементы Цикл
Если ДоступныйЭлементОтбора.Поле = ИскомоеПолеОтбора Тогда
ПолеОтбораДоступно = истина;
Прервать;
КонецЕсли;
КонецЦикла;
Если ПолеОтбораДоступно Тогда
Если УстановитьОтбор Тогда
ОтборУжеЕсть = ложь;
//Проверяем установлен ли уже отбор
СписокОтборов = ОбщегоНазначенияКлиентСервер.НайтиЭлементыИГруппыОтбора(ДСП.Отбор, ПолеОтбора);
Для каждого ОтборИзСписка Из СписокОтборов Цикл
Если ТипЗнч(ОтборИзСписка.ЛевоеЗначение) = Тип("ПолеКомпоновкиДанных") Тогда
Если ОтборИзСписка.ЛевоеЗначение = ИскомоеПолеОтбора Тогда
ОтборУжеЕсть = истина;
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
//если отбор не установлен, то добавляем его
Если не ОтборУжеЕсть Тогда
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ДСП,ПолеОтбора,Истина,ВидСравненияКомпоновкиДанных.Равно,,истина);
КонецЕсли;
Иначе
//очищаем параметры отбора динамического списка, если такой отбор есть
СписокОтборов = ОбщегоНазначенияКлиентСервер.НайтиЭлементыИГруппыОтбора(ДСП.Отбор,ПолеОтбора);
Для каждого ОтборИзСписка Из СписокОтборов Цикл
Если ОтборИзСписка.ЛевоеЗначение = ИскомоеПолеОтбора Тогда
ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбораДинамическогоСписка(ДСП, ПолеОтбора);
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Показать
(6)
я просто вместо проверки в этой процедуре в месте
Случайно оставил такое:
и получается что присваивал в первый попавшийся элемент найденого отбора динамического списка в левое значение еще и другой тип "Строка",
а мне надо было его найти.
я просто вместо проверки в этой процедуре в месте
Если ОтборИзСписка.ЛевоеЗначение = ИскомоеПолеОтбора Тогда
ОтборУжеЕсть = истина;
Прервать;
КонецЕсли;
Случайно оставил такое:
ОтборИзСписка.ЛевоеЗначение = "ПолеСтрокой";
ОтборУжеЕсть = истина;
Прервать;
и получается что присваивал в первый попавшийся элемент найденого отбора динамического списка в левое значение еще и другой тип "Строка",
а мне надо было его найти.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот