Как объединить строки СКД

1. HAKv1N 26.08.26 13:58 Сейчас в теме
Добрый день. Столкнулся с проблемой. Мне нужно по каждому месяцу (которые выбрал пользователь) получать актуальные документы изменения и получать сумму платежа, это я все сделал. Но также нужно для последней строки документа изменения рассчитывать по другому сумму, "Последняя сумма рассчитывается как разность между суммой из графика и рассчитанными суммами платежей по документу." Проблема в том, что когда я делаю расчет для последней строки через СКД, то идет раздвоение строк, т.к. на один предмет аренды может быть несколько документов

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

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

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	МАКСИМУМ(ИзменениеУсловийАрендыПредметыАренды.Ссылка) КАК Ссылка,
	ИзменениеУсловийАрендыПредметыАренды.ПредметАренды КАК ПредметЛизинга,
	ИзменениеУсловийАрендыПредметыАренды.Ссылка.Дата КАК Дата
ПОМЕСТИТЬ ВТ_СписокИзменений
ИЗ
	ВТ_СписокЗаписей КАК ВТ_СписокЗаписей
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ИзменениеУсловийАренды.ПредметыАренды КАК ИзменениеУсловийАрендыПредметыАренды
		ПО ВТ_СписокЗаписей.ПредметЛизинга = ИзменениеУсловийАрендыПредметыАренды.ПредметАренды
			И ВТ_СписокЗаписей.Договор = ИзменениеУсловийАрендыПредметыАренды.Ссылка.ДоговорКонтрагента
			И (НЕ ВТ_СписокЗаписей.СуммаВзаиморасчетовБУ ЕСТЬ NULL)

СГРУППИРОВАТЬ ПО
	ИзменениеУсловийАрендыПредметыАренды.ПредметАренды,
	ИзменениеУсловийАрендыПредметыАренды.Ссылка.Дата
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ДокиТест.Ссылка КАК Ссылка,
	ВТ_СписокИзменений.ПредметЛизинга КАК ПредметЛизинга,
	НАЧАЛОПЕРИОДА(ИзменениеУсловийАрендыГрафикПлатежей.ДатаПлатежа, МЕСЯЦ) КАК ДатаПлатежа,
	ИзменениеУсловийАрендыГрафикПлатежей.СуммаПлатежа / КоличествоПредметов.Количество КАК СуммаПлатежа,
	ИзменениеУсловийАрендыГрафикПлатежей.СуммаПлатежа КАК СуммаПлатежаИзГрафика
ПОМЕСТИТЬ ВТ_СписокИзмененийСГрафикомПлатежей
ИЗ
	ВТ_СписокИзменений КАК ВТ_СписокИзменений
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ИзменениеУсловийАренды.ГрафикПлатежей КАК ИзменениеУсловийАрендыГрафикПлатежей
		ПО ВТ_СписокИзменений.Ссылка = ИзменениеУсловийАрендыГрафикПлатежей.Ссылка
			И (ИзменениеУсловийАрендыГрафикПлатежей.ДатаПлатежа МЕЖДУ НАЧАЛОПЕРИОДА(&ДатаНачала, МЕСЯЦ) И КОНЕЦПЕРИОДА(&ДатаОкончания, МЕСЯЦ))
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
			ДокТекущий.Ссылка КАК Ссылка,
			ДокТекущий.ПредметЛизинга КАК ПредметЛизинга,
			ДокТекущий.Дата КАК ДатаНачалаПериода,
			ВЫБОР
				КОГДА МИНИМУМ(ДокСледующий.Дата) ЕСТЬ NULL
					ТОГДА &ДатаОкончания
				ИНАЧЕ МИНИМУМ(ДокСледующий.Дата)
			КОНЕЦ КАК ДатаОкончанияПериода
		ИЗ
			ВТ_СписокИзменений КАК ДокТекущий
				ЛЕВОЕ СОЕДИНЕНИЕ ВТ_СписокИзменений КАК ДокСледующий
				ПО ДокТекущий.ПредметЛизинга = ДокСледующий.ПредметЛизинга
					И ДокТекущий.Дата < ДокСледующий.Дата
		
		СГРУППИРОВАТЬ ПО
			ДокТекущий.Ссылка,
			ДокТекущий.ПредметЛизинга,
			ДокТекущий.Дата) КАК ДокиТест
		ПО (ИзменениеУсловийАрендыГрафикПлатежей.ДатаПлатежа МЕЖДУ ДокиТест.ДатаНачалаПериода И ДокиТест.ДатаОкончанияПериода)
			И (ИзменениеУсловийАрендыГрафикПлатежей.Ссылка = ДокиТест.Ссылка)
			И ВТ_СписокИзменений.ПредметЛизинга = ДокиТест.ПредметЛизинга
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
			Предметы.Ссылка КАК Ссылка,
			КОЛИЧЕСТВО(Предметы.Ссылка) КАК Количество
		ИЗ
			Документ.ИзменениеУсловийАренды.ПредметыАренды КАК Предметы
		ГДЕ
			Предметы.Ссылка.ПометкаУдаления = ЛОЖЬ
		
		СГРУППИРОВАТЬ ПО
			Предметы.Ссылка) КАК КоличествоПредметов
		ПО ВТ_СписокИзменений.Ссылка = КоличествоПредметов.Ссылка
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ_СписокЗаписей.Договор КАК Договор,
	ВТ_СписокЗаписей.Лизингодатель КАК Лизингодатель,
	ВТ_СписокЗаписей.ПредметЛизинга КАК ПредметЛизинга,
	ВЫБОР
		КОГДА ВТ_СписокИзменений.ДатаПлатежа ЕСТЬ NULL
			ТОГДА ВТ_СписокПоступлений.ДатаПлатежа
		ИНАЧЕ ВТ_СписокИзменений.ДатаПлатежа
	КОНЕЦ КАК ДатаПлатежа,
	ВЫБОР
		КОГДА ВТ_СписокИзменений.СуммаПлатежа ЕСТЬ NULL
			ТОГДА ВТ_СписокПоступлений.СуммаПлатежа
		ИНАЧЕ ВТ_СписокИзменений.СуммаПлатежа
	КОНЕЦ КАК СуммаПлатежа,
	ВЫБОР
		КОГДА ВТ_СписокИзменений.Ссылка ЕСТЬ NULL
			ТОГДА ВТ_СписокПоступлений.Ссылка
		ИНАЧЕ ВТ_СписокИзменений.Ссылка
	КОНЕЦ КАК Ссылка
ИЗ
	ВТ_СписокЗаписей КАК ВТ_СписокЗаписей
		ЛЕВОЕ СОЕДИНЕНИЕ ВТ_СписокПоступлений КАК ВТ_СписокПоступлений
		ПО ВТ_СписокЗаписей.ПредметЛизинга = ВТ_СписокПоступлений.ПредметЛизинга
		ЛЕВОЕ СОЕДИНЕНИЕ ВТ_СписокИзмененийСГрафикомПлатежей КАК ВТ_СписокИзменений
		ПО ВТ_СписокЗаписей.ПредметЛизинга = ВТ_СписокИзменений.ПредметЛизинга

СГРУППИРОВАТЬ ПО
	ВТ_СписокЗаписей.Договор,
	ВТ_СписокЗаписей.Лизингодатель,
	ВТ_СписокЗаписей.ПредметЛизинга,
	ВЫБОР
		КОГДА ВТ_СписокИзменений.ДатаПлатежа ЕСТЬ NULL
			ТОГДА ВТ_СписокПоступлений.ДатаПлатежа
		ИНАЧЕ ВТ_СписокИзменений.ДатаПлатежа
	КОНЕЦ,
	ВЫБОР
		КОГДА ВТ_СписокИзменений.СуммаПлатежа ЕСТЬ NULL
			ТОГДА ВТ_СписокПоступлений.СуммаПлатежа
		ИНАЧЕ ВТ_СписокИзменений.СуммаПлатежа
	КОНЕЦ,
	ВЫБОР
		КОГДА ВТ_СписокИзменений.Ссылка ЕСТЬ NULL
			ТОГДА ВТ_СписокПоступлений.Ссылка
		ИНАЧЕ ВТ_СписокИзменений.Ссылка
	КОНЕЦ
Показать
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Avatarzorro 81 27.08.26 10:37 Сейчас в теме
вообще чтобы сделать сумму из разряда "текущая строка + предыдущая" надо прислюнявить таблицу самой к себе внутренним соединением по условию
3. ktibomail 30 27.08.26 11:17 Сейчас в теме
Возможно вам нужно это: https://its.1c.ru/db/v837doc/bookmark/usr/TI000000331
Язык выражений СКД: ВЫЧИСЛИТЬВЫРАЖЕНИЕ
4. SweetSweetLoot 27.08.26 11:33 Сейчас в теме
что то не так с соединением, не хватает условий возможно.
Для отправки сообщения требуется регистрация/авторизация

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