Имя: Пароль:
1C
1С v8
СКД, как обойти оптимизатор
, ,
0 Veronikin
 
22.02.21
00:17
Подскажите, как обойти оптимизатор?
Простой отчет на СКД, результат - номенклатурная группа и две даты.
Реализован как две таблицы по регистру бухгалтерии, отличаются только датами начала и конца периода, из первой таблицы беру одну дату, из второй - другую. Если смотреть запрос в консоли - все выводится верно, а в СКД даты одинаковые. Как можно обойти в таком случае оптимизатор СКД?
1 Veronikin
 
22.02.21
00:21
(0) Текст запроса:
ВЫБРАТЬ
    ХозрасчетныйОборотыДтКт.СубконтоДт1 КАК Шифр,
    МАКСИМУМ(КОНЕЦПЕРИОДА(ХозрасчетныйОборотыДтКт.Период, МЕСЯЦ)) КАК ДатаКонецСписания,
    МАКСИМУМ(КОНЕЦПЕРИОДА(ЕСТЬNULL(ХозрасчетныйОборотыДтКт1.Период, ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)), МЕСЯЦ)) КАК ДатаВекторСписания,
    ЛОЖЬ КАК НЗП,
    СУММА(ХозрасчетныйОборотыДтКт.СуммаОборот) КАК СуммаОборот
ПОМЕСТИТЬ ШифрыНеНЗП
ИЗ
    РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(&НачалоПериода, &КонецПериода, Месяц, СчетДт В ИЕРАРХИИ (&Счет90), , СчетКт В ИЕРАРХИИ (&Счет20), &ВидСубконтоНоменклатурныеГруппы, ) КАК ХозрасчетныйОборотыДтКт
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(, &НачалоПериода, Месяц, СчетДт В ИЕРАРХИИ (&Счет90), , СчетКт В ИЕРАРХИИ (&Счет20), &ВидСубконтоНоменклатурныеГруппы, ) КАК ХозрасчетныйОборотыДтКт1
        ПО (ХозрасчетныйОборотыДтКт.СубконтоДт1 = ХозрасчетныйОборотыДтКт1.СубконтоДт1)

СГРУППИРОВАТЬ ПО
    ХозрасчетныйОборотыДтКт.СубконтоДт1,
    ХозрасчетныйОборотыДтКт.СубконтоДт1
;
2 RomanYS
 
22.02.21
00:26
Параметры периода возьми в фигурные скобки
3 Veronikin
 
22.02.21
00:50
(2) Поставила, в результате вторая дата для всех НГ null

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

СГРУППИРОВАТЬ ПО
    ХозрасчетныйОборотыДтКт.СубконтоДт1
4 hhhh
 
22.02.21
00:56
(3) не всё взяла в фигурные скобки. Пустую дпту зачем фигачишь туда? И без фигурных скобок.
5 Veronikin
 
22.02.21
01:05
(4) Мне нужно первую дату взять в заданном периода, а вторую (из второй таблицы) - с начала ведения учета по дату начала периода
6 PR
 
22.02.21
01:08
(3)
ВЫБРАТЬ
    ХозрасчетныйОборотыДтКт.СубконтоДт1 КАК Шифр,
    МАКСИМУМ(КОНЕЦПЕРИОДА(ХозрасчетныйОборотыДтКт.Период, МЕСЯЦ)) КАК ДатаКонецСписания,
    МАКСИМУМ(КОНЕЦПЕРИОДА(ЕСТЬNULL(ХозрасчетныйОборотыДтКт1.Период, ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)), МЕСЯЦ)) КАК ДатаВекторСписания,
    ЛОЖЬ КАК НЗП,
    СУММА(ХозрасчетныйОборотыДтКт.СуммаОборот) КАК СуммаОборот
ПОМЕСТИТЬ ШифрыНеНЗП
ИЗ
    РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(&НачалоПериода, &КонецПериода, Месяц, СчетДт В ИЕРАРХИИ (&Счет90), , СчетКт В ИЕРАРХИИ (&Счет20), &ВидСубконтоНоменклатурныеГруппы, ) КАК ХозрасчетныйОборотыДтКт
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт({&ДаНахренБыМнеНеСдаласьЭтаДатаПустьВсегдаБудетПустая}, &НачалоПериода, Месяц, СчетДт В ИЕРАРХИИ (&Счет90), , СчетКт В ИЕРАРХИИ (&Счет20), &ВидСубконтоНоменклатурныеГруппы, ) КАК ХозрасчетныйОборотыДтКт1
        ПО (ХозрасчетныйОборотыДтКт.СубконтоДт1 = ХозрасчетныйОборотыДтКт1.СубконтоДт1)

СГРУППИРОВАТЬ ПО
    ХозрасчетныйОборотыДтКт.СубконтоДт1,
    ХозрасчетныйОборотыДтКт.СубконтоДт1
;
7 PR
 
22.02.21
01:11
+(6) Лучше даже так

