Имя: Пароль:
1C
1С v8
Ускоряем запрос к хозрасчетному
0 web_profiler
 
10.02.14
17:04
Запрос достал уже - время выполнения 6 секунд.
Подскажите, мож как-то его ускорить можно?

ВЫБРАТЬ
    ХозрасчетныйДвиженияССубконто.СубконтоКт1.НовыйВидАлкоголя КАК Код,
    ХозрасчетныйДвиженияССубконто.Регистратор.Контрагент.ВидЛицензии КАК Кому,
    СУММА(ХозрасчетныйДвиженияССубконто.СубконтоКт1.Емкость * ХозрасчетныйДвиженияССубконто.КоличествоКт / 1000) КАК ОбъемРасход
ИЗ
    РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(&НачалоПериода, &КонецПериода, , , ) КАК ХозрасчетныйДвиженияССубконто
ГДЕ
    ХозрасчетныйДвиженияССубконто.СчетКт = &СчетКт
    И ХозрасчетныйДвиженияССубконто.СубконтоКт1.НовыйВидАлкоголя = &Код

СГРУППИРОВАТЬ ПО
    ХозрасчетныйДвиженияССубконто.СубконтоКт1.НовыйВидАлкоголя,
    ХозрасчетныйДвиженияССубконто.Регистратор.Контрагент.ВидЛицензии
1 Yea-Yea
 
10.02.14
17:04
бомба!
2 Yea-Yea
 
10.02.14
17:05
ну-с хлопцы оптимизаторы, вперед!
3 web_profiler
 
10.02.14
17:05
я так подозреваю - проблема тут
ХозрасчетныйДвиженияССубконто.Регистратор.Контрагент.ВидЛицензии КАК Кому
4 web_profiler
 
10.02.14
17:05
чем больше вложенность - тем тормознее
5 Ненавижу 1С
 
гуру
10.02.14
17:05
используйте вместо ГДЕ условия виртуальной таблицы
6 hhhh
 
10.02.14
17:06
(3) да, за эту строчку в вас 80 пуль надо вогнать. Причем из крупнокалиберного пулемета.
7 ДенисЧ
 
10.02.14
17:06
А ВЫРАЗИЬТ где?
8 web_profiler
 
10.02.14
17:06
(6) согласен, уже вытаскиваю
9 vicof
 
10.02.14
17:07
(4) Да ты гений
Виды субконто ограничь и приводу регистратор к нужному виду
10 Ненавижу 1С
 
гуру
10.02.14
17:07
Контрагента никак не вытащить из оборотов например?
11 vicof
 
10.02.14
17:07
(6) +100
12 web_profiler
 
10.02.14
17:08
(7) в смысле?
13 web_profiler
 
10.02.14
17:09
(9) каким образом, подскажи, пожалуйста
14 Maxus43
 
10.02.14
17:11
(13) ВЫРАЗИТЬ
15 vicof
 
10.02.14
17:11
Параметром виртуальной таблицы + (7)
16 web_profiler
 
10.02.14
17:12
(10) с 6 сек до 0.639
17 web_profiler
 
10.02.14
17:12
(14) так где выразить использовать
18 web_profiler
 
10.02.14
17:12
ВЫБРАТЬ
    ХозрасчетныйДвиженияССубконто.СубконтоКт1.НовыйВидАлкоголя КАК Код,
    ХозрасчетныйДвиженияССубконто.Регистратор.Контрагент.ВидЛицензии КАК Кому,
    СУММА(ХозрасчетныйДвиженияССубконто.СубконтоКт1.Емкость * ХозрасчетныйДвиженияССубконто.КоличествоКт / 1000) КАК ОбъемРасход,
    ХозрасчетныйДвиженияССубконто.Регистратор
ИЗ
    РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(
            &НачалоПериода,
            &КонецПериода,
            СчетКт = &СчетКт
                И СубконтоКт1.НовыйВидАлкоголя = &Код,
            ,
            ) КАК ХозрасчетныйДвиженияССубконто

СГРУППИРОВАТЬ ПО
    ХозрасчетныйДвиженияССубконто.СубконтоКт1.НовыйВидАлкоголя,
    ХозрасчетныйДвиженияССубконто.Регистратор.Контрагент.ВидЛицензии,
    ХозрасчетныйДвиженияССубконто.Регистратор
19 web_profiler
 
10.02.14
17:12
это 0.63 сек
20 web_profiler
 
10.02.14
17:13
(13) куда ВЫРАЗИТЬ применить?
21 vicof
 
10.02.14
17:14
(20) на регистратор
22 Адский плющ
 
10.02.14
17:14
Перепиши на таблицу "Обороты", это первое с чего надо начать, имхо.
23 web_profiler
 
10.02.14
17:18
Выразить(ХозрасчетныйДвиженияССубконто.СубконтоКт1.НовыйВидАлкоголя КАК чего???) Число() что-ли?
24 web_profiler
 
10.02.14
17:20
ХЕЛП!!! куда ВЫРАЗИТЬ применить???

ВЫБРАТЬ
    ХозрасчетныйДвиженияССубконто.СубконтоКт1.НовыйВидАлкоголя КАК Код,
    ХозрасчетныйДвиженияССубконто.Регистратор.Контрагент.ВидЛицензии КАК Кому,
    СУММА(ХозрасчетныйДвиженияССубконто.СубконтоКт1.Емкость * ХозрасчетныйДвиженияССубконто.КоличествоКт / 1000) КАК ОбъемРасход
ИЗ
    РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(
            &НачалоПериода,
            &КонецПериода,
            СчетКт = &СчетКт
                И СубконтоКт1.НовыйВидАлкоголя = &Код,
            ,
            ) КАК ХозрасчетныйДвиженияССубконто

СГРУППИРОВАТЬ ПО
    ХозрасчетныйДвиженияССубконто.СубконтоКт1.НовыйВидАлкоголя,
    ХозрасчетныйДвиженияССубконто.Регистратор.Контрагент.ВидЛицензии
25 Yea-Yea
 
10.02.14
17:21
условия в параметры виртуальной таблицы, а "СубконтоКт1.НовыйВидАлкоголя = &Код" заменить предварительным получением списка значений субконто по условию
26 web_profiler
 
10.02.14
17:23
ВЫРАЗИТЬ(ХозрасчетныйДвиженияССубконто.Регистратор.Контрагент.ВидЛицензии КАК СТРОКА(10)) КАК Кому

процес не ускорило
27 vicof
 
10.02.14
17:23
(24) Чо кричишь, как маленький? в (21) все написано
28 web_profiler
 
10.02.14
17:24
(27) сделал (26)
29 vicof
 
10.02.14
17:25
(26) А ты почитать что-нибудь пробовал про оптимизацию? Про составные типы, например.
30 vicof
 
10.02.14
17:25
+(29) или надо разжевать и в рот положить?
31 web_profiler
 
10.02.14
17:26
(30) :) если не трудно
32 H A D G E H O G s
 
10.02.14
17:26
СУММА(ХозрасчетныйДвиженияССубконто.СубконтоКт1.Емкость * ХозрасчетныйДвиженияССубконто.КоличествоКт / 1000) КАК ОбъемРасход

на

СУММА(ВЫРАЗИТЬ(ХозрасчетныйДвиженияССубконто.СубконтоКт1 как Справочник.Номенклатура).Емкость * ХозрасчетныйДвиженияССубконто.КоличествоКт / 1000) КАК ОбъемРасход
33 vicof
 
10.02.14
17:28
(32) там еще регистратор есть
34 vicof
 
10.02.14
17:29
(32) Кстати, так можно не писать, а в виртуальной таблице наложить условие на субконто
35 H A D G E H O G s
 
10.02.14
17:30
(33) Там их может быть много разных. Я же не знаю че там за жесть алкогольная у автора.
36 H A D G E H O G s
 
10.02.14
17:30
(34) Я знаю. Автор просил ВЫРАЗИТЬ()
37 Лефмихалыч
 
10.02.14
17:31
этот запрос надо еще в цикл засунуть.
Для верности.
38 web_profiler
 
10.02.14
17:32
ну че вы все меня обс... те? ичимся я
39 web_profiler
 
10.02.14
17:33
(34) а как в виртуальной таблице наложить условие на субконто?
40 web_profiler
 
10.02.14
17:33
ИЗ
    РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(
            &НачалоПериода,
            &КонецПериода,
            СчетКт = &СчетКт
                И СубконтоКт1.НовыйВидАлкоголя = &Код,
            ,
            ) КАК ХозрасчетныйДвиженияССубконто
