|   |   | 
| 
 | Как написать оптимизированный запрос | ☑ | ||
|---|---|---|---|---|
| 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 штуками. | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |