Почему мобильное приложение 1С выдает ошибку 404 при подключении к веб-сервису и как настроить обмен данными?

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

При разработке и внедрении мобильных решений на платформе 1С:Предприятие, программисты и системные администраторы часто сталкиваются с типовыми, но от этого не менее досадными проблемами. Одной из наиболее распространенных является ошибка 404 Not Found, возникающая при попытке мобильного приложения установить соединение с веб-сервисом на серверной информационной базе 1С. Эта ошибка может появляться как на этапе тестирования веб-сервиса через браузер, так и при запуске скомпилированного APK-файла на реальном мобильном устройстве. В данном материале мы подробно рассмотрим все возможные причины возникновения этой ошибки, предложим комплексные пошаговые методы устранения и подробно разберем, как грамотно организовать эффективный двусторонний обмен данными между серверной базой 1С (например, 1С:УТП) и мобильным приложением.

Понимание ошибки 404: не найден ресурс

Код состояния HTTP 404 Not Found — это стандартный ответ сервера, который сообщает клиенту (браузеру или мобильному приложению), что запрошенный ресурс не существует на сервере по указанному URL-адресу. В контексте взаимодействия мобильных приложений 1С с веб-сервисами, это может означать, что:

  1. Клиент обращается к несуществующему URL.
  2. Веб-сервер не запущен или настроен некорректно.
  3. Сервер 1С:Предприятия не получил запрос или не смог его обработать из-за внутренних ошибок публикации.
  4. Сетевые настройки или брандмауэры блокируют доступ к ресурсу.

