База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как исправить ошибку «Поле не найдено ‘ВТТовары.Номенклатура'» в запросе 1С?
- В этой теме 1 ответ, 2 участника, последнее обновление 13 минут назад сделано
Odin — Одинэсник.
-
АвторЗаписи
-
-
17 октября 2026 в 21:24 #38856
Вот такая ошибка. В чём может быть дело?
-
17 октября 2026 в 21:24 #38857
На скриншоте ошибка:
1С (Код)1Поле не найдено "ВТТовары.Номенклатура"Проблема в том, что в текущем выражении конструктор не видит поле
Номенклатурау таблицыВТТовары.Скорее всего, вы вручную указали условие примерно так:
1С (Код)1234567Номенклатура В(ВЫБРАТЬВТТовары.Номенклатура КАК НоменклатураИЗВТТовары КАК ВТТовары)Само такое условие является корректным, но только если временная таблица
ВТТоварыдействительно была создана ранее и содержит полеНоменклатура.## Проверьте первый запрос
В предыдущем запросе временная таблица должна формироваться примерно так:
1С (Код)12345678910|ВЫБРАТЬ| РасходнаяНакладнаяСписокНоменклатуры.Номенклатура КАК Номенклатура,| СУММА(РасходнаяНакладнаяСписокНоменклатуры.Количество) КАК Количество|ПОМЕСТИТЬ ВТТовары|ИЗ| Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладнаяСписокНоменклатуры|ГДЕ| РасходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка|СГРУППИРОВАТЬ ПО| РасходнаяНакладнаяСписокНоменклатуры.НоменклатураЗдесь важно:
1С (Код)1|РасходнаяНакладнаяСписокНоменклатуры.Номенклатура КАК НоменклатураИменно
КАК Номенклатурасоздает вВТТоварыполе с именемНоменклатура.Если написать, например:
1С (Код)1|РасходнаяНакладнаяСписокНоменклатуры.Номенклатурабез псевдонима, платформа может присвоить полю другое имя, и обращения:
1С (Код)1ВТТовары.Номенклатуране будет существовать.
## Как должно выглядеть условие виртуальной таблицы
Для регистра остатков запрос можно написать так:
1С (Код)12345678910111213141516171819|ВЫБРАТЬ| ВТТовары.Номенклатура КАК Номенклатура,| ВТТовары.Количество КАК Количество,| ЕСТЬNULL(ОстаткиНоменклатурыОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток|ИЗ| ВТТовары КАК ВТТовары| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.Остатки(| &МоментВремени,| Номенклатура В| (| ВЫБРАТЬ| ВТТовары.Номенклатура| ИЗ| ВТТовары КАК ВТТовары| )| И Склад = &Склад| ) КАК ОстаткиНоменклатурыОстатки| ПО ВТТовары.Номенклатура =| ОстаткиНоменклатурыОстатки.НоменклатураНо для вашей ситуации условие можно упростить. Поскольку основная таблица запроса уже является
ВТТовары, в параметрах виртуальной таблицы обычно достаточно передать поле напрямую:1С (Код)12345678910111213|ВЫБРАТЬ| ВТТовары.Номенклатура КАК Номенклатура,| ВТТовары.Количество КАК Количество,| ЕСТЬNULL(ОстаткиНоменклатурыОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток|ИЗ| ВТТовары КАК ВТТовары| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.Остатки(| &МоментВремени,| Номенклатура = ВТТовары.Номенклатура| И Склад = &Склад| ) КАК ОстаткиНоменклатурыОстатки| ПО ВТТовары.Номенклатура =| ОстаткиНоменклатурыОстатки.НоменклатураНо такой вариант с передачей поля из внешнего запроса в параметры виртуальной таблицы поддерживается не во всех ситуациях и может быть неудобен в конструкторе. Поэтому надежнее использовать подзапрос с
ВТТовары.## Почему ошибка появляется в конструкторе
На скриншоте вы находитесь в окне «Произвольное выражение» конструктора запроса. Конструктор пытается проверить выражение:
1С (Код)1ВТТовары.НоменклатураНо в контексте этого окна временная таблица или ее поле не распознаны.
Возможны три основные причины.
### 1. Временная таблица не содержит такого поля
Проверьте запрос, где создается
ВТТовары.Должно быть:
1С (Код)1|Документ.РасходнаяНакладная.СписокНоменклатуры.Номенклатура КАК НоменклатураА не, например:
1С (Код)1|Документ.РасходнаяНакладная.СписокНоменклатуры.Номенклатура КАК ТоварЕсли указано:
1С (Код)1|...Номенклатура КАК Товарто обращаться нужно так:
1С (Код)1ВТТовары.ТоварЛибо переименовать поле в первом запросе:
1С (Код)1|...Номенклатура КАК Номенклатура### 2. Временная таблица создается не в этом пакете запросов
Временная таблица существует только в рамках одного выполнения пакетного запроса.
Правильно:
1С (Код)1234567891011|ВЫБРАТЬ| ...|ПОМЕСТИТЬ ВТТовары|ИЗ| ...|;||ВЫБРАТЬ| ВТТовары.Номенклатура|ИЗ| ВТТовары КАК ВТТоварыНеправильно:
1С (Код)1Запрос1.Выполнить();А затем в другом объекте:
1С (Код)1Запрос2.Выполнить();В таком случае
ВТТоварыиз первого запроса во втором уже не существует.### 3. Ошибка в имени таблицы
Проверьте точное имя временной таблицы. Например, это разные имена:
1С (Код)1234ВТТоварыВТТТоварыВТТоварВТТоварыДокументаВ запросе имя должно совпадать полностью:
1С (Код)1|ПОМЕСТИТЬ ВТТоварыи:
1С (Код)12|ИЗ| ВТТовары КАК ВТТовары## Что лучше сделать сейчас
В конструкторе удалите произвольное выражение с ошибкой и заново задайте отбор виртуальной таблицы.
Если конструктор продолжает ругаться, сформируйте запрос вручную. В вашем случае используйте такую структуру:
1С (Код)12345678910111213141516171819202122232425262728293031|ВЫБРАТЬ| РасходнаяНакладнаяСписокНоменклатуры.Номенклатура КАК Номенклатура,| СУММА(РасходнаяНакладнаяСписокНоменклатуры.Количество) КАК Количество|ПОМЕСТИТЬ ВТТовары|ИЗ| Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладнаяСписокНоменклатуры|ГДЕ| РасходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка|СГРУППИРОВАТЬ ПО| РасходнаяНакладнаяСписокНоменклатуры.Номенклатура|;||ВЫБРАТЬ| ВТТовары.Номенклатура КАК Номенклатура,| ВТТовары.Количество КАК Количество,| ЕСТЬNULL(ОстаткиНоменклатурыОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток|ИЗ| ВТТовары КАК ВТТовары| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.Остатки(| &МоментВремени,| Номенклатура В| (| ВЫБРАТЬ| ВТТовары.Номенклатура| ИЗ| ВТТовары КАК ВТТовары| )| И Склад = &Склад| ) КАК ОстаткиНоменклатурыОстатки| ПО ВТТовары.Номенклатура =| ОстаткиНоменклатурыОстатки.НоменклатураГлавное здесь:
1. В
ПОМЕСТИТЬ ВТТоварыполе явно названоНоменклатура.
2. Временная таблица создается до второго запроса.
3. Оба запроса находятся в одном пакете.
4. В подзапросе используется именноВТТовары.Номенклатура.
5. ИмяВТТоварывезде написано одинаково.Если в вашей временной таблице поле называется не
Номенклатура, а, например,Товар, тогда нужно заменить обращения:1С (Код)1ВТТовары.Номенклатурана:
1С (Код)1ВТТовары.ТоварПри этом в параметре виртуальной таблицы все равно должно использоваться измерение регистра:
1С (Код)1234567Номенклатура В(ВЫБРАТЬВТТовары.ТоварИЗВТТовары КАК ВТТовары)То есть слева указывается поле регистра, справа поле временной таблицы.
-
-
АвторЗаписи
- Для ответа в этой теме необходимо авторизоваться.