Запрос по вт с разным периодом

1. aalu14 08.04.24 15:34 Сейчас в теме
Добрый день! Подскажите, пожалуйста, с запросом. Проблема с вт "ЛимитыС", по ней обираю записи с периодом НАЧАЛОПЕРИОДА(&Сегодня, День), НАЧАЛОПЕРИОДА(&Сегодня, Неделя), НАЧАЛОПЕРИОДА(&Сегодня, Месяц).

Если соединять по 1 параметру, например день, то значение количества записей в регистре корректное, если добавлять еще соединение с параметром неделя, то дню присваивается значение недели, если добавить еще соединение по месяцу, то дню и недели присваивается значение месяца. Не могу понять, в чем дело. Заранее спасибо!

Вот так ок:
ВЫБРАТЬ
	СотрудникПоДоговоруСрезПоследних.Договор КАК Договор
ПОМЕСТИТЬ Договоры
ИЗ
	РегистрСведений.СотрудникПоДоговору.СрезПоследних(, ) КАК СотрудникПоДоговоруСрезПоследних
ГДЕ
	СотрудникПоДоговоруСрезПоследних.Взыскатель = &Сотрудник

ИНДЕКСИРОВАТЬ ПО
	Договор
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВЫРАЗИТЬ(ХозрасчетныйОстатки.Субконто2 КАК Справочник.ДоговорыКонтрагентов) КАК Договор,
	СУММА(ХозрасчетныйОстатки.СуммаОстатокДт) КАК СуммаОстатокДт
ПОМЕСТИТЬ Долги
ИЗ
	РегистрБухгалтерии.Хозрасчетный.Остатки(
			,
			Счет.Код = "58.03.1"
				ИЛИ Счет.Код = "76.12"
				ИЛИ Счет.Код = "ДЦ.01"
				ИЛИ Счет.Код = "ДЦ.02",
			,
			ВЫРАЗИТЬ(Субконто2 КАК Справочник.ДоговорыКонтрагентов) В
				(ВЫБРАТЬ
					Договоры.Договор
				ИЗ
					Договоры КАК Договоры)) КАК ХозрасчетныйОстатки
ГДЕ
	ХозрасчетныйОстатки.СуммаОстатокДт > 0

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

ИНДЕКСИРОВАТЬ ПО
	Договор
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ЛимитСообщений.Период КАК Период,
	ЛимитСообщений.Договор КАК Договор,
	ЛимитСообщений.УИД
ПОМЕСТИТЬ ЛимитыС
ИЗ
	РегистрСведений.ЛимитСообщений КАК ЛимитСообщений
ГДЕ
	ЛимитСообщений.Период >= НАЧАЛОПЕРИОДА(&Сегодня, МЕСЯЦ)
	И ЛимитСообщений.Договор В
			(ВЫБРАТЬ
				Договоры.Договор КАК Договор
			ИЗ
				Долги КАК Договоры)

ИНДЕКСИРОВАТЬ ПО
	Договор,
	Период
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	АнкетаКлиента.Договор,
	КОЛИЧЕСТВО(ЛимитыНеделя.УИД) КАК ЛНеделя
ИЗ
	Документ.АнкетаКлиента КАК АнкетаКлиента
		ЛЕВОЕ СОЕДИНЕНИЕ ЛимитыС КАК ЛимитыДень
		ПО АнкетаКлиента.Договор = ЛимитыДень.Договор
			И (ЛимитыДень.Период >= НАЧАЛОПЕРИОДА(&Сегодня, ДЕНЬ))

ГДЕ
	АнкетаКлиента.Договор В
			(ВЫБРАТЬ
				Договоры.Договор КАК Договор
			ИЗ
				Долги КАК Договоры)

СГРУППИРОВАТЬ ПО
	АнкетаКлиента.Договор
Показать



Вот так НЕ ок:
ВЫБРАТЬ
	СотрудникПоДоговоруСрезПоследних.Договор КАК Договор
ПОМЕСТИТЬ Договоры
ИЗ
	РегистрСведений.СотрудникПоДоговору.СрезПоследних(, ) КАК СотрудникПоДоговоруСрезПоследних
ГДЕ
	СотрудникПоДоговоруСрезПоследних.Взыскатель = &Сотрудник

ИНДЕКСИРОВАТЬ ПО
	Договор
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВЫРАЗИТЬ(ХозрасчетныйОстатки.Субконто2 КАК Справочник.ДоговорыКонтрагентов) КАК Договор,
	СУММА(ХозрасчетныйОстатки.СуммаОстатокДт) КАК СуммаОстатокДт