41 vicof
 
10.02.14
17:34
(40) 3000р. и расскажу
42 web_profiler
 
10.02.14
17:35
Да кстати - никакого ускорения = 0.644 сек

ВЫБРАТЬ
    ХозрасчетныйДвиженияССубконто.СубконтоКт1.НовыйВидАлкоголя КАК Код,
    ВЫРАЗИТЬ(ХозрасчетныйДвиженияССубконто.Регистратор.Контрагент.ВидЛицензии КАК СТРОКА(10)) КАК Кому,
    СУММА(ВЫРАЗИТЬ(ХозрасчетныйДвиженияССубконто.СубконтоКт1 КАК Справочник.Номенклатура).Емкость * ХозрасчетныйДвиженияССубконто.КоличествоКт / 1000) КАК ОбъемРасход
ИЗ
    РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(
            &НачалоПериода,
            &КонецПериода,
            СчетКт = &СчетКт
                И СубконтоКт1.НовыйВидАлкоголя = &Код,
            ,
            ) КАК ХозрасчетныйДвиженияССубконто

СГРУППИРОВАТЬ ПО
    ХозрасчетныйДвиженияССубконто.СубконтоКт1.НовыйВидАлкоголя,
    ВЫРАЗИТЬ(ХозрасчетныйДвиженияССубконто.Регистратор.Контрагент.ВидЛицензии КАК СТРОКА(10))
43 web_profiler
 
10.02.14
17:36
видимо - дальше уже некуда... :(
44 GROOVY
 
10.02.14
17:37
(ушел писать курс по запросам...)
45 Адский плющ
 
10.02.14
17:37
(ушел в запой...)
46 Yea-Yea
 
10.02.14
17:39
(42) ужаснах
47 vicof
 
10.02.14
17:39
(44) Еще один?
48 GROOVY
 
10.02.14
17:40
(47) Да, с свистелками и перделками. С скриншотами профайлера и объяснениям почему "Субконто1." и "Ссылка." это ацкий пистец.
49 Лефмихалыч
 
10.02.14
17:41
(42) почитай мануал. Хоть какой-нибудь. Хотя бы курсы какие-нить укради хотя бы
50 wms
 
10.02.14
17:42
тут косяки не делай много точек
ХозрасчетныйДвиженияССубконто.Регистратор.Контрагент.ВидЛицензии
вложенный сделай на отбор нужных контрагентов
51 wms
 
10.02.14
17:42
или пакетный
52 Лефмихалыч
 
10.02.14
17:45
(48) зачем?.. Автороподобные нубы его не осилят - инфа 146%
53 GROOVY
 
10.02.14
17:45
(52) В ветках можно будет на него ссылаться...
54 Yea-Yea
 
10.02.14
17:47
ВЫБРАТЬ
    Номенклатура.Ссылка КАК Субконто
ПОМЕСТИТЬ ТаблицаСубконто
ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ
    ИСТИНА

ИНДЕКСИРОВАТЬ ПО
    Субконто
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ХозрасчетныйДвиженияССубконто.Регистратор КАК Регистратор,
    ХозрасчетныйДвиженияССубконто.СубконтоКт1 КАК Субконто
ПОМЕСТИТЬ ИтоговаяТаблица
ИЗ
    РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(
            &НачалоПериода,
            &ОкончаниеПериода,
            СчетКт = &СчетКт
                И СубконтоКт1 В
                    (ВЫБРАТЬ
                        ТаблицаСубконто.Субконто
                    ИЗ
                        ТаблицаСубконто КАК ТаблицаСубконто),
            ,
            ) КАК ХозрасчетныйДвиженияССубконто
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ИтоговаяТаблица.Регистратор,
    ИтоговаяТаблица.Субконто
ИЗ
    ИтоговаяТаблица КАК ИтоговаяТаблица
55 Yea-Yea
 
10.02.14
17:48
как-то так. думаю головы хватит чтобы свои хотелки на костяк накрутить
56 Лефмихалыч
 
10.02.14
17:49
(54) отбор по видам субконто где?
57 H A D G E H O G s
 
10.02.14
17:49
(55) Херово
58 H A D G E H O G s
 
10.02.14
17:50
3 вт не нужна, в первой - добавить отбор по коду АП, и неуверен, насчет индексирования.
59 Лефмихалыч
 
10.02.14
17:51
+(56) йяпромазал - в движениях с субконто нет такого параметра
60 GROOVY
 
10.02.14
17:52
(59) Мне так не понятно, нафига ДвиженияССубконто выбирать, если есть обороты?
61 Yea-Yea
 
10.02.14
17:52
(58) там "ГДЕ ИСТИНА" - это как раз место для условия автора.
а третий запрос - для группировок и суммирования по полям через точку
62 H A D G E H O G s
 
10.02.14
17:54
(61) Где там суммирование?
63 Лефмихалыч
 
10.02.14
17:54
+(58) индекс нафиг не нужен, т.к. в этой таблице не может быть много элементов и в ней ни кто ничего не ищет.
И ВЫРАЗИТЬ субконто все равно надо

(60) ага. То есть вопрос, зачем эти двнные из БУ получать и почему не из отдельного регистра накопления, специально под это заточенного, тебя не волнует? :)
64 H A D G E H O G s
 
