В современной разработке на платформе 1С интеграция с внешними системами (интернет-магазинами, CRM-системами или мобильными приложениями) чаще всего строится на использовании HTTP-сервисов. Это эффективный и быстрый способ обмена данными. В данной статье мы подробно разберем, как пройти путь от настройки простого запроса в браузере до полноценного сервиса по созданию контрагентов с учетом требований безопасности и архитектуры БСП.
Прежде всего, проанализируем, как формируется адрес, по которому внешняя система будет обращаться к вашей базе 1С. Если вы опубликовали базу на веб-сервере (например, Apache), структура ссылки будет следующей:
http://[имя_сервера]/[имя_публикации]/hs/[корневой_url_сервиса]/[шаблон_url]
Разберем эти элементы подробнее:
/create/{name}/{phone}).Типичная ошибка начинающих заключается в попытке открыть в браузере POST-метод. Рассмотрим ситуацию: если в настройках метода 1С указано «POST», а вы вставляете адрес в строку браузера, вы получите ошибку, так как браузеры по умолчанию выполняют «GET» запрос. Для тестирования на первых этапах можно временно установить метод «GET», но для боевых задач по созданию объектов рекомендуется использовать «POST».
Выясним, как должен выглядеть код внутри модуля HTTP-сервиса. Рассмотрим пример функции, которая принимает наименование и телефон прямо из строки адреса. Для этого в шаблоне URL должны быть прописаны параметры в фигурных скобках, например: /create/{Name}/{Phone}.
Функция СоздатьКонтрагента(Запрос)
// Получаем параметры из URL
ИмяКонтрагента = Запрос.ПараметрыURL.Получить("Name");
Телефон = Запрос.ПараметрыURL.Получить("Phone");
// Поиск существующего, чтобы не плодить дубли
СправочникСсылка = Справочники.Контрагенты.НайтиПоНаименованию(ИмяКонтрагента);
Если СправочникСсылка.Пустая() Тогда
НовыйОбъект = Справочники.Контрагенты.СоздатьЭлемент();
НовыйОбъект.Наименование = ИмяКонтрагента;
НовыйОбъект.НаименованиеПолное = ИмяКонтрагента;
Попытка
НовыйОбъект.Записать();
// Здесь должна быть логика заполнения контактной информации
ОтветТекст = "Контрагент успешно создан: " + ИмяКонтрагента;
КодСостояния = 201; // Created
Исключение
ОтветТекст = "Ошибка при записи: " + ОписаниеОшибки();
КодСостояния = 500;
КонецПопытки;
Иначе
ОтветТекст = "Контрагент уже существует";
КодСостояния = 200;
КонецЕсли;
// Формируем ответ сервера
Ответ = Новый HTTPСервисОтвет(КодСостояния);
Ответ.УстановитьТелоИзСтроки(ОтветТекст, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
Возврат Ответ;
КонецФункции
Проанализируем важный нюанс: в современных конфигурациях (УТ 11, БП 3.0, ERP) номера телефонов и адреса не хранятся в обычных реквизитах справочника. Они записываются в специальный табличный регистр или табличную часть. Если просто присвоить значение реквизиту, данные могут не отобразиться в интерфейсе.
Для корректной работы следует использовать программный интерфейс Библиотеки Стандартных Подсистем (БСП). Разберем, как добавить телефон программно:
// Пример добавления телефона через механизмы БСП
ТипТелефона = Справочники.ВидыКонтактнойИнформации.ТелефонКонтрагента;
УправлениеКонтактнойИнформацией.ЗаписатьКонтактнуюИнформацию(НовыйОбъект.Ссылка, Телефон, ТипТелефона, Перечисления.ТипыКонтактнойИнформации.Телефон);
Это гарантирует, что данные попадут во все нужные регистры и будут корректно индексированы для поиска.
Передача данных через параметры URL (как в примере выше) имеет ограничения по длине и сложности структуры. Профессиональным стандартом является передача данных в теле запроса в формате JSON. Рассмотрим, как обработать такой запрос в 1С.
// Внутри метода POST
СтрокаJSON = Запрос.ПолучитьТелоКакСтроку("UTF-8");
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(СтрокаJSON);
Данные = ПрочитатьJSON(ЧтениеJSON); // Получаем структуру
ЧтениеJSON.Закрыть();
Имя = Данные.name;
ИНН = Данные.inn;
// Далее работаем с полученной структурой
Такой подход позволяет передавать за один раз не только имя, но и ИНН, КПП, банковские реквизиты и список адресов в виде структурированного массива.
Выясним, что делать, если сервис выдает «белый экран» или ошибку. Основной инструмент разработчика — отладка. Чтобы точка останова сработала в модуле HTTP-сервиса, выполните следующие шаги:
Для тестирования запросов, отличных от GET, крайне рекомендуем использовать специализированные утилиты, такие как Postman или Insomnia. Они позволяют гибко настраивать заголовки (Headers), авторизацию и тело запроса, а также видеть детальный ответ сервера, включая коды состояния (200, 404, 500).
Посмотрим на ситуацию со стороны безопасности. Публичный доступ к созданию контрагентов без авторизации — это риск. 1С поддерживает несколько видов аутентификации:
default.vrd можно ограничить список пользователей.default.vrd (параметры usr=...; pwd=...;).Важный совет: всегда используйте блок Попытка...Исключение при записи объектов. Если база данных заблокирована или не заполнены обязательные реквизиты, ваш сервис должен вернуть информативное сообщение об ошибке с кодом 400 или 500, а не просто "упасть" с неопределенным результатом.