Снова кровати. Снова запрос.

1. Alexponenta 16.08.21 16:43 Сейчас в теме
В общем. Имеется запрос общий с табличными частями. Параметром передается наименование номенклатуры. Результат запроса: набор данных (ТЧ: длина, ширина, комплектующие - значениями выступают конкретные размеры (например: Длина: 1200,1400,1800)
Имеется поле выбора в который передается список вы
Нужно написать условие, которое выполняет следующий алгоритм:
Если в табличной части есть какие то записи то:
Если запись одна - сразу эту запись передавать в поле ввода.
Если записей несколько - передавать значения как форму списка.
Иначе поле делается недоступным.

Наличие/отсутствие записей лечится с помощью метода Пустой(). А вот как регулировать 1 запись или несколько я не совсем понял
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. user925427 126 16.08.21 16:48 Сейчас в теме
С помощью метода Пустой() проверяется наличие/отсутствие записей в запросе. Добавьте в запрос итоги, в которых посчитайте количество записей функцией языка запросов.
3. soft_wind 16.08.21 16:48 Сейчас в теме
поле с выбором из списка и с ограничением по списку,
т.е ни чего кроме как из списка выбрать//ввести нельзя
4. coollerinc 195 16.08.21 16:49 Сейчас в теме
Выборка = РезультатЗапроса.Выбрать()
Если Выборка.Количество() = 0 тогда 
0
ИначеЕсли Выборка.Количество() = 1 Тогда
1
Иначе
Несколько
КонецЕсли
5. Alexponenta 16.08.21 16:52 Сейчас в теме
(4) К сожалению это не срабатывает.
В выборке есть ТЧ. Т.е. как это реализовано сейчас:

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


Пытаюсь приладить .Количество() - жалуется на метод
7. coollerinc 195 16.08.21 16:56 Сейчас в теме
(5)Пришлите конкретный код, как не работает, может получится подсказать. Так как я вам показал, рабочий код.
10. spacecraft 17.08.21 09:09 Сейчас в теме
(5)
ВыборкаТЧ = Выборка.ДлинаКровати;
Если ВыборкаТЧ.Пустой() Тогда
ЭлементыФормы.ДлинаКровати.Доступность = Ложь
Иначе
ЭлементыФормы.ДлинаКровати.СписокВыбора.ЗагрузитьЗначения(ВыборкаТЧ.Выгрузить().ВыгрузитьКолонку("Значение"));
КонецЕсли;
11. Alexponenta 17.08.21 09:21 Сейчас в теме
(10)
ВыборкаТЧ = Выборка.ДлинаКровати;
Если ВыборкаТЧ.Пустой() Тогда
ЭлементыФормы.ДлинаКровати.Доступность = Ложь
Иначе
Если (В выборке один элемент) Тогда (Сразу заполняем поле ввода и делаем его недоступным)
Иначе
ЭлементыФормы.ДлинаКровати.СписокВыбора.ЗагрузитьЗначения(ВыборкаТЧ.Выгрузить().ВыгрузитьКолонку("Значение"));
КонецЕсли;
КонецЕсли;
Показать
12. spacecraft 17.08.21 09:31 Сейчас в теме
(11) Проверять количество ТЧ.
ВыборкаТЧ = Выборка.ДлинаКровати;
ТЧ = ВыборкаТЧ.Выгрузить();
Если ТЧ.Количество() = 0 Тогда
// нет элементов в ТЧ
ИначеЕсли ТЧ.Количество() = 1 Тогда
// 1 элемент. Делаем что нужно
ЭлементыФормы.ДлинаКровати.Доступность = Ложь
Иначе
ЭлементыФормы.ДлинаКровати.СписокВыбора.ЗагрузитьЗначения(ТЧ.ВыгрузитьКолонку("Значение"));
КонецЕсли;
Показать
13. Alexponenta 17.08.21 09:46 Сейчас в теме
(12)
Нужно не количество ТЧ проверять а количество записей внутри одной ТЧ.
Например: в ТЧ ШиринаКровати есть 5 записей (1200,1400,1600,1800,2000). Соответственно получаем форму списка для поля ввода.
в ТЧ ДлинаКровати есть только одно значение 2000 - вводим это значение в поле ввода и делаем поле недоступным.
в ТЧ Механизм подъема записей нет. Соответственно поле ввода сразу становится некдоступным
14. spacecraft 17.08.21 09:47 Сейчас в теме
(13)
Нужно не количество ТЧ проверять а количество записей внутри одной ТЧ.

Код пробовали. Как раз и проверяется количество в ТЧ.

Моя фраза "Проверять количество ТЧ" означало "Проверять количество переменной ТЧ".
15. Alexponenta 17.08.21 11:17 Сейчас в теме
(14)
Сделал так:
Если есть возможность было бы неплохо проверить на избыточность кода. В целом все работает
ЭлементыФормы.ДлинаКровати.Доступность = Истина;
	ЭлементыФормы.ДлинаКровати.Значение = "";
	ВыборкаТЧ = Выборка.ДлинаКровати;
	ТЧ = ВыборкаТЧ.Выбрать();
	Если Не ВыборкаТЧ.Пустой() Тогда
		Если ТЧ.Количество() = 1 Тогда
			ТЧ.Следующий();
			ЭлементыФормы.ДлинаКровати.Значение = ТЧ.Значение;
			ЭлементыФормы.ДлинаКровати.Доступность = Ложь
		Иначе
		ЭлементыФормы.ДлинаКровати.СписокВыбора.ЗагрузитьЗначения(ВыборкаТЧ.Выгрузить().ВыгрузитьКолонку("Значение"));
		КонецЕсли;
	Иначе
		ЭлементыФормы.ДлинаКровати.Доступность = Ложь 
	КонецЕсли;
Показать
6. Alexponenta 16.08.21 16:53 Сейчас в теме
Запрос.Текст =
	 "ВЫБРАТЬ
	 |	эл_Изделие.Ссылка,
	 |	эл_Изделие.Код,
	 |	эл_Изделие.Наименование,
	 |	эл_Изделие.эл_СпинкаS,
	 |	эл_Изделие.эл_КонтрастнаяОтстрочка,
	 |	эл_Изделие.эл_Заглушка,
	 |	эл_Изделие.эл_Стразы,
	 |	эл_Изделие.ДлинаКровати.(
	 |		Значение
	 |	),
	 |	эл_Изделие.ШиринаКровати.(
	 |		Значение
	 |	),
	 |	эл_Изделие.Ткани.(
	 |		Значение
	 |	),
	 |	эл_Изделие.ОпорыДекоративныеФорма.(
	 |		Значение
	 |	),
	 |	эл_Изделие.ОпорыДекоративныеЦвет.(
	 |		Значение
	 |	),
	 |	эл_Изделие.ОпорыМеталлические.(
	 |		Значение
	 |	),
	 |	эл_Изделие.Царги.(
	 |		Значение
	 |	),
	 |	эл_Изделие.МеханизмПодъема.(
	 |		Значение
	 |	)
	 |ИЗ
	 |	Справочник.эл_Изделие КАК эл_Изделие
	 |ГДЕ
	 |	эл_Изделие.Ссылка = &Ссылка
	 |	И НЕ эл_Изделие.ПометкаУдаления"
Показать
8. puzo50 17.08.21 07:10 Сейчас в теме
непонятно. на что ругается-то?
Прикрепленные файлы:
9. Alexponenta 17.08.21 07:54 Сейчас в теме
(8)
Код выше. Ругаться начинает, если обращаешься не к Выборке а к Выборке ТЧ
Оставьте свое сообщение

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