Вызываем LLM из нативного кода 1С: Предприятие (внешняя обработка, HTTP-запрос и парсинг ответа)

17.10.26

Интеграция - Нейросети

Как обратиться к LLM прямо из модуля обработки: тело запроса в JSON, чтение ответа, перевод таблицы значений в текст. Встроенного ИИ в платформе нет, «1С:Напарник» работает в 1С:EDT. Собственный модуль я прогнала на платформе 8.3.27.2130: файловая и клиент-серверная база, тонкий и веб-клиент, фоновое задание, настоящий API OpenRouter. В архиве модуль, обработка .epf и стенд.

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Вызываем LLM из нативного кода 1С: Предприятие (внешняя обработка, HTTP-запрос и парсинг ответа):
.zip 44,19Kb
0 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.
🧠 AI, Нейросети & MCP
🎯 О чём это (в трёх тезисах)
🗸Вызов языковой модели из модуля 1С по HTTP и JSON.
🗸Ii-zapros.bsl: тело запроса, разбор ответа, таблица в текст, внешняя обработка .epf и стенд прогона с протоколами, шаблон промпта и чек-лист по отправляемым данным.
🗸Обработку с обращением к модели можно собрать из штатных объектов платформы, без выгрузки конфигурации и без внешнего редактора.
🧪 Отчёт о тестировании файла-компаньона
Архив09.2-companion.zip: ii-zapros.bsl, готовая обработка simple-client-ai.epf, каталог stand/ (сборка базы и обработки, сценарии вызовов, заглушка, запуск кластера, клиента и веб-публикации, Dockerfile СУБД, сравнение сервисов, протоколы), шаблон промпта, чек-лист по данным, примеры ответов JSON, README
Где и когда07.10.2026, Windows 11, платформа 1С:Предприятие 8.3.27.2130 (файловая база и база кластера серверов с Postgres Pro 1C 17 в Docker, тонкий клиент, веб-клиент через Apache 2.4 на порту 8081), Python 3.12.10, локальный HTTPS-сервис на localhost:8443 и настоящий сервис OpenRouter
Что запускалосьpython build_ib.py (сборка базы и /CheckModules), e2e.ps1 и openrouter.ps1 в 32-битном PowerShell, python build_epf.py, открытие обработки в тонком клиенте (Файл - Открыть) и в веб-клиенте (окно «Выбор файлов»), webinst.exe -publish -apache24, python compare_providers.py, start_cluster.ps1, rac infobase create (клиент-серверный вариант) и sched.ps1 (регламентное задание)
Результат/CheckModules без ошибок; заглушка: 200, 429, пустой choices, таймаут 2 с (2068 мс), самоподписанный сертификат отвергнут; OpenRouter (google/gemini-2.5-flash-lite): 200 за 901 мс, сводка по таблице 200 за 831 мс, 401 и 400 на неверный ключ и модель; обработка в тонком клиенте и в веб-клиенте: ответ заглушки, текст ошибки 429, ответ OpenRouter «Берлин»; фоновое задание: выполнено за 1 797 мс (тонкий клиент), 1 603 мс (веб-клиент), 848 мс (кластер серверов); клиент-серверный вариант: ответ «Берлин» от OpenRouter; регламентное задание в базе кластера: четыре запуска за 210 с, ответы за 601-947 мс; сравнение двух сервисов на 5 вопросах с проверкой ответов платформой
Не проверенорасписание регламентного задания по дням недели и повтор после сбоя, отказоустойчивость кластера и параллельные сеансы, длинные запросы и лимиты провайдера
🧠 Суть статьи

Программисту 1С: как вызвать языковую модель из модуля обработки и вернуть ответ в базу. Встроенного ИИ в конфигураторе нет, сервис вызывают через HTTPСоединение, HTTPЗапрос, ЗаписьJSON, ЧтениеJSON. Модуль прогнан на платформе 8.3.27.2130: файловая и клиент-серверная база, тонкий и веб-клиент, фоновое задание, OpenRouter. В архиве модуль, обработка .epf, стенд и чек-лист по данным.

Ключевые идеи
  • Встроенного ИИ в платформе 1С нет: «1С:Напарник» работает в среде 1С:EDT, а из кода 1С модель вызывается по HTTP.
  • Тело запроса собирают Структурой и ЗаписьJSON, ответ читают ЧтениеJSON в Соответствие, код состояния проверяют до разбора тела; на платформе проверены ответы 200, 429, 401, 400, пустой choices и таймаут.
  • Таблицу значений переводят в текст с разделителем и ограничивают число строк: у модели есть предел входного контекста.
  • Ключ доступа живёт в настройке, поля перечисляются явно, персональные данные обезличиваются до отправки.
  • Долгий вызов уводится в фоновое задание: синхронный запрос держит сеанс.
Главная мысль

Обращение к LLM из 1С - это HTTP-запрос и парсинг JSON на штатных объектах платформы. Внешний редактор не нужен, но нужен ответ на вопрос, какие данные допустимо отправлять во внешний сервис.

Для кого: программисты 1С, которым нужен ИИ внутри контура: в обработке на сервере, в регламентном задании или на рабочем месте пользователя.

Встроенного ИИ в платформе 1С нет. Платформа даёт HTTP-соединение и работу с JSON, а обращение к модели пишется в модуле обработки. Отдельный продукт 1С с моделями, «1С:Напарник», работает в среде 1С:EDT: в конфигуратор и в пользовательский режим он не встроен.

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

📦 Что берём из платформы

Схема стенда: прогон модуля ii-zapros.bsl на платформе 8.3.27.2130 против локального HTTPS-сервиса

Схема стенда прогона: PowerShell, файловая база 1С, локальный HTTPS-сервис mock_llm.py, протокол и журнал запросов

Для обращения к сервису хватает четырёх объектов встроенного языка:

  • HTTPСоединение: соединение с сервером. В конструкторе задаются сервер, порт, таймаут и объект защищённого соединения. Метод ОтправитьДляОбработки отправляет POST-запрос, Получить читает ответ GET.
  • HTTPЗапрос: адрес ресурса, заголовки и тело. Метод УстановитьТелоИзСтроки кладёт в тело строку, кодировка по умолчанию UTF-8.
  • HTTPОтвет: свойство КодСостояния и метод ПолучитьТелоКакСтроку.
  • ЗаписьJSON и ЧтениеJSON: сборка тела и разбор ответа, плюс глобальные процедуры ЗаписатьJSON и ПрочитатьJSON.

HTTPS требует объекта защищённого соединения: без него соединение пойдёт по HTTP и сервис его отклонит. В справке платформы приведён пример Новый ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаОС, Новый СертификатыУдостоверяющихЦентровОС, РежимПроверкиОтзываСертификатовУдостоверяющихЦентров.Строгий).

Чего в платформе нет: клиента конкретного сервиса, учёта израсходованных токенов, потоковой выдачи ответа и общей для всех моделей обёртки. Всё это пишется в модуле обработки или не делается вовсе.

🧱 Тело запроса

Тело - обычная структура с полем model и массивом сообщений, как в OpenAI-совместимом протоколе. Заголовок Authorization несёт ключ доступа, Content-Type сообщает формат.

BSL UTF-8 фрагмент
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
// Собирает тело запроса и возвращает строку JSON.
Функция СобратьТелоЗапроса(Модель, ТекстЗапроса, ОграничениеОтвета) Экспорт

    Сообщение = Новый Структура;
    Сообщение.Вставить("role", "user");
    Сообщение.Вставить("content", ТекстЗапроса);

    Сообщения = Новый Массив;
    Сообщения.Добавить(Сообщение);

    Тело = Новый Структура;
    Тело.Вставить("model", Модель);
    Тело.Вставить("messages", Сообщения);
    Тело.Вставить("max_tokens", ОграничениеОтвета);
    Тело.Вставить("temperature", 0);

    Запись = Новый ЗаписьJSON;
    Запись.УстановитьСтроку();
    ЗаписатьJSON(Запись, Тело);

    Возврат Запись.Закрыть(); // при записи в строку возвращает готовый JSON

КонецФункции

// Отправляет запрос и возвращает объект HTTPОтвет.
// Порт и Защита необязательны: по умолчанию HTTPS на порту 443 с сертификатами операционной системы.
Функция ОтправитьЗапрос(Сервер, АдресРесурса, КлючДоступа, Тело, Таймаут, Порт = 443, Защита = Неопределено) Экспорт

    Если Защита = Неопределено Тогда
        Защита = Новый ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаОС,
            Новый СертификатыУдостоверяющихЦентровОС);
    КонецЕсли;
    Соединение = Новый HTTPСоединение(Сервер, Порт, , , , Таймаут, Защита);

    Запрос = Новый HTTPЗапрос(АдресРесурса);
    Запрос.Заголовки.Вставить("Content-Type", "application/json");
    Запрос.Заголовки.Вставить("Authorization", "Bearer " + КлючДоступа);
    Запрос.УстановитьТелоИзСтроки(Тело);

    Возврат Соединение.ОтправитьДляОбработки(Запрос);

КонецФункции

Таймаут задаётся числом секунд в конструкторе соединения; в примере он приходит параметром. Порт и объект защищённого соединения тоже можно передать снаружи: по умолчанию это порт 443 и сертификаты операционной системы, а для проверки на локальном сервисе с собственным сертификатом подставляется Новый ЗащищенноеСоединениеOpenSSL(Неопределено, Новый СертификатыУдостоверяющихЦентровФайл(ПутьКСертификату)). Адрес ресурса и имя модели зависят от сервиса: у каждого провайдера свой адрес и свои поля, поэтому сверяйте их с его документацией. Ключ в модуле не хранят - он приходит из настройки или из переменной окружения.

🧪 Разбор ответа

Ответ приходит в JSON. Объекты удобно читать в Соответствие: тогда к полям обращаются по имени, и лишние поля сервиса не ломают разбор.

BSL UTF-8 фрагмент
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// Возвращает текст ответа модели или пустую строку, если поля нет.
Функция ТекстОтвета(Ответ) Экспорт

    Если Ответ.КодСостояния <> 200 Тогда
        ВызватьИсключение СтрШаблон("Сервис вернул код %1: %2",
            Ответ.КодСостояния, Ответ.ПолучитьТелоКакСтроку());
    КонецЕсли;

    Чтение = Новый ЧтениеJSON;
    Чтение.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
    Данные = ПрочитатьJSON(Чтение, Истина); // Истина - объекты читаются в Соответствие
    Чтение.Закрыть();

    Выбор = Данные.Получить("choices");
    Если Выбор = Неопределено Или Выбор.Количество() = 0 Тогда
        Возврат "";
    КонецЕсли;

    Возврат Выбор[0]["message"]["content"];

КонецФункции

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

🧰 Данные из базы в текст

Таблица значений в JSON уходит плохо: модель читает текст и структуру таблицы не видит. Дешевле перевести строки в текст с разделителем, а число строк ограничить.

BSL UTF-8 фрагмент
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// Переводит таблицу значений в текст. МаксимумСтрок - условный пример ограничения.
Функция ТаблицаВТекст(Таблица, МаксимумСтрок = 100) Экспорт

    Колонки = Новый Массив;
    Для Каждого Колонка Из Таблица.Колонки Цикл
        Колонки.Добавить(Колонка.Имя);
    КонецЦикла;

    Описание = Новый Массив;
    Описание.Добавить("Колонки: " + СтрСоединить(Колонки, " | "));

    Счетчик = 0;
    Для Каждого СтрокаТаблицы Из Таблица Цикл
        Если Счетчик >= МаксимумСтрок Тогда
            Описание.Добавить("... строк не показано: " + (Таблица.Количество() - Счетчик));
            Прервать;
        КонецЕсли;

        Значения = Новый Массив;
        Для Каждого Колонка Из Таблица.Колонки Цикл
            Значения.Добавить(Строка(СтрокаТаблицы[Колонка.Имя]));
        КонецЦикла;

        Описание.Добавить(СтрСоединить(Значения, " | "));
        Счетчик = Счетчик + 1;
    КонецЦикла;

    Возврат СтрСоединить(Описание, Символы.ПС);

КонецФункции

Числа Строка() выводит по региональным настройкам: 1000,5 превращается в 1 000,5 с неразрывным пробелом (код U+00A0) и десятичной запятой. Модель такой текст читает, а разбирать его обратно кодом без замены пробела не стоит.

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

🔬 Что показал прогон на платформе

Прогон шёл на платформе 1С:Предприятие 8.3.27.2130 в три этапа: серверный вызов через COM-соединение против локальной заглушки, настоящий сервис OpenRouter и простейшая внешняя обработка в тонком клиенте. Стенд: файловая база вне OneDrive, модуль из архива как общий модуль с признаками «Сервер» и «Внешнее соединение», вместо сервиса модели на первом этапе - локальный Python-сервер на https://localhost:8443 с самоподписанным сертификатом. Он принимает тело запроса, проверяет заголовок Authorization и отвечает по имени модели в теле. Проверку модулей платформа прошла (/CheckModules для тонкого клиента, сервера и внешнего соединения: «Синтаксических ошибок не обнаружено!»).

Этап 1. Вызов на сервере

Случай Что вернул модуль
Нормальный ответ код 200, текст из choices[0].message.content; сервис получил тело с кириллицей и max_tokens: 200
Код 429 исключение «Сервис вернул код 429» с телом ответа, до разбора JSON дело не дошло
Код 200 и пустой choices пустая строка, исключения нет
Ответ позже таймаута (2 секунды, сервис ждёт 6) исключение «Превышен таймаут», обрыв через 2068 мс
Самоподписанный сертификат при сертификатах ОС (вариант по умолчанию) исключение «Удаленный узел не прошел проверку»
Таблица из 5 строк, максимум 3 заголовок колонок, три строки и «... строк не показано: 2»

Этап 2. Настоящий провайдер

Те же функции модуля, без правок, против openrouter.ai на порту 443 с сертификатами операционной системы, модель google/gemini-2.5-flash-lite, ключ из переменной окружения:

Случай Что вернул модуль
Вопрос «Ответь одним словом: столица Франции?» код 200, текст «Париж», 901 мс
Сводка по таблице из 4 строк (ТаблицаВТекст и запрос к модели) код 200, ответ называет болт М8х40 (15 шт) и шпильку М10 (0 шт) как позиции с дефицитом, 831 мс
Просроченный ключ исключение «Сервис вернул код 401» с телом API key expired, 633 мс
Ключ несуществующего пользователя код 401, User not found., 442 мс
Несуществующая модель код 400, ... is not a valid model ID, 314 мс

Сертификаты ОС для openrouter.ai дополнительной настройки не потребовали. Все три ошибочных ответа дошли до исключения с понятным текстом, разбор JSON при этом не запускался.

Этап 3. Внешняя обработка в тонком клиенте

Простейшая обработка «Простой клиент ИИ» собрана платформой из XML (build_epf.py в архиве, файл 10 403 байта). В модуле объекта лежит код из архива и функция Спросить, форма содержит поля сервера, порта, адреса ресурса, ключа, модели, файла сертификата, запроса и ответа и кнопку «Спросить модель». Открывается обработка в тонком клиенте через «Файл - Открыть» (Ctrl+O), и платформа сразу спрашивает разрешение:

Предупреждение безопасности при открытии внешней обработки в тонком клиенте 1С

Предупреждение безопасности при открытии файла обработки: ответ «Да» открывает форму.

Форма обработки «Простой клиент ИИ» с заполненными по умолчанию полями

Форма обработки: в полях значения для локальной заглушки.

Нажатие «Спросить модель» против локальной заглушки:

Ответ локальной заглушки в форме обработки

Заглушка отвечает «Получено символов: 52. Макс. токенов: 300.»: запрос дошёл до сервиса и ответ разобран.

Ошибка 429 в форме обработки

Модель limit: в поле ответа текст ошибки с кодом 429 и телом ответа.

Тот же вызов против настоящего сервиса: в форме сервер openrouter.ai, порт 443, адрес /api/v1/chat/completions, модель google/gemini-2.5-flash-lite, поля ключа и сертификата пустые, ключ обработка берёт из переменной окружения:

Ответ OpenRouter в форме обработки

Ответ настоящей модели: «Позиция с дефицитом (меньше 100 шт) - болт М8х40.»

Клиент показал то, чего не видно на сервере:

  • Чтение переменной окружения. Во встроенном языке такой функции нет: имена ПолучитьПеременнуюСреды, ПолучитьПеременнуюОкружения, ПолучитьПеременнуюСредыОкружения и ПолучитьЗначениеПеременнойСреды дали ошибку компиляции. Ключ берётся через Новый COMОбъект("WScript.Shell") и ExpandEnvironmentStrings; это работает на Windows и в файловой базе, на сервере 1С хранят ключ в настройке.
  • Предупреждение о COM-объекте. Первое обращение к WScript.Shell платформа прерывает и спрашивает разрешение для модуля. После ответа «Да» текущее действие нужно повторить: первое нажатие кнопки ответа не даёт.
Предупреждение платформы о подключении исполнимого файла WScript.Shell

Предупреждение о подключении исполнимого файла для модуля обработки.

Этап 4. Веб-клиент

Кнопка «Спросить в фоне» запускает ФоновыеЗадания.Выполнить("ПроверкаИИ.ФоновыйВызов", ...), ждёт ОжидатьЗавершенияВыполнения(60) и читает сообщения задания. В тонком клиенте с файловой базой задание завершилось успешно:

Результат фонового задания в тонком клиенте

Фоновое задание в тонком клиенте: состояние «Задание выполнено», вызов модели занял 1 057 мс, всё задание 1 797 мс.

Одна ошибка прогона касается формы: имя Параметры занято самой формой, присвоение массиву даёт «Поле объекта недоступно для записи», переменную пришлось назвать МассивПараметров. Из COM-соединения то же задание после ожидания в 120 секунд оставалось в состоянии «Задание выполняется»; причину я не выясняла.

Веб-клиент проверялся на той же файловой базе. Публикацию сделал webinst.exe -publish -apache24 в 32-битный Apache 2.4 с модулем wsap24.dll из поставки платформы: порт 8081, права администратора не понадобились, IIS не включался. Страница http://localhost:8081/nopik/ открывается в Microsoft Edge. Обработку веб-клиент открывает через собственное окно «Выбор файлов» (Ctrl+O, «выберите с диска»), предупреждения безопасности при этом нет:

Ответ OpenRouter в форме обработки в веб-клиенте

Веб-клиент: ответ «Берлин» от настоящего сервиса, ключ взят из окружения процесса Apache.

Фоновое задание в веб-клиенте

Веб-клиент: фоновое задание выполнено за 1 603 мс, вызов модели 762 мс.

При автоматическом вводе в веб-клиенте нужны паузы между действиями: при быстрой подстановке текст запроса попал в поле сертификата. После обрыва браузера без выхода из сеанса следующий вход через тот же Apache выдал «В данный момент вход в приложение невозможен»; перезапуск Apache помог.

Этап 5. Сравнение сервисов на наборе вопросов

Модуль из архива ни от чего, кроме формата тела, не зависит, поэтому на нём удобно сравнивать сервисы на регрессионном наборе. Здесь сравнение коротких ответов двух сервисов: сервис А - OpenAI-совместимый шлюз (google/gemini-2.5-flash-lite), сервис Б - вопросно-ответный сервис с контрактом {question, product}, разработка автора статьи; адрес в статье не приводится. Пять вопросов (у сервиса А температура 0), ответы проверены на платформе 8.3.27.2130 (stand/compare-run.json, stand/claims-run.txt):

Вопрос Сервис А Сервис Б Проверка на платформе
Столица Германии? «Берлин», 0,8 с «Берлин», 11,7 с совпадают
Какой объект отправляет запрос и возвращает HTTPОтвет? HTTPСоединение, 1,1 с HTTPСоединение и метод ОтправитьДляОбработки, 6,6 с оба верны, Б точнее
Как прочитать JSON в Соответствие? ПрочитатьJSON у объекта ДжейсонТекст, 0,8 с функция ПреобразоватьJSONВСоответствие, 5,6 с оба неверны: ДжейсонТекст - «Тип не определен», ПреобразоватьJSONВСоответствие - «Процедура или функция не определена»; верно ПрочитатьJSON(Чтение, Истина)
Как ограничить таблицу перед отправкой? обрезать строки или агрегировать, 0,8 с Свернуть(), ПЕРВЫЕ, лимит по токенам, 12,2 с Свернуть выполняется; оба ответа применимы
Что делает УстановитьТелоИзСтроки? тело из строки в UTF-8, 0,8 с тело из строки, кодировка и BOM, 5,6 с вызов с тремя параметрами (строка, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать) выполняется; оба верны, Б полнее

Сервис А отвечал за 0,8-1,1 секунды, сервис Б за 5,6-12,2 секунды с номерами источников в ответе. Ошибка в вопросе про JSON общая: имя из ответа модели нужно проверять компилятором, прежде чем нести в код. Выборка из пяти вопросов иллюстрирует способ сверки; рейтинга сервисов из неё не получается.

Этап 6. Клиент-серверный вариант

Кластер серверов 1С входит в поставку платформы, но информационной базе в кластере нужна СУБД. Стандартный PostgreSQL 16 на создание базы ответил ошибкой extension "mchar" is not available: расширения 1С в нём отсутствуют. Рабочим оказался пакет postgrespro-1c-17 из репозитория производителя (PostgreSQL 17.10, Debian 12 в Docker, русская локаль); Dockerfile и start.sh лежат в stand/docker. Кластер поднимался из процессов пользователя без службы и без прав администратора (stand/start_cluster.ps1): агент на порту 2540, менеджер кластера 2541, сервер администрирования ras 2545, база создана командой rac infobase create --create-database и заполнена /LoadConfigFromFiles с подключением /S localhost:2541\nopik_llm.

Строка подключения к серверу 1С содержит порт менеджера кластера (2541). С портом агента (2540) Конфигуратор отвечает «Адрес не является адресом кластера серверов 1С:Предприятия».

Тонкий клиент подключается к базе кластера, обработка открывается так же, как в файловом варианте:

Ответ OpenRouter в клиент-серверном варианте

Клиент-серверный вариант: ответ «Берлин» получен рабочим процессом кластера; ключ читается из окружения процесса агента.

Фоновое задание в клиент-серверном варианте

Фоновое задание на сервере: состояние «Задание выполнено», 848 мс, вызов модели 650 мс.

Ключ OpenRouter рабочий процесс кластера получает от агента, поэтому агент запускают с переменной окружения; в службе Windows её задают в параметрах службы. В клиент-серверной базе фоновое задание исполняет рабочий процесс кластера, и ему же принадлежит исходящее соединение: файрвол и прокси настраиваются для сервера 1С; рабочее место пользователя в этом соединении не участвует.

Регламентное задание проверено в базе кластера (sched.ps1, метод ПроверкаИИ.РегламентныйВызов, протокол sched-run.txt): предопределённое задание ПроверкаВызоваМодели включено с периодом 60 секунд, за 210 секунд прошло четыре запуска, ответ OpenRouter «Вена» пришёл за 601-947 мс, после чего задание выключено. Ключ задание берёт из окружения процесса рабочего сервера, как и фоновое.

Прогон дал две правки кода и одну находку. Первая правка: функции без ключевого слова Экспорт из общего модуля снаружи не видны, платформа отвечает «Метод объекта не обнаружен». Внутри модуля обработки они работают, а при переносе в общий модуль нужен Экспорт; в архиве он уже стоит. Вторая: порт 443 и сертификаты ОС были вшиты в функцию, и локальный сервис на другом порту проверить было нечем. Теперь Порт и Защита приходят необязательными параметрами. Находка касается чисел и описана выше, в разделе про таблицу.

Границы прогона. Качество ответов проверялось одной моделью на коротких запросах; лимиты провайдера и поведение при длинных ответах не измерялись. Запуски шли на сервере через внешнее соединение, в тонком клиенте и в веб-клиенте с файловой базой и в тонком клиенте с базой кластера серверов (один сервер, один пользователь, без нагрузки). Отказоустойчивость кластера, блокировки и параллельные сеансы не проверялись. Регламентное задание проверялось в базе кластера: период 60 секунд, четыре запуска за 210 секунд. Расписание по дням недели, повтор после сбоя и запрет заданий на сервере не проверялись.

🚧 Границы

  • Модель не знает вашу конфигурацию. Имена реквизитов, регистров и процедур ей нужно передать в промпте: описанием структуры или выдержкой из метаданных.
  • Ответ модели - текст. Если из него нужно получить запрос или код, его придётся разобрать и проверить: синтаксис BSL и язык запросов модель знает неровно.
  • Обработка на сервере не имеет доступа к интерфейсу. Всё, что показывается пользователю, собирается в отдельной процедуре.
  • Синхронный вызов держит сеанс. Долгий запрос к сервису на клиенте выглядит как зависшая форма, поэтому такие вызовы выносят в фоновое задание.
  • Привилегированный режим и права: обработка, читающая данные для отправки, работает под правами пользователя, и обходить RLS в ней не следует.

🔒 Безопасность

Главный вопрос при внедрении - какие данные уходят. Три правила, которые закрывают большинство случаев:

  1. Перечисляйте поля явно. Запрос на отправку строится из фиксированного списка колонок: произвольную таблицу пользователя в тело не кладут.
  2. Обезличивайте персональные данные. ФИО, телефоны, адреса, номера документов заменяются масками до отправки; обратная замена делается на стороне 1С по справочнику соответствия.
  3. Отделяйте окружения. Ключ доступа и адрес сервиса берутся из настройки: в коде, в Git и в поставке обработки их быть не должно.

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

📋 Порядок внедрения

  1. Выберите одну задачу: сводка по данным, разбор текста комментариев, черновик запроса по описанию.
  2. Возьмите внешнюю обработку с четырьмя функциями из архива, подставьте адрес сервиса, имя модели и ключ.
  3. Прогоните вызов на копии базы с ограничением в 10-20 строк таблицы и посмотрите, что приходит в ответе.
  4. Зафиксируйте в списке полей, какие данные разрешено отправлять, и внесите обезличивание в код до первого запуска на рабочей базе.
  5. Оформите обработку как регламентное задание с логированием: дата, пользователь, длина запроса, код ответа. Полные тексты запросов в журнал не пишут.

📚 Источники

📎 Файл к статье

Во вложении архив к статье: модуль, шаблон промпта, чек-лист по данным, два примера ответа сервиса и описание к ним.

  • ii-zapros.bsl: модуль обработки целиком - сборка тела, отправка, разбор ответа, перевод таблицы в текст;
  • shablon-prompta.md: шаблон промпта для разбора таблицы и три примера заполнения;
  • chek-list-dannyh.md: чек-лист по данным - что можно отправлять во внешний сервис, как обезличивать, что писать в журнал;
  • primer-otveta.json: условный пример ответа сервиса, на котором проверялся разбор;
  • primer-otveta-oshibka.json: условные примеры ответа с кодом 429 и ответа с пустым массивом choices - два случая, где разбор падает без проверок;
  • stand/: стенд прогона - сборка проверочной базы, вспомогательный модуль, сценарий вызовов, локальный HTTPS-сервис-заглушка, сценарий проверки на OpenRouter, сборка обработки build_epf.py, запуск клиента launch_client.ps1 и протоколы прогонов e2e-run.txt и openrouter-run.txt;
  • simple-client-ai.epf: готовая простейшая внешняя обработка «Простой клиент ИИ»;
  • README.md: что внутри, как подключить модуль к внешней обработке, что проверено на платформе и что нет.

Модуль из архива можно вставить в модуль внешней обработки или в общий модуль серверного вызова: он не зависит от конкретной конфигурации и не обращается к её объектам.

🏁 Итог

Обращение к языковой модели из 1С собирается из штатных объектов платформы: HTTPСоединение, HTTPЗапрос, ЗаписьJSON, ЧтениеJSON. Встроенного ИИ в конфигураторе при этом нет, и «1С:Напарник» живёт в отдельной среде. Код из архива сверен со справкой платформы 8.3.27.2130 и прогнан на ней: на сервере против локальной заглушки, против OpenRouter и в тонком клиенте во внешней обработке. Первый запуск на своей базе делайте на копии с ограниченной выборкой и обезличенными данными. В комментариях интересно, какие задачи вы пробовали решать моделью прямо из обработки и что пришлось переделать после первых ответов.

 
Нинель Адольевна Щербакова
Нинель Адольевна Щербакова (Ninel_S)
Архитектор • SRE & DevOps инженер • HighLoad 1С
Автор 48 технических публикаций на Infostart. Разработчик NOPik, SRE-Suite-for-1C и мультиагентных ассистентов для экосистемы 1С:Предприятие.

Вступайте в нашу телеграмм-группу Инфостарт

1С HTTP JSON языковая модель ИИ внешняя обработка безопасность данных 8.3

См. также

Нейросети Системный администратор Разработчик Аналитик Бухгалтер Пользователь Руководитель проекта 1С 8.3 1С:Документооборот 1С:Бухгалтерия 3.0 1С:Зарплата и Управление Персоналом 3.x Россия Платные (руб)

Подключите ИИ к 1С и решайте рабочие задачи обычными словами. От работы с данными до доработки конфигурации через расширения, всё в привычном чате с ИИ-помощником. Теперь с поддержкой DeepSeek Harness, Kimi Code и Kimi Work, доступных в России без VPN.

15990 руб.

30.07.2026    19311    40    4    

36

SALE! %

Банковские операции Обмен с интернет-банком Мастера заполнения Нейросети Разработчик Бухгалтер Пользователь 1С:Предприятие 8 1C:ERP 1С:Бухгалтерия 3.0 1С:ERP Управление предприятием 2 1С:Управление холдингом 1С:ERP. Управление холдингом 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Управление торговлей 11 1С:Розница 3.0 Платные (руб)

Корректируйте банковские документы быстро и легко! Создайте правило обработки — и оно автоматически применится при загрузке выписки (отбор по любому реквизиту или регулярному выражению). Решение заполняет расшифровку платежа, комиссию эквайринга, подбирает ведомости на выплату зарплаты, помечает дубли из банка на удаление и многое другое. Доплачивать за алгоритмы не нужно — они включены в решение. Обработка работает при загрузке из файлов клиент-банка и через DirectBank. Новое — искусственный интеллект: модель приводит нестандартные назначения платежа к виду, понятному алгоритмам, а ИИ-ассистент прямо в 1С консультирует по решению и разбирает код правил и алгоритмов. Поддерживаются локальные и облачные OpenAI-совместимые модели — данные могут не покидать ваш контур.

17500 руб.

20.12.2024    21426    104    32    

90

Инструментарий разработчика Нейросети Платные (руб)

Первые попытки разработки на 1С с использованием больших языковых моделей (LLM) могут разочаровать. LLMки сильно галлюцинируют, потому что не знают устройства конфигураций 1С, не знают нюансов синтаксиса. Но если дать им подсказки с помощью MCP, то результат получается кардинально лучше. Далее в публикации: MCP для поиска по метаданным 1С, справке синтакс-помощника и проверки синтаксиса.

15250 руб.

25.08.2025    76701    147    41    

154

SALE! 30%

Нейросети 1С 8.3 1С:Документооборот 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Расширение добавляет в 1С чат с ИИ-агентом. Пользователь пишет вопрос обычными словами: «какие УПД не подписаны?», «какой НДС к уплате за квартал?», «что висит на согласовании дольше недели?», а агент сам строит запросы к базе с правами этого пользователя и отвечает цифрами, таблицей, диаграммой или файлом Excel. Плитки «Аналитик», «Бухгалтер» и «Руководитель» дают сводку по базе одной кнопкой. Агент разбирает ошибки по скриншоту, сверяет прайсы поставщиков и проверяет коды маркировки. С версии 1.0.21 спрашивать можно и с телефона: QR-код в окне агента, без установки приложения. Работает в УТ 11, КА 2, ERP 2, БП 3.0, УНФ 3.0, Документооборот 3.0 и Альфа-Авто 6, ставится одним расширением.

18300 руб.

05.10.2026    3344    10    9    

11

Инструментарий разработчика Нейросети Системный администратор Разработчик Руководитель проекта 1С 8.3 Платные (руб)

Обработка заменяет ФИО, организации, ИНН, ИИН, БИН, ОГРН, КПП, БИК, счета и IBAN, паспорта, СНИЛС, адреса, телефоны, почту и суммы на правдоподобные выдуманные перед отправкой данных в ChatGPT, Claude или YandexGPT, а потом расшифровывает ответ модели обратно, подставляя настоящие имена и настоящие числа. Возвращаются и те итоги, которые модель посчитала сама: суммы масштабируются одним коэффициентом, поэтому пропорции и доли переживают обезличивание. Словарь замен хранится в самой базе и подхватывается автоматически, даже если обработку закрывали. Реквизиты России и Казахстана, любая конфигурация от 8.3.24, без единой зависимости.

14640 руб.

07.08.2026    2134    3    0    

3

Распознавание документов и образов Нейросети 1С:Предприятие 8 1С 8.3 1С 8.5 1C:Бухгалтерия 1С:Зарплата и Управление Персоналом 3.x Беларусь Россия Казахстан Армения Платные (руб)

ИИ-сканер документов с REST API для интеграции с 1С и корпоративными системами. Извлекайте данные из счетов, паспортов, дипломов, патентов и трудовых книжек за секунды. Точность человека - скорость машины. Приложение поддерживает восемь типов документов, четырех провайдеров ИИ (имеется возможность использования локальных ИИ), локальный REST API и экспорт в JSON. Важно! модель должна поддерживать функцию Vision (распознавание файлов и картинок). Запускайте используя локальные ИИ, без подписок и ограничений

6100 руб.

24.08.2026    1397    1    0    

1

Нейросети Разработчик 1С 8.3 Бесплатно (free)

Как подключить ИИ-агента к разработке 1С на примере обработки «Почему не закрывается месяц»: одна папка, копия демобазы и несколько скриптов. Семь шагов: агент, выгрузка в файлы, правила, проверка кода, сборка, тесты YAxUnit и сценарии форм. На каждый: зачем он нужен, команда и где легко споткнуться. В конце: что выросло поверх, три ошибки с разных типовых и сколько это стоило.

05.11.2026    5888    Iliaelagin    6    

15

Нейросети Разработчик Бухгалтер Пользователь 1С:Предприятие 8 1С:Бухгалтерия 3.0 Бесплатно (free)

ИИ агент для бухгалтерии - открытый ИИ-консультант внутри 1С. Он отвечает на вопросы по данным базы, анализирует задолженность и обороты, помогает разбирать ошибки проведения и готовить документы. Пользователь видит шаги агента: какие инструменты вызваны и какие результаты получены. Решение состоит из расширения 1С и сервера на Python, поддерживает локальные модели и облачные API. Инструменты выполняются с правами текущего пользователя. Текущая версия - прототип для «Бухгалтерии предприятия 3.0». Исходный код распространяется под лицензией MIT.

31.10.2026    3378    166    nomadAI    8    

19
Для отправки сообщения требуется регистрация/авторизация