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

1. bogdan51 15.07.08 15:00 Сейчас в теме
Необходимо вывести записи РегистраНакопления Остатки,по которым не установлена определенная цена (РегистрСведений.Цены)
Я это сделал с помощью запросов во временные таблицы МенеджерВременныхТаблиц. Работает очень быстро на достаточно больших таблицах.

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

Запрос1а = Новый Запрос;
Запрос1а.МенеджерВременныхТаблиц = МВТ;
Запрос1а.Текст =" Выбрать * ИЗ ТабЦ как ТабЦ";
Результат = Запрос1а.Выполнить();
ТабОстСЦенами = Результат.Выгрузить();
ЭлементыФормы.ТабОстСЦенами.СоздатьКолонки();

==========
3 // Запрос2 выбирает все остатки во временную таблицу ТабБЦ
Запрос2 = Новый Запрос;
Запрос2.Текст =
"ВЫБРАТЬ
| ОстаткиТоваровКомпанииОстатки.Номенклатура,
| СУММА(ОстаткиТоваровКомпанииОстатки.КоличествоОстаток) КАК Остаток
| ПОМЕСТИТЬ ТабБЦ
|ИЗ
| РегистрНакопления.ОстаткиТоваровКомпании.Остатки(
| &ДатаЗапроса)
|
|СГРУППИРОВАТЬ ПО
| ОстаткиТоваровКомпанииОстатки.Номенклатура";

Запрос2.УстановитьПараметр("ДатаЗапроса", ТекущаяДата());
Запрос2.МенеджерВременныхТаблиц = МВТ;
Запрос2.Выполнить();
4 // Запрос2а результат запроса Запрос2 выводит в ТЗ и Эл.Формы ТабОстБезЦен

Запрос2а = Новый Запрос;
Запрос2а.МенеджерВременныхТаблиц = МВТ;
Запрос2а.Текст = "select * from ТабБЦ";
Результат2 = Запрос2а.Выполнить();
ТабОстБезЦен = Результат2.Выгрузить();
ЭлементыФормы.ТабОстБезЦен.СоздатьКолонки();

5 // Запрос3 выбирает во временную таблицу ТабР строки,которые выбраны в Запрос2 и не выбраны в Запрос1

Запрос3 = Новый Запрос;
Запрос3.МенеджерВременныхТаблиц = МВТ;
Запрос3.Текст ="select * поместить ТабР from ТабБЦ как ТабБЦ
| where ТабБЦ.Номенклатура
| не в (select ТабЦ.Номенклатура from ТабЦ как ТабЦ)";
Запрос3.Выполнить();

6 // Запрос3а Выводит результат запроса ТЗ и Табличное поле формы
Запрос3а = Новый Запрос;
Запрос3а.МенеджерВременныхТаблиц = МВТ;
Запрос3а.Текст = "select * from ТабР";

Результат3 = Запрос3а.Выполнить();
ТабРасх1 = Результат3.Выгрузить();
ЭлементыФормы.ТабРасх1.СоздатьКолонки();

Делаю 2 вариант.
Таб1 - Таблица значений всех остатков
Таб2 - Таблица остатков с ценами
Надо в Таб3 скопировать из Таб2,строки отсутствующие в Таб1

СтруктураПоиска = Новый Структура("Номенклатура");
Для Каждого СтрОст из Таб1 Цикл
СтруктураПоиска.Номенклатура = СтрОст.Номенклатура;
ЕстьОстаток = Таб2.НайтиСтроки(СтруктураПоиска);

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




Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. bogdan51 15.07.08 16:26 Сейчас в теме
Все получилось.
Надо было вот такой блок
Для К=0 По Таб1.Колонки.Количество()-1 Цикл
Таб3.Колонки.Добавить(Таб1.Колонки[к].Имя);
КонецЦикла;
Но работает значительно медленнее,чем через МенеджерВременныхТаблиц
Оставьте свое сообщение

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