[{"data":1,"prerenderedAt":24},["ShallowReactive",2],{"article:1c-odata-invoices":3},{"html":4,"toc":5},"\u003Cp>Чтобы получить счета из 1С для сайта, CRM или отчёта, не всегда нужно разрабатывать отдельный API. В платформе «1С:Предприятие» есть стандартный интерфейс OData: внешняя программа отправляет HTTP-запрос и получает данные документов или справочников. Покажу, как начать с чтения списка счетов.\u003C\u002Fp>\n\u003Ch2 id=\"section-1\">Что даёт OData\u003C\u002Fh2>\n\u003Cp>OData задаёт правила обращения к данным: какой объект запросить, какие поля вернуть, как отфильтровать и отсортировать результат. Интерфейс формирует сама платформа 1С на основе конфигурации. Через него можно читать и изменять данные, создавать документы; для этого нужны соответствующие права.\u003C\u002Fp>\n\u003Cp>Для первого знакомства достаточно запроса \u003Ccode>GET\u003C\u002Fcode>. Он позволяет проверить соединение и структуру ответа, не создавая и не изменяя счета.\u003C\u002Fp>\n\u003Ch2 id=\"section-2\">Где находятся настройки OData\u003C\u002Fh2>\n\u003Cp>Выберите свой вариант подключения. Для \u003Cstrong>своей базы\u003C\u002Fstrong> администратор сначала организует веб-публикацию, затем настраивает пользователя и доступные объекты средствами вашей конфигурации. Для \u003Cstrong>1С:Фреш\u003C\u002Fstrong> публикация уже включена: переходите сразу к разделу об обработке настройки в приложении.\u003C\u002Fp>\n\u003Cp>Окно публикации относится к конфигуратору. Вкладки «Авторизация» и «Состав» показаны на примере обработки из документации 1С:Фреш; наличие такой обработки в любой локальной конфигурации не предполагается.\u003C\u002Fp>\n\u003Ch2 id=\"section-3\">Открыть публикацию в конфигураторе\u003C\u002Fh2>\n\u003Cp>Для описанного способа нужны настроенный Apache или IIS, расширение веб-сервера 1С и конфигуратор на компьютере с веб-сервером. Обычного тонкого клиента на рабочем компьютере недостаточно. Администратор заранее проверяет совместимость версий и разрядность компонентов, доступ веб-сервера к базе и настройку HTTPS. Установка этих компонентов — отдельная задача; флажок OData её не выполняет.\u003C\u002Fp>\n\u003Cp>На Windows запускайте конфигуратор на компьютере с веб-сервером \u003Cstrong>от имени администратора ОС\u003C\u002Fstrong>. При запуске через список баз выделите нужную базу и нажмите «Конфигуратор». Подключение должно позволять открыть её в этом режиме; одного адреса веб-публикации для этого недостаточно.\u003C\u002Fp>\n\u003Cp>Права запуска в ОС и права входа в базу — разные условия. После входа в конфигуратор откройте \u003Cstrong>«Администрирование → Публикация на веб-сервере»\u003C\u002Fstrong>. Раздел «Администрирование» внутри бухгалтерской программы — другое меню. Для публикации на Linux порядок получения системных прав отличается; здесь описан вариант для Windows.\u003C\u002Fp>\n\u003Cp>В открывшемся окне укажите имя публикации, выберите настроенный веб-сервер и каталог публикации. В схеме имя публикации — \u003Ccode>base\u003C\u002Fcode>; при настроенных домене и HTTPS её адрес может быть \u003Ccode>https:\u002F\u002Fexample.com\u002Fbase\u002F\u003C\u002Fcode>. Само нажатие «Опубликовать» не настраивает домен и сертификат.\u003C\u002Fp>\n\u003Cp>Включите «Публиковать стандартный интерфейс OData» и нажмите «Опубликовать». Если публикация уже существует, используйте её параметры, добавив поддержку OData. После публикации выполните предложенный программой перезапуск веб-сервера, если он требуется.\u003C\u002Fp>\n\u003Cp>\u003Cimg src=\"\u002Fmedia\u002Farticles\u002F1c-odata-invoices\u002Ffigure-01-publish-v1.webp\" alt=\"Схема окна публикации: включён стандартный интерфейс OData.\" loading=\"lazy\" decoding=\"async\" \u002F>\u003C\u002Fp>\n\u003Cp>\u003Cem>Путь к публикации: список баз → «Конфигуратор» → «Администрирование» → «Публикация на веб-сервере».\u003C\u002Fem>\u003C\u002Fp>\n\u003Cp>Для своей базы после публикации администратор настраивает учётную запись с аутентификацией 1С, разрешением доступа через OData и правами чтения нужных документов. Назначение ролей и способ настройки состава зависят от конфигурации. Если описанной ниже обработки нет, разработчик задаёт состав методом \u003Ccode>УстановитьСоставСтандартногоИнтерфейсаOData\u003C\u002Fcode>. У облачных провайдеров, кроме 1С:Фреш, порядок подключения нужно уточнять отдельно.\u003C\u002Fp>\n\u003Ch2 id=\"section-4\">Настроить доступ в 1С:Фреш\u003C\u002Fh2>\n\u003Cp>В 1С:Фреш откройте своё приложение в браузере под пользователем с ролью \u003Cstrong>«Полные права»\u003C\u002Fstrong>. Обработку настройки запускает администратор приложения; это не требование выдавать полные права пользователю будущей интеграции. Следующие две иллюстрации показывают вкладки обработки \u003Cstrong>«Настройка автоматического REST-сервиса»\u003C\u002Fstrong> из документации сервиса.\u003C\u002Fp>\n\u003Cp>В документации указаны три варианта пути, в зависимости от прикладного решения:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>«Администрирование → Синхронизация данных → Настройки стандартного интерфейса OData»;\u003C\u002Fli>\n\u003Cli>«Администрирование и НСИ → Синхронизация данных → Настройки стандартного интерфейса OData»;\u003C\u002Fli>\n\u003Cli>«Настройки → Синхронизация данных → Настройки стандартного интерфейса OData».\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Это альтернативные маршруты к одной обработке. Команда меню называется «Настройки стандартного интерфейса OData», а заголовок открытого окна — «Настройка автоматического REST-сервиса». Внутри находятся вкладки «Авторизация» и «Состав».\u003C\u002Fp>\n\u003Cp>Если команды нет, проверьте права и руководство к своему приложению и его версии. Переносить этот путь меню в локальную конфигурацию можно только после проверки, что в ней есть такая обработка.\u003C\u002Fp>\n\u003Ch3>Вкладка «Авторизация»: пользователь интеграции\u003C\u002Fh3>\n\u003Cp>На вкладке «Авторизация» создайте отдельного служебного пользователя с собственным паролем. Именно его учётные данные будут использоваться в HTTP-запросе. В описанной обработке 1С:Фреш права для OData назначаются служебному пользователю автоматически. Доступные операции определяются правами пользователя. Запрос ниже выполняет только чтение.\u003C\u002Fp>\n\u003Cp>\u003Cimg src=\"\u002Fmedia\u002Farticles\u002F1c-odata-invoices\u002Ffigure-02-user-v1.webp\" alt=\"Схема вкладки «Авторизация»: отдельный пользователь и пароль для OData.\" loading=\"lazy\" decoding=\"async\" \u002F>\u003C\u002Fp>\n\u003Cp>\u003Cem>Вкладка «Авторизация» открывается после команды «Настройки стандартного интерфейса OData».\u003C\u002Fem>\u003C\u002Fp>\n\u003Ch3>Вкладка «Состав»: доступные документы\u003C\u002Fh3>\n\u003Cp>В том же окне переключитесь с «Авторизации» на \u003Cstrong>«Состав»\u003C\u002Fstrong>. Раскройте документы и выберите счёт на оплату покупателю. Ориентируйтесь на название в своей конфигурации: оно может отличаться. Если обработка предложит включить связанные объекты, проверьте, какие из них нужны для запроса. Сохраните изменения.\u003C\u002Fp>\n\u003Cp>\u003Cimg src=\"\u002Fmedia\u002Farticles\u002F1c-odata-invoices\u002Ffigure-03-objects-v1.webp\" alt=\"Схема вкладки «Состав»: выбран документ «Счёт на оплату покупателю».\" loading=\"lazy\" decoding=\"async\" \u002F>\u003C\u002Fp>\n\u003Cp>\u003Cem>На вкладке «Состав» выбираются виды документов. Отбор отдельных счетов по датам задаётся в HTTP-запросе.\u003C\u002Fem>\u003C\u002Fp>\n\u003Cp>Состав OData и права пользователя решают разные задачи: первый определяет доступные через интерфейс виды объектов, вторые — допустимые действия с данными. Выбор документа в составе не заменяет выдачу прав.\u003C\u002Fp>\n\u003Ch2 id=\"section-5\">Проверить публикацию до первого запроса\u003C\u002Fh2>\n\u003Cp>После любого из двух вариантов настройки нужны три вещи: HTTPS-адрес конкретной базы, учётные данные пользователя интеграции и опубликованный вид документа счёта. Для 1С:Фреш берите адрес приложения с идентификатором своей базы, а не адрес главной страницы сервиса.\u003C\u002Fp>\n\u003Cp>К адресу базы добавьте \u003Ccode>\u002Fodata\u002Fstandard.odata\u002F\u003C\u002Fcode>. Запросы примера используют HTTP Basic с логином и паролем пользователя 1С. Успешный вход в веб-клиент через другую учётную запись или единый вход сам по себе не проверяет эти реквизиты. Сначала запросите описание объектов — \u003Ccode>$metadata\u003C\u002Fcode>; если браузер запрашивает учётные данные, используйте пользователя интеграции:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-text\">https:\u002F\u002Fexample.com\u002Fbase\u002Fodata\u002Fstandard.odata\u002F$metadata\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Здесь и далее замените адрес на адрес своей публикации. В XML-ответе найдите \u003Ccode>EntitySet\u003C\u002Fcode> для счетов, затем связанный с ним \u003Ccode>EntityType\u003C\u002Fcode> с полями. Пример ниже рассчитан на \u003Ccode>Document_СчетНаОплатуПокупателю\u003C\u002Fcode> с полями \u003Ccode>Ref_Key\u003C\u002Fcode>, \u003Ccode>Number\u003C\u002Fcode>, \u003Ccode>Date\u003C\u002Fcode>, \u003Ccode>DeletionMark\u003C\u002Fcode> и \u003Ccode>СуммаДокумента\u003C\u002Fcode>. Если имена отличаются, замените их в URL, параметрах запроса и выводе PHP. Если нужного объекта нет, проверьте состав OData; одного изменения имени в коде недостаточно.\u003C\u002Fp>\n\u003Cp>Если вместо XML открывается страница входа облачного сервиса, проверьте адрес и способ авторизации у провайдера. Получение \u003Ccode>$metadata\u003C\u002Fcode> ещё не подтверждает право чтения самих счетов — это проверит следующий запрос.\u003C\u002Fp>\n\u003Ch2 id=\"section-6\">Получить до десяти счетов по дате документа\u003C\u002Fh2>\n\u003Cp>Понадобится PHP 8 с расширением cURL. Передайте логин и пароль через переменные окружения. В Bash их можно задать так; пароль вводится без отображения:\u003C\u002Fp>\n\u003Cpre tabindex=\"0\" aria-label=\"Блок кода: bash\">\u003Ccode class=\"hljs language-bash\">\u003Cspan class=\"hljs-built_in\">read\u003C\u002Fspan> -r -p \u003Cspan class=\"hljs-string\">'Логин 1С: '\u003C\u002Fspan> ODATA_USER\n\u003Cspan class=\"hljs-built_in\">read\u003C\u002Fspan> -r -s -p \u003Cspan class=\"hljs-string\">'Пароль: '\u003C\u002Fspan> ODATA_PASSWORD\n\u003Cspan class=\"hljs-built_in\">export\u003C\u002Fspan> ODATA_USER ODATA_PASSWORD\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Сохраните код в \u003Ccode>invoices.php\u003C\u002Fcode>, замените адрес публикации и запустите \u003Ccode>php invoices.php\u003C\u002Fcode>:\u003C\u002Fp>\n\u003Cpre tabindex=\"0\" aria-label=\"Блок кода: php\">\u003Ccode class=\"hljs language-php\">\u003Cspan class=\"hljs-meta\">&lt;?php\u003C\u002Fspan>\n\u003Cspan class=\"hljs-variable\">$base\u003C\u002Fspan> = \u003Cspan class=\"hljs-string\">'https:\u002F\u002Fexample.com\u002Fbase\u002Fodata\u002Fstandard.odata\u002F'\u003C\u002Fspan>;\n\u003Cspan class=\"hljs-variable\">$user\u003C\u002Fspan> = \u003Cspan class=\"hljs-title function_\">getenv\u003C\u002Fspan>(\u003Cspan class=\"hljs-string\">'ODATA_USER'\u003C\u002Fspan>);\n\u003Cspan class=\"hljs-variable\">$password\u003C\u002Fspan> = \u003Cspan class=\"hljs-title function_\">getenv\u003C\u002Fspan>(\u003Cspan class=\"hljs-string\">'ODATA_PASSWORD'\u003C\u002Fspan>);\n\u003Cspan class=\"hljs-keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"hljs-variable\">$user\u003C\u002Fspan> === \u003Cspan class=\"hljs-literal\">false\u003C\u002Fspan> || \u003Cspan class=\"hljs-variable\">$user\u003C\u002Fspan> === \u003Cspan class=\"hljs-string\">''\u003C\u002Fspan> || \u003Cspan class=\"hljs-variable\">$password\u003C\u002Fspan> === \u003Cspan class=\"hljs-literal\">false\u003C\u002Fspan> || \u003Cspan class=\"hljs-variable\">$password\u003C\u002Fspan> === \u003Cspan class=\"hljs-string\">''\u003C\u002Fspan>) {\n    \u003Cspan class=\"hljs-keyword\">throw\u003C\u002Fspan> \u003Cspan class=\"hljs-keyword\">new\u003C\u002Fspan> \u003Cspan class=\"hljs-built_in\">RuntimeException\u003C\u002Fspan>(\u003Cspan class=\"hljs-string\">'Задайте ODATA_USER и ODATA_PASSWORD'\u003C\u002Fspan>);\n}\n\u003Cspan class=\"hljs-variable\">$query\u003C\u002Fspan> = \u003Cspan class=\"hljs-title function_\">http_build_query\u003C\u002Fspan>([\n    \u003Cspan class=\"hljs-string\">'$format'\u003C\u002Fspan> =&gt; \u003Cspan class=\"hljs-string\">'json'\u003C\u002Fspan>,\n    \u003Cspan class=\"hljs-string\">'$select'\u003C\u002Fspan> =&gt; \u003Cspan class=\"hljs-string\">'Ref_Key,Number,Date,СуммаДокумента'\u003C\u002Fspan>,\n    \u003Cspan class=\"hljs-string\">'$filter'\u003C\u002Fspan> =&gt; \u003Cspan class=\"hljs-string\">'DeletionMark eq false'\u003C\u002Fspan>,\n    \u003Cspan class=\"hljs-string\">'$orderby'\u003C\u002Fspan> =&gt; \u003Cspan class=\"hljs-string\">'Date desc,Ref_Key asc'\u003C\u002Fspan>,\n    \u003Cspan class=\"hljs-string\">'$top'\u003C\u002Fspan> =&gt; \u003Cspan class=\"hljs-number\">10\u003C\u002Fspan>,\n], \u003Cspan class=\"hljs-string\">''\u003C\u002Fspan>, \u003Cspan class=\"hljs-string\">'&amp;'\u003C\u002Fspan>, PHP_QUERY_RFC3986);\n\n\u003Cspan class=\"hljs-variable\">$url\u003C\u002Fspan> = \u003Cspan class=\"hljs-variable\">$base\u003C\u002Fspan> . \u003Cspan class=\"hljs-title function_\">rawurlencode\u003C\u002Fspan>(\u003Cspan class=\"hljs-string\">'Document_СчетНаОплатуПокупателю'\u003C\u002Fspan>) . \u003Cspan class=\"hljs-string\">'?'\u003C\u002Fspan> . \u003Cspan class=\"hljs-variable\">$query\u003C\u002Fspan>;\n\u003Cspan class=\"hljs-variable\">$curl\u003C\u002Fspan> = \u003Cspan class=\"hljs-title function_\">curl_init\u003C\u002Fspan>(\u003Cspan class=\"hljs-variable\">$url\u003C\u002Fspan>);\n\u003Cspan class=\"hljs-title function_\">curl_setopt_array\u003C\u002Fspan>(\u003Cspan class=\"hljs-variable\">$curl\u003C\u002Fspan>, [\n    CURLOPT_RETURNTRANSFER =&gt; \u003Cspan class=\"hljs-literal\">true\u003C\u002Fspan>,\n    CURLOPT_HTTPAUTH =&gt; CURLAUTH_BASIC,\n    CURLOPT_USERPWD =&gt; \u003Cspan class=\"hljs-variable\">$user\u003C\u002Fspan> . \u003Cspan class=\"hljs-string\">':'\u003C\u002Fspan> . \u003Cspan class=\"hljs-variable\">$password\u003C\u002Fspan>,\n    CURLOPT_FAILONERROR =&gt; \u003Cspan class=\"hljs-literal\">true\u003C\u002Fspan>,\n    CURLOPT_TIMEOUT =&gt; \u003Cspan class=\"hljs-number\">30\u003C\u002Fspan>,\n]);\n\u003Cspan class=\"hljs-variable\">$response\u003C\u002Fspan> = \u003Cspan class=\"hljs-title function_\">curl_exec\u003C\u002Fspan>(\u003Cspan class=\"hljs-variable\">$curl\u003C\u002Fspan>);\n\u003Cspan class=\"hljs-variable\">$error\u003C\u002Fspan> = \u003Cspan class=\"hljs-title function_\">curl_error\u003C\u002Fspan>(\u003Cspan class=\"hljs-variable\">$curl\u003C\u002Fspan>);\n\u003Cspan class=\"hljs-variable\">$status\u003C\u002Fspan> = \u003Cspan class=\"hljs-title function_\">curl_getinfo\u003C\u002Fspan>(\u003Cspan class=\"hljs-variable\">$curl\u003C\u002Fspan>, CURLINFO_HTTP_CODE);\n\u003Cspan class=\"hljs-title function_\">curl_close\u003C\u002Fspan>(\u003Cspan class=\"hljs-variable\">$curl\u003C\u002Fspan>);\n\u003Cspan class=\"hljs-keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"hljs-variable\">$response\u003C\u002Fspan> === \u003Cspan class=\"hljs-literal\">false\u003C\u002Fspan>) {\n    \u003Cspan class=\"hljs-keyword\">throw\u003C\u002Fspan> \u003Cspan class=\"hljs-keyword\">new\u003C\u002Fspan> \u003Cspan class=\"hljs-built_in\">RuntimeException\u003C\u002Fspan>(\u003Cspan class=\"hljs-variable\">$error\u003C\u002Fspan>);\n}\n\u003Cspan class=\"hljs-keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"hljs-variable\">$status\u003C\u002Fspan> !== \u003Cspan class=\"hljs-number\">200\u003C\u002Fspan>) {\n    \u003Cspan class=\"hljs-keyword\">throw\u003C\u002Fspan> \u003Cspan class=\"hljs-keyword\">new\u003C\u002Fspan> \u003Cspan class=\"hljs-built_in\">RuntimeException\u003C\u002Fspan>(\u003Cspan class=\"hljs-string\">'Ожидался HTTP 200, получен '\u003C\u002Fspan> . \u003Cspan class=\"hljs-variable\">$status\u003C\u002Fspan>);\n}\n\n\u003Cspan class=\"hljs-variable\">$data\u003C\u002Fspan> = \u003Cspan class=\"hljs-title function_\">json_decode\u003C\u002Fspan>(\u003Cspan class=\"hljs-variable\">$response\u003C\u002Fspan>, \u003Cspan class=\"hljs-literal\">true\u003C\u002Fspan>, \u003Cspan class=\"hljs-number\">512\u003C\u002Fspan>, JSON_THROW_ON_ERROR);\n\u003Cspan class=\"hljs-keyword\">if\u003C\u002Fspan> (!\u003Cspan class=\"hljs-keyword\">isset\u003C\u002Fspan>(\u003Cspan class=\"hljs-variable\">$data\u003C\u002Fspan>[\u003Cspan class=\"hljs-string\">'value'\u003C\u002Fspan>]) || !\u003Cspan class=\"hljs-title function_\">is_array\u003C\u002Fspan>(\u003Cspan class=\"hljs-variable\">$data\u003C\u002Fspan>[\u003Cspan class=\"hljs-string\">'value'\u003C\u002Fspan>])) {\n    \u003Cspan class=\"hljs-keyword\">throw\u003C\u002Fspan> \u003Cspan class=\"hljs-keyword\">new\u003C\u002Fspan> \u003Cspan class=\"hljs-built_in\">RuntimeException\u003C\u002Fspan>(\u003Cspan class=\"hljs-string\">'Ожидался список OData в поле value'\u003C\u002Fspan>);\n}\n\u003Cspan class=\"hljs-keyword\">foreach\u003C\u002Fspan> (\u003Cspan class=\"hljs-variable\">$data\u003C\u002Fspan>[\u003Cspan class=\"hljs-string\">'value'\u003C\u002Fspan>] \u003Cspan class=\"hljs-keyword\">as\u003C\u002Fspan> \u003Cspan class=\"hljs-variable\">$invoice\u003C\u002Fspan>) {\n    \u003Cspan class=\"hljs-keyword\">echo\u003C\u002Fspan> \u003Cspan class=\"hljs-variable\">$invoice\u003C\u002Fspan>[\u003Cspan class=\"hljs-string\">'Number'\u003C\u002Fspan>], \u003Cspan class=\"hljs-string\">' '\u003C\u002Fspan>, \u003Cspan class=\"hljs-variable\">$invoice\u003C\u002Fspan>[\u003Cspan class=\"hljs-string\">'Date'\u003C\u002Fspan>], \u003Cspan class=\"hljs-string\">' '\u003C\u002Fspan>,\n        \u003Cspan class=\"hljs-variable\">$invoice\u003C\u002Fspan>[\u003Cspan class=\"hljs-string\">'СуммаДокумента'\u003C\u002Fspan>], PHP_EOL;\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Ccode>$select\u003C\u002Fcode> ограничивает набор полей, \u003Ccode>$filter\u003C\u002Fcode> исключает документы с пометкой удаления, \u003Ccode>$orderby\u003C\u002Fcode> сортирует по дате документа от большей к меньшей, а при равных датах — по \u003Ccode>Ref_Key\u003C\u002Fcode>; \u003Ccode>$top\u003C\u002Fcode> ограничивает выборку десятью записями. \u003Ccode>rawurlencode\u003C\u002Fcode> кодирует имя ресурса, а \u003Ccode>http_build_query\u003C\u002Fcode> — параметры URL. Пример принимает только ответ HTTP 200. Ошибка соединения, другой HTTP-статус, неверный JSON или отсутствие массива \u003Ccode>value\u003C\u002Fcode> прерывают выполнение. Сортировка по \u003Ccode>Date\u003C\u002Fcode> не означает порядок фактического создания счетов в базе. \u003Ccode>Ref_Key\u003C\u002Fcode> — идентификатор документа: его удобно сохранять для последующих обращений к тому же счёту.\u003C\u002Fp>\n\u003Cp>Результат — строки с номером, датой и суммой. Формат вывода:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-text\">000000042 2026-09-01T00:00:00 15000\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Сверьте одну строку с документом в 1С. Пустой массив \u003Ccode>value\u003C\u002Fcode> означает, что запрос не вернул доступных пользователю счетов по заданному условию. При ошибке авторизации проверьте учётные данные и права, при \u003Ccode>403\u003C\u002Fcode> — права и ограничения веб-сервера, при \u003Ccode>404\u003C\u002Fcode> — адрес публикации и имя объекта, при \u003Ccode>400\u003C\u002Fcode> — поля и параметры по \u003Ccode>$metadata\u003C\u002Fcode>. Это направления проверки: один HTTP-код не доказывает конкретную причину.\u003C\u002Fp>\n\u003Cp>Это первая выборка, а не выгрузка всей базы. Когда чтение заработает, можно добавить отбор по периоду и постраничную загрузку. Для первого шага достаточно увидеть реальные номера и суммы счетов в ответе на один HTTP-запрос.\u003C\u002Fp>\n",[6,9,12,15,18,21],{"id":7,"title":8},"section-1","Что даёт OData",{"id":10,"title":11},"section-2","Где находятся настройки OData",{"id":13,"title":14},"section-3","Открыть публикацию в конфигураторе",{"id":16,"title":17},"section-4","Настроить доступ в 1С:Фреш",{"id":19,"title":20},"section-5","Проверить публикацию до первого запроса",{"id":22,"title":23},"section-6","Получить до десяти счетов по дате документа",1790857237955]