Как настроить подключение к Web-сервису 1С для конкретной области данных при включенном разделении

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

В данной статье мы подробно разберем, как правильно сформировать URL-ссылку, настроить файл публикации и программно обращаться к нужной области через Web-сервисы.

Способ 1: Использование параметра Z в URL-запросе

Рассмотрим самый простой и гибкий способ обращения к конкретной области. Платформа 1С поддерживает специальный параметр Z (от англ. Zone), который можно передавать непосредственно в строке адреса. Это позволяет использовать одну и ту же публикацию Web-сервиса для доступа к разным областям данных.

Проанализируем структуру формирования ссылки:

  1. Для получения WSDL-описания: К стандартному адресу добавляется параметр &Z=НомерОбласти.
    Пример: http://myserver/mybase/ws/ExchangeService.1cws?wsdl&Z=123
  2. Для непосредственного вызова методов сервиса: Параметр добавляется в точку подключения.
    Пример: http://myserver/mybase/ws/ExchangeService.1cws?Z=123

Здесь 123 — это числовое значение разделителя (индекс области данных), которое задано в вашей системе. При таком обращении платформа автоматически инициализирует сеанс именно в контексте указанной области, и все запросы к базе данных будут ограничены этой зоной.

Способ 2: Настройка файла публикации default.vrd

Если вам необходимо создать фиксированную точку подключения для конкретного филиала или клиента, чтобы вызывающая сторона не знала о параметрах URL, мы можем воспользоваться редактированием файла конфигурации публикации default.vrd. В этом файле за определение области отвечает элемент <zone>.

Разберем по шагам структуру этого элемента внутри блока <zones>:


<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
       base="/mybase"
       ib="Srvr="Server1";Ref="mybase";">
    <zones>
        <zone value="123" />
    </zones>
    <ws>
        <point name="WebServiceName" alias="ws1.1cws" />
    </ws>
</point>

Важные нюансы настройки:

Способ 3: Использование специализированного HTTP-заголовка

В некоторых сценариях, например, при разработке мобильных приложений или интеграции через сложные прокси-серверы, «загрязнение» URL дополнительными параметрами нежелательно. В этом случае мы можем передать номер области через заголовок HTTP-запроса.

Используйте заголовок: X-1C-Data-Area. Значением заголовка должно быть целое число — идентификатор области. Этот метод является приоритетным для механизмов самой платформы и обеспечивает корректную маршрутизацию запроса внутри кластера серверов 1С.

Особенности авторизации и контекста пользователя

Выясним причину возможных проблем при авторизации. Даже если вы правильно указали область через Z=123, подключение может не состояться. Почему это происходит?

Рассмотрим правила авторизации:

  1. Учетные данные (логин и пароль) для Basic Auth должны принадлежать пользователю, который зарегистрирован внутри конкретной области.
  2. Если вы используете «общего» администратора (у которого в конфигураторе снята галочка разделения данных), он сможет войти в область только в том случае, если программно или через параметры сеанса настроен доступ к этой зоне. Однако для стандартных Web-сервисов рекомендуется создавать служебного пользователя непосредственно в нужной области.
  3. После успешного входа все методы Web-сервиса (Объекты, Запросы, Выборки) будут автоматически работать только с данными этой области. Платформа 1С на уровне СУБД добавит необходимые условия фильтрации.

Реализация вызова из другой базы 1С

Если вы подключаете Web-сервис разделенной базы в другой конфигурации 1С через объект WSПрокси, проанализируем пример кода для корректного создания определения:


// Определяем адрес WSDL с указанием области
АдресWSDL = "http://server/base/ws/Exchange.1cws?wsdl&Z=50";

// Создаем определения Web-сервиса
// Важно: параметры Z передаются именно здесь
Попытка
    Определения = Новый WSОпределения(АдресWSDL, Логин, Пароль);
Исключение
    Сообщить("Ошибка получения определений: " + ОписаниеОшибки());
    Возврат;
КонецПопытки;

// Создаем прокси и вызываем метод
Прокси = Новый WSПрокси(Определения, "http://www.uri.ru/exchange", "Exchange", "ExchangeSoap");
Прокси.Пользователь = Логин;
Прокси.Пароль = Пароль;

Результат = Прокси.ВыполнитьВыгрузку();

При таком подходе платформа сама позаботится о том, чтобы все последующие вызовы методов через объект Прокси содержали информацию о нужном разделителе.

Отладка Web-сервисов в разделенных базах

Разберем ситуацию, когда вы установили точку останова в методе Web-сервиса, но отладчик не срабатывает. Это часто происходит в разделенных базах. Чтобы отладка работала, необходимо:

  1. В параметрах запуска конфигуратора (если отладка идет через него) указать номер области.
  2. В файле default.vrd для отладочной публикации также должен быть прописан элемент <zone>, либо вы должны подключаться отладчиком к уже существующему сеансу, зная, что он запущен в контексте конкретной области.

Использование вышеописанных методов позволит вам гибко настраивать интеграцию между различными экземплярами информационных баз 1С, работающих в режиме разделения данных, обеспечивая изоляцию и безопасность данных каждого клиента.

← На главную