Чтобы получить счета из 1С для сайта, CRM или отчёта, не всегда нужно разрабатывать отдельный API. В платформе «1С:Предприятие» есть стандартный интерфейс OData: внешняя программа отправляет HTTP-запрос и получает данные документов или справочников. Покажу, как начать с чтения списка счетов.
Что даёт OData
OData задаёт правила обращения к данным: какой объект запросить, какие поля вернуть, как отфильтровать и отсортировать результат. Интерфейс формирует сама платформа 1С на основе конфигурации. Через него можно читать и изменять данные, создавать документы; для этого нужны соответствующие права.
Для первого знакомства достаточно запроса GET. Он позволяет проверить соединение и структуру ответа, не создавая и не изменяя счета.
Где находятся настройки OData
Выберите свой вариант подключения. Для своей базы администратор сначала организует веб-публикацию, затем настраивает пользователя и доступные объекты средствами вашей конфигурации. Для 1С:Фреш публикация уже включена: переходите сразу к разделу об обработке настройки в приложении.
Окно публикации относится к конфигуратору. Вкладки «Авторизация» и «Состав» показаны на примере обработки из документации 1С:Фреш; наличие такой обработки в любой локальной конфигурации не предполагается.
Открыть публикацию в конфигураторе
Для описанного способа нужны настроенный Apache или IIS, расширение веб-сервера 1С и конфигуратор на компьютере с веб-сервером. Обычного тонкого клиента на рабочем компьютере недостаточно. Администратор заранее проверяет совместимость версий и разрядность компонентов, доступ веб-сервера к базе и настройку HTTPS. Установка этих компонентов — отдельная задача; флажок OData её не выполняет.
На Windows запускайте конфигуратор на компьютере с веб-сервером от имени администратора ОС. При запуске через список баз выделите нужную базу и нажмите «Конфигуратор». Подключение должно позволять открыть её в этом режиме; одного адреса веб-публикации для этого недостаточно.
Права запуска в ОС и права входа в базу — разные условия. После входа в конфигуратор откройте «Администрирование → Публикация на веб-сервере». Раздел «Администрирование» внутри бухгалтерской программы — другое меню. Для публикации на Linux порядок получения системных прав отличается; здесь описан вариант для Windows.
В открывшемся окне укажите имя публикации, выберите настроенный веб-сервер и каталог публикации. В схеме имя публикации — base; при настроенных домене и HTTPS её адрес может быть https://example.com/base/. Само нажатие «Опубликовать» не настраивает домен и сертификат.
Включите «Публиковать стандартный интерфейс OData» и нажмите «Опубликовать». Если публикация уже существует, используйте её параметры, добавив поддержку OData. После публикации выполните предложенный программой перезапуск веб-сервера, если он требуется.

Путь к публикации: список баз → «Конфигуратор» → «Администрирование» → «Публикация на веб-сервере».
Для своей базы после публикации администратор настраивает учётную запись с аутентификацией 1С, разрешением доступа через OData и правами чтения нужных документов. Назначение ролей и способ настройки состава зависят от конфигурации. Если описанной ниже обработки нет, разработчик задаёт состав методом УстановитьСоставСтандартногоИнтерфейсаOData. У облачных провайдеров, кроме 1С:Фреш, порядок подключения нужно уточнять отдельно.
Настроить доступ в 1С:Фреш
В 1С:Фреш откройте своё приложение в браузере под пользователем с ролью «Полные права». Обработку настройки запускает администратор приложения; это не требование выдавать полные права пользователю будущей интеграции. Следующие две иллюстрации показывают вкладки обработки «Настройка автоматического REST-сервиса» из документации сервиса.
В документации указаны три варианта пути, в зависимости от прикладного решения:
- «Администрирование → Синхронизация данных → Настройки стандартного интерфейса OData»;
- «Администрирование и НСИ → Синхронизация данных → Настройки стандартного интерфейса OData»;
- «Настройки → Синхронизация данных → Настройки стандартного интерфейса OData».
Это альтернативные маршруты к одной обработке. Команда меню называется «Настройки стандартного интерфейса OData», а заголовок открытого окна — «Настройка автоматического REST-сервиса». Внутри находятся вкладки «Авторизация» и «Состав».
Если команды нет, проверьте права и руководство к своему приложению и его версии. Переносить этот путь меню в локальную конфигурацию можно только после проверки, что в ней есть такая обработка.
Вкладка «Авторизация»: пользователь интеграции
На вкладке «Авторизация» создайте отдельного служебного пользователя с собственным паролем. Именно его учётные данные будут использоваться в HTTP-запросе. В описанной обработке 1С:Фреш права для OData назначаются служебному пользователю автоматически. Доступные операции определяются правами пользователя. Запрос ниже выполняет только чтение.

Вкладка «Авторизация» открывается после команды «Настройки стандартного интерфейса OData».
Вкладка «Состав»: доступные документы
В том же окне переключитесь с «Авторизации» на «Состав». Раскройте документы и выберите счёт на оплату покупателю. Ориентируйтесь на название в своей конфигурации: оно может отличаться. Если обработка предложит включить связанные объекты, проверьте, какие из них нужны для запроса. Сохраните изменения.

На вкладке «Состав» выбираются виды документов. Отбор отдельных счетов по датам задаётся в HTTP-запросе.
Состав OData и права пользователя решают разные задачи: первый определяет доступные через интерфейс виды объектов, вторые — допустимые действия с данными. Выбор документа в составе не заменяет выдачу прав.
Проверить публикацию до первого запроса
После любого из двух вариантов настройки нужны три вещи: HTTPS-адрес конкретной базы, учётные данные пользователя интеграции и опубликованный вид документа счёта. Для 1С:Фреш берите адрес приложения с идентификатором своей базы, а не адрес главной страницы сервиса.
К адресу базы добавьте /odata/standard.odata/. Запросы примера используют HTTP Basic с логином и паролем пользователя 1С. Успешный вход в веб-клиент через другую учётную запись или единый вход сам по себе не проверяет эти реквизиты. Сначала запросите описание объектов — $metadata; если браузер запрашивает учётные данные, используйте пользователя интеграции:
https://example.com/base/odata/standard.odata/$metadata
Здесь и далее замените адрес на адрес своей публикации. В XML-ответе найдите EntitySet для счетов, затем связанный с ним EntityType с полями. Пример ниже рассчитан на Document_СчетНаОплатуПокупателю с полями Ref_Key, Number, Date, DeletionMark и СуммаДокумента. Если имена отличаются, замените их в URL, параметрах запроса и выводе PHP. Если нужного объекта нет, проверьте состав OData; одного изменения имени в коде недостаточно.
Если вместо XML открывается страница входа облачного сервиса, проверьте адрес и способ авторизации у провайдера. Получение $metadata ещё не подтверждает право чтения самих счетов — это проверит следующий запрос.
Получить до десяти счетов по дате документа
Понадобится PHP 8 с расширением cURL. Передайте логин и пароль через переменные окружения. В Bash их можно задать так; пароль вводится без отображения:
read -r -p 'Логин 1С: ' ODATA_USER
read -r -s -p 'Пароль: ' ODATA_PASSWORD
export ODATA_USER ODATA_PASSWORD
Сохраните код в invoices.php, замените адрес публикации и запустите php invoices.php:
<?php
$base = 'https://example.com/base/odata/standard.odata/';
$user = getenv('ODATA_USER');
$password = getenv('ODATA_PASSWORD');
if ($user === false || $user === '' || $password === false || $password === '') {
throw new RuntimeException('Задайте ODATA_USER и ODATA_PASSWORD');
}
$query = http_build_query([
'$format' => 'json',
'$select' => 'Ref_Key,Number,Date,СуммаДокумента',
'$filter' => 'DeletionMark eq false',
'$orderby' => 'Date desc,Ref_Key asc',
'$top' => 10,
], '', '&', PHP_QUERY_RFC3986);
$url = $base . rawurlencode('Document_СчетНаОплатуПокупателю') . '?' . $query;
$curl = curl_init($url);
curl_setopt_array($curl, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPAUTH => CURLAUTH_BASIC,
CURLOPT_USERPWD => $user . ':' . $password,
CURLOPT_FAILONERROR => true,
CURLOPT_TIMEOUT => 30,
]);
$response = curl_exec($curl);
$error = curl_error($curl);
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
if ($response === false) {
throw new RuntimeException($error);
}
if ($status !== 200) {
throw new RuntimeException('Ожидался HTTP 200, получен ' . $status);
}
$data = json_decode($response, true, 512, JSON_THROW_ON_ERROR);
if (!isset($data['value']) || !is_array($data['value'])) {
throw new RuntimeException('Ожидался список OData в поле value');
}
foreach ($data['value'] as $invoice) {
echo $invoice['Number'], ' ', $invoice['Date'], ' ',
$invoice['СуммаДокумента'], PHP_EOL;
}
$select ограничивает набор полей, $filter исключает документы с пометкой удаления, $orderby сортирует по дате документа от большей к меньшей, а при равных датах — по Ref_Key; $top ограничивает выборку десятью записями. rawurlencode кодирует имя ресурса, а http_build_query — параметры URL. Пример принимает только ответ HTTP 200. Ошибка соединения, другой HTTP-статус, неверный JSON или отсутствие массива value прерывают выполнение. Сортировка по Date не означает порядок фактического создания счетов в базе. Ref_Key — идентификатор документа: его удобно сохранять для последующих обращений к тому же счёту.
Результат — строки с номером, датой и суммой. Формат вывода:
000000042 2026-09-01T00:00:00 15000
Сверьте одну строку с документом в 1С. Пустой массив value означает, что запрос не вернул доступных пользователю счетов по заданному условию. При ошибке авторизации проверьте учётные данные и права, при 403 — права и ограничения веб-сервера, при 404 — адрес публикации и имя объекта, при 400 — поля и параметры по $metadata. Это направления проверки: один HTTP-код не доказывает конкретную причину.
Это первая выборка, а не выгрузка всей базы. Когда чтение заработает, можно добавить отбор по периоду и постраничную загрузку. Для первого шага достаточно увидеть реальные номера и суммы счетов в ответе на один HTTP-запрос.