Не заполняются колонки в динамическом списке формы выбора, если есть отбор в событии НачалоВыбора

1. g-xxx 16.05.24 23:41 Сейчас в теме
При открытии формы выбора,если есть отбор, не заполняются колонки,которые тянутся из временных таблиц.
Отбор вставляю в событие НачалоВыбора
&НаКлиенте
Процедура ЭкспертСОтборомНачалоВыбора(Элемент, ДанныеВыбора, ВыборДобавлением, СтандартнаяОбработка)
	
	мПараметрыВыбора = Новый Массив();
	ЭкспертыИсключения = Новый Массив;
	ЭкспертыИсключения.Добавить(Объект.ЭкспертБезОтбора);	
	НовыйПараметр = Новый ПараметрВыбора("Отбор.Ссылка", Эксперты(ЭкспертыИсключения));
	мПараметрыВыбора.Добавить(НовыйПараметр);
	Элементы.ЭкспертСОтбором.ПараметрыВыбора = Новый ФиксированныйМассив(мПараметрыВыбора); 

КонецПроцедуры 
Показать

Запрос в динамическом списке формы выбора:
ВЫБРАТЬ РАЗРЕШЕННЫЕ
	МАКСИМУМ(СотрудникиДополнительныеСтатусы.Статус) КАК Статус,
	СотрудникиДополнительныеСтатусы.Ссылка КАК Ссылка
ПОМЕСТИТЬ ВТСтатусыСотрудников
ИЗ
	Справочник.Сотрудники.ДополнительныеСтатусы КАК СотрудникиДополнительныеСтатусы
ГДЕ
	СотрудникиДополнительныеСтатусы.ДатаНачала <= &ТекущаяДата
	И СотрудникиДополнительныеСтатусы.ДатаОкончания >= &ТекущаяДата

СГРУППИРОВАТЬ ПО
	СотрудникиДополнительныеСтатусы.Ссылка
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	Сотрудники.Ссылка КАК Ссылка,
	1 КАК ДокторНаук,
	0 КАК КандидатНаук,
	0 КАК Доцент,
	0 КАК Профессор,
	0 КАК ЧленКорреспондентРАН,
	0 КАК АкадемикРАН
ПОМЕСТИТЬ ВТСотрудники
ИЗ
	Справочник.Сотрудники КАК Сотрудники
ГДЕ
	ПОДСТРОКА(Сотрудники.УченыеCтепени.НаименованиеCтепени.ПолноеНаименование, 1, 6) = "Доктор"

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	Сотрудники.Ссылка,
	0,
	1,
	0,
	0,
	0,
	0
ИЗ
	Справочник.Сотрудники КАК Сотрудники
ГДЕ
	ПОДСТРОКА(Сотрудники.УченыеCтепени.НаименованиеCтепени.ПолноеНаименование, 1, 8) = "Кандидат"

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	Сотрудники.Ссылка,
	0,
	0,
	1,
	0,
	0,
	0
ИЗ
	Справочник.Сотрудники КАК Сотрудники
ГДЕ
	ПОДСТРОКА(Сотрудники.УченыеЗвания.НаименованиеЗвания.ПолноеНаименование, 1, 6) = "Доцент"

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	Сотрудники.Ссылка,
	0,
	0,
	0,
	1,
	0,
	0
ИЗ
	Справочник.Сотрудники КАК Сотрудники
ГДЕ
	ПОДСТРОКА(Сотрудники.УченыеЗвания.НаименованиеЗвания.ПолноеНаименование, 1, 9) = "Профессор"

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	Сотрудники.Ссылка,
	0,
	0,
	0,
	0,
	1,
	0
ИЗ
	Справочник.Сотрудники КАК Сотрудники
ГДЕ
	Сотрудники.ЗваниеПоРАНу.ПолноеНаименование = "Член-корреспондент РАН"

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	Сотрудники.Ссылка,
	0,
	0,
	0,
	0,
	0,
	1
ИЗ
	Справочник.Сотрудники КАК Сотрудники
ГДЕ
	Сотрудники.ЗваниеПоРАНу.ПолноеНаименование = "Академик РАН"
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТСотрудники.Ссылка КАК Ссылка,
	СУММА(ВТСотрудники.ДокторНаук) КАК ДокторНаук,
	СУММА(ВТСотрудники.КандидатНаук) КАК КандидатНаук,
	СУММА(ВТСотрудники.Доцент) КАК Доцент,
	СУММА(ВТСотрудники.Профессор) КАК Профессор,
	СУММА(ВТСотрудники.ЧленКорреспондентРАН) КАК ЧленКорреспондентРАН,
	СУММА(ВТСотрудники.АкадемикРАН) КАК АкадемикРАН
