При разработке на платформе 1С:Предприятие 8 одна из самых часто встречающихся и в то же время простых в исправлении ошибок — это сообщение «Таблица не найдена». Чаще всего она возникает в тот момент, когда разработчик пытается обратиться к объекту метаданных в тексте запроса, но платформа не может идентифицировать этот объект. В данной статье мы подробно разберем, почему возникает эта ошибка на примере обращения к документу ЗаявкиКлиентов, и научимся правильно структурировать запросы.
Проанализируем типичную ситуацию: в тексте запроса указано ИЗ Документ.ЗаявкиКлиентов.Сотрудник КАК ТЧ. Платформа выдает ошибку, сообщая, что таблица не найдена. Основная причина здесь кроется в архитектуре метаданных 1С. В языке запросов источником данных (тем, что идет после ключевого слова ИЗ) может выступать только таблица.
Рассмотрим подробнее, что является таблицей в системе 1С:
Документ.ЗаявкиКлиентов). Она содержит все общие реквизиты документа: дату, номер, ответственного и т.д.Документ.ЗаявкиКлиентов.СоставСотрудников). Каждая табличная часть — это отдельная подчиненная таблица в базе данных.Реквизит (например, Сотрудник) сам по себе таблицей не является — это колонка в одной из вышеперечисленных таблиц. Мы не можем выбрать данные «из колонки», мы выбираем данные «из таблицы», указывая нужную колонку в секции ВЫБРАТЬ.
Если в конфигураторе у документа ЗаявкиКлиентов есть реквизит Сотрудник (в шапке), то правильный запрос будет выглядеть так:
ВЫБРАТЬ
Заявки.Сотрудник
ИЗ
Документ.ЗаявкиКлиентов КАК Заявки
Если же Сотрудник — это реквизит внутри табличной части, которая называется, например, Сотрудники, то запрос должен обращаться именно к табличной части:
ВЫБРАТЬ
ТЧ.Сотрудник
ИЗ
Документ.ЗаявкиКлиентов.Сотрудники КАК ТЧ
Выясним причину, почему разработчики часто допускают опечатки. В 1С у каждого объекта есть Имя и Синоним. Синоним — это то, что видит пользователь в интерфейсе (например, «Заявки клиентов»), а Имя — это то, что используется в коде и запросах (например, ЗаявкиКлиентов).
Разберем по шагам, как проверить правильность имени:
Сотрудники), а реквизит в единственном (Сотрудник). Ошибка в одну букву приведет к неработоспособности запроса.Проанализируем ситуацию, когда запрос пишется в расширении. Если вы создаете запрос к таблице, которая была добавлена в основную конфигурацию, но еще не добавлена в ваше расширение, платформа может выдать ошибку «Таблица не найдена». Это происходит потому, что контекст модуля расширения «видит» только те объекты, которые в него явно включены.
Чтобы решить эту проблему, выполните следующие действия:
Посмотрим на самый надежный способ избежать подобных ошибок — использование встроенного Конструктора запроса. Это визуальный инструмент, который обращается к текущему состоянию метаданных в реальном времени.
Если вы открыли Конструктор запроса и в левом списке (доступные таблицы) не видите нужной вам табличной части внутри документа, значит:
Если Конструктор «видит» таблицу, просто перетащите её в список выбранных таблиц. Конструктор автоматически подставит верное внутреннее имя, что исключит риск опечатки.
Разберем пример из практики, когда ошибка возникает при соединении с контактной информацией. В типовых конфигурациях (УТ 11, ERP, КА) контактная информация часто хранится в табличных частях. Посмотрим на фрагмент запроса:
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ФизическиеЛица.КонтактнаяИнформация КАК ФизическиеЛицаКонтактнаяИнформация
ПО ТЧ.ФизическоеЛицо = ФизическиеЛицаКонтактнаяИнформация.Ссылка
В данном случае Справочник.ФизическиеЛица.КонтактнаяИнформация — это корректное обращение к табличной части справочника. Однако, если вы перепутаете и напишете Справочник.ФизическиеЛица.Адрес, система выдаст ошибку, так как Адрес — это, скорее всего, поле внутри таблицы, а не сама таблица.
Также важно помнить о точечной нотации. В секции ИЗ нельзя обращаться к таблицам через точку от реквизитов. Например, конструкция ИЗ Документ.ЗаявкиКлиентов.Ответственный.КонтактнаяИнформация будет ошибочной. Нужно сначала выбрать основную таблицу, а затем через СОЕДИНЕНИЕ подключать необходимые справочники.
Иногда мы сталкиваемся с ситуацией, когда имя указано верно, объект существует, но ошибка сохраняется. Выясним, почему так происходит:
"ИЗ Документ.ЗаявкиКлиентов"+"ГДЕ..." превратится в ИЗ Документ.ЗаявкиКлиентовГДЕ..., что приведет к ошибке синтаксиса, интерпретируемой как отсутствие таблицы.Подведем итог: для исправления ошибки «Таблица не найдена» всегда проверяйте соответствие Имени (не Синонима) объекта в Конфигураторе, убеждайтесь, что вы обращаетесь именно к таблице (документу или табличной части), а не к реквизиту, и используйте Конструктор запроса для верификации структуры метаданных.