10.02.14
17:55
(63) Тоесть, типовые невсчет?
65 Yea-Yea
 
10.02.14
17:56
(62) в сабже есть
66 Лефмихалыч
 
10.02.14
17:57
(64) типовые на кол. От одного малюсенького регистра ни кто не умрет
67 H A D G E H O G s
 
10.02.14
17:58
(65) Его можно выполнить в 2 запросе.
68 GROOVY
 
10.02.14
17:58
(66) +1
69 Yea-Yea
 
10.02.14
18:01
(67) я предпочитаю разбивать.
70 Yea-Yea
 
10.02.14
18:04
кстати да. хозрасчетный не для этого придуман. так что +1 к дополнительному регистру
71 web_profiler
 
10.02.14
18:07
Павел, играем дальше ..

ВЫБРАТЬ
    ВЫРАЗИТЬ(ХозрасчетныйОстаткиИОбороты.Субконто1 КАК Справочник.Номенклатура).НовыйВидАлкоголя КАК Код,
    СУММА(ХозрасчетныйОстаткиИОбороты.КоличествоНачальныйОстаток * ВЫРАЗИТЬ(ХозрасчетныйОстаткиИОбороты.Субконто1 КАК Справочник.Номенклатура).Емкость / 1000) КАК НачОстаток,
    СУММА(ХозрасчетныйОстаткиИОбороты.КоличествоОборотДт * ВЫРАЗИТЬ(ХозрасчетныйОстаткиИОбороты.Субконто1 КАК Справочник.Номенклатура).Емкость / 1000) КАК Приход,
    СУММА(ХозрасчетныйОстаткиИОбороты.КоличествоОборотКт * ХозрасчетныйОстаткиИОбороты.Субконто1.Емкость / 1000) КАК Расход,
    СУММА(ХозрасчетныйОстаткиИОбороты.КоличествоКонечныйОстаток * ХозрасчетныйОстаткиИОбороты.Субконто1.Емкость / 1000) КАК КонОстаток
ИЗ
    РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Авто, , Счет.Ссылка = &Ссылка, , Субконто1.НовыйВидАлкоголя = &Кодик) КАК ХозрасчетныйОстаткиИОбороты

СГРУППИРОВАТЬ ПО
    ВЫРАЗИТЬ(ХозрасчетныйОстаткиИОбороты.Субконто1 КАК Справочник.Номенклатура).НовыйВидАлкоголя

УПОРЯДОЧИТЬ ПО
    Код
72 web_profiler
 
10.02.14
18:08
2,3 сек выполнение и тут уже есть обороты
73 web_profiler
 
10.02.14
18:09
а че значит Субконто1 и Ссылка - плохо???
74 web_profiler
 
10.02.14
18:09
(48) ???
75 hhhh
 
10.02.14
18:12
(71) ну самую главную ВЫРАЗИТЬ забыл? ХозрасчетныйОстаткиИОбороты.Субконто1.Емкость
76 web_profiler
 
10.02.14
18:27
во я дибил!!!
Счет.Ссылка = &Ссылка  жесть какая, как я мог так писать???

Счет = &Ссылка  - увеличение скорости с 2.3 до 0.6 сек
77 GROOVY
 
10.02.14
18:28
web_profiler, не я ушел методичку дописывать к курсу по запросам. Играйте без меня.