Как в запросе получить разность двух документов?
Приветствую, дамы и господа!
Помогите новичку)
Подскажите как в запросе получить разность двух "документов", содержащие схожие элементы.
Примерно получается так, есть справочник в котором есть список значении, есть документ который их использует. Документ создается с датой, по дате делаем отбор документов, получает актуальные списки значении в документе за период. Теперь нужно сравнить эти документы со справочником и получить из справочника значения, которые не используются в документе за указанный период.
На данный момент реализовал свою хотелку через разность массивов.
// Возвращает разность массивов. Разностью двух массивов является массив, содержащий
// все элементы первого массива, не существующие во втором массиве.
Конфигурация ЗИК
Сами запросы которые добавляю в массивы:
ВЫБРАТЬ РАЗЛИЧНЫЕ
Начисления.Наименование КАК Наименование
ИЗ
ПланВидовРасчета.Начисления КАК Начисления
ГДЕ
Начисления.ВАрхиве = ЛОЖЬ
**********************************************
ВЫБРАТЬ РАЗЛИЧНЫЕ
ПлановыеНачисления.Начисление.Наименование КАК НачислениеНаименование
ИЗ
РегистрСведений.ПлановыеНачисления КАК ПлановыеНачисления
ГДЕ
ПлановыеНачисления.Период >= &Период
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ РАЗЛИЧНЫЕ
РазовоеНачисление.Начисление.Наименование
ИЗ
Документ.РазовоеНачисление КАК РазовоеНачисление
ГДЕ
РазовоеНачисление.Дата >= &Период
Помогите новичку)
Подскажите как в запросе получить разность двух "документов", содержащие схожие элементы.
Примерно получается так, есть справочник в котором есть список значении, есть документ который их использует. Документ создается с датой, по дате делаем отбор документов, получает актуальные списки значении в документе за период. Теперь нужно сравнить эти документы со справочником и получить из справочника значения, которые не используются в документе за указанный период.
На данный момент реализовал свою хотелку через разность массивов.
// Возвращает разность массивов. Разностью двух массивов является массив, содержащий
// все элементы первого массива, не существующие во втором массиве.
Конфигурация ЗИК
Сами запросы которые добавляю в массивы:
ВЫБРАТЬ РАЗЛИЧНЫЕ
Начисления.Наименование КАК Наименование
ИЗ
ПланВидовРасчета.Начисления КАК Начисления
ГДЕ
Начисления.ВАрхиве = ЛОЖЬ
**********************************************
ВЫБРАТЬ РАЗЛИЧНЫЕ
ПлановыеНачисления.Начисление.Наименование КАК НачислениеНаименование
ИЗ
РегистрСведений.ПлановыеНачисления КАК ПлановыеНачисления
ГДЕ
ПлановыеНачисления.Период >= &Период
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ РАЗЛИЧНЫЕ
РазовоеНачисление.Начисление.Наименование
ИЗ
Документ.РазовоеНачисление КАК РазовоеНачисление
ГДЕ
РазовоеНачисление.Дата >= &Период
По теме из базы знаний
Найденные решения
(3)
если я тебя правильно понял, то переведу на русский:
1. есть справочник.Начисления
2. есть документ.РазовоеНачисление, который использует элементы этого справочника.
3. ты хочешь отобрать те Начисления, которые не использовались, за указанный период.
делается это так:
1. отбираем все Начисления которые используются за период. и помещаем их во веменую таблицу втНачисления.
2. левым соединением соединяем со справочником.Начисления и ставим отбор Is null.
PS. не совсем понятно зачем ты в регист полез.
т.е. мы взяли все начисления присоединили к ним те которые используются. а к тем которые не используются - остались пустые клетки (null) и поставили отбор на эти пустые клетки (Есть null)
если я тебя правильно понял, то переведу на русский:
1. есть справочник.Начисления
2. есть документ.РазовоеНачисление, который использует элементы этого справочника.
3. ты хочешь отобрать те Начисления, которые не использовались, за указанный период.
делается это так:
1. отбираем все Начисления которые используются за период. и помещаем их во веменую таблицу втНачисления.
2. левым соединением соединяем со справочником.Начисления и ставим отбор Is null.
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| РазовоеНачисление.Начисление КАК Начисление
|ПОМЕСТИТЬ втНачисления
|ИЗ
| Документ.РазовоеНачисление КАК РазовоеНачисление
|Где
| РазовоеНачисление.Дата между &Дата1 и &Дата2
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| Начисления.Ссылка КАК Ссылка
|ИЗ
| Справочник.Начисления КАК Начисления
| Левое соединение втНачисления КАК втНачисления
| По Начисления.Ссылка = втНачисления.Начисление
|Где
| втНачисления.Начисление is null"
ПоказатьPS. не совсем понятно зачем ты в регист полез.
т.е. мы взяли все начисления присоединили к ним те которые используются. а к тем которые не используются - остались пустые клетки (null) и поставили отбор на эти пустые клетки (Есть null)
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(2) Неправильно описал ситуацию в силу плохого знания терминологий. Есть вот такой "справочник" (скрин1), где создаются начисления. Они используются в документе (Скрин2) и ещё в одном. Вот из этих "документов" я собрал "актуальные" начисления за текущий год, в "справочнике" их 399, а по документам за год использовали 209. Я хочу понять можно-ли соединить эти запросы чтоб мне показывались только те начисления в "справочнике" что не используются в "документах". Из 399 - 209 = 190, вот эти 190 и хочу увидеть, без 209)
В запросах что в примере. Пробовал разные варианты соединения и без, через ВременуюТаблицу и указывать сравнения Начисления.Наименование = ВТ.Наименование так и не понял возможно такое сравнение или нет.
последняя интерпретация запроса:
В запросах что в примере. Пробовал разные варианты соединения и без, через ВременуюТаблицу и указывать сравнения Начисления.Наименование = ВТ.Наименование так и не понял возможно такое сравнение или нет.
последняя интерпретация запроса:
ВЫБРАТЬ РАЗЛИЧНЫЕ
ПлановыеНачисления.Начисление.Наименование КАК НачислениеНаименование
ПОМЕСТИТЬ ВременнаяТаблица
ИЗ
РегистрСведений.ПлановыеНачисления КАК ПлановыеНачисления
ГДЕ
ПлановыеНачисления.Период >= &Период
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ РАЗЛИЧНЫЕ
РазовоеНачисление.Начисление.Наименование
ИЗ
Документ.РазовоеНачисление КАК РазовоеНачисление
ГДЕ
РазовоеНачисление.Дата >= &Период
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
Начисления.Наименование КАК Наименование
ИЗ
ВременнаяТаблица КАК ВременнаяТаблица
ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовРасчета.Начисления КАК Начисления
ПО (Начисления.Наименование = ВременнаяТаблица.НачислениеНаименование)
ГДЕ
Начисления.Наименование = ВременнаяТаблица.НачислениеНаименование
ИЛИ ВременнаяТаблица.НачислениеНаименование = Начисления.Наименование
ПоказатьПрикрепленные файлы:


(3) Ход мыслей в нужном направлении. В соединении результирующего запроса можно поменять таблицы местами, а в секции ГДЕ добавить проверку на NULL (ГДЕ Начисления.Наименование ЕСТЬ NULL)
P.S. Можно и даже нужно не таскать наименование начисления по запросам, если только это не какая-то специфика вашей задачи.
P.S. Можно и даже нужно не таскать наименование начисления по запросам, если только это не какая-то специфика вашей задачи.
(3)
если я тебя правильно понял, то переведу на русский:
1. есть справочник.Начисления
2. есть документ.РазовоеНачисление, который использует элементы этого справочника.
3. ты хочешь отобрать те Начисления, которые не использовались, за указанный период.
делается это так:
1. отбираем все Начисления которые используются за период. и помещаем их во веменую таблицу втНачисления.
2. левым соединением соединяем со справочником.Начисления и ставим отбор Is null.
PS. не совсем понятно зачем ты в регист полез.
т.е. мы взяли все начисления присоединили к ним те которые используются. а к тем которые не используются - остались пустые клетки (null) и поставили отбор на эти пустые клетки (Есть null)
если я тебя правильно понял, то переведу на русский:
1. есть справочник.Начисления
2. есть документ.РазовоеНачисление, который использует элементы этого справочника.
3. ты хочешь отобрать те Начисления, которые не использовались, за указанный период.
делается это так:
1. отбираем все Начисления которые используются за период. и помещаем их во веменую таблицу втНачисления.
2. левым соединением соединяем со справочником.Начисления и ставим отбор Is null.
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| РазовоеНачисление.Начисление КАК Начисление
|ПОМЕСТИТЬ втНачисления
|ИЗ
| Документ.РазовоеНачисление КАК РазовоеНачисление
|Где
| РазовоеНачисление.Дата между &Дата1 и &Дата2
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| Начисления.Ссылка КАК Ссылка
|ИЗ
| Справочник.Начисления КАК Начисления
| Левое соединение втНачисления КАК втНачисления
| По Начисления.Ссылка = втНачисления.Начисление
|Где
| втНачисления.Начисление is null"
ПоказатьPS. не совсем понятно зачем ты в регист полез.
т.е. мы взяли все начисления присоединили к ним те которые используются. а к тем которые не используются - остались пустые клетки (null) и поставили отбор на эти пустые клетки (Есть null)
(5) Все три пункта почти правильные, кроме 1 у меня нет справочник.Начисления у меня есть ПланВидовРасчета.Начисления (скрин1)
т.е. мы взяли все начисления присоединили к ним те которые используются. а к тем которые не используются - остались пустые клетки (null) и поставили отбор на эти пустые клетки (Есть null)
Вот это я как-то ещё не понимаю...
Изменил запрос под себя, и как и хотел 399 - 209 = 190 (скрин2) СПАСИБО!
т.е. мы взяли все начисления присоединили к ним те которые используются. а к тем которые не используются - остались пустые клетки (null) и поставили отбор на эти пустые клетки (Есть null)
Вот это я как-то ещё не понимаю...
Изменил запрос под себя, и как и хотел 399 - 209 = 190 (скрин2) СПАСИБО!
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ПлановыеНачисления.Начисление.Наименование КАК НачислениеНаименование
|ПОМЕСТИТЬ втНачисления
|ИЗ
| РегистрСведений.ПлановыеНачисления КАК ПлановыеНачисления
|ГДЕ
| ПлановыеНачисления.Период >= &Период
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| РазовоеНачисление.Начисление.Наименование
|ИЗ
| Документ.РазовоеНачисление КАК РазовоеНачисление
|ГДЕ
| РазовоеНачисление.Дата >= &Период
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| Начисления.Наименование КАК Наименование
|ИЗ
| ПланВидовРасчета.Начисления КАК Начисления
| ЛЕВОЕ СОЕДИНЕНИЕ втНачисления КАК втНачисления
| ПО (Начисления.Наименование = втНачисления.НачислениеНаименование)
|ГДЕ
| втНачисления.НачислениеНаименование ЕСТЬ NULL"
ПоказатьПрикрепленные файлы:


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