Прежде чем углубляться в сложные настройки, давайте выполним несколько первоначальных проверок:

  1. Тщательная проверка URL-адреса: Это наиболее частая и легкоустранимая причина. Внимательно сверьте URL, который вы вводите в браузере или используете в коде мобильного приложения, с адресом, указанным при публикации веб-сервиса в конфигураторе 1С. Особое внимание уделите:
    • Правильности написания имени веб-сервиса (например, ws1.1cws).
    • Регистру символов в имени веб-сервиса и его методов, поскольку веб-серверы могут быть чувствительны к регистру.
    • Корректности IP-адреса или доменного имени сервера (например, http://192.168.1.100 или http://myserver.mydomain.ru).
    • Правильности указания порта, если используется нестандартный (например, :8080).
    • Наличию суффикса ?wsdl в конце URL для получения WSDL-схемы (например, http://192.168.1.100/mybase/ws/MyWebService.1cws?wsdl).
  2. Локальное тестирование доступности на сервере: Откройте браузер непосредственно на сервере, где опубликован веб-сервис 1С. Попробуйте обратиться к полному URL веб-сервиса. Если веб-сервис доступен локально (вы видите XML-схему или описание сервиса), это позволяет исключить проблемы с самой публикацией и перенаправить внимание на сетевые настройки или некорректные внешние адреса. Если и на сервере вы получаете 404, то проблема однозначно кроется в публикации или настройках веб-сервера.
  3. Проверка состояния веб-сервера: Убедитесь, что сам веб-сервер (IIS, Apache) запущен и работает. В случае с IIS проверьте состояние соответствующего пула приложений.

Комплексная диагностика: проблемы с публикацией и настройкой веб-сервера IIS

Если первоначальные проверки не дали результата или вы получили ошибку 404 даже при локальном доступе на сервере, приступим к более детальной проверке настроек веб-сервера. Мы будем рассматривать IIS как наиболее часто используемый с 1С:Предприятием.

Проверка прав доступа и конфигурации виртуального каталога

  1. Права доступа к каталогу публикации: Крайне важно, чтобы у учетной записи, от имени которой работает пул приложений в IIS (например, IUSR, IIS_IUSRS или пользователь домена, если пул работает от его имени), были необходимые права на чтение и выполнение для физического каталога, куда 1С опубликовала файлы веб-сервиса. Также убедитесь, что этой же учетной записи разрешен доступ к информационной базе 1С (например, если это файловая база, то к ее файлу 1Cv8.1CD, а если SQL — к SQL-серверу).
  2. Настройки виртуального каталога: Откройте Диспетчер служб IIS. Найдите ваш сайт и опубликованный виртуальный каталог 1С.
    • Проверьте, что "Физический путь" в настройках виртуального каталога точно указывает на папку, куда 1С опубликовала файлы (например, C:\inetpub\wwwroot\MyBasePublication).
    • В разделе "Обработчики сопоставлений" (Handler Mappings) убедитесь, что для расширения .1cws (а также .1cd, .1s, .chm, .html, .htm, .css, .js, .gif, .png, .jpg, .jpeg, .ico, .xml, .pdf, .zip, .rar, .txt, .csv) установлены корректные обработчики, обычно это 1C Web-service Handler. Если их нет, попробуйте переопубликовать базу из 1С.
    • Проверьте "Основные настройки" (Basic Settings) пула приложений, к которому привязан ваш виртуальный каталог.

Специфические настройки пула приложений IIS для 1С

Для корректной работы веб-сервисов 1С в IIS необходимо убедиться, что пул приложений, обслуживающий ваш виртуальный каталог, настроен правильно. Это критически важный этап:

  1. Версия .NET CLR: В настройках пула приложений (Advanced Settings) установите значение ".NET CLR Version" в "No Managed Code". Это гарантирует, что IIS не будет пытаться загружать 1С-компоненты как .NET-сборки, что может привести к конфликтам и ошибкам.
  2. Режим управляемого конвейера: Установите "Managed Pipeline Mode" в "Integrated" (Интегрированный). Этот режим обеспечивает лучшую производительность и совместимость с современными веб-приложениями, включая 1С.
  3. Включение 32-разрядных приложений (особенно важно): Если ваша платформа 1С:Предприятие 32-разрядная (x86), а операционная система сервера и IIS 64-разрядные (x64), необходимо обязательно включить параметр "Enable 32-Bit Applications" (Разрешить 32-разрядные приложения) для соответствующего пула приложений. Если этот параметр выключен, 64-разрядный процесс IIS не сможет загрузить 32-разрядные компоненты 1С (например, wsapicom.dll), что приведет к ошибкам 404 или 500.

Установленные компоненты веб-сервера IIS

Убедитесь, что на сервере установлены все необходимые роли и компоненты веб-сервера IIS. Через "Диспетчер сервера" -> "Добавить роли и компоненты" проверьте наличие следующих компонентов в разделе "Роль веб-сервера (IIS)":

  1. Common HTTP Features: Default Document, Directory Browsing, HTTP Errors, Static Content.
  2. Application Development: CGI, ISAPI Extensions, ISAPI Filters, ASP.NET (если планируется использование ASP.NET приложений на этом же сервере, хотя для чистых 1С веб-сервисов это не всегда строго обязательно, но наличие не повредит).
  3. Security: Request Filtering, Windows Authentication (если планируется).
  4. Management Tools: IIS Management Console (для удобства управления).

Отсутствие необходимых компонентов может препятствовать корректной обработке запросов к файлам .1cws.

Файл default.vrd и проблемы с ним

При публикации информационной базы 1С на веб-сервере в корневом каталоге публикации создается файл default.vrd. Этот файл содержит важные метаданные о конфигурации, параметрах подключения и путях к сервисам. Повреждение этого файла или его некорректное содержимое может быть причиной ошибки 404. Если вы подозреваете проблему с default.vrd, попробуйте:

  1. Переопубликовать информационную базу из конфигуратора 1С. Это приведет к автоматической перезаписи или созданию нового файла default.vrd.
  2. Вручную удалить файл default.vrd и затем переопубликовать базу.
  3. В некоторых случаях полезно открыть этот файл текстовым редактором и убедиться, что он содержит ожидаемые пути и имена сервисов.

Мониторинг журналов и использование инструментов отладки

Для глубокого анализа причин 404 ошибки нам понадобятся специализированные инструменты:

  1. Журнал регистрации 1С: Включите максимально подробное логирование в конфигураторе 1С. Для этого перейдите в "Администрирование" -> "Настройка журнала регистрации", добавьте новые фильтры для событий "Веб-сервисы", "Проблемы" и "Ошибки", установив максимально детальный уровень записи. Это позволит увидеть, какие ошибки происходят на стороне сервера 1С, когда поступает запрос к веб-сервису.
  2. Логи веб-сервера (IIS/Apache): Тщательно изучайте файлы логов вашего веб-сервера. Для IIS это обычно файлы в папке C:\inetpub\logs\LogFiles\W3SVC1 (или другой ID вашего сайта). В логах вы найдете информацию о каждом HTTP-запросе, его статусе (например, 404), запрашиваемом URL, IP-адресе клиента и User-Agent. Иногда IIS может указывать подстатус ошибки, например, 404.2 (запрещенная конфигурация) или 404.3 (расширение не поддерживается), что сразу укажет на причину.
  3. Инструменты разработчика браузера: При тестировании через браузер, откройте "Инструменты разработчика" (обычно F12) и перейдите на вкладку "Сеть" (Network). Здесь вы увидите все HTTP-запросы, отправленные браузером, их статусы, заголовки и тело ответа. Это очень полезно для проверки того, какой URL был запрошен и какой ответ (даже 404) вернул сервер.

Сетевые настройки и обеспечение доступности сервера

Даже при идеально настроенном веб-сервере, проблемы с сетью могут привести к ошибкам 404 (если запрос вообще не доходит до сервера) или таймаутам. Давайте проанализируем сетевые аспекты:

  1. Совпадение локальной сети (Wi-Fi): Если вы тестируете мобильное приложение в локальной сети через Wi-Fi, убедитесь, что и мобильное устройство, и сервер находятся в одной и той же подсети. Например, если IP-адрес сервера 192.168.1.100, то IP-адрес смартфона должен быть в диапазоне 192.168.1.xxx. Проверьте IP-адрес смартфона в его настройках Wi-Fi.
  2. Брандмауэры (файрволы): Это частая причина проблем.
    • На сервере: проверьте "Брандмауэр Защитника Windows с расширенными функциями" (или сторонний брандмауэр). Убедитесь, что для порта, на котором работает ваш веб-сервер (по умолчанию 80 для HTTP, 443 для HTTPS), разрешены входящие подключения. Создайте соответствующее правило для входящего трафика.
    • На сетевом оборудовании (роутер, маршрутизатор): Проверьте настройки брандмауэра на вашем роутере. Для внутренней сети это обычно менее критично, но если вы используете сложную сетевую топологию, роутер может блокировать трафик между подсетями.
  3. Прокси-серверы: Если ваше мобильное устройство или сеть, через которую оно подключается, использует прокси-сервер, это может влиять на доступность. Убедитесь, что прокси-сервер настроен корректно и не блокирует доступ к вашему веб-серверу. Для тестирования попробуйте временно отключить прокси, если это возможно.
  4. Доступ из интернета: Если вы планируете доступ к веб-сервису извне локальной сети (из интернета), необходимо настроить проброс портов (port forwarding) на вашем роутере. Это означает, что внешний порт роутера будет перенаправлять входящий трафик на внутренний IP-адрес вашего сервера и соответствующий порт. Также убедитесь, что ваш внешний IP-адрес статичен или используется динамический DNS-сервис, а доменное имя корректно указывает на этот IP.

Ключевое различие: Мобильная платформа, Мобильный клиент и Мобильный клиент с автономным режимом в 1С

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

  1. Мобильная платформа (автономное приложение):

    Приложение, созданное на "Мобильной платформе", функционирует полностью автономно. Оно использует только локальную информационную базу данных, которая хранится непосредственно на мобильном устройстве (смартфоне или планшете). Все данные, с которыми работает пользователь, находятся на устройстве. Если такое приложение должно обмениваться данными с серверной базой 1С, оно делает это исключительно путем вызова веб-сервисов, опубликованных на серверной базе. Оно не является "клиентом" серверной базы в прямом смысле (то есть, не подключается к ней для онлайн-работы с данными). Если вы скомпилировали APK из конфигурации, предназначенной для "Мобильной платформы", то по умолчанию оно будет пытаться работать с локальной базой. Чтобы получать данные с сервера, это приложение само должно инициировать HTTP/WS-запросы к внешним сервисам.

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

  2. Мобильный клиент:

    Этот режим предназначен для онлайн-взаимодействия с информационной базой 1С на сервере. "Мобильный клиент" работает аналогично тонкому или веб-клиенту для настольных компьютеров. Он не хранит полную копию данных локально (или хранит минимальный кэш), а постоянно подключается к опубликованной на веб-сервере базе данных 1С и работает с ней в реальном времени. Если ваша задача — обеспечить полноценный онлайн-доступ мобильного пользователя к текущим данным серверной базы, то вам необходим именно "Мобильный клиент".

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

  3. Мобильный клиент с автономным режимом:

    Это гибридный вариант, предоставляющий гибкость в работе. В зависимости от наличия стабильного интернет-соединения, он позволяет пользователю либо взаимодействовать с информационными базами онлайн (как "Мобильный клиент"), либо переключаться на работу с локальной, синхронизированной информационной базой на мобильном устройстве (аналогично "Мобильной платформе"). Этот режим обеспечивает отказоустойчивость и непрерывность работы даже при временной потере связи.

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

Критическое замечание: Если вы создали конфигурацию, предназначенную для "Мобильной платформы", а затем скомпилировали APK и ожидаете, что он будет напрямую подключаться к серверной базе и работать с ее данными в режиме онлайн, как обычный клиент, то это является фундаментальным заблуждением. Для онлайн-доступа к серверной базе через мобильное устройство необходимо публиковать конфигурацию как "Мобильный клиент". Ошибка 404 в этом случае может быть результатом того, что приложение, собранное для автономной платформы, пытается найти что-то на сервере, но не по тому пути или ожидает другого типа соединения.

Пошаговая настройка подключения мобильного клиента (APK) к базе 1С на сервере

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

Разберем процесс по шагам:

  1. Публикация мобильного клиента в конфигураторе 1С:

    В конфигураторе 1С откройте вашу конфигурацию. Перейдите в меню "Конфигурация" -> "Мобильное приложение" -> "Публиковать".

    В открывшемся окне "Публикация мобильного клиента на веб-сервере":

    • Укажите "Имя публикации" (например, MobileClientUTP). Это будет имя виртуального каталога на веб-сервере.
    • Выберите "Веб-сервер" (IIS или Apache).
    • Укажите "Каталог публикации" – физический путь на диске сервера, куда будут скопированы файлы публикации (например, C:\inetpub\wwwroot\MobileClientUTP).
    • Отметьте необходимые опции, такие как "Публиковать автономно", если это требуется, но для онлайн-клиента это не основное.
    • Нажмите "Опубликовать".

    После успешной публикации система выдаст вам URL, по которому доступен ваш мобильный клиент. Он будет иметь вид http://<АдресВашегоСервера>/<ИмяПубликацииМобильногоКлиента>/ (например, http://192.168.1.100/MobileClientUTP/).

  2. Проверка доступности публикации через браузер:

    Откройте любой веб-браузер (желательно на мобильном устройстве или на компьютере, имеющем доступ к серверу) и введите полученный URL (например, http://192.168.1.100/MobileClientUTP/).

    Если публикация прошла успешно и веб-сервер настроен корректно, вы должны увидеть XML-схему или страницу с информацией о мобильном клиенте. Это подтверждает, что веб-сервер видит вашу публикацию и готов к работе.

  3. Сборка APK-файла (если требуется) и установка на смартфон:

    Если вы хотите распространять приложение как APK, соберите его через "Конфигурация" -> "Мобильное приложение" -> "Сформировать приложение...". В процессе сборки вам потребуется указать "Адрес публикации мобильного клиента". Используйте тот же URL, который вы получили на шаге 1 (http://192.168.1.100/MobileClientUTP/).

    Установите полученный APK-файл на целевой смартфон.

  4. Настройка адреса обновления в мобильном приложении:

    При первом запуске мобильного приложения на смартфоне вам будет предложено ввести "Адрес обновления" или "Адрес информационной базы". Введите тот же самый URL, который вы использовали для публикации и проверки в браузере (http://192.168.1.100/MobileClientUTP/).

    Мобильный клиент использует этот адрес для загрузки конфигурации и дальнейшего онлайн-взаимодействия с серверной базой 1С. Если все шаги выполнены правильно и сетевые настройки позволяют, мобильный клиент должен успешно загрузить конфигурацию и предоставить доступ к данным серверной базы.

Если на этом этапе вы все еще получаете 404, внимательно пересмотрите все пункты, касающиеся сетевых настроек и настроек IIS. Возможно, брандмауэр блокирует запросы с мобильного устройства, или IP-адрес сервера не виден из сети мобильного устройства.

Реализация обмена данными с использованием веб-сервисов из мобильного приложения

Даже когда мобильный клиент работает онлайн, или если вы используете автономную мобильную платформу, веб-сервисы являются основным механизмом для обмена данными между мобильным устройством и серверной базой 1С. Разберем, как из мобильного приложения вызывать веб-сервисы, опубликованные на серверной базе 1С.

Пример кода для вызова веб-сервиса из 1С

Представим, что на серверной базе 1С опубликован веб-сервис с именем МойВебСервис и методом ПолучитьДанныеПоЗапросу. Мы хотим вызвать его из кода мобильного приложения.


// Функция для установления соединения с веб-сервисом
// Параметры:
//   АдресВебСервисаWSDL - полный URL к WSDL-схеме веб-сервиса
//   Пользователь - имя пользователя для авторизации
//   Пароль - пароль пользователя для авторизации
Функция ПодключитьсяКВебСервису(АдресВебСервисаWSDL, Пользователь = "", Пароль = "")
    Перем ЗащищенноеСоединение;
    
    // Определяем тип соединения (HTTP/HTTPS)
    Если Лев(Ниж(АдресВебСервисаWSDL), 5) = "https" Тогда
        // Для HTTPS необходимо использовать ЗащищенноеСоединениеOpenSSL
        ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL;
    Иначе
        // Для HTTP защищенное соединение не требуется
        ЗащищенноеСоединение = Неопределено;
    КонецЕсли;
    
    // Получаем определения веб-сервиса по WSDL-схеме
    Попытка
        // ВСОпределение = Новый WSОпределения("URL_WSDL", "ИмяПользователя", "Пароль", ПроксиСервер, Таймаут, ЗащищенноеСоединение);
        ВСОпределение = Новый WSОпределения(АдресВебСервисаWSDL, Пользователь, Пароль, , , ЗащищенноеСоединение);
    Исключение
        Сообщить("Ошибка при получении определений веб-сервиса: " + ОписаниеОшибки() + " (" + АдресВебСервисаWSDL + ")");
        Возврат Неопределено;
    КонецПопытки;
    
    // Создаем объект WSПрокси для взаимодействия с веб-сервисом
    // Параметры для WSПрокси:
    //   WSОпределения - объект определений, полученный выше
    //   ПространствоИменСервиса - URI пространства имен сервиса (из WSDL)
    //   ИмяСервиса - имя сервиса (из WSDL)
    //   ИмяПорта - имя порта сервиса (обычно "ИмяСервисаSoap" или "ИмяСервисаSoap12")
    // Эти значения можно найти, открыв WSDL-схему в браузере и найдя теги <wsdl:service> и <wsdl:port>.
    Перем ПространствоИменСервиса, ИмяСервиса, ИмяПорта;
    ПространствоИменСервиса = "http://www.1c.ru/MyBase/MyWebService"; // Пример, замените на свое
    ИмяСервиса              = "МойВебСервис";                           // Имя веб-сервиса
    ИмяПорта                = "МойВебСервисSoap";                       // Имя порта (часто ИмяВебСервиса + "Soap")
    
    Попытка
        ВСПрокси = Новый WSПрокси(ВСОпределение, ПространствоИменСервиса, ИмяСервиса, ИмяПорта);
    Исключение
        Сообщить("Ошибка при создании WSПрокси: " + ОписаниеОшибки());
        Возврат Неопределено;
    КонецПопытки;
    
    // Устанавливаем учетные данные для авторизации непосредственно в WSПрокси, если они не были переданы в WSОпределения
    Если Не ПустаяСтрока(Пользователь) Тогда
        ВСПрокси.Пользователь = Пользователь;
        ВСПрокси.Пароль = Пароль;
    КонецЕсли;
    
    Возврат ВСПрокси;
КонецФункции

// Функция для вызова конкретного метода веб-сервиса
// Параметры:
//   ВСПрокси - объект WSПрокси, полученный функцией ПодключитьсяКВебСервису
//   МетодВебСервиса - имя метода веб-сервиса для вызова (например, "ПолучитьДанныеПоЗапросу")
//   ПараметрыМетода - массив или структура параметров, передаваемых в метод
Функция ВыполнитьЗапросКВебСервису(ВСПрокси, МетодВебСервиса, ПараметрыМетода)
    Если ВСПрокси = Неопределено Тогда
        Сообщить("ВСПрокси не инициализирован.");
        Возврат Неопределено;
    КонецЕсли;

    Попытка
        // Динамический вызов метода веб-сервиса
        // Пример: Результат = ВСПрокси.ПолучитьДанныеПоЗапросу(Параметр1, Параметр2);
        // Если параметры передаются через структуру, можно использовать следующую конструкцию:
        Результат = ВСПрокси[МетодВебСервиса](ПараметрыМетода);
        Возврат Результат;
    Исключение
        Сообщить("Ошибка при вызове метода веб-сервиса " + МетодВебСервиса + ": " + ОписаниеОшибки());
        Возврат Неопределено;
    КонецПопытки;
КонецФункции

// Пример использования:
// АдресWSDL = "http://192.168.1.100/mybase/ws/MyWebService.1cws?wsdl";
// ПроксиСервис = ПодключитьсяКВебСервису(АдресWSDL, "Admin", "Admin");
// Если ПроксиСервис <> Неопределено Тогда
//     СтруктураПараметров = Новый Структура("ТипЗапроса, ДатаНачала", "СписокТоваров", ТекущаяДата() - 30);
//     Данные = ВыполнитьЗапросКВебСервису(ПроксиСервис, "ПолучитьДанныеПоЗапросу", СтруктураПараметров);
//     Если Данные <> Неопределено Тогда
//         Сообщить("Получены данные: " + Данные);
//     КонецЕсли;
// КонецЕсли;

Важные пояснения к работе с кодом веб-сервисов:

  1. АдресВебСервисаWSDL: Этот URL должен быть точным адресом к WSDL-схеме вашего веб-сервиса, опубликованного на серверной базе 1С. Обычно он имеет формат http://<АдресСервера>/<ИмяПубликацииБазы>/ws/<ИмяВашегоВебСервиса>.1cws?wsdl. Именно этот адрес используется для инициализации объекта WSОпределения, который получает всю необходимую информацию о структуре сервиса.
  2. ЗащищенноеСоединениеOpenSSL: Этот объект необходим только в том случае, если вы используете защищенное соединение HTTPS. При работе по HTTP его следует заменить на Неопределено, иначе возникнет ошибка. Убедитесь, что на сервере настроен SSL-сертификат и он доверен мобильному устройству, если используется HTTPS.
  3. Параметры WSПрокси (пространство имен, имя сервиса, имя порта): Эти значения не являются произвольными. Их необходимо точно взять из WSDL-схемы вашего веб-сервиса. Откройте WSDL в браузере, найдите секции <wsdl:service> и <wsdl:port>, чтобы получить эти идентификаторы. Например, пространство имен часто содержит URL вида http://www.1c.ru/..., а имя порта – это обычно имя сервиса с добавлением суффикса Soap или Soap12.
  4. Авторизация: Если ваш веб-сервис требует авторизации (что настоятельно рекомендуется для безопасности), учетные данные (Пользователь и Пароль) можно передать как при создании WSОпределения, так и непосредственно установить для объекта ВСПрокси. Используйте учетные данные пользователя 1С, имеющего права на выполнение методов веб-сервиса.

Двусторонний обмен данными между 1С УТП и мобильным приложением

После того как мы разобрались с подключением и вызовом веб-сервисов, перейдем к вопросу организации полноценного двустороннего обмена данными. Это особенно актуально, когда требуется не только отправлять данные из мобильного приложения на сервер, но и загружать актуальную информацию (например, справочники, документы) из серверной базы 1С (допустим, 1С:Управление Торговлей или УТП) в мобильное приложение.

Как мы уже упоминали, веб-сервисы остаются основным и наиболее гибким механизмом для такого рода взаимодействия. Мобильное приложение (клиентская часть), будь то "Мобильная платформа" или "Мобильный клиент", всегда выступает инициатором запроса к веб-сервисам, опубликованным на серверной базе 1С. Серверные веб-сервисы, реализованные в конфигурации УТП, обрабатывают эти запросы, формируют и отправляют необходимые данные обратно мобильному приложению.

Механизмы организации загрузки данных в мобильное приложение

Для эффективной загрузки данных из серверной базы в мобильное приложение рассмотрим несколько подходов:

  1. Прямой запрос данных через веб-сервис:

    Это самый простой способ, подходящий для относительно небольших объемов данных или редких обновлений. Мобильное приложение вызывает методы веб-сервиса, такие как ПолучитьСписокНоменклатуры(), ПолучитьДанныеЗаказа(GUIDЗаказа), ПолучитьИзмененияСправочниковСДаты(ДатаПоследнейСинхронизации).

    На стороне серверной базы (в модуле веб-сервиса) реализуются соответствующие методы, которые выполняют следующие действия:

    • Выборка данных: Используют запросы 1С для получения необходимых объектов из базы (справочники, документы, регистры).
    • Формирование данных: Преобразуют выбранные данные в структурированный формат, удобный для передачи и последующей обработки на мобильном устройстве. Чаще всего используются форматы XML или JSON, так как платформа 1С предоставляет встроенные средства для работы с ними. Например, для XML это ЗаписьXML и ЗаписьCOMОбъекта, для JSON – ЗаписьJSON и ЧтениеJSON.
    • Возврат данных: Отправляют сформированные данные обратно мобильному приложению.

    Мобильное приложение, получив эти данные, парсит их и сохраняет в своей локальной информационной базе (если это "Мобильная платформа") или отображает пользователю (если это "Мобильный клиент").

  2. Использование Планов обмена для оптимизированной выгрузки:

    Для больших объемов данных, частых синхронизаций или сложных распределенных систем крайне рекомендуется использовать механизм ПланыОбмена, встроенный в платформу 1С. Этот механизм позволяет отслеживать изменения объектов конфигурации и выгружать только те данные, которые изменились с момента последней успешной синхронизации, что существенно снижает нагрузку на сеть и сервер.

    Как организовать обмен через Планы обмена:

    1. Создание Плана обмена: В конфигурации серверной базы (УТП) создайте новый объект ПланОбмена. Укажите, какие объекты конфигурации (справочники, документы, регистры сведений) должны участвовать в обмене. 1С автоматически начнет регистрировать изменения для этих объектов.
    2. Создание узла обмена для мобильного клиента: Каждый мобильный клиент (или группа клиентов) может быть представлен как отдельный "узел" в вашем ПланОбмена. Это позволяет отслеживать изменения индивидуально для каждого клиента.
    3. Реализация выгрузки через веб-сервис: На стороне серверной базы в модуле веб-сервиса реализуйте метод, который будет вызываться мобильным приложением для запроса обновлений. В этом методе используйте функциональность ПланаОбмена для получения зарегистрированных изменений для конкретного узла обмена.
      
      // Пример кода на стороне серверного веб-сервиса 1С
      // Метод веб-сервиса, который мобильное приложение будет вызывать для получения данных
      Функция ПолучитьИзмененияДляМобильногоПриложения(ИмяУзлаОбмена) Экспорт
          // Находим узел обмена по его наименованию (например, UUID устройства или логин пользователя)
          УзелОбмена = ПланыОбмена.МойПланОбмена.НайтиПоНаименованию(ИмяУзлаОбмена);
          Если УзелОбмена = Неопределено Тогда
              Сообщить("Узел обмена " + ИмяУзлаОбмена + " не найден!");
              Возврат ""; // Возвращаем пустую строку или ошибку
          КонецЕсли;
      
          // Создаем объект для записи XML-данных
          ЗаписьXMLОбмена = Новый ЗаписьXML;
          ЗаписьXMLОбмена.УстановитьСтроку();
          ЗаписьXMLОбмена.ЗаписатьОбъявлениеXML();
      
          // Выгружаем зарегистрированные изменения для данного узла обмена
          ПланыОбмена.МойПланОбмена.ВыгрузитьИзменения(ЗаписьXMLОбмена, УзелОбмена);
                          
          // Получаем XML-строку с выгруженными данными
          СтрокаXMLСИзменениями = ЗаписьXMLОбмена.Закрыть();
          Возврат СтрокаXMLСИзменениями;
      КонецФункции
      
    4. Обработка загрузки в мобильном приложении: Мобильное приложение, получив строку XML с изменениями, должно будет использовать объект ЧтениеXML и метод ЗагрузитьИзменения() соответствующего ПланаОбмена (если он реализован и на мобильной стороне) для применения этих изменений к своей локальной базе. После успешной загрузки, мобильное приложение может отправить подтверждение на сервер, чтобы очистить регистрации изменений для своего узла.

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

  3. Использование специализированных Регистров сведений для флагов обмена:

    В некоторых случаях, если механизм ПланаОбмена кажется избыточным или требуется более тонкий контроль над выгрузкой, можно создать специализированные РегистрыСведений. В этих регистрах будут храниться "флаги" или записи о том, какие объекты были изменены и для какого мобильного устройства (или типа мобильного приложения) необходимо обновить информацию.

    Пример реализации: При изменении справочника "Номенклатура" в УТП, в РегистрСведений.ОбъектыКОбновлениюМобильныхКлиентов добавляется запись: "Объект: Номенклатура, Ссылка: [Ссылка на измененный элемент], ТипОбновления: Полный, ДатаИзменения: ТекущаяДата()".

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

    Этот подход позволяет гибко настраивать правила выгрузки и может быть полезен, когда нужно контролировать версии данных для разных мобильных клиентов.

Регистрация изменений для выгрузки из УТП в мобильное приложение (подробнее)

Для того чтобы серверная база 1С (например, 1С:УТП) "знала", какие именно данные должны быть выгружены в каждое конкретное мобильное приложение, нам необходимо реализовать механизм регистрации изменений. Рассмотрим основные методы:

  1. Планы обмена (как основной инструмент):

    Это самый мощный и рекомендуемый стандартный механизм 1С. При создании объекта ПланОбмена в конфигураторе, вы указываете, какие объекты метаданных (справочники, документы, регистры, перечисления и т.д.) должны отслеживаться на предмет изменений. Платформа 1С автоматически регистрирует каждое изменение этих объектов для каждого узла обмена, который входит в этот план.

    Для каждого мобильного приложения (или каждого мобильного устройства, если это требуется) можно создать отдельный элемент справочника УзлыОбмена, который будет соответствовать узлу обмена. Таким образом, при запросе от мобильного приложения к веб-сервису, серверная часть будет выгружать только те данные, которые изменились с момента последнего обмена именно с этим конкретным узлом.

    
    // Пример кода на стороне серверного веб-сервиса (дополнение к предыдущему)
    // После получения СтрокаXMLСИзменениями, в конце метода
    // необходимо снять регистрации изменений для данного узла
    // (это делается после подтверждения успешной загрузки мобильным приложением)
    ПланыОбмена.МойПланОбмена.УстановитьПрочитанным(УзелОбмена);
    // Или в отдельном методе, вызываемом мобильным приложением после успешной загрузки:
    // Функция ПодтвердитьЗагрузку(ИмяУзлаОбмена)
    //    УзелОбмена = ПланыОбмена.МойПланОбмена.НайтиПоНаименованию(ИмяУзлаОбмена);
    //    Если УзелОбмена <> Неопределено Тогда
    //        ПланыОбмена.МойПланОбмена.УстановитьПрочитанным(УзелОбмена);
    //    КонецЕсли;
    // КонецФункции
    

    Этот подход обеспечивает высокую эффективность и актуальность данных, минимизируя трафик и время синхронизации.

  2. Подписки на события и вспомогательные регистры:

    Если функциональность ПланаОбмена не полностью соответствует вашим требованиям или вам нужен более гранулированный контроль, можно использовать ПодпискиНаСобытия совместно со специализированными РегистрамиСведений. Принцип работы следующий:

    На стороне серверной базы создаются ПодпискиНаСобытия на такие события, как "ПриЗаписи", "ПередЗаписью" или "ПриУдалении" для тех объектов конфигурации, изменения которых должны передаваться в мобильное приложение.

    В обработчике события подписки мы записываем информацию об измененном объекте (его тип, ссылка, дата изменения, тип операции) в специальный РегистрСведений (например, РегистрСведений.ОчередьОбновленийМобильныхПриложений).

    При запросе от мобильного приложения, серверный веб-сервис опрашивает этот РегистрСведений, выбирает записи, относящиеся к данному мобильному клиенту, формирует пакет данных для выгрузки, а затем помечает эти записи в регистре как "обработанные" или удаляет их.

    Этот метод дает большую гибкость в определении логики выгрузки, но требует большей ручной разработки и поддержки по сравнению с ПланаОбмена.

  3. Архитектура с использованием очередей сообщений (для сложных систем):

    Для крупномасштабных и высоконагруженных проектов, где требуется асинхронная доставка данных, масштабируемость и высокая отказоустойчивость, можно рассмотреть использование внешних систем очередей сообщений (например, RabbitMQ, Apache Kafka, Azure Service Bus). В этой архитектуре:

    • При изменении данных в 1С (через подписки на события или регламентные задания) генерируется сообщение с информацией об изменении.
    • Это сообщение отправляется во внешнюю очередь сообщений.
    • Мобильные приложения или промежуточные сервисы подписываются на соответствующие топики или очереди и асинхронно получают обновления.

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

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

← На главную