Книга знаний

1С:Предприятие / Приемы программирования / Запросы

Временные таблицы в 8.1 - обязательная типизация полей таблиц значений-источников

Работа с временными таблицами в 8.1Автор статьи: RomaH | Редакторы: Гений 1С, zag2art, lxs
Последняя редакция №12 от 08.12.14 | История
URL: http://kb.mista.ru/article.php?id=533

Ключевые слова: таблица, ошибка, тип, запрос, менеджервременныхтаблиц, поместить


Первая проблема при работе с временными таблицами у меня возникла, кодга попытался передать в качестве
источника таблицу значений - получил не совсем понятную ошибку:
"Ошибка при вызове метода контекста (Выполнить): Тип не может быть выбран в запросе".

Оказалось все просто - все колнки таблицы значений должны быть типизированы.

Примерно так:

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



При этом описания необходимости этого в книге 1С:Предприятие 8.1 Бета-версия "Конфигурирование и
администрирование" я не нашёл. Подсказали на этом форуме.

От гения 1С:
Для написания запросов над временными таблицами 8.1 удобна методика: Книга знаний: v8: Конструирование сложных запросов для 1С

От zag2art
Если есть ТЗ, в каждой колонке которой значения всего одного типа, для типизации колонок, можно
воспользоваться функцией:
[1с]
Процедура ТипизацияТЗ(ТЗ) Экспорт
   РезультатТЗ = новый ТаблицаЗначений;
   Для Каждого Колонка из ТЗ.Колонки Цикл
       Имя = Колонка.Имя;
       МассивТипов = новый Массив(1);
       МассивТипов[0] = ТипЗнч(ТЗ[0][Имя]);
       Описатель = новый ОписаниеТипов(МассивТипов);
       РезультатТЗ.Колонки.Добавить(Имя, Описатель);
   КонецЦикла;
   
   Для каждого Строка из ТЗ Цикл
       СтрокаРез = РезультатТЗ.Добавить();
       ЗаполнитьЗначенияСвойств(СтрокаРез, Строка);
   КонецЦикла;
   
   ТЗ = РезультатТЗ.Скопировать();
КонецПроцедуры
[/1с]

От lxs
Если мы говорим про выборку данных из какого-либо документа, то достаточно сделать так:

ТЗ = <СсылкаНаОбъект.ТабличнаяЧасть>.ВыгрузитьКолонки();


Результатом будет таблица значений со структурой и типизацией полей табличной части.

Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2025 | Mista.ru

Яндекс.Метрика