Имя: Пароль:
1C
1С v8
Проверка оптимальности запроса
,
0 happysan
 
31.01.16
12:56
В любой типовой бухии создать отчет в СКД показывающий в разрезе месяцев количество документов использовавших субконтно «контрагент». Использование определяем по присутствию в проводках хозрасчетного бух регистра.
Отчет всегда должен формироваться  только за 2013 год, иметь группировку по месяцам и выводить все 12 строк с месяцами даже если ресурс строки равен 0(если в этом месяце субконтно контрагент не использовалась ни в одном из документов).


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

СГРУППИРОВАТЬ ПО
    НАЧАЛОПЕРИОДА(ХозрасчетныйДвиженияССубконто.Период, МЕСЯЦ)

УПОРЯДОЧИТЬ ПО
    Месяц

Параметры "НачалоПериода" и "КонецПериода" заполняются в СКД.

Вопросы: 1. Оптимален ли данный запрос или его ещё можно оптимизировать 2. как? 3. и обосновать подход.
2 happysan
 
31.01.16
13:09
Я уже больше года там работаю), просто на днях вспомнили эту задачу с коллегами в неформальной обстановке и пошли дискуссии по поводу оптимальности этого запроса...
3 Записьдампа
 
31.01.16
13:11
(2) А, то есть нас даже на работу не возьмут...

А на предмет чего оптимизация-то? Время там, расход памяти, нагрузка на диски?
4 Записьдампа
 
31.01.16
13:14
... на файловой базе, на MS-SQL, с учетом его оптимизатора...
5 happysan
 
31.01.16
13:14
(3) я, думаю, время имелось в виду. Но сути претензий я не добился претензий, наверное по двум причинам: это было в ресторане в пятницу) и прошло больше года, но я сейчас "нарыл" этот отчет и хочу подискутировать.
6 Записьдампа
 
31.01.16
13:16
(5) Зачем?
7 happysan
 
31.01.16
13:17
(6) спортивный интерес
8 happysan
 
31.01.16
13:23
Значит не "докопаешься"?
9 Записьдампа
 
31.01.16
13:25
(8) Докапываться в воскресенье до пьяной задачи годовалой данности из спортивного интереса? Оно мне надо?
10 happysan
 
31.01.16
13:28
(9)Слушай, ты до кучи всего написал уже, но всё не по существу. Не надо - проходи мимо!
11 Записьдампа
 
31.01.16
13:32
(10) Прости, что не оправдал твоих ожиданий. Печеньку будешь?
12 happysan
 
31.01.16
13:40
Печеньками занимаешься? Так и думал, что не 1сник
13 Записьдампа
 
31.01.16
13:51
(12) Не надо комплиментов, пожалуйста. Я краснею и смущаюсь.
14 happysan
 
31.01.16
14:02
(13) И правильно делаешь.
15 asady
 
01.02.16
08:06
(0) особо не вникая - я бы ИЛИ из ПВТ исключил - заменив на три юниона и вместо "сгруппировать" дистинкт
16 Defender aka LINN
 
01.02.16
08:16
(0) "Отчет всегда должен формироваться  только за 2013 год"
Сформируй 1 раз, сохрани и рассылай при необходимости. Как тебе такая оптимизация?
17 cw014
 
01.02.16
08:32
(16) +100500
18 cw014
 
01.02.16
08:33
Товарищ, люди тут с реальными проблемами обращаются, ветки по 100 сообщений создают, ибо надо решить задачу. А ты - "спортивный интерес". Иди работай, как появится действительно требуемая задача - пиши
19 НЕА123
 
01.02.16
09:17
(0)
не надо РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто.
юзай РегистрБухгалтерии.Хозрасчетный.Субконто
20 ViSo76
 
01.02.16
09:24
(19) Согласен. Топикастр походу вообще не отдупляет из чего виртуальная таблица строится.
21 patria0muerte
 
01.02.16
09:27
Группировать вроде не обязательно в запросе. Можно же в СКД дополнение периода заюзать.
22 ILM
 
гуру
01.02.16
09:36
Тухлый запрос...
Я бы объединил три запроса по субконто и ВЫРАЗИТЬ бы сделал обязательно.
23 patria0muerte
 
01.02.16
09:45
(22) А Выразить тут накой? Обращений через точку же нет. Просто считаются регистраторы.
24 ViSo76
 
01.02.16
10:20
(22) Лучше жевать чем говорить. Загляните в таблицу РегистрБухгалтерии.Управленческий.Субконто. В ней нет указания какого уровня субконто данные.
25 happysan
 
01.02.16
10:49
Самый быстрый вариант:

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

СГРУППИРОВАТЬ ПО
    НАЧАЛОПЕРИОДА(ХозрасчетныйСубконто.Период, МЕСЯЦ)

УПОРЯДОЧИТЬ ПО
    Месяц
26 happysan
 
01.02.16
10:51
Выяснил ещё вчера, сравнив два варианта, а сегодня был прав (19).