К статье
Практический материал

Разработка и Конфигурация · 12 мин

Как получить данные из таблицы 1С

Способы получить данные из таблицы 1С: консоль запросов, язык запросов, СКД, выгрузка в Excel и доступ через COM и OData. Примеры кода и типичные ошибки.

Таблицы в 1С — это объекты метаданных: справочники, документы, регистры сведений, регистры накопления и регистры бухгалтерии. Данные из них нельзя просто «прочитать файлом»: информационная база хранится в формате, который корректно понимает только платформа. Поэтому доступ к таблицам всегда идёт через штатные механизмы — встроенный язык запросов, отчёты, выгрузку в табличный документ или внешние интерфейсы вроде OData.

Выбор способа зависит от задачи. Разово посмотреть содержимое регистра удобнее через консоль запросов или динамический список. Регулярно передавать данные в стороннюю систему — через OData, HTTP-сервис или COM-соединение. Программно обработать данные внутри конфигурации — через объект «Запрос» на встроенном языке.

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

Определите, какая таблица вам нужна

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

Быстрый способ найти таблицу — открыть в конфигураторе нужный объект (справочник, документ, регистр) и посмотреть его имя. Именно это имя используется в запросе: Справочник.Номенклатура, Документ.РеализацияТоваровУслуг, РегистрНакопления.ТоварыНаСкладах.Остатки. Виртуальные таблицы регистров (Остатки, Обороты, СрезПоследних) формируются платформой на лету и часто удобнее физических таблиц движений.

Если конфигурация типовая, а конфигуратор недоступен, ориентируйтесь по стандартным отчётам: откройте отчёт по нужным данным и посмотрите, какие регистры он использует. Также помогает команда «Ещё → Вывести список» в форме списка — она показывает, какие поля реально заполнены.

Получите данные через консоль запросов

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

В консоли вы пишете текст запроса на встроенном языке запросов, выполняете его и сразу видите результат в табличном виде. Оттуда же результат можно выгрузить в табличный документ и сохранить в Excel. Это безопасный способ: запрос на выборку (ВЫБРАТЬ) не изменяет данные в базе.

Порядок действий в консоли запросов
  1. 1
    Откройте консоль запросов в режиме предприятия под пользователем с достаточными правами
  2. 2
    Напишите запрос, например: ВЫБРАТЬ Ссылка, Наименование ИЗ Справочник.Номенклатура ГДЕ НЕ ПометкаУдаления
  3. 3
    Нажмите «Выполнить» и проверьте, что вернулось ожидаемое количество строк
  4. 4
    При необходимости выгрузите результат в табличный документ и сохраните в файл Excel или MXL

Конструктор запроса (кнопка «Конструктор» в консоли) позволяет собрать запрос мышкой: выбрать таблицу, перетащить поля, задать отбор и соединения. Это удобно, если вы не помните синтаксис соединений или имена полей виртуальных таблиц.

Выберите данные программно через объект «Запрос»

Внутри конфигурации или внешней обработки данные получают через объект «Запрос». Типовой шаблон: создать объект, задать текст, установить параметры, выполнить и обойти выборку. Параметры всегда передаются через амперсанд (&ИмяПараметра) — это защищает от подстановки небезопасных строк и ускоряет выполнение.

1c
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.Наименование КАК Наименование
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| НЕ Номенклатура.ПометкаУдаления
| И Номенклатура.Родитель = &Группа";
Запрос.УстановитьПараметр("Группа", ГруппаТоваров);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
 Сообщить(Выборка.Наименование);
КонецЦикла;

Метод Выбрать() возвращает выборку для последовательного обхода — она экономит память на больших объёмах. Метод Выгрузить() возвращает таблицу значений целиком: её удобно сортировать, сворачивать и передавать дальше, но на миллионах строк она съест оперативную память сервера. Для больших выборок используйте обход выборки или пакетную обработку.

Для проверки, пустой ли результат, используйте Результат.Пустой() до начала обхода. Это дешёвая операция, которая избавляет от лишнего кода обработки пустой выборки.

Используйте СКД и отчёты без программирования

Если данные нужны пользователю, а не программе, часто не нужно писать код вообще. Система компоновки данных (СКД) лежит в основе большинства отчётов: пользователь сам задаёт отборы, период и группировки в настройках отчёта, а результат выгружает в Excel через «Файл → Сохранить» или кнопку выгрузки.

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

Сравнение способов получения данных

Консоль запросов

Разовый просмотр и отладка. Требует прав и навыка языка запросов, не подходит для регулярной автоматической выгрузки.

Объект «Запрос» в коде

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

Отчёт на СКД / универсальный отчёт

Пользовательская выгрузка без программирования. Ограничен возможностями настроек отчёта.

OData / HTTP-сервис

Доступ из внешних систем по сети. Требует публикации на веб-сервере и настройки прав.

COM-соединение

Связь двух баз 1С на Windows. Медленно на больших объёмах и не работает в веб-клиенте.

Выгрузите данные в Excel и другие форматы

Любой табличный документ в 1С (результат отчёта, список, выведенный через «Вывести список») сохраняется во внешние форматы: Excel (XLSX), CSV, MXL, ODS, PDF. Путь: открыть табличный документ → «Файл → Сохранить как» → выбрать тип файла. Это самый простой способ передать данные человеку без доступа к 1С.

Программно табличный документ сохраняется методом Записать(ИмяФайла, ТипФайлаТабличногоДокумента.XLSX). Таблицу значений можно выгрузить и напрямую в CSV построчной записью через объект ТекстовыйДокумент — это удобно для обмена с системами, которые не понимают Excel.

Для табличных частей и списков есть штатная команда «Вывести список» (меню «Ещё»): она формирует табличный документ по видимым колонкам списка с учётом установленного отбора. Часто этого достаточно, чтобы выгрузить, например, все документы за месяц с ключевыми реквизитами.

Настройте доступ из внешних систем

Доступ через OData

Стандартный интерфейс OData позволяет читать данные базы по HTTP: справочники, документы, регистры публикуются как REST-ресурсы, а запросы формируются параметрами URL ($filter, $select, $top). Публикация настраивается флажком «Публиковать стандартный интерфейс OData» в свойствах базы и настройках веб-сервера (IIS или Apache).

Пример обращения: http://сервер/база/odata/standard.odata/Catalog_Номенклатура?$filter=DeletionMark eq false&$top=100. OData подходит для BI-систем (Power BI умеет подключаться к OData напрямую) и интеграций чтения. Учтите: публикация открывает сетевой доступ к базе, поэтому обязательно настройте аутентификацию и ограничьте состав публикуемых объектов.

COM и HTTP-сервисы

COM-соединение (V83.COMConnector) — классический способ связать две базы 1С на Windows: из кода одной базы выполняется запрос в другой. Способ рабочий, но медленный на больших объёмах и завязан на установленную на машине платформу.

Для регулярных интеграций надёжнее опубликовать в конфигурации собственный HTTP-сервис, который по запросу выполняет нужный запрос и возвращает JSON. Это даёт контроль над составом отдаваемых данных, правами и нагрузкой.

Маршрут решения

Как выбрать способ

Нужно один раз посмотреть или выгрузить данные вручнуюКонсоль запросов или универсальный отчёт с сохранением в Excel
Данные обрабатываются внутри конфигурацииОбъект «Запрос» на встроенном языке
Данные нужны внешней системе или Power BIПубликация OData либо собственный HTTP-сервис
Нужно связать две базы 1С на одном сервере WindowsCOM-соединение, для больших объёмов — выгрузка через файлы

Проверьте результат и избегите типичных ошибок

После получения данных сверьте их с эталоном: количество строк сравните с количеством элементов в списке с тем же отбором, суммы — со стандартным отчётом за тот же период. Расхождение почти всегда означает ошибку в отборе или соединении таблиц, а не «битые данные».

Контрольные точки

Как проверить результат

Количество строк выборки
Норма

Совпадает с количеством элементов в списке с тем же отбором

Тревожный признак

Строк больше (дубли от соединения) или меньше (лишний отбор, отсутствие прав)

Суммы по регистру
Норма

Совпадают со стандартным отчётом за тот же период

Тревожный признак

Отличаются — проверьте период, виртуальную таблицу и отбор по организации

Типы данных в Excel
Норма

Числа и даты распознаются как числа и даты

Тревожный признак

Всё стало текстом — поправьте формат ячеек табличного документа

Типичные ошибки
01
Левое соединение без отбора по второй таблице — строки задваиваются, суммы завышаются
02
Запрос к физической таблице регистра вместо виртуальной (Остатки, Обороты) — приходится вручную сворачивать движения и легко ошибиться
03
Игнорирование пометки удаления — в выгрузку попадают «мусорные» элементы
04
Выгрузка всей таблицы через Выгрузить() на большом регистре — нехватка памяти и падение сеанса
05
Прямой доступ к файловой базе или SQL-таблицам в обход платформы — риск повреждения данных и рассогласования служебных таблиц

Отдельно предупредим о прямом доступе к данным в обход платформы: чтение таблиц напрямую из СУБД (SQL Server, PostgreSQL) технически возможно, но структура таблиц недокументирована, имена генерируются платформой, а любая запись напрямую гарантированно повредит базу. Для чтения используйте только штатные механизмы.

Итог

Что важно запомнить

Данные из таблиц 1С получают только штатными средствами: запросы, СКД, выгрузка табличных документов, OData и COM. Сначала определите правильную таблицу и виртуальную таблицу регистра, используйте параметры и отборы, а результат сверяйте со стандартными отчётами.

Частые вопросы

Можно ли получить данные из 1С без конфигуратора?

Да. Консоль запросов, универсальный отчёт и выгрузка списков через «Вывести список» работают в режиме предприятия. Для внешнего доступа достаточно опубликованного OData. Конфигуратор нужен только для добавления собственных HTTP-сервисов и доработки кода.

Почему запрос возвращает пустой результат, хотя данные в базе есть?

Чаще всего причины: неверный отбор (например, сравнение ссылки со строкой), обращение не к той таблице, отсутствие прав на объект у текущего пользователя или ограничение доступа на уровне записей (RLS). Проверьте запрос под пользователем с полными правами и упростите отбор до минимума.

Как выгрузить данные из регистра за большой период, если запрос зависает?

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

Чем OData отличается от выгрузки в Excel?

Excel — разовая ручная передача снимка данных. OData — постоянно действующий сетевой интерфейс: внешняя система сама запрашивает актуальные данные в момент обращения. Для регулярных интеграций и построения дашбордов в Power BI подходит именно OData.

Безопасно ли читать базу 1С напрямую из SQL Server?

Чтение не повредит данные, но структура таблиц недокументирована и меняется между релизами, поэтому такие запросы ненадёжны. Запись напрямую в SQL категорически недопустима — она нарушает служебные механизмы платформы и приводит к повреждению базы. Используйте OData или HTTP-сервисы.

Как получить данные из табличной части документа?

Табличная часть — отдельная таблица с точкой в имени: Документ.РеализацияТоваровУслуг.Товары. В запросе её соединяют с шапкой по полю Ссылка. Поля табличной части (номенклатура, количество, сумма) доступны так же, как обычные реквизиты.