gifts2017

СписокЗначений в ТаблицуЗначений ?

Опубликовал Виктор Клевцов (taiba) в раздел Программирование - Практика программирования

Как преобразовать Список значений в аналогичную по структуре Таблицу значений

Столкнулся с необходимостью сделать запрос с выборкой данных из списка значений, однако найденный пример оказался нерабочим ни в 8.1, ни в 8.2.

Как известно, Список значений - это по сути таблица с 4мя фиксированными колонками. Почему бы просто не перегнать это в Таблицу значений?

Функция СЗ_В_ТЗ(СЗ)
	тз = Новый ТаблицаЗначений;
	тз.Колонки.Добавить("Значение");
	тз.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
	тз.Колонки.Добавить("Пометка", Новый ОписаниеТипов("Булево"));
	тз.Колонки.Добавить("Картинка", Новый ОписаниеТипов("Картинка"));
	
	Для Каждого ЭлементСЗ из СЗ Цикл
		ЗаполнитьЗначенияСвойств(тз.Добавить(), ЭлементСЗ)
	КонецЦикла;
	
	Возврат тз;
КонецФункции

Единственный нюанс - если в запросе нужно сделать условие, например РекизитЗапроса =  ТЗ.Представление, то представление следует ограничить в длине. Здесь поможет из типовых конфигураций функция ОбщегоНазначения.ПолучитьОписаниеТиповСтроки(ДлинаСтроки), т.е. код будет

тз.Колонки.Добавить("Представление", ОбщегоНазначения.ПолучитьОписаниеТиповСтроки(50));

Ну или "ручками"

тз.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка", Новый КвалификаторыСтроки(ДлинаСтроки, ДопустимаяДлина.Переменная)));

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Петр (peterxx) 27.09.13 15:51
2. Виктор Клевцов (taiba) 27.09.13 16:08
(1) peterxx, не претендую на роль мессии, однако поиск примера кода ничего не дал. А новичкам может пригодиться.
3. Павел И. (3.14159) 27.09.13 16:54
(2) taiba, новички споткнутся на менеджере временных таблиц :)
если в запросе нужно сделать условие, например РекизитЗапроса = ТЗ.Представление, то представление следует ограничить в длине
- колонка таблицы значений должны быть типизирована, т.е. иметь тип
4. Виктор Клевцов (taiba) 27.09.13 17:07
(3) 3.14159, я изначально поставил Новый ОписаниеТипов("Строка") - и запрос ругался
5. Павел И. (3.14159) 27.09.13 17:25
(4) taiba, потому-что в запросах 1С8 нельзя сравнивать поля неограниченной длины или поля несовместимых типов :)
6. Виктор Клевцов (taiba) 27.09.13 17:47
(5) 3.14159, ну да, однако же "Строка неограниченной длины" удовлетворяет условию "колонка таблицы значений должны быть типизирована" упомянутому выше (3)
7. Яков Коган (Yashazz) 28.09.13 21:50
А я-то извращаюсь, СписокЗначений в ТаблицуЗначений через xml-сериализацию делаю, через СтрЗаменить... )) А тут вот оно, откровение-то! )))
Насчёт обязательной типизации при скармливании запросу - да, это б в самой публикации прописать жирным шрифтом. Кстати, с передачей таблиц в СКД та же фигня иногда.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа