Как в запросе к непериодическому регистру получить сведения без дублирования строк
стоит такая задача, нужно собрать данные из регистров сведений по объектам ОС, при этом в перечень ОС должны попасть только не снятые с учета объекты ОС. Большинство регистров периодические, но есть один непериодический, из-за этого при левом соединении запросов строки с объектами основных средств дублируются (по тем объектам ОС по которым существует более одной записи в непериодическом регистре), а надо чтобы основные средства не повторялись. Решил эту задачу каскадом запросов:
В первом запросе получаю список ОС из справочника.
Вторым запросом делаю выборку записей из непериодического регистра, с условием что в него попадут снятые с учета ОС.
Третьим запросом делаю связку первых двух запросов, "прикрепляю" к выборке значение "СнятоСУчета".
В четвертом запросе обращаюсь к связке и накладываю фильтр (<>СнятыеСУчета) на элементы и получаю список объектов ОС не снятых с учета.
В пятом запросе получаю сведения из непериодического регистра.
И наконец, в последнем запросе, присоединяю левым соединением к списку не снятых с учета ОС необходимые сведения.
Работает так как мне надо, но может это слишком громоздкое решение? Есть какие-нибудь варианты покомпактнее приведенного выше?
ВЫБРАТЬ
ОсновныеСредства.Ссылка
ПОМЕСТИТЬ ВТ_Спр
ИЗ
Справочник.ОсновныеСредства КАК ОсновныеСредства
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
СостоянияОСОрганизаций.ОсновноеСредство,
СостоянияОСОрганизаций.Состояние
ПОМЕСТИТЬ ВТ_СнятыеСУЧета
ИЗ
РегистрСведений.СостоянияОСОрганизаций КАК СостоянияОСОрганизаций
ГДЕ
СостоянияОСОрганизаций.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияОС.СнятоСУчета)
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ЕСТЬNULL(ВТ_СнятыеСУЧета.Состояние, ЗНАЧЕНИЕ(Перечисление.СостоянияОС.ПустаяСсылка)) КАК Состояние,
ВТ_Спр.Ссылка
ПОМЕСТИТЬ ВТ_Связка
ИЗ
ВТ_Спр КАК ВТ_Спр
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_СнятыеСУЧета КАК ВТ_СнятыеСУЧета
ПО ВТ_Спр.Ссылка = ВТ_СнятыеСУЧета.ОсновноеСредство
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ_Связка.Ссылка
ПОМЕСТИТЬ ВТ_НеСнятые
ИЗ
ВТ_Связка КАК ВТ_Связка
ГДЕ
ВТ_Связка.Состояние <> ЗНАЧЕНИЕ(Перечисление.СостоянияОС.СнятоСУчета)
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
СостоянияОСОрганизаций.Состояние,
СостоянияОСОрганизаций.ДатаСостояния,
СостоянияОСОрганизаций.НазваниеДокумента,
СостоянияОСОрганизаций.НомерДокумента,
СостоянияОСОрганизаций.ОсновноеСредство
ПОМЕСТИТЬ ВТ_Сведения
ИЗ
РегистрСведений.СостоянияОСОрганизаций КАК СостоянияОСОрганизаций
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ_Сведения.Состояние,
ВТ_Сведения.ДатаСостояния,
ВТ_Сведения.НазваниеДокумента,
ВТ_Сведения.НомерДокумента,
ВТ_НеСнятые.Ссылка,
ВТ_НеСнятые.Ссылка.Код
ИЗ
ВТ_НеСнятые КАК ВТ_НеСнятые
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Сведения КАК ВТ_Сведения
ПО ВТ_НеСнятые.Ссылка = ВТ_Сведения.ОсновноеСредство
ПоказатьВ первом запросе получаю список ОС из справочника.
Вторым запросом делаю выборку записей из непериодического регистра, с условием что в него попадут снятые с учета ОС.
Третьим запросом делаю связку первых двух запросов, "прикрепляю" к выборке значение "СнятоСУчета".
В четвертом запросе обращаюсь к связке и накладываю фильтр (<>СнятыеСУчета) на элементы и получаю список объектов ОС не снятых с учета.
В пятом запросе получаю сведения из непериодического регистра.
И наконец, в последнем запросе, присоединяю левым соединением к списку не снятых с учета ОС необходимые сведения.
Работает так как мне надо, но может это слишком громоздкое решение? Есть какие-нибудь варианты покомпактнее приведенного выше?
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот