Как скопировать из одной ТаблицыЗначений в другую?
Необходимо вывести записи РегистраНакопления Остатки,по которым не установлена определенная цена (РегистрСведений.Цены)
Я это сделал с помощью запросов во временные таблицы МенеджерВременныхТаблиц. Работает очень быстро на достаточно больших таблицах.
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.СоздатьКолонки();
Пытаюсь так,но не могу докопаться как эти строки скопировать и вывести в Табличное поле
Я это сделал с помощью запросов во временные таблицы МенеджерВременныхТаблиц. Работает очень быстро на достаточно больших таблицах.
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.СоздатьКолонки();
Пытаюсь так,но не могу докопаться как эти строки скопировать и вывести в Табличное поле
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот