Разработка и Конфигурация · 11 мин
Как получить данные из документа 1С
Способы получить данные из документа 1С: через интерфейс, запрос, код на встроенном языке, COM и веб-сервисы. Примеры кода, ошибки и проверка результата.
Данные документа в 1С — это реквизиты шапки (номер, дата, контрагент, организация), табличные части (товары, услуги) и связанные движения по регистрам. В зависимости от задачи их можно получить прямо в интерфейсе, через отчёт, запросом на языке 1С, программно из кода или из внешней системы. Каждый способ имеет свои ограничения по правам, скорости и рискам.
Главная ошибка новичков — пытаться читать данные напрямую из таблиц SQL-базы, минуя платформу. Это нарушает логику блокировок, обходит права доступа и может привести к чтению неактуальных данных. Правильный подход — всегда работать через объектную модель платформы или её штатные интерфейсы обмена.
Какие данные хранит документ и как к ним обращаться
Документ в 1С состоит из стандартных реквизитов (Ссылка, Номер, Дата, Проведен), реквизитов, заданных в конфигураторе (Контрагент, СуммаДокумента, Склад), и табличных частей (например, «Товары» с колонками Номенклатура, Количество, Цена). Кроме того, проведённый документ формирует движения — записи в регистрах накопления, сведений или бухгалтерии.
Обращение к данным всегда начинается со ссылки — уникального идентификатора объекта. По ссылке платформа находит нужную строку в таблице документа. Через точку от ссылки доступны значения реквизитов в режиме чтения: ДокументСсылка.Номер вернёт номер без загрузки всего объекта в память.
Табличные части через ссылку напрямую недоступны — для их чтения нужно либо получить объект целиком, либо выполнить запрос к виртуальной таблице табличной части. Движения документа читаются через наборы записей регистров с отбором по регистратору.
Получение данных через интерфейс без программирования
Если задача разовая — посмотреть или выгрузить данные нескольких документов — программировать не нужно. Откройте список документов нужного вида, настройте отбор по периоду, контрагенту или организации и выведите нужные колонки через меню «Ещё — Изменить форму» (в управляемых формах) или настройку списка.
Для выгрузки в Excel откройте документ, перейдите в табличную часть и используйте «Ещё — Вывести список» — платформа сформирует табличный документ, который сохраняется в форматах XLSX, CSV, PDF. То же работает для списка документов целиком.
Для сложных выборок используйте универсальный отчёт (в типовых конфигурациях: «Администрирование — Печатные формы, отчеты и обработки») или консоль отчетов СКД. Универсальный отчёт позволяет выбрать тип документа, реквизиты и табличную часть, наложить отборы и получить результат без единой строки кода.
- 1Откройте документ в режиме просмотра
- 2Встаньте курсором в табличную часть (например, «Товары»)
- 3Нажмите «Ещё» — «Вывести список»
- 4Отметьте нужные колонки и подтвердите вывод
- 5Сохраните табличный документ: Файл — Сохранить как — формат XLSX или CSV
Получение данных запросом на языке 1С
Запрос — основной способ массового чтения данных документов. Он не загружает объекты в память, работает быстро и позволяет соединять таблицы. Запрос обращается к таблице документа по имени вида Документ.РеализацияТоваровУслуг, а к табличной части — Документ.РеализацияТоваровУслуг.Товары.
Типовой пример — выбрать проведённые документы за период с суммами и контрагентами:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Реализация.Ссылка КАК Документ,
| Реализация.Номер,
| Реализация.Дата,
| Реализация.Контрагент,
| Реализация.СуммаДокумента
|ИЗ
| Документ.РеализацияТоваровУслуг КАК Реализация
|ГДЕ
| Реализация.Дата МЕЖДУ &Начало И &Конец
| И Реализация.Проведен";
Запрос.УстановитьПараметр("Начало", НачалоМесяца(ТекущаяДата()));
Запрос.УстановитьПараметр("Конец", КонецМесяца(ТекущаяДата()));
Результат = Запрос.Выполнить().Выгрузить();Для чтения табличной части обращайтесь к ней как к отдельной таблице с полем Ссылка, по которому можно соединиться с шапкой. Учтите: в запросе нельзя использовать точку для обхода реквизитов составного типа без приведения — используйте ВЫРАЗИТЬ(...) или соединение с таблицей справочника.
Проверка результата проста: количество строк в выборке должно совпадать с количеством документов в списке при тех же отборах. Если строк меньше — чаще всего причина в отборе по Проведен или в правах доступа на уровне записей (RLS).
Программное чтение через объект документа
Когда нужна полная структура документа — все реквизиты и табличные части — используют метод ПолучитьОбъект(). Он загружает документ из базы в память целиком, после чего доступны любые поля и коллекции:
ДокументОбъект = ДокументСсылка.ПолучитьОбъект();
Сумма = ДокументОбъект.СуммаДокумента;
Для Каждого СтрокаТовара Из ДокументОбъект.Товары Цикл
Сообщить(СтрокаТовара.Номенклатура);
КонецЦикла;Этот способ удобен для обхода табличных частей и последующего изменения документа, но он медленнее запроса и требует больше памяти. Для массового чтения тысяч документов всегда предпочтительнее запрос. Объектный метод оправдан, когда нужно не только прочитать, но и изменить документ либо вызвать его прикладную логику.
Получение данных из внешних систем
Для интеграций платформа предлагает несколько штатных каналов. Выбор зависит от того, кто инициатор обмена и какая версия платформы используется.
Способы доступа извне
Автоматический REST-интерфейс, включается публикацией на веб-сервере. Подходит для чтения документов внешними системами без программирования на стороне 1С. Ограничение: нужна настройка публикации и прав.
Собственные точки доступа, создаваемые в конфигураторе. Гибкая логика и формат ответа, но требуют разработки. Подходят для нестандартных выборок.
Подключение из внешнего приложения через COMConnector. Работает только в Windows, требует установленной платформы на машине клиента. Подходит для локальных интеграций.
Классический вариант для корпоративных интеграций. Требует публикации и описания в конфигурации, сейчас чаще заменяется HTTP-сервисами.
При чтении через OData документ доступен по URL вида /odata/standard.odata/Document_РеализацияТоваровУслуг с фильтрами в query-параметрах. Аутентификация — по пользователю информационной базы, поэтому права на чтение документов должны быть выданы явно.
Чтение движений документа по регистрам
Часто нужны не сами реквизиты документа, а его след в учёте — проводки, остатки, движения по регистрам. Эти данные хранятся в наборах записей, где документ выступает регистратором.
Программно движения читаются через набор записей регистра с установленным отбором по регистратору. В запросе удобнее обращаться к виртуальным таблицам регистров (Остатки, Обороты) с отбором по полю Регистратор — так можно получить, например, все проводки конкретного документа одним запросом к регистру бухгалтерии.
В интерфейсе движения видны прямо из формы документа: кнопка «Дт/Кт» для проводок и команда перехода к движениям по регистрам в меню «Ещё». Это самый быстрый способ проверить, что документ сформировал ожидаемые записи.
Как проверить результат
Совпадает с числом документов в списке при тех же отборах
Строк меньше — проверьте отбор по Проведен и права RLS
Совпадают с формой документа
Пустые значения при заполненных полях — нет прав на реквизит или объект
Наборы записей по регистрам не пусты для проведённого документа
Движений нет — документ не проведён или проведение отключено
Типичные ошибки и ограничения
Большинство проблем при получении данных из документов связано не с синтаксисом, а с контекстом выполнения: правами, транзакциями и выбором инструмента не под задачу.
Отдельное ограничение — длинные транзакции. Массовое чтение объектов внутри одной транзакции удерживает блокировки и мешает работе пользователей. Для больших выгрузок разбивайте обработку на порции по периодам или по диапазонам ссылок.
Как выбрать способ
Что важно запомнить
Данные документа получают через ссылку, запрос или объект — в зависимости от объёма и цели. Для чтения массовых данных используйте запросы, для изменения — объекты, для интеграций — OData или HTTP-сервисы. Никогда не читайте базу напрямую через SQL и не вызывайте Записать() в коде, предназначенном только для чтения.
Частые вопросы
Можно ли получить данные документа, не открывая базу 1С?
Да, если заранее настроен канал доступа: публикация OData или HTTP-сервиса на веб-сервере, либо COM-соединение с машины, где установлена платформа. Без настроенного интерфейса обмена внешний доступ невозможен — это осознанное ограничение безопасности.
Как получить данные удалённого документа?
Помеченный на удаление документ ещё физически существует, и запрос его вернёт, если не добавлен отбор по полю ПометкаУдаления. После штатного удаления через «Удаление помеченных объектов» данные восстановлению не подлежат — только из резервной копии.
Почему запрос возвращает меньше документов, чем видно в списке?
Чаще всего работает ограничение доступа на уровне записей (RLS): в запросе без ключевого слова РАЗРЕШЕННЫЕ платформа может вести себя иначе, чем в интерфейсе. Добавьте РАЗРЕШЕННЫЕ в текст запроса и сравните отборы — в списке могут быть скрытые отборы по организации или периоду.
Как выгрузить табличную часть сразу по многим документам?
Запросом к таблице вида Документ.ИмяДокумента.ИмяТабличнойЧасти с отбором Ссылка В (&СписокДокументов). Результат выгружается в таблицу значений, которую можно сохранить в Excel через табличный документ или передать во внешнюю систему.
Чем отличается чтение через ссылку от ПолучитьОбъект()?
Через ссылку доступны только реквизиты шапки в режиме чтения — платформа делает точечное обращение к базе. ПолучитьОбъект() загружает документ целиком, включая табличные части, и открывает возможность изменения. Для массового чтения реквизитов ссылка быстрее и безопаснее.
Безопасно ли читать данные через COM из внешнего скрипта?
Само чтение безопасно, если код не вызывает методы записи и проведения. Риски — в правах пользователя подключения (выдавайте минимально необходимые) и в стабильности: оборванное COM-соединение может оставить зависший сеанс, поэтому предусматривайте освобождение соединения в коде.