ПОМЕСТИТЬ Долги
ИЗ
	РегистрБухгалтерии.Хозрасчетный.Остатки(
			,
			Счет.Код = "58.03.1"
				ИЛИ Счет.Код = "76.12"
				ИЛИ Счет.Код = "ДЦ.01"
				ИЛИ Счет.Код = "ДЦ.02",
			,
			ВЫРАЗИТЬ(Субконто2 КАК Справочник.ДоговорыКонтрагентов) В
				(ВЫБРАТЬ
					Договоры.Договор
				ИЗ
					Договоры КАК Договоры)) КАК ХозрасчетныйОстатки
ГДЕ
	ХозрасчетныйОстатки.СуммаОстатокДт > 0

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

ИНДЕКСИРОВАТЬ ПО
	Договор
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ЛимитСообщений.Период КАК Период,
	ЛимитСообщений.Договор КАК Договор,
	ЛимитСообщений.УИД
ПОМЕСТИТЬ ЛимитыС
ИЗ
	РегистрСведений.ЛимитСообщений КАК ЛимитСообщений
ГДЕ
	ЛимитСообщений.Период >= НАЧАЛОПЕРИОДА(&Сегодня, МЕСЯЦ)
	И ЛимитСообщений.Договор В
			(ВЫБРАТЬ
				Договоры.Договор КАК Договор
			ИЗ
				Долги КАК Договоры)

ИНДЕКСИРОВАТЬ ПО
	Договор,
	Период
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	АнкетаКлиента.Договор,
	КОЛИЧЕСТВО(ЛимитыДень.УИД) КАК ЛДень,
	КОЛИЧЕСТВО(ЛимитыНеделя.УИД) КАК ЛНеделя
ИЗ
	Документ.АнкетаКлиента КАК АнкетаКлиента
	    ЛЕВОЕ СОЕДИНЕНИЕ ЛимитыС КАК ЛимитыДень
		ПО АнкетаКлиента.Договор = ЛимитыДень.Договор
			И (ЛимитыДень.Период >= НАЧАЛОПЕРИОДА(&Сегодня, ДЕНЬ))
	    ЛЕВОЕ СОЕДИНЕНИЕ ЛимитыС КАК ЛимитыНеделя
		ПО АнкетаКлиента.Договор = ЛимитыНеделя.Договор
			И (ЛимитыНеделя.Период >= НАЧАЛОПЕРИОДА(&Сегодня, Неделя))
		
ГДЕ
	АнкетаКлиента.Договор В
			(ВЫБРАТЬ
				Договоры.Договор КАК Договор
			ИЗ
				Долги КАК Договоры)

СГРУППИРОВАТЬ ПО
	АнкетаКлиента.Договор
Показать



Необходимо связать большой запрос со списком договоров с количествами записей в регистре. (По договору, количества записей за день, неделю, месяц)
По теме из базы знаний
Найденные решения
2. nomad_irk 76 08.04.24 16:22 Сейчас в теме
(1) Если правильно понял суть проблемы и хранение данных в РегистрСведений.ЛимитСообщений, то необходимо последний пакет в запросе переделать в такой вид

ВЫБРАТЬ
    АнкетаКлиента.Договор,
    КОЛИЧЕСТВО(ЛимитыДень.УИД) КАК ЛДень,
    0 КАК ЛНеделя,
    0 КАК ЛМесяц
ПОМЕСТИТЬ ВТОбщиеДанные
ИЗ
    Документ.АнкетаКлиента КАК АнкетаКлиента
        ЛЕВОЕ СОЕДИНЕНИЕ ЛимитыС КАК ЛимитыДень
        ПО АнкетаКлиента.Договор = ЛимитыДень.Договор
            И (ЛимитыДень.Период >= НАЧАЛОПЕРИОДА(&Сегодня, ДЕНЬ))
ГДЕ
    АнкетаКлиента.Договор В
            (ВЫБРАТЬ
                Договоры.Договор КАК Договор
            ИЗ
                Долги КАК Договоры)
СГРУППИРОВАТЬ ПО
       АнкетаКлиента.Договор

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    АнкетаКлиента.Договор,
    0,
    КОЛИЧЕСТВО(ЛимитыНеделя.УИД),
    0
ИЗ
    Документ.АнкетаКлиента КАК АнкетаКлиента
        ЛЕВОЕ СОЕДИНЕНИЕ ЛимитыС КАК ЛимитыНеделя
        ПО АнкетаКлиента.Договор = ЛимитыНеделя.Договор
            И (ЛимитыНеделя.Период >= НАЧАЛОПЕРИОДА(&Сегодня, Неделя))
ГДЕ
    АнкетаКлиента.Договор В
            (ВЫБРАТЬ
                Договоры.Договор КАК Договор
            ИЗ
                Долги КАК Договоры)
СГРУППИРОВАТЬ ПО
       АнкетаКлиента.Договор

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    АнкетаКлиента.Договор,
    0,
    0,
    КОЛИЧЕСТВО(ЛимитыМесяц.УИД)
ИЗ
    Документ.АнкетаКлиента КАК АнкетаКлиента
        ЛЕВОЕ СОЕДИНЕНИЕ ЛимитыС КАК ЛимитыМесяц
        ПО АнкетаКлиента.Договор = ЛимитыМесяц.Договор
            И (ЛимитыМесяц.Период >= НАЧАЛОПЕРИОДА(&Сегодня, Месяц))
ГДЕ
    АнкетаКлиента.Договор В
            (ВЫБРАТЬ
                Договоры.Договор КАК Договор
            ИЗ
                Долги КАК Договоры)
СГРУППИРОВАТЬ ПО
       АнкетаКлиента.Договор
;
ВЫБРАТЬ
       Договор,
       СУММА(ЛДень) КАК ЛДень,
       СУММА(ЛНеделя) КАК ЛНеделя,
       СУММА(ЛМесяц) КАК ЛМесяц
ИЗ
        ВТОбщиеДанные
СГРУППИРОВАТЬ ПО
        Договор
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. nomad_irk 76 08.04.24 16:22 Сейчас в теме
(1) Если правильно понял суть проблемы и хранение данных в РегистрСведений.ЛимитСообщений, то необходимо последний пакет в запросе переделать в такой вид

ВЫБРАТЬ
    АнкетаКлиента.Договор,
    КОЛИЧЕСТВО(ЛимитыДень.УИД) КАК ЛДень,
    0 КАК ЛНеделя,
    0 КАК ЛМесяц
ПОМЕСТИТЬ ВТОбщиеДанные
ИЗ
    Документ.АнкетаКлиента КАК АнкетаКлиента
        ЛЕВОЕ СОЕДИНЕНИЕ ЛимитыС КАК ЛимитыДень
        ПО АнкетаКлиента.Договор = ЛимитыДень.Договор
            И (ЛимитыДень.Период >= НАЧАЛОПЕРИОДА(&Сегодня, ДЕНЬ))
ГДЕ
    АнкетаКлиента.Договор В
            (ВЫБРАТЬ
                Договоры.Договор КАК Договор
            ИЗ
                Долги КАК Договоры)
СГРУППИРОВАТЬ ПО
       АнкетаКлиента.Договор

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    АнкетаКлиента.Договор,
    0,
    КОЛИЧЕСТВО(ЛимитыНеделя.УИД),
    0
ИЗ
    Документ.АнкетаКлиента КАК АнкетаКлиента
        ЛЕВОЕ СОЕДИНЕНИЕ ЛимитыС КАК ЛимитыНеделя
        ПО АнкетаКлиента.Договор = ЛимитыНеделя.Договор
            И (ЛимитыНеделя.Период >= НАЧАЛОПЕРИОДА(&Сегодня, Неделя))
ГДЕ
    АнкетаКлиента.Договор В
            (ВЫБРАТЬ
                Договоры.Договор КАК Договор
            ИЗ
                Долги КАК Договоры)
СГРУППИРОВАТЬ ПО
       АнкетаКлиента.Договор

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    АнкетаКлиента.Договор,
    0,
    0,
    КОЛИЧЕСТВО(ЛимитыМесяц.УИД)
ИЗ
    Документ.АнкетаКлиента КАК АнкетаКлиента
        ЛЕВОЕ СОЕДИНЕНИЕ ЛимитыС КАК ЛимитыМесяц
        ПО АнкетаКлиента.Договор = ЛимитыМесяц.Договор
            И (ЛимитыМесяц.Период >= НАЧАЛОПЕРИОДА(&Сегодня, Месяц))
ГДЕ
    АнкетаКлиента.Договор В
            (ВЫБРАТЬ
                Договоры.Договор КАК Договор
            ИЗ
                Долги КАК Договоры)
СГРУППИРОВАТЬ ПО
       АнкетаКлиента.Договор
;
ВЫБРАТЬ
       Договор,
       СУММА(ЛДень) КАК ЛДень,
       СУММА(ЛНеделя) КАК ЛНеделя,
       СУММА(ЛМесяц) КАК ЛМесяц
ИЗ
        ВТОбщиеДанные
СГРУППИРОВАТЬ ПО
        Договор
Показать
3. aalu14 08.04.24 16:46 Сейчас в теме
(2) Спасибо! Странно, что не срабатывает НАЧАЛОПЕРИОДА(&Сегодня, Месяц), хотя если передать дату параметром, то значения корректны.
4. nomad_irk 76 08.04.24 16:52 Сейчас в теме
(3)оно срабатывает, но так как у вас соединение 3 таблиц, то результатом получается декартово произведение
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот