Работа с данными в платформе 1С:Предприятие 8 базируется на механизме запросов, который позволяет эффективно извлекать информацию из информационной базы. Понимание того, какие именно источники данных доступны разработчику, является фундаментом для создания производительных отчетов и обработок. Неверный выбор источника или некорректное обращение к нему может привести к существенному замедлению работы системы.

В этой статье мы детально разберем, откуда система может получать информацию для формирования результирующей выборки. Мы рассмотрим не только стандартные таблицы справочников и документов, но и более сложные конструкции, такие как временные таблицы и результаты других запросов. Особое внимание уделим нюансам использования консоли запросов и особенностям работы с виртуальными таблицами регистра накопления.

Основные таблицы метаданных как источники

Самым очевидным и часто используемым источником являются таблицы, созданные на основе объектов метаданных. К ним относятся справочники, документы, планы счетов и регистры сведений. При написании текста запроса вы обращаетесь к этим объектам напрямую, указывая их синонимы или имена.

Однако Платформа автоматически транслирует запрос на язык СУБД. Например, при выборе из справочника"Номенклатура" система обращается к таблице _Reference123 (имя зависит от конфигурации), но разработчику нет нужды знать эти технические имена.

При работе с документами часто возникает необходимость получать данные не только из шапки, но и из табличных частей. В этом случае источником данных выступает конкретная табличная часть документа. Синтаксически это выглядит как обращение к вложенному объекту через точку.

  • 📂 Справочники хранят нормативно-справочную информацию и являются основными источниками для аналитики.
  • 📄 Документы фиксируют хозяйственные операции и содержат как заголовки, так и детализацию в табличных частях.
  • 💾 Планы видов характеристик и счетов используются для специфических бухгалтерских и аналитических задач.

⚠️ Внимание: Прямой запрос к большим таблицам документов без отбора по периоду или организации может вызвать блокировки и замедление работы всей базы в многопользовательском режиме.

💡

Используйте индексированные поля (например,"Дата","Организация") в условиях отбора (WHERE), чтобы СУБД использовала индексы и ускоряла выборку данных.

Виртуальные таблицы регистров накопления и сведений

Особую категорию источников данных составляют виртуальные таблицы регистров. Они не хранят данные в явном виде как обычные таблицы, а формируют результат «на лету» на основе движений регистра. Это мощный инструмент для получения итогов и остатков без необходимости писать сложные алгоритмы суммирования.

Для регистров накопления наиболее часто используются срезы. Срез последних позволяет получить состояние остатков на конкретный момент времени, а Срез первых — найти первое движение по измерению. Синтаксически это реализуется через добавление специального суффикса к имени регистра в тексте запроса.

ВЫБРАТЬ

ОстаткиНоменклатуры.Номенклатура,

ОстаткиНоменклатуры.КоличествоОстаток

ИЗ

РегистрНакопления.ОстаткиНоменклатуры.Остатки(

&Период,

Номенклатура В (&СписокНоменклатуры)

) КАК ОстаткиНоменклатуры

Помимо срезов, существуют таблицы оборотов и остатков и оборотов. Они позволяют получать данные за целый период, что критически важно для формирования стандартных отчетов по продажам или взаиморасчетам. Использование этих источников данных значительно снижает нагрузку на сервер приложений, так как фильтрация происходит на уровне СУБД.

Почему виртуальные таблицы быстрее ручного суммирования?

Виртуальные таблицы используют предварительно рассчитанные итоговые таблицы (если включено итоговое суммирование) или оптимизированные планы выполнения SQL, что на порядки быстрее перебора всех движений регистра в коде 1С.

Временные таблицы и результаты других запросов

В сложных сценариях одного запроса может быть недостаточно. Платформа позволяет использовать результаты выполнения одного запроса как источник данных для другого. Для этого данные сначала помещаются во временную таблицу, которая существует только в течение сеанса пользователя.

Процесс работы выглядит следующим образом: вы выполняете первый запрос, помещаете результат во временную таблицу с помощью метода Выгрузить или специального оператора ПОМЕСТИТЬ в консоли запросов. Затем во втором запросе вы обращаетесь к этой временной таблице как к обычному источнику данных.

Использование временных таблиц особенно оправдано, когда необходимо выполнить несколько этапов фильтрации, соединения или группировки, которые трудно реализовать в одном громоздком запросе. Это также помогает разбить сложную логику на понятные этапы и упростить отладку.

Тип источника Время жизни Где хранится Производительность
Таблица метаданных Постоянно Файл БД / SQL сервер Зависит от индексов
Виртуальная таблица На момент запроса Формируется СУБД Высокая (оптимизирована)
Временная таблица Сеанс пользователя Оперативная память / TempDB Очень высокая
Табличное значение До закрытия формы Клиент/Сервер (память) Высокая (в памяти)

⚠️ Внимание: Временные таблицы занимают оперативную память сервера 1С. Не создавайте их чрезмерно большого объема без необходимости, чтобы не исчерпать ресурсы кластера.

📊 Какой источник данных вы используете чаще всего?
Таблицы справочников
Виртуальные таблицы регистров
Временные таблицы
Табличные значения из форм

Использование СКД и табличных значений

Система Компоновки Данных (СКД) предоставляет свой собственный набор источников данных, который абстрагирует разработчика от физической структуры базы. В настройках схемы компоновки вы можете добавлять источники типа"Запрос","Поле","Набор данных".

Часто в качестве источника для СКД выступает объект типа ТаблицаЗначений. Это структура данных, которая формируется программно в коде 1С и передается в отчет. Такой подход позволяет объединять данные из разных информационных баз или включать в отчет данные, полученные из внешних веб-сервисов.

При работе с табличными значениями важно правильно описать структуру колонок. Типы данных должны соответствовать тем, что ожидаются в макете отчета. Если вы формируете источник данных динамически, убедитесь, что имена полей совпадают с теми, что используются в тексте запроса СКД.

  • 📊 СКД позволяет визуально настраивать связи между источниками данных без написания SQL-кода.
  • 🔗 Табличные значения идеальны для объединения данных из разрозненных источников перед выводом в отчет.
  • ⚙️ Параметры в СКД передаются в запрос автоматически, если имена параметров совпадают.
💡

Использование ТаблицыЗначений как источника данных позволяет выносить сложную логику вычислений из запроса в код 1С, что упрощает поддержку, но может снизить производительность на больших объемах.

Консоль запросов и анализ источников

Для глубокого анализа того, как именно 1С обращается к источникам данных, незаменимым инструментом является Консоль запросов. Она позволяет выполнять произвольные запросы к базе, просматривать структуру таблиц и анализировать план выполнения.

В консоли запросов вы можете увидеть, какие именно физические таблицы задействованы. Это полезно при оптимизации: если вы видите, что запрос к виртуальной таблице регистра превращается в сканирование огромной таблицы движений без использования индексов, значит, условия отбора составлены неверно.

Также консоль позволяет экспортировать структуру запроса в виде текста, что удобно для переноса сложных выборок в код обработки. При анализе источников обращайте внимание на предупреждения о полном обходе таблиц (Table Scan) — это первый признак проблем с производительностью.

// Пример получения плана выполнения в консоли

// Включите опцию"Показывать план выполнения" в настройках консоли

// Проанализируйте стоимость операций (Cost) для каждого источника

☑️ Диагностика медленного запроса

Выполнено: 0 / 4

Параметризация и внешние источники

Запросы в 1С редко бывают статичными. Чаще всего источники данных дополняются параметрами, которые передаются из формы отчета или обработки. Параметры позволяют фильтровать данные на стороне сервера баз данных, что являетсяшей практикой оптимизации.

Помимо внутренних источников, 1С поддерживает работу с внешними источниками данных через ODBC или OLEDB, хотя это используется реже и требует дополнительной настройки. В таких случаях источником данных выступает удаленная таблица, подключенная как внешняя.

При использовании параметров важно следить за их типами. Несоответствие типа параметра и типа поля в источнике данных может привести к неявным преобразованиям, которые отключают использование индексов и замедляют работу системы в разы.

⚠️ Внимание: Интерфейс и возможности Консоли запросов могут отличаться в разных версиях платформы 1С:Предприятие. Всегда сверяйте доступный функционал в справке вашей конкретной версии конфигуратора.

Что такое неявное преобразование типов?

Это ситуация, когда 1С вынуждена преобразовывать данные"на лету" (например, строку в число) перед сравнением. Это запрещает СУБД использовать индекс по полю, заставляя перебирать всю таблицу.

Часто задаваемые вопросы (FAQ)

Можно ли использовать один запрос в качестве источника для другого без временной таблицы?

Да, это возможно с помощью вложенных запросов (подзапросов). Вы можете поместить текст запроса в скобки в разделе FROM основного запроса. Однако для сложных выборок использование временных таблиц часто читаемее и проще в отладке.

В чем разница между виртуальной таблицей"Остатки" и"Обороты"?

Таблица"Остатки" показывает количество на конкретный момент времени (срез), а таблица"Обороты" показывает сумму прихода и расхода за указанный интервал времени. Выбор зависит от задачи: проверка баланса или анализ активности.

Почему запрос к регистру сведений работает медленно?

Чаще всего проблема в отсутствии отбора по главному измерению или периоду. Регистры сведений могут быть очень объемными. Убедитесь, что в условии WHERE есть поля, по которым построены индексы в конфигураторе.

Как узнать физическое имя таблицы источника в SQL?

В консоли запросов при наведении на объект метаданных часто отображается подсказка с физическим именем. Также можно использовать системные запросы к таблицам метаинформации самой 1С, такие как ИнформацияОТаблицах.