База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как исправить запрос, чтобы отбирать документы без движения в регистре?
- В этой теме 1 ответ, 2 участника, последнее обновление 7 минут назад сделано
Odin — Одинэсник.
-
АвторСообщения
-
-
8 августа 2026 в 8:00 #38349
поправить запрос не отбирает доки без регистра товары на складах ВЫБРАТЬ
РеализацияТоваровУслуг.Ссылка,
РеализацияТоваровУслугТовары.Номенклатура
ПОМЕСТИТЬ ВТ_Доки
ИЗ
Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
ПО (РеализацияТоваровУслугТовары.Ссылка = РеализацияТоваровУслуг.Ссылка)
ГДЕ
РеализацияТоваровУслуг.Проведен
И РеализацияТоваровУслуг.Дата >= &НачалоПериода
И РеализацияТоваровУслуг.Дата <= &КонецПериода;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ_Доки.Ссылка КАК Ссылка
ИЗ
ВТ_Доки КАК ВТ_Доки
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыОрганизаций КАК ТоварыОрганизаций
ПО (ВТ_Доки.Ссылка = ТоварыОрганизаций.Регистратор
И ВТ_Доки.Номенклатура = ТоварыОрганизаций.АналитикаУчетаНоменклатуры.Номенклатура)
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
ПО (ВТ_Доки.Ссылка = ТоварыНаСкладах.Регистратор
И ВТ_Доки.Номенклатура = ТоварыНаСкладах.Номенклатура)
ГДЕ
ТоварыНаСкладах.Регистратор ЕСТЬ NULL -
8 августа 2026 в 8:00 #38350
В вашем запросе ошибка в том, что вы пытаетесь отобрать документы, у которых нет движений в регистре «ТоварыНаСкладах», но при этом делаете соединение по табличной части с внутренним соединением, а потом в выборке по регистру используете левое соединение, но условие «ТоварыНаСкладах.Регистратор ЕСТЬ NULL» не сработает, потому что в первой части вы уже отобрали только те документы, у которых есть строки в табличной части.
Чтобы исправить запрос и получить документы реализации, которые проведены, попадают в период, и по которым нет движений в регистре «ТоварыНаСкладах», сделайте так:
1. Сначала выберите все проведённые документы реализации за период (без привязки к табличной части).
2. Затем сделайте левое соединение с регистром «ТоварыНаСкладах» по регистратору.
3. Отберите только те документы, у которых в регистре нет записей (т.е. регистратор NULL).Пример исправленного запроса:
|ВЫБРАТЬ
| Реализация.Ссылка КАК Ссылка,
| Реализация.Дата КАК ДатаДокумента,
| Реализация.Номер КАК НомерДокумента
|ИЗ
| Документ.РеализацияТоваровУслуг КАК Реализация
|ГДЕ
| Реализация.Проведен
| И Реализация.Дата МЕЖДУ &НачалоПериода И &КонецПериода
| И НЕ СУЩЕСТВУЕТ (
| ВЫБРАТЬ
| 1
| ИЗ
| РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
| ГДЕ
| ТоварыНаСкладах.Регистратор = Реализация.Ссылка
| )Если нужно по конкретным номенклатурам из табличной части, то можно сделать так:
|ВЫБРАТЬ
| Реализация.Ссылка КАК Ссылка,
| Реализация.Дата КАК ДатаДокумента,
| Реализация.Номер КАК НомерДокумента
|ИЗ
| Документ.РеализацияТоваровУслуг КАК Реализация
|ГДЕ
| Реализация.Проведен
| И Реализация.Дата МЕЖДУ &НачалоПериода И &КонецПериода
| И НЕ СУЩЕСТВУЕТ (
| ВЫБРАТЬ
| 1
| ИЗ
| РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.Товары КАК Товары
| ПО Товары.Ссылка = ТоварыНаСкладах.Регистратор
| ГДЕ
| Товары.Ссылка = Реализация.Ссылка
| )—
Почему так?
— Левое соединение с условием «ТоварыНаСкладах.Регистратор ЕСТЬ NULL» в вашем варианте не работает, потому что вы сначала берёте только те документы, у которых есть табличная часть (внутреннее соединение), а потом пытаетесь найти отсутствие движений — это логически конфликт.
— Использование подзапроса с НЕ СУЩЕСТВУЕТ — самый простой и надёжный способ проверить отсутствие движений по регистру.
—
Если хотите именно через временную таблицу и соединения, то нужно:
1. В первую временную таблицу положить все проведённые документы реализации за период (без соединения с табличной частью).
2. Во второй выборке сделать левое соединение с регистром «ТоварыНаСкладах» по регистратору.
3. Отобрать записи, где регистратор NULL.
Пример:
|ВЫБРАТЬ
| Реализация.Ссылка КАК Ссылка
|ПОМЕСТИТЬ ВТ_Доки
|ИЗ
| Документ.РеализацияТоваровУслуг КАК Реализация
|ГДЕ
| Реализация.Проведен
| И Реализация.Дата МЕЖДУ &НачалоПериода И &КонецПериода
|;
|
|ВЫБРАТЬ
| ВТ_Доки.Ссылка КАК Ссылка
|ИЗ
| ВТ_Доки КАК ВТ_Доки
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
| ПО ВТ_Доки.Ссылка = ТоварыНаСкладах.Регистратор
|ГДЕ
| ТоварыНаСкладах.Регистратор ЕСТЬ NULL—
Так запрос будет работать корректно и покажет документы реализации без движений в регистре «ТоварыНаСкладах».
-
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.