Разработка отчетов в системе 1С:Предприятие чаще всего базируется на механизме Системы Компоновки Данных (СКД), где центральным элементом выступает запрос. Умение корректно формировать список источников данных — фундаментальный навык разработчика, позволяющий извлекать информацию из регистров, документов и справочников. Добавление новой таблицы в тело запроса может потребоваться как при создании отчета с нуля, так и при модификации существующего макета компоновки данных.
Процесс подключения источника данных зависит от выбранного способа написания кода: ручного редактирования текста запроса или использования визуального конструктора. В обоих случаях необходимо четко понимать структуру метаданных конфигурации и логические связи между объектами. Ошибки на этапе формирования списка таблиц часто приводят к некорректной выборке или полному отсутствию данных в итоговом отчете.
В данной статье мы детально разберем алгоритмы действий для различных сценариев, рассмотрим нюансы работы с временными таблицами и виртуальными таблицами регистров. Вы научитесь правильно указывать псевдонимы и избегать конфликтов имен, что критически важно для стабильной работы сложных аналитических отчетов в высоконагруженных системах.
Подготовка к работе с запросом в конфигураторе
Перед тем как приступить к изменению структуры запроса, необходимо открыть объект конфигурации, в котором содержится нужный макет. Это может быть отчет, обработка или даже документ, если в нем предусмотрена печатная форма на основе СКД. Перейдите в режим Конфигуратор и найдите нужный объект в дереве метаданных.
Откройте форму объекта и перейдите на вкладку макетов. Выберите макет типа Компоновки данных и откройте его редактор. В открывшемся окне вы увидите панель настроек, где в разделе "Наборы данных" хранится основной текст запроса. Именно здесь происходит управление всеми источниками информации.
⚠️ Внимание: Если вы работаете в типовой конфигурации, любые изменения в объектах могут быть потеряны при следующем обновлении платформы. Всегда создавайте копии объектов или используйте механизмы расширений для внесения правок.
Для начала работы дважды кликните по набору данных, чтобы открыть окно редактирования запроса. Здесь вы увидите текстовое поле с кодом и кнопку вызова конструктора. Выбор между ручным режимом и визуальным помощником зависит от сложности задачи и личных предпочтений разработчика.
Добавление таблицы через Конструктор запросов
Визуальный конструктор запросов — это мощный инструмент, который автоматически генерирует синтаксически верный код и помогает строить связи между таблицами без глубокого знания SQL-подобного языка 1С. Чтобы добавить новую таблицу, нажмите кнопку "Добавить таблицу" в верхней панели инструментов конструктора.
Откроется дерево метаданных конфигурации, где необходимо найти нужный объект. Вы можете выбрать справочник, документ, регистр сведений или любую другую таблицу базы данных. После выбора система предложит указать псевдоним таблицы, который будет использоваться в тексте запроса для краткости.
После добавления таблица появится в списке источников в левой части окна конструктора. Теперь вы можете перетаскивать нужные поля из этой таблицы в область выбранных полей. Конструктор автоматически добавит соответствующие выражения в текст запроса.
- 📂 Используйте поиск по дереву метаданных, чтобы быстро найти таблицу в большой конфигурации.
- 🔗 При добавлении второй таблицы конструктор часто сам предлагает создать соединение (JOIN) по общим полям.
- 🏷️ Всегда проверяйте сгенерированный псевдоним, чтобы он не дублировал имена других таблиц в запросе.
Если вам требуется добавить виртуальную таблицу регистра, конструктор позволит выбрать нужный срез (последний, первый, на дату) через дополнительное диалоговое окно параметров. Это избавляет от необходимости вручную прописывать сложные условия отбора по периоду.
Ручное добавление таблицы в текст запроса
Профессиональные разработчики часто предпочитают писать запросы вручную, так как это дает полный контроль над структурой и позволяет оптимизировать производительность. Для добавления таблицы вручную необходимо отредактировать секцию ИЗ (или FROM в англоязычном синтаксисе) в тексте запроса.
Синтаксис добавления прост: после имени существующей таблицы ставится запятая, затем указывается имя новой таблицы и её псевдоним. Псевдоним задается ключевым словом КАК. Важно соблюдать порядок следования таблиц, если вы планируете использовать явные соединения.
ВЫБРАТЬ
Номенклатура.Ссылка КАК Номенклатура,
Цены.Цена КАК Цена
ИЗ
Справочник.Номенклатура КАК Номенклатура,
РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, Номенклатура) КАК Цены
При ручном редактировании вы несете полную ответственность за корректность имен таблиц и полей. Ошибка в написании имени метаданных приведет к тому, что запрос не пройдет проверку и система выдаст сообщение об ошибке компиляции.
Используйте автоподстановку (Ctrl+Space) при ручном вводе имен таблиц, чтобы избежать опечаток в длинных именах метаданных.
Помните, что при добавлении нескольких таблиц без явного указания типа соединения (левого, внутреннего) язык запросов 1С по умолчанию может вести себя неоднозначно в зависимости от версии платформы. Явное указание типа соединения через ключевые слова ЛЕВОЕ СОЕДИНЕНИЕ является лучшей практикой.
Настройка соединений между таблицами
Просто добавить таблицу в список источников недостаточно — данные из неё не появятся в отчете, пока не настроено соединение с основной таблицей. Соединение определяет, как строки одной таблицы соотносятся со строками другой на основе общих значений в полях.
В конструкторе запросов соединение настраивается перетаскиванием поля из одной таблицы на соответствующее поле другой таблицы. В ручном режиме необходимо использовать конструкцию ЛЕВОЕ СОЕДИНЕНИЕ ... ПО или ВНУТРЕННЕЕ СОЕДИНЕНИЕ ... ПО, указывая условие равенства полей.
| Тип соединения | Описание поведения | Когда использовать |
|---|---|---|
| Внутреннее (INNER) | В выборку попадают только строки, где есть совпадение в обеих таблицах. | Когда нужны только записи, имеющие связанные данные (например, товары с ценами). |
| Левое (LEFT) | В выборку попадают все строки из левой таблицы, даже если нет совпадения в правой. | Когда нужно показать весь список товаров, даже если цены на некоторые отсутствуют. |
| Правое (RIGHT) | Аналогично левому, но сохраняются все строки из правой таблицы. | Используется редко, обычно заменяется перестановкой таблиц местами и левым соединением. |
Неправильный выбор типа соединения — частая причина, по которой в отчете "пропадают" данные. Например, использование внутреннего соединения вместо левого может исключить из отчета все документы, по которым еще не проведено движение товаров.
⚠️ Внимание: При соединении таблиц убедитесь, что типы соединяемых полей совпадают. Попытка соединить строку с числом или ссылку на разные виды объектов приведет к ошибке выполнения запроса.
Работа с временными таблицами и параметрами
В сложных отчетах прямое соединение множества таблиц может привести к падению производительности. В таких случаях целесообразно использовать временные таблицы. Данные сначала выбираются во временную таблицу, фильтруются и обрабатываются, а затем эта временная таблица используется как источник в основном запросе.
Для создания временной таблицы в тексте запроса используется конструкция ВЫБРАТЬ ... ПОМЕСТИТЬ. Имя временной таблицы должно начинаться с символа #. После этого вы можете добавить эту временную таблицу в основной запрос так же, как и обычную таблицу метаданных.
Синтаксис временной таблицы
В начале запроса пишется: ВЫБРАТЬ Поле1, Поле2 ПОМЕСТИТЬ ВТ_Данные ИЗ Справочник.Номенклатура КАК Номенклатура; Далее в основном запросе вы обращаетесь к ней: ИЗ ВТ_Данные КАК Данные.
Параметры запроса играют ключевую роль при добавлении таблиц, особенно если это виртуальные таблицы регистров. Параметры, такие как &Период или &Организация, передаются в запрос из настроек компоновки данных и подставляются в условия отбора.
- ⚡ Временные таблицы хранятся в оперативной памяти сервера 1С и удаляются после завершения сеанса.
- 📉 Использование временных таблиц снижает нагрузку на СУБД при повторных обращениях к одним и тем же данным.
- 🔐 Параметры позволяют делать один универсальный запрос, который фильтрует данные в зависимости от настроек отчета.
При добавлении таблицы, зависящей от параметра (например, срез регистра на дату), убедитесь, что имя параметра в тексте запроса совпадает с именем, объявленным в панели параметров макета компоновки данных.
Проверка и отладка полученного запроса
После того как таблица добавлена и настроены соединения, критически важно проверить работоспособность запроса. В редакторе запроса предусмотрена кнопка "Выполнить", которая запускает запрос непосредственно к базе данных и показывает результат в виде таблицы.
Обратите внимание на панель сообщений внизу окна редактора. Если в запросе есть синтаксические ошибки, система подсветит строку с проблемой и опишет суть ошибки. Частые проблемы включают отсутствие запятых, неверные псевдонимы или несоответствие типов данных.
Запрос считается валидным только если он выполняется без ошибок и возвращает ожидаемый набор данных при различных значениях параметров.
Также рекомендуется использовать кнопку "Показать план выполнения" (если доступна в вашей версии конфигуратора), чтобы оценить, насколько эффективно база данных обрабатывает добавленные соединения. Это поможет выявить узкие места до выкладки отчета в продуктивную среду.
⚠️ Внимание: Интерфейс конфигуратора и доступные функции могут отличаться в зависимости от версии платформы 1С:Предприятие (8.2, 8.3, 8.3.20+). Всегда сверяйтесь с официальной документацией для вашей конкретной версии, если стандартные методы не работают.
Не забывайте проверять запрос на реальных данных, объем которых близок к боевому. На пустой учебной базе запрос может выполняться мгновенно, но при добавлении тяжелой таблицы с миллионами записей время формирования отчета может вырасти в разы.
Часто задаваемые вопросы
Как добавить таблицу из внешней базы данных в запрос 1С?
Для подключения к внешней базе данных необходимо предварительно настроить подключение в дереве метаданных конфигурации (ветка "Подключения к внешним источникам данных"). После этого в конструкторе запросов в списке таблиц появится узел с именем внешнего подключения, откуда можно выбрать нужные таблицы.
Почему конструктор запросов не видит добавленную таблицу?
Убедитесь, что вы сохранили изменения в тексте запроса перед открытием конструктора. Иногда, если запрос содержит синтаксические ошибки в ручном режиме, конструктор может некорректно инициализироваться. Попробуйте исправить ошибки вручную или пересоздать набор данных.
Можно ли добавить одну и ту же таблицу в запрос дважды?
Да, это возможно и часто необходимо. Для этого таблице нужно присвоить разные псевдонимы (например, Справочник.Номенклатура КАК НоменклатураРодитель и Справочник.Номенклатура КАК НоменклатураПотомок). Это позволяет связывать таблицу саму с собой для иерархических выборок.
Что делать, если при добавлении таблицы запрос стал выполняться очень долго?
Проверьте типы соединений. Использование левого соединения с большой таблицей без индексов по полям соединения — частая причина тормозов. Попробуйте добавить отборы на поля соединения или использовать временные таблицы для предварительной фильтрации данных.
Как добавить виртуальную таблицу остатков и оборотов?
В конструкторе запросов при выборе регистра накопления выберите тип таблицы "ОстаткиИОбороты". Откроется окно настройки периодов и измерений. После подтверждения в запрос будет вставлена конструкция с ключевыми словами ОстаткиИОбороты и необходимыми параметрами периодов.