ВЫБРАТЬ
    ХозрасчетныйОборотыДтКт.СубконтоДт1 КАК Шифр,
    МАКСИМУМ(КОНЕЦПЕРИОДА(ХозрасчетныйОборотыДтКт.Период, МЕСЯЦ)) КАК ДатаКонецСписания,
    МАКСИМУМ(КОНЕЦПЕРИОДА(ЕСТЬNULL(ХозрасчетныйОборотыДтКт1.Период, ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)), МЕСЯЦ)) КАК ДатаВекторСписания,
    ЛОЖЬ КАК НЗП,
    СУММА(ХозрасчетныйОборотыДтКт.СуммаОборот) КАК СуммаОборот
ПОМЕСТИТЬ ШифрыНеНЗП
ИЗ
    РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(&НачалоПериода, &КонецПериода, Месяц, СчетДт В ИЕРАРХИИ (&Счет90), , СчетКт В ИЕРАРХИИ (&Счет20), &ВидСубконтоНоменклатурныеГруппы, ) КАК ХозрасчетныйОборотыДтКт
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт({&ДаНахренБыМнеНеСдаласьЭтаДатаПустьВсегдаБудетПустая}, {&НачалоПериода}, Месяц, СчетДт В ИЕРАРХИИ (&Счет90), , СчетКт В ИЕРАРХИИ (&Счет20), &ВидСубконтоНоменклатурныеГруппы, ) КАК ХозрасчетныйОборотыДтКт1
        ПО (ХозрасчетныйОборотыДтКт.СубконтоДт1 = ХозрасчетныйОборотыДтКт1.СубконтоДт1)

СГРУППИРОВАТЬ ПО
    ХозрасчетныйОборотыДтКт.СубконтоДт1,
    ХозрасчетныйОборотыДтКт.СубконтоДт1
;
8 Veronikin
 
22.02.21
01:13
(6) одинаковые даты выдает, как будто не видит, что у второй таблицы другой период стоит
9 PR
 
22.02.21
01:16
+(8) Если уж совсем ничего не получится, точно получится вариант с четырьмя разными параметрами

ВЫБРАТЬ
    ХозрасчетныйОборотыДтКт.СубконтоДт1 КАК Шифр,
    МАКСИМУМ(КОНЕЦПЕРИОДА(ХозрасчетныйОборотыДтКт.Период, МЕСЯЦ)) КАК ДатаКонецСписания,
    МАКСИМУМ(КОНЕЦПЕРИОДА(ЕСТЬNULL(ХозрасчетныйОборотыДтКт1.Период, ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)), МЕСЯЦ)) КАК ДатаВекторСписания,
    ЛОЖЬ КАК НЗП,
    СУММА(ХозрасчетныйОборотыДтКт.СуммаОборот) КАК СуммаОборот
ПОМЕСТИТЬ ШифрыНеНЗП
ИЗ
    РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(&Дата1, &Дата2, Месяц, СчетДт В ИЕРАРХИИ (&Счет90), , СчетКт В ИЕРАРХИИ (&Счет20), &ВидСубконтоНоменклатурныеГруппы, ) КАК ХозрасчетныйОборотыДтКт
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт({&Дата3}, {&Дата4}, Месяц, СчетДт В ИЕРАРХИИ (&Счет90), , СчетКт В ИЕРАРХИИ (&Счет20), &ВидСубконтоНоменклатурныеГруппы, ) КАК ХозрасчетныйОборотыДтКт1
        ПО (ХозрасчетныйОборотыДтКт.СубконтоДт1 = ХозрасчетныйОборотыДтКт1.СубконтоДт1)

СГРУППИРОВАТЬ ПО
    ХозрасчетныйОборотыДтКт.СубконтоДт1,
    ХозрасчетныйОборотыДтКт.СубконтоДт1
;
10 Veronikin
 
22.02.21
01:21
(9) не работает, опять одинаковые даты(( причем в консоли запросов все верно выводит
11 PR
 
22.02.21
01:26
+(9) Имелось в виду, что &Дата1 и &Дата2 тоже в фигурных скобках, но это не принципиально
12 PR
 
22.02.21
01:27
(10) Ну хрен знает, у меня так работает, видимо, не судьба
13 vicof
 
22.02.21
01:48
Можно отключить автозаполнение, и о, чудо, все будет работать, как в консоли.
14 Veronikin
 
22.02.21
02:07
(13) да, нашла, вот здесь как раз мой случай((
https://career.i-neti.ru/flag-avtozapolnenie-skd/
15 Veronikin
 
22.02.21
02:08
(13) сделала так - убрала стандартный период из отчета, даты прописала условно как Дата1,2,3,4 - все работает правильно. Но период конечно кривой
16 Veronikin
 
22.02.21
02:13
(13) интересно - если я убираю вообще из отчета СтандартныйПериод, а период задаю как Дата 1,2,3,4 - все работает. Стоит хоть в одной таблице подставить НачалоПериода и КонецПериода - сбивается и показывает одну и ту же дату((
17 Veronikin
 
22.02.21
02:28
(16) еще интереснее - если Дата1,2,3,4 определить через стандартный период (не используя НачалоПериода, КонецПериода) - все работает))
18 PR
 
22.02.21
15:21
(17) Капец
НачалоПериода и КонецПериода — это стандартные предопределенные параметры, и их две пары, в каждой таблице есть одни и те же НачалоПериода и КонецПериода
Если ты их переопределяешь на Дата 1,2,3,4, то по сути у тебя получается четыре параметра вместо двух
В чем магия-то?