|
Как написать оптимизированный запрос | ☑ | ||
---|---|---|---|---|
0
Ministr
11.07.14
✎
16:12
|
Добрый день, коллеги!
Надо написать запрос на регистр бухгалтерии. В Регистре бухгалтерии - 91 регистратор. В запросе необходимо вытащить реквизит ДоговораКонтаргента - "КураторДоговора". ДоговорКонтрагента есть у 32 регистраторос(данные по метаданным), у других 59 их нету. Надо получить что-то типа: ВЫБРАТЬ ХозрасчетныйОстаткиИОбороты.Регистратор.ДоговорКонтрагента.КураторДоговора, ИЗ РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(, , Регистратор, , , , ) КАК ХозрасчетныйОстаткиИОбороты так вот, так как составной тип данных - "регистратор". Запрос преобразуется в левые соединения ко всем таблицам документов в которых есть данный реквизит и в которых нет данного реквизита. Есть у меня вариант написать что-то вроде ВЫБРАТЬ ВЫБОР КОГДА ХозрасчетныйОстаткиИОбороты.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг ТОГДА ВЫРАЗИТЬ(ХозрасчетныйОстаткиИОбороты.Регистратор КАК Документ.РеализацияТоваровУслуг).ДоговорКонтрагента.КураторДоговора КОГДА ХозрасчетныйОстаткиИОбороты.Регистратор ССЫЛКА Документ.РеализацияУслугПоПереработке ТОГДА ВЫРАЗИТЬ(ХозрасчетныйОстаткиИОбороты.Регистратор КАК Документ.РеализацияУслугПоПереработке).ДоговорКонтрагента.КураторДоговора .... .... .... И ТАК ДАЛЕЕ ПО ВСЕМ ВОЗМОЖНЫМ РЕГИСТРАТОРОМ КОНЕЦ КАК КураторДоговора ИЗ РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(, , Регистратор, , , , ) КАК ХозрасчетныйОстаткиИОбороты Но по всем регистратором это писать можно и немного подустать... Есть у кого - нибудь мнения как сделать... оптимизировано) Всем спасибо. |
|||
1
MadHead
11.07.14
✎
16:13
|
Читать метаданные и строить запрос динамически
|
|||
2
Ministr
11.07.14
✎
16:15
|
Точнее лучше скажите есть более оптимизированный путь ну и более менее читабельный.
Вариант соединения регистраторов левым соединениям а документам не предлагать запросы становятся не гуд , после таких издевательств. |
|||
3
Ministr
11.07.14
✎
16:18
|
(1) У меня они все известны в заранее регистраторы возможные их 31 штука. плюс там отбор по счетам и не все документы могут писать, так что остается максимум штук 15 а может и того меньше, хотя они в базе у себя используют 4 вида документа, можно схитрить и написать на 4 вида, только вот если добавиться в учете 5 вид документа, придется переделывать, поэтому надо писать сразу универсально.. Но, чтобы и отчет строился не 10 минут.
(1) Да я к тому же на СКД это все проворачиваю, модуль объекта даже открывать не хочу, для различных костылейю Надо стандартными средствами писать |
|||
4
РазДва
11.07.14
✎
16:20
|
(0) соедени по регистратору регистр, в котором есть договор
|
|||
5
Ministr
11.07.14
✎
16:22
|
(4) идею понял) Спасибо. Попробую протестирую.
|
|||
6
Ministr
11.07.14
✎
16:24
|
(4) еще вопрос, это даст выигрыш над конструкцией следующего вида:
ВЫРАЗИТЬ(Хорасчетный.Регистратор.ДоговорКонтрагента КАК Справочник.ДоговорыКонтрагентов).КураторДоговора |
|||
7
Ненавижу 1С
гуру
11.07.14
✎
16:24
|
(0) Особенно хорошо это будет смотреться в документе "Корректировка долга", где Договор в ТЧ
(4) а толку, если Договор из регистратора берется? все равно тоже самое |
|||
8
РазДва
11.07.14
✎
16:25
|
(6) такую конструкцию он уделает как тузик грелку )
|
|||
9
alle68
11.07.14
✎
16:27
|
А на субконто договора нет?
Что нужно в итоге получить? P.S. Соединения явно можно и не писать - 1С сама сообразит, где есть договор, сделает 59 соединений... и будет долго-долго думать. |
|||
10
Ministr
11.07.14
✎
16:27
|
(7) Да согласен будет весело). Придется отдельно собирать.
|
|||
11
РазДва
11.07.14
✎
16:28
|
(7) Ау, во втором регистре уже должен быть договор. По регистратору только соединение. Корректировками долга и прочими расшифровками платежа придётся пренебречь )
|
|||
12
Ministr
11.07.14
✎
16:29
|
(9) Аналитика по субконто - контрагенты, номенклатурные группы. И все. И договор только в регистраторе имеется.
|
|||
13
Лефмихалыч
11.07.14
✎
16:31
|
(0) вот тут достаточно подробно описано, почему у тебя ни чего не выходит
http://infostart.ru/print/184361/ |
|||
14
Лефмихалыч
11.07.14
✎
16:32
|
(0) надо как-то иначе задачу решать. Запрос к движениям РБ с отбором только по реквизитам регистраторов (причем туевой хучи регистраторов) нельзя написать так, чтобы он был эффективным
|
|||
15
Ministr
11.07.14
✎
16:33
|
(7) ВЫБРАТЬ
ДоговорыКонтрагентов.КураторДоговора, ИЗ РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(, , Регистратор, , , , ) КАК ХозрасчетныйОстаткиИОбороты ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов ПО ХозрасчетныйОстаткиИОбороты.Регистратор.ДоговорКонтрагента = ДоговорыКонтрагентов.Ссылка Я понял ты предлагаешь вот таким образом сделать? Я тебя правильно понял? |
|||
16
Ministr
11.07.14
✎
16:34
|
(7) - перепутал
Точнее(4) |
|||
17
Лефмихалыч
11.07.14
✎
16:36
|
(15) это будет точно то же самое, что (0) - жопа
|
|||
18
РазДва
11.07.14
✎
16:40
|
(15)
Нет, я предлагаю типа: ВЫБРАТЬ ДоговорыКонтрагентов.ДоговорКонтрагента.КураторДоговора, ИЗ РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(, , Регистратор, , , , ) КАК ХозрасчетныйОстаткиИОбороты ЛЕВОЕ СОЕДИНЕНИЕ регистрнакопления.ВзаиморасчетыКонтрагентов КАК ДоговорыКонтрагентов ПО ХозрасчетныйОстаткиИОбороты.Регистратор = ДоговорыКонтрагентов.Регистратор |
|||
19
Ministr
11.07.14
✎
16:45
|
(17) Вообщем чтобы было круто надо писать вторым способом как в (0). Только мегаконструкция получиться одного поля... таких полей штук 10, начиная от договора и заканчивая заказом(или сделка - реквизит регистратора)...
(15) Да согласен, азять из измерения другого регистра - это норм, можно сделать. Только регистры должны быть соответсвующие для такого решения. |
|||
20
Лефмихалыч
11.07.14
✎
16:47
|
(19) чтобы было круто, надо придумать другое решение, исключающее получение данных из РБ с отобором по полям регистраторов
|
|||
21
РазДва
11.07.14
✎
17:01
|
(20) Решение с доп.регистром исключает. Например, в УПП подобная схема используется с помощью регистра списанные товары, в него напихали всё и сразу дабы не лезть в регистратор.
А вот кучка соединений к каждому регистратору совсем не круто, даже если они ограничены 31 штуками. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |