![]() |
|
Как лучше выгрузить данные из двух регистров накопления | ☑ | ||
---|---|---|---|---|
0
Guerro
21.11.19
✎
12:09
|
Есть регистр потолков с левым соединением регистра состояния потолков, из них грузятся все нужные данные по отбору по измерению и статусу потолка, выгрузка занимает примерно 5-10 секунд, а это конечно много.
Запрос: Запрос=Новый Запрос; Запрос.Текст="ВЫБРАТЬ | ПотолкиОстатки.Код КАК Код, | СостояниеПотолковОстатки.Состояние КАК Состояние, | ПотолкиОстатки.Заказчик КАК Заказчик, | ПотолкиОстатки.Статус КАК Статус, | ПотолкиОстатки.Материал КАК Материал, | ПотолкиОстатки.Площадь КАК Площадь, | ПотолкиОстатки.Углы КАК Углы, | ПотолкиОстатки.Криволинейность КАК Криволинейность, | ПотолкиОстатки.КриволинейнаяСпайка КАК КриволинейнаяСпайка, | ПотолкиОстатки.ЦенаДилер КАК ЦенаДилер, | ПотолкиОстатки.КолФотоПечать КАК КолФотоПечать, | ПотолкиОстатки.ЦенаФотоПечать КАК ЦенаФотоПечать, | ПотолкиОстатки.СуммаФотоПечать КАК СуммаФотоПечать, | СУММА(ПотолкиОстатки.ОстатокОстаток) КАК Остаток, | СУММА(ПотолкиОстатки.ЦенаЗакупкиОстаток) КАК ЦенаЗакупки, | СУММА(ПотолкиОстатки.ЦенаИзделияОстаток) КАК ЦенаИзделия |ИЗ | РегистрНакопления.Потолки.Остатки(, Статус = ""Заказ"") КАК ПотолкиОстатки | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СостояниеПотолков.Остатки(, Состояние = &Состояние) КАК СостояниеПотолковОстатки | ПО ПотолкиОстатки.Код = СостояниеПотолковОстатки.Код | |СГРУППИРОВАТЬ ПО | ПотолкиОстатки.Заказчик, | ПотолкиОстатки.Статус, | ПотолкиОстатки.Материал, | ПотолкиОстатки.Код, | ПотолкиОстатки.Площадь, | ПотолкиОстатки.Углы, | ПотолкиОстатки.Криволинейность, | ПотолкиОстатки.ЦенаДилер, | ПотолкиОстатки.КолФотоПечать, | ПотолкиОстатки.ЦенаФотоПечать, | ПотолкиОстатки.СуммаФотоПечать, | ПотолкиОстатки.КриволинейнаяСпайка, | СостояниеПотолковОстатки.Состояние"; Запрос.УстановитьПараметр("Состояние",Статус); ТаблРез=Запрос.Выполнить().Выгрузить(); Попробовала через "РегистрыНакопления.Потолки.Остатки(,Новый Структура(...))", занимает менее секунды, но нужно организовать цикл для подгрузки состояния: РегПотолков.Колонки.Добавить("Состояние"); РегПотолков.Колонки.Сдвинуть(РегПотолков.Колонки.Найти("Состояние"),-(РегПотолков.Колонки.Количество()-2)); Для каждого СтрРЗ Из РегПотолков Цикл ТРег=РегистрыНакопления.СостояниеПотолков.Остатки(,Новый Структура("ШтрихКод",СтрРЗ.ШтрихКод)); Для Каждого Рег из ТРег Цикл СтрРЗ.Состояние=Рег.Состояние; КонецЦикла; КонецЦикла; А вот тут уже запрос в цикле нельзя, но вот как получилось, и нагрузка стала до 1-2 секунд. Так еще нужно будет отбор сделать для нужного статуса. Как лучше правильно сделать? |
|||
1
sqr4
21.11.19
✎
12:12
|
Не рекомендуется же соединяться с виртуальными таблицами. Результаты во временные таблицы, индексируй по соединяемым полям и соединяй
|
|||
2
Guerro
21.11.19
✎
12:17
|
(1) Получилось так:
"ВЫБРАТЬ | РегистрПотолков.Код КАК Код, | РегистрПотолков.Заказчик КАК Заказчик, | РегистрПотолков.Статус КАК Статус, | РегистрПотолков.Материал КАК Материал, | РегистрПотолков.Площадь КАК Площадь, | РегистрПотолков.Углы КАК Углы, | РегистрПотолков.Криволинейность КАК Криволинейность, | РегистрПотолков.КриволинейнаяСпайка КАК КриволинейнаяСпайка, | РегистрПотолков.ЦенаДилер КАК ЦенаДилер, | РегистрПотолков.КолФотоПечать КАК КолФотоПечать, | РегистрПотолков.ЦенаФотоПечать КАК ЦенаФотоПечать, | РегистрПотолков.СуммаФотоПечать КАК СуммаФотоПечать, | РегистрПотолков.ОстатокОстаток КАК ОстатокОстаток, | РегистрПотолков.ЦенаЗакупкиОстаток КАК ЦенаЗакупкиОстаток, | РегистрПотолков.ЦенаИзделияОстаток КАК ЦенаИзделияОстаток, | РегистрСостоянияПотолков.Состояние КАК Состояние |ИЗ | (ВЫБРАТЬ | ПотолкиОстатки.Код КАК Код, | ПотолкиОстатки.Заказчик КАК Заказчик, | ПотолкиОстатки.Статус КАК Статус, | ПотолкиОстатки.Материал КАК Материал, | ПотолкиОстатки.Площадь КАК Площадь, | ПотолкиОстатки.Углы КАК Углы, | ПотолкиОстатки.Криволинейность КАК Криволинейность, | ПотолкиОстатки.КриволинейнаяСпайка КАК КриволинейнаяСпайка, | ПотолкиОстатки.ЦенаДилер КАК ЦенаДилер, | ПотолкиОстатки.КолФотоПечать КАК КолФотоПечать, | ПотолкиОстатки.ЦенаФотоПечать КАК ЦенаФотоПечать, | ПотолкиОстатки.СуммаФотоПечать КАК СуммаФотоПечать, | ПотолкиОстатки.ОстатокОстаток КАК ОстатокОстаток, | ПотолкиОстатки.ЦенаЗакупкиОстаток КАК ЦенаЗакупкиОстаток, | ПотолкиОстатки.ЦенаИзделияОстаток КАК ЦенаИзделияОстаток | ИЗ | РегистрНакопления.Потолки.Остатки(, Статус = ""Заказ"") КАК ПотолкиОстатки) КАК РегистрПотолков | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ | СостояниеПотолковОстатки.Код КАК Код, | СостояниеПотолковОстатки.Состояние КАК Состояние | ИЗ | РегистрНакопления.СостояниеПотолков.Остатки(, Состояние = &Состояние) КАК СостояниеПотолковОстатки) КАК РегистрСостоянияПотолков | ПО РегистрПотолков.Код = РегистрСостоянияПотолков.Код" |
|||
3
Darych
21.11.19
✎
12:19
|
не
|
|||
4
Guerro
21.11.19
✎
12:22
|
Сделал так и стало около секунды:
"Запрос=Новый Запрос; Запрос.Текст="ВЫБРАТЬ | РегистрПотолков.Код КАК Код, | РегистрСостоянияПотолков.Состояние КАК Состояние, | РегистрПотолков.Заказчик КАК Заказчик, | РегистрПотолков.Статус КАК Статус, | РегистрПотолков.Материал КАК Материал, | РегистрПотолков.Площадь КАК Площадь, | РегистрПотолков.Углы КАК Углы, | РегистрПотолков.Криволинейность КАК Криволинейность, | РегистрПотолков.КриволинейнаяСпайка КАК КриволинейнаяСпайка, | РегистрПотолков.ЦенаДилер КАК ЦенаДилер, | РегистрПотолков.КолФотоПечать КАК КолФотоПечать, | РегистрПотолков.ЦенаФотоПечать КАК ЦенаФотоПечать, | РегистрПотолков.СуммаФотоПечать КАК СуммаФотоПечать, | РегистрПотолков.Остаток КАК Остаток, | РегистрПотолков.ЦенаЗакупки КАК ЦенаЗакупки, | РегистрПотолков.ЦенаИзделия КАК ЦенаИзделия |ИЗ | (ВЫБРАТЬ | ПотолкиОстатки.Код КАК Код, | ПотолкиОстатки.Заказчик КАК Заказчик, | ПотолкиОстатки.Статус КАК Статус, | ПотолкиОстатки.Материал КАК Материал, | ПотолкиОстатки.Площадь КАК Площадь, | ПотолкиОстатки.Углы КАК Углы, | ПотолкиОстатки.Криволинейность КАК Криволинейность, | ПотолкиОстатки.КриволинейнаяСпайка КАК КриволинейнаяСпайка, | ПотолкиОстатки.ЦенаДилер КАК ЦенаДилер, | ПотолкиОстатки.КолФотоПечать КАК КолФотоПечать, | ПотолкиОстатки.ЦенаФотоПечать КАК ЦенаФотоПечать, | ПотолкиОстатки.СуммаФотоПечать КАК СуммаФотоПечать, | ПотолкиОстатки.ОстатокОстаток КАК Остаток, | ПотолкиОстатки.ЦенаЗакупкиОстаток КАК ЦенаЗакупки, | ПотолкиОстатки.ЦенаИзделияОстаток КАК ЦенаИзделия | ИЗ | РегистрНакопления.Потолки.Остатки(, Статус = ""Заказ"") КАК ПотолкиОстатки) КАК РегистрПотолков | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ | СостояниеПотолковОстатки.Код КАК Код, | СостояниеПотолковОстатки.Состояние КАК Состояние | ИЗ | РегистрНакопления.СостояниеПотолков.Остатки(, Состояние = &Состояние) КАК СостояниеПотолковОстатки) КАК РегистрСостоянияПотолков | ПО РегистрПотолков.Код = РегистрСостоянияПотолков.Код"; Запрос.УстановитьПараметр("Состояние",Статус); ТаблРез=Запрос.Выполнить().Выгрузить();" |
|||
5
Guerro
21.11.19
✎
12:22
|
(3) а как?
|
|||
6
Guerro
21.11.19
✎
14:49
|
up
|
|||
7
Ник080808
21.11.19
✎
14:54
|
(6) Выбрать всенайиг ПОместить ВТПотолки из РегистрНакопления.Потолки.Остатки(, Статус = ""Заказ"") КАК ПотолкиОстатки;
Выбрать всенайиг ПОместить ВТСостоянияПотолков из РегистрНакопления.СостояниеПотолков.Остатки(, Состояние = &Состояние) КАК РегистрСостоянияПотолков; Выбрать ВТПотолки левое соединение ВТСостоянияПотолков |
|||
8
sqr4
21.11.19
✎
14:55
|
(4) а тут связь с подзапросом, тоже не есть гуд и индексируй по полям соединения
|
|||
9
Guerro
21.11.19
✎
14:58
|
(7) я в (4) так и сделал, не то?
|
|||
10
sqr4
21.11.19
✎
15:00
|
(9) у тебя связь виртуально таблицы с подзапросом, теже яйца, вид сбоку.
|
|||
11
Darych
21.11.19
✎
15:01
|
(9) у тяж запрос по вирт таблице идет в разрезе всех измерений по остаткам... нах тебе суммы и группировки
|
|||
12
Guerro
21.11.19
✎
15:01
|
(10) понял, сейчас буду изучать временные таблицы, я их перепутал с вложенными запросами
|
|||
13
Ник080808
21.11.19
✎
15:03
|
(12) "перепутал", пол "Женский". Кажется трансгендеры на мисту пришли)
|
|||
14
sqr4
21.11.19
✎
15:05
|
(13) причем он сам зашел и поменял, по умолчанию мужской создается. Чтобы поменять, надо обязательно зайти еще раз в настройки учетки, т.е ошибиться нельзя)
|
|||
15
D_E_S_131
21.11.19
✎
15:13
|
(0) А нельзя сразу получить остатки с отбором по "Статусу" и "Состоянию" нужному? Обязательно соединять-извращаться нужно? Хотя учитывая чехарду с полом аккаунта возможно это и норм...
|
|||
16
Guerro
21.11.19
✎
15:15
|
(14) это называется "донашивать" аккаунт
|
|||
17
Guerro
21.11.19
✎
15:16
|
(15) ну регистры же разные или путаю что-то?
|
|||
18
Guerro
21.11.19
✎
15:23
|
(7) все летает быстрее, чем когда-либо
|
|||
19
D_E_S_131
21.11.19
✎
15:24
|
(17) Тогда выбираешь данные из одного регистра и помещаешь в ВТ, устанавливая индекс по Коду, через которое соединять будешь. Потом так же по второму регистру. И уже в третьем пакете соединяешь эти две ВТ и выводишь данные.
|
|||
20
Ник080808
21.11.19
✎
15:56
|
(19) см (7) Правда я индекс не написал
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |