Как в запросе к непериодическому регистру получить сведения без дублирования строк

1. prog1c_vl 25 20.02.23 20:21 Сейчас в теме
стоит такая задача, нужно собрать данные из регистров сведений по объектам ОС, при этом в перечень ОС должны попасть только не снятые с учета объекты ОС. Большинство регистров периодические, но есть один непериодический, из-за этого при левом соединении запросов строки с объектами основных средств дублируются (по тем объектам ОС по которым существует более одной записи в непериодическом регистре), а надо чтобы основные средства не повторялись. Решил эту задачу каскадом запросов:
ВЫБРАТЬ
	ОсновныеСредства.Ссылка
ПОМЕСТИТЬ ВТ_Спр
ИЗ
	Справочник.ОсновныеСредства КАК ОсновныеСредства
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	СостоянияОСОрганизаций.ОсновноеСредство,
	СостоянияОСОрганизаций.Состояние
ПОМЕСТИТЬ ВТ_СнятыеСУЧета
ИЗ
	РегистрСведений.СостоянияОСОрганизаций КАК СостоянияОСОрганизаций
ГДЕ
	СостоянияОСОрганизаций.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияОС.СнятоСУчета)
;

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

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ_Связка.Ссылка
ПОМЕСТИТЬ ВТ_НеСнятые
ИЗ
	ВТ_Связка КАК ВТ_Связка
ГДЕ
	ВТ_Связка.Состояние <> ЗНАЧЕНИЕ(Перечисление.СостоянияОС.СнятоСУчета)
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	СостоянияОСОрганизаций.Состояние,
	СостоянияОСОрганизаций.ДатаСостояния,
	СостоянияОСОрганизаций.НазваниеДокумента,
	СостоянияОСОрганизаций.НомерДокумента,
	СостоянияОСОрганизаций.ОсновноеСредство
ПОМЕСТИТЬ ВТ_Сведения
ИЗ
	РегистрСведений.СостоянияОСОрганизаций КАК СостоянияОСОрганизаций
;

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

В первом запросе получаю список ОС из справочника.
Вторым запросом делаю выборку записей из непериодического регистра, с условием что в него попадут снятые с учета ОС.
Третьим запросом делаю связку первых двух запросов, "прикрепляю" к выборке значение "СнятоСУчета".
В четвертом запросе обращаюсь к связке и накладываю фильтр (<>СнятыеСУчета) на элементы и получаю список объектов ОС не снятых с учета.
В пятом запросе получаю сведения из непериодического регистра.
И наконец, в последнем запросе, присоединяю левым соединением к списку не снятых с учета ОС необходимые сведения.
Работает так как мне надо, но может это слишком громоздкое решение? Есть какие-нибудь варианты покомпактнее приведенного выше?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. пользователь 20.02.23 20:32
Сообщение было скрыто модератором.
...
3. prog1c_vl 25 20.02.23 22:13 Сейчас в теме
(2)
Сколько всего состояний у ОС может быть?

состояний может быть только два: СнятоСУчета или ВведеноВЭксплуатацию
4. пользователь 20.02.23 22:35
Сообщение было скрыто модератором.
...
Оставьте свое сообщение

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