|
Запросы и СКД | ☑ | ||
---|---|---|---|---|
0
vip67
24.07.13
✎
20:46
|
Все добрый вечер! УПП для Украины. помогите разобраться с СКД.
Суть вопроса: есть 2 таблицы: 1-я - Бух остатки и обороты - на нее наложен отбор по определенному счету БУ (631), из нее получаю сделку, остаток на начало и оборот за период. Далее делаю вложенный запрос, в котором указываю таблицу ОБоротыДтКт, фильтр по счету БУ (20). обе этих таблицы связываю по Субконто3 из первой и регистратор.Сделка из 2-й. Суть в чем: необходимо по сделке, полученной из первой таблицы получить приход материала за тек месяц, сгруппированный по группе кода (часть номера кода). Как я понимаю, внутренний запрос первоначально отберет все данные, а потом уже будет происходит внутреннее соединение. В итоге работает ОЧЕНЬ медленно. Нужно, чтобы для каждой записи 1-й таблицы отбирались данные по 2-й таблице. Как это реализовать в СКД? текст запроса прилагаю: ВЫБРАТЬ ПриходЗаМесяц.НомГруппа КАК НомГруппа, ПриходЗаМесяц.СуммаОборот КАК ПриходМатБезНДС, ПриходЗаМесяц.Регистратор КАК Регистратор, ПлатежТекМес.Субконто3 КАК Сделка, ПлатежТекМес.Валюта, ПлатежТекМес.СуммаНачальныйОстатокКт, ПлатежТекМес.СуммаОборотДт, СУММА(ВЫБОР КОГДА ЕСТЬNULL(ПлатежТекМес.СуммаОборотДт, 0) - ЕСТЬNULL(ПлатежТекМес.СуммаНачальныйОстатокКт, 0) > 0 ТОГДА ЕСТЬNULL(ПлатежТекМес.СуммаОборотДт, 0) - ЕСТЬNULL(ПлатежТекМес.СуммаНачальныйОстатокКт, 0) ИНАЧЕ 0 КОНЕЦ) КАК ОплатаТекМес ИЗ РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачПериода, &КонПериода, , , Счет В ИЕРАРХИИ (&счет631), , ) КАК ПлатежТекМес ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ ПриходМат20.Регистратор КАК Регистратор, ПриходМат20.СубконтоДт1 КАК СубконтоДт1, ПриходМат20.СуммаОборот КАК СуммаОборот, ПОДСТРОКА(ПриходМат20.СубконтоДт1.Код, 1, 2) КАК НомГруппа, ПриходМат20.Регистратор.Сделка КАК Сделка ИЗ РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(&НачПериода, &КонПериода, Запись, СчетДт В ИЕРАРХИИ (&Счет20), , , , ) КАК ПриходМат20 ГДЕ НЕ ПриходМат20.Регистратор ССЫЛКА Документ.ПоступлениеДопРасходов) КАК ПриходЗаМесяц ПО ПлатежТекМес.Субконто3 = ПриходЗаМесяц.Регистратор.Сделка ГДЕ ВЫБОР КОГДА ЕСТЬNULL(ПлатежТекМес.СуммаОборотДт, 0) - ЕСТЬNULL(ПлатежТекМес.СуммаНачальныйОстатокКт, 0) > 0 ТОГДА ЕСТЬNULL(ПлатежТекМес.СуммаОборотДт, 0) - ЕСТЬNULL(ПлатежТекМес.СуммаНачальныйОстатокКт, 0) ИНАЧЕ 0 КОНЕЦ > 0 СГРУППИРОВАТЬ ПО ПлатежТекМес.Субконто3, ПриходЗаМесяц.Регистратор, ПриходЗаМесяц.НомГруппа, ПриходЗаМесяц.СуммаОборот, ПлатежТекМес.Валюта, ПлатежТекМес.СуммаНачальныйОстатокКт, ПлатежТекМес.СуммаОборотДт УПОРЯДОЧИТЬ ПО Сделка, Регистратор, НомГруппа |
|||
1
vip67
24.07.13
✎
20:51
|
при этом этот же запрос в консоле запросов отрабатывает гораздо быстрее
|
|||
2
France
24.07.13
✎
21:01
|
для начала попробуй вынести группировки из запроса - пусть скд группирует.
|
|||
3
vip67
24.07.13
✎
21:10
|
(2) ок, счас, а то уже минут 15 - и ничего, а в консоле - ну 30сек-1мин
|
|||
4
vip67
24.07.13
✎
21:14
|
(2) не помогает
|
|||
5
viktor_vv
24.07.13
✎
21:16
|
Я бы на это не надеялся
" Как я понимаю, внутренний запрос первоначально отберет все данные, а потом уже будет происходит внутреннее соединение" как там скуль выгребет это дело, только ему и известно, учитывая еще что, виртуальные таблицы тоже разворачиваются в подзапросы. Загони это во временные таблицы и их соединяй. |
|||
6
viktor_vv
24.07.13
✎
21:17
|
Как миниму приход за месяц во временную загони.
|
|||
7
vip67
24.07.13
✎
21:18
|
на данный момент база - файловая
|
|||
8
viktor_vv
24.07.13
✎
21:25
|
(7) Ну там таки тоже есть некоторый планировщик запросов. Плюс СКД некоторым образом модифицирует этот запрос, для отборов и т. д.
Ты попробуй. |
|||
9
Sorm
24.07.13
✎
21:27
|
(0) Гы:) А на уровне запроса, а не в СКД, это реализовать нельзя? Две временных таблицы, проиндексированные по полям поиска, имхо, спасут отца русской демократии.
|
|||
10
1s_ivan
24.07.13
✎
21:30
|
1. Вам точно нужны строки в части СГРУППИРОВАТЬ ПО:
... ПлатежТекМес.СуммаНачальныйОстатокКт, ПлатежТекМес.СуммаОборотДт ... ???? 2. Как считаете, может нужно в начале запроса в части ВЫБРАТЬ: ... ПлатежТекМес.СуммаНачальныйОстатокКт, ПлатежТекМес.СуммаОборотДт, ... ЗАМЕНИТЬ на: сумма (ПлатежТекМес.СуммаНачальныйОстатокКт), сумма (ПлатежТекМес.СуммаОборотДт), ??? |
|||
11
viktor_vv
24.07.13
✎
21:32
|
Плюс там еще в виртуальные таблицы условия на виды субконто неплохо было бы, тем более, что тебе не все нужны. Тут правда я не сильно знаю как загнать их параметрами СКД, ну и с бухРегистром не часто работал.
|
|||
12
vip67
24.07.13
✎
21:44
|
(9) да вот наверно и придется на уровне запроса а не в СКД... хотя зотелось бы.
кстати вопорс на засыпку - как в СКД создать временную таблицу и связать потом с запросом? на пальцах кто-то объяснит? потому что в инете натолкнулся на то, что временные таблицы в СКД не есть гуд... а тут все рекомендуют... |
|||
13
France
24.07.13
✎
21:46
|
легко...
ща пальцы разомну только.. |
|||
14
France
24.07.13
✎
21:48
|
1. В Конструкторе СКД создаешь обычным образом запрос
2. Переходишь на закладку "Дополнительно" и в нем выбираешь "Создание временной таблицы" и задаешь и имя.. и..все.. |
|||
15
vip67
24.07.13
✎
21:50
|
(14) Это легко, как 2 пальца... так я уже делал, а вот что дальше - создал я к примеру временную таблицу, а где основная таблица или еще одна? и как ихз потом увязать?
через пакет добавлять? тут без 100гр не разобраться видать |
|||
16
France
24.07.13
✎
21:53
|
да, через пакет создаешь еще нужно количество таблиц и увязиываешь нужным образом с временной таблицей.. и пакет тоже так же легко создается.
|
|||
17
France
24.07.13
✎
21:55
|
созданная первым временная таблица становится доступна следующему запросу в пакете в дереве метаданных при формировании запроса.. прям в конце списка "Временные таблицы"
|
|||
18
vip67
24.07.13
✎
21:56
|
а вот как увязать между пакетами? куда жать? вот это я не нашел :(
кстати, уже минут 40 работает отчет на СКД за период в один день! ужас какой-то! такого у меня еще не было. |
|||
19
vip67
24.07.13
✎
22:00
|
(17) точно! вот за это СПАСИБО!!!
|
|||
20
France
24.07.13
✎
22:00
|
два разных пакета увязать или временную таблицу с таблицей в одном пакете??
- увязать два разных пакета - это два разных набора данных запрос в СКД - увязать временную таблицу с другой в пределах одного пакета: объявить временную таблицу, и при создании нового запроса в пакете объявленная таблица доступна на закладке "Таблицы и поля" конструктора запроса" в разделе "Временные таблицы" (последняя в списке). |
|||
21
viktor_vv
24.07.13
✎
22:12
|
Эти конструкторы до добра не доведут :)
ВЫБРАТЬ ПриходМат20.Регистратор КАК Регистратор, ПриходМат20.СубконтоДт1 КАК СубконтоДт1, ПриходМат20.СуммаОборот КАК СуммаОборот, ПОДСТРОКА(ПриходМат20.СубконтоДт1.Код, 1, 2) КАК НомГруппа, ПриходМат20.Регистратор.Сделка КАК Сделка ПОМЕСТИТЬ ВремПриходЗаМесяц ИЗ РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(&НачПериода, &КонПериода, Запись, СчетДт В ИЕРАРХИИ (&Счет20), , , , ) КАК ПриходМат20 ГДЕ НЕ ПриходМат20.Регистратор ССЫЛКА Документ.ПоступлениеДопРасходов ; ВЫБРАТЬ ПриходЗаМесяц.НомГруппа КАК НомГруппа, ПриходЗаМесяц.СуммаОборот КАК ПриходМатБезНДС, ПриходЗаМесяц.Регистратор КАК Регистратор, ПлатежТекМес.Субконто3 КАК Сделка, ПлатежТекМес.Валюта, ПлатежТекМес.СуммаНачальныйОстатокКт, ПлатежТекМес.СуммаОборотДт, СУММА(ВЫБОР КОГДА ЕСТЬNULL(ПлатежТекМес.СуммаОборотДт, 0) - ЕСТЬNULL(ПлатежТекМес.СуммаНачальныйОстатокКт, 0) > 0 ТОГДА ЕСТЬNULL(ПлатежТекМес.СуммаОборотДт, 0) - ЕСТЬNULL(ПлатежТекМес.СуммаНачальныйОстатокКт, 0) ИНАЧЕ 0 КОНЕЦ) КАК ОплатаТекМес ИЗ РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачПериода, &КонПериода, , , Счет В ИЕРАРХИИ (&счет631), , ) КАК ПлатежТекМес ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВремПриходЗаМесяц КАК ПриходЗаМесяц ПО ПлатежТекМес.Субконто3 = ПриходЗаМесяц.Регистратор.Сделка ГДЕ ВЫБОР КОГДА ЕСТЬNULL(ПлатежТекМес.СуммаОборотДт, 0) - ЕСТЬNULL(ПлатежТекМес.СуммаНачальныйОстатокКт, 0) > 0 ТОГДА ЕСТЬNULL(ПлатежТекМес.СуммаОборотДт, 0) - ЕСТЬNULL(ПлатежТекМес.СуммаНачальныйОстатокКт, 0) ИНАЧЕ 0 КОНЕЦ > 0 СГРУППИРОВАТЬ ПО ПлатежТекМес.Субконто3, ПриходЗаМесяц.Регистратор, ПриходЗаМесяц.НомГруппа, ПриходЗаМесяц.СуммаОборот, ПлатежТекМес.Валюта, ПлатежТекМес.СуммаНачальныйОстатокКт, ПлатежТекМес.СуммаОборотДт УПОРЯДОЧИТЬ ПО Сделка, Регистратор, НомГруппа |
|||
22
France
24.07.13
✎
22:14
|
на ко ругается?
|
|||
23
viktor_vv
24.07.13
✎
22:27
|
(22) На кого ругается ?
Даже выполняется, правда нихрена не выводит :). |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |