В процессе разработки интеграций между 1С и внешними системами часто возникает ситуация, когда внешнее API еще не готово или недоступно для тестирования, а механизм обмена в 1С уже нужно отлаживать. В таких случаях идеальным решением становится создание "заглушки" (mock-сервера). Особая сложность возникает, когда 1С должна получать не статичные данные, а динамически меняющийся JSON в зависимости от действий оператора (например, имитация изменения статуса заказа или подтверждения операции). Рассмотрим, как реализовать такую систему несколькими способами.
Для начала разберем типичную ошибку начинающих разработчиков. Попытка реализовать логику записи данных в файл через браузерный JavaScript (как предлагал автор в начале обсуждения) обречена на провал. Браузер в целях безопасности не позволяет скрипту на странице записывать файлы на серверную файловую систему напрямую. Кроме того, когда 1С выполняет HTTPЗапрос, она получает лишь текстовое содержимое страницы. Встроенный в 1С механизм HTTPСоединение не является браузером — он не исполняет JavaScript, находящийся внутри html-кода. Поэтому нам необходимо решение на стороне сервера.
Одним из самых быстрых способов развернуть полноценную заглушку является использование микрофреймворков. Рассмотрим пример на библиотеке Bottle. Нам нужно создать сервер, который будет хранить "состояние" в памяти и отдавать его по запросу от 1С.
Проанализируем пример кода, который запускает сервер и определяет маршрут для получения данных:
from bottle import route, run, request, response
import json
# Глобальная переменная для хранения текущего ответа
current_data = {"status": "wait", "message": "Ожидание действий оператора"}
@route('/get_json')
def index():
response.content_type = 'application/json'
return json.dumps(current_data)
@route('/set_status/<new_status>')
def update(new_status):
global current_data
current_data["status"] = new_status
current_data["message"] = f"Статус изменен на {new_status}"
return "Статус обновлен успешно!"
run(host='localhost', port=8080)
Разберем, как это работает по шагам:
8080.http://localhost:8080/get_json, сервер возвращает текущее содержимое переменной current_data.http://localhost:8080/set_status/success. Это приведет к срабатыванию функции update, которая изменит значение в памяти сервера.Важный нюанс: Чтобы 1С корректно обработала ответ, мы обязательно устанавливаем заголовок Content-Type: application/json. В 1С это позволит использовать метод ПрочитатьJSON() без предварительных манипуляций со строками.
Если вы не хотите устанавливать дополнительное ПО (Python, Node.js), наиболее правильным и надежным способом будет создание HTTP-сервиса в самой 1С. Это позволит вам управлять ответами прямо из интерфейса вашей базы.
Рассмотрим алгоритм реализации:
MockService).stub).get_data) и добавьте в него метод GET.Проанализируем пример кода обработчика GET-запроса в модуле HTTP-сервиса:
Функция get_dataGET(Запрос)
Ответ = Новый HTTPСервисОтвет(200);
// Получаем текущую настройку из БД (например, из константы)
ТекстJSON = Константы.ТекущийОтветЗаглушки.Получить();
Ответ.УстановитьТелоИзСтроки(ТекстJSON, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
Ответ.Заголовки.Вставить("Content-Type", "application/json");
Возврат Ответ;
КонецФункции
Теперь создадим простую обработку для оператора. На форме разместим кнопки "Оплачено", "Ошибка", "В работе". При нажатии на кнопку будем просто записывать нужный текст JSON в константу ТекущийОтветЗаглушки. Таким образом, любая внешняя система (или другая база 1С), обратившись к вашему HTTP-сервису, получит ровно то, что выбрал оператор в текущий момент.
Выясним причины, по которым стоит выбрать тот или иной метод:
Сторонний сервер (Python/Node.js):
HTTP-сервис 1С:
Проанализируем несколько важных моментов, которые часто упускают при создании заглушек:
1. Заголовки CORS: Если вы все же решили сделать фронтенд-страницу для оператора, которая будет отправлять fetch или ajax запросы к вашей заглушке, сервер должен возвращать заголовок Access-Control-Allow-Origin: *. Без него браузер заблокирует запрос из соображений безопасности.
2. Коды состояния: Не ограничивайтесь только кодом 200 OK. Настоящее API может возвращать 404 Not Found, 400 Bad Request или 500 Internal Server Error. В коде заглушки предусмотрите возможность смены кода ответа, чтобы проверить, как ваша 1С реагирует на ошибки.
3. Инструменты визуализации: Для быстрой проверки работы вашей заглушки без написания кода в 1С используйте утилиты вроде Postman или Insomnia. Это позволит вам убедиться, что сервер отдает именно JSON и именно с нужными заголовками.
Рассмотренные методы позволяют создать гибкую среду для тестирования интеграций любой сложности, минимизируя простои в разработке из-за неготовности смежных систем.