Имя: Пароль:
1C
1С v8
Ограничения временной таблицы
0 kabanoff
 
15.06.12
11:45
А разве нельзя передать во временную таблицу таблицу, у которой есть одна колонка типа "ТаблицаЗначений"?

У меня есть таблица, все колонки которой типизированы.
Таблица успешно помещается во временную таблицу запроса.

Когда в исходную таблицу добавляю колонку с типом "ТаблицаЗначений", создаю и типизирую колонки вложенной таблицы и заполняю вложенную таблицу, то при помещении исходной таблицы в запрос тот выдает ошибку: "Тип не может быть выбран в запросе". ЧЯДНТ?

Упрощенный пример:

ИсходнаяТаблица.Колонки.Добавить("Субконто", Новый ОписаниеТипов("ТаблицаЗначений"));
...
Для Каждого СтрокаТаблицы Из ИсходнаяТаблица Цикл
  ...
  //инициализация таблицы Субконто

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

  СтрокаТаблицы.Субконто = ТаблицаСубконто.Скопировать();

  ...
  //заполнение таблицы СтрокаТаблицы.Субконто
  ...
КонецЦикла;

Запрос.УстановитьПараметр("ИсходнаяТаблица", ИсходнаяТаблица);
Запрос.Текст =
"ВЫБРАТЬ
|    ИсходнаяТаблица.*
|ПОМЕСТИТЬ ВТ_ИсходныеДанные
|ИЗ
|    &ИсходнаяТаблица КАК ИсходнаяТаблица";
   
Запрос.Выполнить();


Это одно из ограничений временных таблиц? Раньше как-то его на замечал.
1 ДенисЧ
 
15.06.12
11:47
Да, вложенные ТЗ нельзя передать в запрос.
2 H A D G E H O G s
 
15.06.12
11:48
SQL офигеет от такого подарочка.
3 kabanoff
 
15.06.12
11:51
Печально. Ну ладно, буду искать другие варианты.
Спасибо!
4 ДенисЧ
 
15.06.12
11:52
А интересно, чего ты хотел добиться таким образом?
5 kabanoff
 
15.06.12
12:04
Пишу кусок кода для консолидации управленческой аналитики (через АДО из кучи Excel). У меня есть таблица соответствия колонок таблицы 1С и листа Excel. Среди этих колонок есть субконто, которые в таблице соответствия отмечаются определенным признаком.

На 1 этапе данные считываются со всех файлов Excel в исходную таблицу. На этом этапе хотелось бы сразу выделить субконто, чтобы потом было легче заполнять РБ.

Для удобства обработки помещаю все во временную таблицу.

На 2 этапе очищаются записи РБ по ключевым полям исходной таблицы (выборкой по регистраторам и номеру строки).

На 3 этапе создаются новые записи по исходной таблице (с нужной разбивкой по документам-регистраторам). Вот на этом этапе хотелось заполнять субконто РБ без привязки к составу субконто (ну т.е. через какую-нибудь универсальную коллекцию).

Затем исходная таблица уничтожается.
6 kabanoff
 
15.06.12
12:16
Пришлось выкручиваться вот так:

СтрокиКОбработке = Данные.НайтиСтроки(Новый Структура("Обрабатывать", Истина));
   
//Для удобной подстановки субконто в набор записей регистра бухгалтерии
МаксимальноеКоличествоСубконто = 0;
МассивТиповСубконто = Новый Массив;
Для Каждого СтрокаТаблицы Из СтрокиКОбработке Цикл
   МаксимальноеКоличествоСубконто = Макс(МаксимальноеКоличествоСубконто, СтрокаТаблицы.Счет.ВидыСубконто.Количество());
       
   Для Каждого ВидСубконто Из СтрокаТаблицы.Счет.ВидыСубконто Цикл
       Если МассивТиповСубконто.Найти(ВидСубконто.ВидСубконто.ТипЗначения) = Неопределено Тогда
           МассивТиповСубконто.Добавить(ВидСубконто.ВидСубконто.ТипЗначения);
       КонецЕсли;
   КонецЦикла;
КонецЦикла;
   
Для Счетчик = 1 По МаксимальноеКоличествоСубконто Цикл
   ИсходнаяТаблица.Колонки.Добавить("Субконто_" + Счетчик, Новый ОписаниеТипов("ПланВидовХарактеристикСсылка.ВидыСубконтоУправленческие"));
   ИсходнаяТаблица.Колонки.Добавить("ЗначениеСубконто_" + Счетчик, Новый ОписаниеТипов(МассивТиповСубконто));
КонецЦикла;
7 kabanoff
 
15.06.12
12:48
Точнее вот так:

СтрокиКОбработке = Данные.НайтиСтроки(Новый Структура("Обрабатывать", Истина));
   
//Для удобной подстановки субконто в набор записей регистра бухгалтерии

МаксимальноеКоличествоСубконто = 0;
МассивТиповСубконто = Новый Массив;
Для Каждого СтрокаТаблицы Из СтрокиКОбработке Цикл
   МаксимальноеКоличествоСубконто = Макс(МаксимальноеКоличествоСубконто, СтрокаТаблицы.Счет.ВидыСубконто.Количество());
       
   Для Каждого ВидСубконто Из СтрокаТаблицы.Счет.ВидыСубконто Цикл
       Для Каждого ТипЗначения Из ВидСубконто.ВидСубконто.ТипЗначения.Типы() Цикл
           Если МассивТиповСубконто.Найти(ТипЗначения) = Неопределено Тогда
               МассивТиповСубконто.Добавить(ТипЗначения);
           КонецЕсли;
       КонецЦикла;
   КонецЦикла;
КонецЦикла;
   
Для Счетчик = 1 По МаксимальноеКоличествоСубконто Цикл
   ИсходнаяТаблица.Колонки.Добавить("Субконто_" + Счетчик, Новый ОписаниеТипов("ПланВидовХарактеристикСсылка.ВидыСубконтоУправленческие"));
   ИсходнаяТаблица.Колонки.Добавить("ЗначениеСубконто_" + Счетчик, Новый ОписаниеТипов(МассивТиповСубконто));
КонецЦикла;