ПОМЕСТИТЬ ВТСотрудникиСтепениЗвания
ИЗ
	ВТСотрудники КАК ВТСотрудники

СГРУППИРОВАТЬ ПО
	ВТСотрудники.Ссылка
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
	СправочникРеестрЭкспертов.Ссылка КАК Ссылка,
	СправочникРеестрЭкспертов.ФИО КАК ФИО,
	СправочникРеестрЭкспертов.ДатаВключенияВЭкспертныйСовет КАК ДатаВключенияВЭкспертныйСовет,
	ВТСтатусыСотрудников.Статус КАК ВременныйСтатус,
	СотрудникиДополнительныеСтатусы.ДатаНачала КАК ДатаНачалаСтатуса,
	СотрудникиДополнительныеСтатусы.ДатаОкончания КАК ДатаОкончанияСтатуса,
	ВЫБОР
		КОГДА ВТСотрудникиСтепениЗвания.ДокторНаук >= 1
				И ВТСотрудникиСтепениЗвания.Профессор >= 1
				И ВТСотрудникиСтепениЗвания.АкадемикРАН >= 1
			ТОГДА 9
		КОГДА ВТСотрудникиСтепениЗвания.ДокторНаук >= 1
				И ВТСотрудникиСтепениЗвания.АкадемикРАН >= 1
			ТОГДА 8
		КОГДА ВТСотрудникиСтепениЗвания.ДокторНаук >= 1
				И ВТСотрудникиСтепениЗвания.Профессор >= 1
				И ВТСотрудникиСтепениЗвания.ЧленКорреспондентРАН >= 1
			ТОГДА 7
		КОГДА ВТСотрудникиСтепениЗвания.ДокторНаук >= 1
				И ВТСотрудникиСтепениЗвания.ЧленКорреспондентРАН >= 1
			ТОГДА 6
		КОГДА ВТСотрудникиСтепениЗвания.ДокторНаук >= 1
				И ВТСотрудникиСтепениЗвания.Профессор >= 1
			ТОГДА 5
		КОГДА ВТСотрудникиСтепениЗвания.ДокторНаук >= 1
				И ВТСотрудникиСтепениЗвания.Доцент >= 1
			ТОГДА 4
		КОГДА ВТСотрудникиСтепениЗвания.ДокторНаук >= 1
			ТОГДА 3
		КОГДА ВТСотрудникиСтепениЗвания.КандидатНаук >= 1
				И ВТСотрудникиСтепениЗвания.Доцент >= 1
			ТОГДА 2
		КОГДА ВТСотрудникиСтепениЗвания.КандидатНаук >= 1
			ТОГДА 1
		ИНАЧЕ 0
	КОНЕЦ КАК Приоритет
ИЗ
	Справочник.РеестрЭкспертов КАК СправочникРеестрЭкспертов
		ЛЕВОЕ СОЕДИНЕНИЕ ВТСтатусыСотрудников КАК ВТСтатусыСотрудников
			ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Сотрудники.ДополнительныеСтатусы КАК СотрудникиДополнительныеСтатусы
			ПО ВТСтатусыСотрудников.Ссылка = СотрудникиДополнительныеСтатусы.Ссылка
				И ВТСтатусыСотрудников.Статус = СотрудникиДополнительныеСтатусы.Статус
		ПО СправочникРеестрЭкспертов.ФИО = ВТСтатусыСотрудников.Ссылка
		ЛЕВОЕ СОЕДИНЕНИЕ ВТСотрудникиСтепениЗвания КАК ВТСотрудникиСтепениЗвания
		ПО СправочникРеестрЭкспертов.ФИО = ВТСотрудникиСтепениЗвания.Ссылка
Показать


Не заполняются колонки Приоритет, ВременныйСтатус, ДатаНачалаСтатуса, ДатаОкончанияСтатуса.
Сделал тестовую базу, создал обработку Тест экспертов,в которой можно проверить глюк.
Прикрепленные файлы:
ЭкспертыТест.dt
По теме из базы знаний
Найденные решения
4. g-xxx 21.05.24 17:02 Сейчас в теме
Перенес отбор в запрос списка, а отбор из параметров удалил. Теперь всё отображается.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
    ДобавитьОтборВСписок();
	
