Имя: Пароль:
1C
1С v8
Кривой запрос долго работает
0 Lansi
 
27.02.13
07:46
Уважаемые формучане помогите пожалуйста делаю внешную печатную форму для конфигурации БГУ документ измещение.
Суть в том что в документе извещения содержится таблица документов (передачи, списания) из которых обращаясь к регистру бухгалтерии ЕПСБУ получаю нужные данные.

Сам запрос выглядит так
   Запрос.Текст = "ВЫБРАТЬ
                  |    ЕПСБУ.Регистратор КАК ДокументОснование,
                  |    ЕПСБУ.Баланс,
                  |    ЕПСБУ.КВД КАК КВД,
                  |    ЕПСБУ.СчетДт КАК СчетДебета,
                  |    ЕПСБУ.КБКДт КАК КБКСчетДебета,
                  |    ЕПСБУ.СубконтоДт1 КАК КОСГУСчетДебета,
                  |    ВЫБОР
                  |        КОГДА ПОДСТРОКА(ЕПСБУ.СчетКт.Код, 1, 6) = ""304.04""
                  |            ТОГДА ЕПСБУ.СубконтоДт2
                  |        ИНАЧЕ ЕПСБУ.СубконтоКт2
                  |    КОНЕЦ КАК ПердаваемыйАктив,
                  |    ЕПСБУ.СчетКт КАК СчетКредита,
                  |    ЕПСБУ.КБККт КАК КБКСчетКредита,
                  |    ЕПСБУ.СубконтоКт1 КАК КОСГУСчетКредита,
                  |    ВЫБОР
                  |        КОГДА ПОДСТРОКА(ЕПСБУ.СчетДт.Код, 1, 6) = ""304.04""
                  |            ТОГДА ЕПСБУ.СубконтоДт2
                  |        ИНАЧЕ ЕПСБУ.СубконтоКт2
                  |    КОНЕЦ КАК Контрагент,
                  |    ЕПСБУ.КоличествоКт КАК КоличествоКт,
                  |    ЕПСБУ.Содержание,
                  |    ЕПСБУ.Сумма КАК Сумма
                  |ПОМЕСТИТЬ ВТДанныеДокументаПередачи
                  |ИЗ
                  |    Документ.ЦС_Извещение КАК ЦС_Извещение
                  |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрБухгалтерии.ЕПСБУ.ДвиженияССубконто КАК ЕПСБУ
                  |        ПО ЦС_Извещение.СоставДокументов.ДокументПередачи = ЕПСБУ.Регистратор
                  |ГДЕ
                  |    ЦС_Извещение.Ссылка = &Извещение;";

дальше идет формирование итогов и по сути не важно. Важно то что именно эта часть запроса дико тормозит сам запрос обрабатывается примерно 30 секунд. Подскажите пожалуйста что можно сделать чтобы оптимизировать поиск нужных данных.
1 Wobland
 
27.02.13
07:56
заменить ПОДСТРОКА(ЕПСБУ.СчетКт.Код, 1, 6) на ЗНАЧЕНИЕ(ПланСчетов...)
2 Галахад
 
гуру
27.02.13
07:57
(1) Как вариант. Запрос в цикле. :-) С ограничением виртуальной таблицы на момент времени.
3 Feunoir
 
27.02.13
08:16
ПО ЦС_Извещение.СоставДокументов.ДокументПередачи = ЕПСБУ.Регистратор

Не нравится мне такое условие связи. Может стоит дополнительную временную таблицу прикрутить?
4 Gesperid
 
27.02.13
08:19
Нужно резать ДвиженияССубконто
5 el-gamberro
 
27.02.13
08:47
ГДЕ ЕПСБУ.Регистратор Ссылка Документ.Извещение

ну должно побыстрее работать, а аще профайлер в руки вперед
6 Fragster
 
гуру
27.02.13
08:55
а зачем тут вообще соединение?
7 Lansi
 
27.02.13
08:56
(5) это работать не будет т.к. в ЕПСБУ.Регистратор Ссылка нет документа Извещение. В документе извещение есть документы передачи (списания) и вот они делают движения в ЕПСБУ. Само заявление движений не делает.
8 Fragster
 
гуру
27.02.13
08:57
ГДЕ ЕПСБУ.Регистратор в (Выбрать ЦС_Извещение.СоставДокументов.ДокументПередачи Из Документ.ЦС_Извещение КАК ЦС_Извещение ГДЕ ЦС_Извещение.Ссылка = &Извещение)
9 Fragster
 
гуру
27.02.13
08:57
Из Документ.ЦС_Извещение.СоставДокументов
10 Fragster
 
гуру
27.02.13
08:58
Выбрать СоставДокументов.ДокументПередачи Из Документ.ЦС_Извещение.СоставДокументов КАК СоставДокументов ГДЕ СоставДокументов.Ссылка = &Извещение
11 Fragster
 
гуру
27.02.13
08:58
короче не надо через точку табличные части прибивать
12 zak555
 
27.02.13
08:59
запрос по виртуальной таблице РБ
13 Lansi
 
27.02.13
09:00
(11) Напишите пожалуйста итоговый код в одном сообщении, а то я честно говоря задумку не могу понять.
14 olegves
 
27.02.13
09:02
(0) для начала замени подстрока на ВЫРАЗИТЬ...КАК Строка(6)
а затем уж и профайлер + план запроса
15 Lansi
 
27.02.13
09:04
Я  начинающий программист терминологии не знаю что такое профайлер?
16 olegves
 
27.02.13
09:05
(15) гугли
17 Галахад
 
гуру
27.02.13
09:06
(0) Документов-то много? В "таблице документов"
18 H A D G E H O G s
 
27.02.13
09:06
(16) Материмся?
19 H A D G E H O G s
 
27.02.13
09:09
Я бы сначало выбрал бы движения с субконто с фильтром как в (10) во временную, а потом бы уже делал всякие

странные вещи типа:

ПОДСТРОКА(ЕПСБУ.СчетКт.Код, 1, 6)
20 olegves
 
27.02.13
09:09
+ (14) а вообще условие по документу надо бы в параметры виртуальной таблицы убрать, тада полегчает
21 Lansi
 
27.02.13
09:10
(17) даже с одним документом длительность секунд 30, обычно документ 1 в извещении редко больше.
22 tdm
 
27.02.13
09:10
(20) +100500!
23 H A D G E H O G s
 
27.02.13
09:11
Да, кстати, там же есть параметры ВТ - туда и втыкай!
24 tdm
 
27.02.13
09:13
(21) соединение не нужно - отбор по документу в параметры виртуальной таблицы засуньте)
(13)>>Напишите пожалуйста итоговый код в одном сообщении
звучит как - "сделайте забесплатна за меня, мне думать неохото" =) если вы начинающий тем более полезно самому разобраться)
25 H A D G E H O G s
 
27.02.13
09:14
(24) +500
В свете того, что конфа нетиповая
26 Галахад
 
гуру
27.02.13
09:14
(21) Тогда (2)
Цикл по документам

ИЗ
   РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(&НачДата, &КонДата, , , ) КАК ХозрасчетныйДвиженияССубконто

где НачДата = КонДата = Датадокумента.
27 tdm
 
27.02.13
09:15
(25) да прост задачка несложная, идей накидали) на таких и учиться...
28 Lansi
 
27.02.13
09:44
(26) Вот за это спасибо, все получилось даже не подумал регистр по дате ограничить.
Закон Брукера: Даже маленькая практика стоит большой теории.