КонецПроцедуры

&НаСервере
Процедура ДобавитьОтборВСписок()

	ТекстОтбора = "
	|ГДЕ";
	ОсновнаяТаблица = "СправочникРеестрЭкспертов.";
	ЕстьОтбор = Ложь;
	Для каждого Отбор Из Параметры.Отбор Цикл 
		ЕстьОтбор = Истина;
		ТекстОтбора = ТекстОтбора + "
		|	" + ОсновнаяТаблица + Отбор.Ключ; 
		Если ТипЗнч(Отбор.Значение) = Тип("Массив") Тогда
			ТекстОтбора = ТекстОтбора + " В (&" + Отбор.Ключ + ")"; 	
		Иначе
			ТекстОтбора = ТекстОтбора + " = &" + Отбор.Ключ + ""; 	
		КонецЕсли;
	КонецЦикла;
	Список.Параметры.УстановитьЗначениеПараметра("ТекущаяДата", НачалоДня(ТекущаяДата()));
	Если ЕстьОтбор Тогда 
		Список.ТекстЗапроса = Список.ТекстЗапроса + ТекстОтбора; 
		Для каждого Отбор Из Параметры.Отбор Цикл 
			Список.Параметры.УстановитьЗначениеПараметра(Отбор.Ключ, Отбор.Значение);
		КонецЦикла;
	КонецЕсли;
	Параметры.Отбор = Неопределено;

КонецПроцедуры // ДобавитьОтборВСписок()
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. FUXEARA 17.05.24 07:21 Сейчас в теме
Кажется нельзя передать временную ТЧ в динамический список через параметры. Помнится, я эту проблему по другому обходил.
3. FUXEARA 17.05.24 09:12 Сейчас в теме
Автор я предлагаю по другому реализовать задачу.
Сначала сделать нужную временную таблицу, а потом по методу который приложил впихнуть ее в произвольный запрос динамического списка, а не играться с этими временными таблицами там.
1) подготавливаете почву для будущей таблицы в произвольном запросе, по аналогии.
ВЫБРАТЬ РАЗЛИЧНЫЕ
	ЗНАЧЕНИЕ(Справочник.ТранспортныеСредства.ПустаяСсылка) КАК ТранспортноеСредство,
	ЗНАЧЕНИЕ(Справочник.Грузчики.ПустаяСсылка) КАК Грузчик
ПОМЕСТИТЬ ВТ_Грузчики
ГДЕ
ЛОЖЬ	
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	СправочникГрузчики.Ссылка КАК Ссылка,
	СправочникГрузчики.ПометкаУдаления КАК ПометкаУдаления,
	СправочникГрузчики.Код КАК Код,
	СправочникГрузчики.Наименование КАК Наименование,
	СправочникГрузчики.Грузчик КАК Грузчик,
	СправочникГрузчики.Предопределенный КАК Предопределенный,
	СправочникГрузчики.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных,
	ВТ_Грузчики.ТранспортноеСредство КАК ТранспортноеСредство
ИЗ
	Справочник.Грузчики КАК СправочникГрузчики
		ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Грузчики КАК ВТ_Грузчики
		ПО СправочникГрузчики.Ссылка = ВТ_Грузчики.Грузчик
Показать


2) В форме выбора в присозданиинасервере создайте свою таблицу и потом этот текст
	НачалоОсновногоЗапроса = СтрНайти(Список.ТекстЗапроса, ";");
	ОсновнойЗапрос = Сред(Список.ТекстЗапроса, НачалоОсновногоЗапроса);
	
	ТекстПустойТаблицы = "";
	Если НЕ Список.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Свойство("ТекстПустойТаблицы", ТекстПустойТаблицы) Тогда
		ТекстПустойТаблицы = Лев(Список.ТекстЗапроса, НачалоОсновногоЗапроса-1);
		Список.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("ТекстПустойТаблицы", ТекстПустойТаблицы);
	КонецЕсли;
	
	ДанныеВременнойТаблицы = ПолучитьВременнуюТаблицуИзТаблицыЗначений(ТУТ ВАША ТАБЛИЦА ЗНАЧЕНИЙ, "ВТ_Грузчики", ТекстПустойТаблицы);
	
	Список.ТекстЗапроса = ДанныеВременнойТаблицы.Текст + ОсновнойЗапрос;
	Для каждого ПараметрЗапроса Из ДанныеВременнойТаблицы.Параметры Цикл
		Список.КомпоновщикНастроек.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра(ПараметрЗапроса.Ключ, ПараметрЗапроса.Значение);
	КонецЦикла;
Показать

3) функция которая трансформирует из вашей таблицы таблицу для запроса

Функция ПолучитьВременнуюТаблицуИзТаблицыЗначений(Таблица, НазваниеВременнойТаблицы, ТекстПустойТаблицы) Экспорт

	Результат = Новый Структура("Текст, Параметры", ТекстПустойТаблицы, Новый Структура);
	Если ТипЗнч(Таблица) <> Тип("ТаблицаЗначений") ИЛИ Таблица.Количество() = 0 Тогда
		Возврат Результат;
	КонецЕсли;

	ВыбранныеПоля = Новый Массив;
	Для каждого Колонка Из Таблица.Колонки Цикл
		ВыбранныеПоля.Добавить(Колонка.Имя);
	КонецЦикла;
	
	НомерПараметра = 1;
	СтрокиВложенногоЗапроса = Новый Массив;
	Для каждого СтрокаТаблицы Из Таблица Цикл
		КолонкиВложенногоЗапроса = Новый Массив;
		Для каждого ВыбранноеПоле Из ВыбранныеПоля Цикл
			ИмяПеременной = "ЗначениеТЗ_" + Формат(НомерПараметра, "ЧН=; ЧГ=");
			Результат.Параметры.Вставить(ИмяПеременной, СтрокаТаблицы[ВыбранноеПоле]);
			КолонкиВложенногоЗапроса.Добавить("&" + ИмяПеременной + " КАК " + ВыбранноеПоле);
			НомерПараметра = НомерПараметра + 1;
		КонецЦикла;
		СтрокиВложенногоЗапроса.Добавить(
		"ВЫБРАТЬ
		|	" + СтрСоединить(КолонкиВложенногоЗапроса, ",
		|	"));
	КонецЦикла;
	
	Результат.Текст = 
		"ВЫБРАТЬ
	|	" + СтрСоединить(ВыбранныеПоля, ", ") + "
	|ПОМЕСТИТЬ " + НазваниеВременнойТаблицы + "
	|ИЗ
	|(" + 
    СтрСоединить(СтрокиВложенногоЗапроса, "
	|	ОБЪЕДИНИТЬ ВСЕ
	|	
	|") + ") КАК " + НазваниеВременнойТаблицы;
	
	Возврат Результат;
	
КонецФункции 

Показать

Разбирайтесь и удачи))) На умеренных обьемах временных таблиц работает нормально, на больших может чуть подвисать
4. g-xxx 21.05.24 17:02 Сейчас в теме
Перенес отбор в запрос списка, а отбор из параметров удалил. Теперь всё отображается.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
    ДобавитьОтборВСписок();
	
КонецПроцедуры

&НаСервере
Процедура ДобавитьОтборВСписок()

	ТекстОтбора = "
	|ГДЕ";
	ОсновнаяТаблица = "СправочникРеестрЭкспертов.";
	ЕстьОтбор = Ложь;
	Для каждого Отбор Из Параметры.Отбор Цикл 
		ЕстьОтбор = Истина;
		ТекстОтбора = ТекстОтбора + "
		|	" + ОсновнаяТаблица + Отбор.Ключ; 
		Если ТипЗнч(Отбор.Значение) = Тип("Массив") Тогда
			ТекстОтбора = ТекстОтбора + " В (&" + Отбор.Ключ + ")"; 	
		Иначе
			ТекстОтбора = ТекстОтбора + " = &" + Отбор.Ключ + ""; 	
		КонецЕсли;
	КонецЦикла;
	Список.Параметры.УстановитьЗначениеПараметра("ТекущаяДата", НачалоДня(ТекущаяДата()));
	Если ЕстьОтбор Тогда 
		Список.ТекстЗапроса = Список.ТекстЗапроса + ТекстОтбора; 
		Для каждого Отбор Из Параметры.Отбор Цикл 
			Список.Параметры.УстановитьЗначениеПараметра(Отбор.Ключ, Отбор.Значение);
		КонецЦикла;
	КонецЕсли;
	Параметры.Отбор = Неопределено;

КонецПроцедуры // ДобавитьОтборВСписок()
Показать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот