Как правильно работать с API в мобильном приложении Организация обмена данными с 1С

26 ноября 2025

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

1. Выбор технологии обмена данными (Какое API использует 1С?)

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

REST API (HTTP-сервисы 1С) — Современный и рекомендуемый подход

Суть и Архитектура

Это подход, при котором разработчик сознательно проектирует API, ориентируясь на нужды внешних клиентов (мобильных приложений).

  1. Публикация Endpoints: В конфигураторе 1С в ветке "Общие" -> "HTTP-сервисы" создаются специальные сервисы. Каждый URL-шаблон (например, /api/mobile/v1/catalog/products) становится конечной точкой API.
  2. Обработчики Запросов: Для каждого метода (GET, POST и т.д.) в этих сервисах пишется код на языке 1С в виде функций. Этот код выполняет ровно одну бизнес-задачу:
    • GET /api/catalog/products → Функция, которая возвращает список товаров в JSON.
    • POST /api/orders → Функция, которая создает новый заказ, принимая JSON-тело запроса.
  3. Процесс взаимодействия:
    • Мобильное приложение отправляет HTTP-запрос на конкретный URL.
    • Платформа 1С вызывает связанную с этим URL функция-обработчик.
    • Функция выполняет логику (чтение данных, проведение документа и т.д.).
    • Функция возвращает результат, который 1С автоматически конвертирует в JSON и отправляет клиенту.

Пример кода обработчика в 1С для REST API:

// Обработчик для GET /api/mobile/v1/catalog/products
Функция ПолучитьСписокТоваров(Знач Запрос) Экспорт

ПараметрыЗапроса = Запрос.ПараметрыЗапроса;
// Извлекаем параметры пагинации из строки запроса
Страница = Число(ПараметрыЗапроса.Получить("page")) ?? 1;
РазмерСтраницы = Число(ПараметрыЗапроса.Получить("pageSize")) ?? 20;
// Создаем структуру для ответа
Ответ = Новый Структура;
// Выбираем данные, удобные для мобильного приложения
Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ
| Товары.Ссылка КАК id,
| Товары.Наименование КАК name,
| Товары.Артикул КАК article,
| Товары.Цена КАК price
|ИЗ
| Справочник.Товары КАК Товары
|ГДЕ
| НЕ Товары.ПометкаУдаления
|УПОРЯДОЧИТЬ ПО
| Наименование
| АВТОУПОРЯДОЧИВАНИЕ
";
Результат = Запрос.Выполнить().Выгрузить();
Ответ.Вставить("data", Результат);
Ответ.Вставить("page", Страница);
Ответ.Вставить("totalCount", Количество);
Возврат Ответ;

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

Преимущества (Детализация)

  • Стандартизация: Вы опираетесь на общепринятые практики HTTP: коды состояния (200 OK, 404 Not Found, 400 Bad Request), методы (GET, POST, PUT, DELETE), заголовки. Это делает API понятным для любых разработчиков.
  • Кроссплатформенность: Не имеет значения, на чем написано мобильное приложение. Любая платформа, умеющая выполнять HTTP-запросы и работать с JSON (а это все современные платформы), сможет работать с вашим API.
  • Гибкость: Это ключевое преимущество. Вы не ограничены внутренней структурой данных 1С. Вы создаете "фасад", который:
    • Агрегирует данные: Один запрос может вернуть данные из нескольких документов и справочников, идеально подходящие для экрана мобильного приложения.
    • Упрощает модель: Вы можете исключить ненужные мобильному приложению поля и реквизиты.
    • Реализует сложную логику: Endpoint POST /api/orders может не просто записать документ, но и выполнить проверки, расчеты, отправить уведомления — всю необходимую бизнес-логику.
  • Производительность: JSON является бинарно более компактным и менее многословным, чем XML, что ускоряет передачу по сети и парсинг на мобильном устройстве.

OData — Стандартизированный протокол

Суть и Архитектура

OData — это не то, что вы "проектируете", а то, что вы "включаете". Это стандартный протокол для запросов к данным.

  1. Автоматическая Публикация: В конфигураторе 1С в разделе "Общие" -> "OData-сервисы" вы просто выбираете объекты метаданных (справочники, документы, регистры сведений), которые хотите опубликовать. 1С автоматически создает для них набор стандартных endpoints.
  2. Стандартизированные Endpoints: Для справочника "Товары" 1С создаст endpoint вида /odata/standard.odata/Catalog_Товары. Структура URL и параметров строго регламентирована стандартом OData.
  3. Богатые Возможности Запросов: Клиент может строить очень гибкие запросы прямо из URL, используя специальные параметры:
    • Фильтрация: $filter=Цена gt 1000 and startswith(Наименование, 'Акку')
    • Сортировка: $orderby=Наименование desc
    • Пагинация: $top=20&$skip=40
    • Выбор полей: $select=Наименование,Цена

Пример запроса к OData из мобильного приложения:

GET http://server/odata/standard.odata/Catalog_Товары?$filter=Цена lt 1000&$orderby=Наименование&$top=10

1С обработает этот запрос, преобразует его в собственный запрос к базе данных и вернет результат в стандартном формате OData (JSON).

Преимущества

  • Максимальная стандартизация: Единый стандарт для всех операций. Вы можете использовать готовые клиентские библиотеки (например, Simple.OData.Client для .NET), которые сами умеют строить такие запросы.
  • Подходит для простых CRUD-операций: Если ваша задача — просто отображать, фильтровать, сортировать и редактировать данные из стандартных объектов 1С, OData является самым быстрым решением "из коробки". Не нужно писать код обработчиков.
Недостатки

  • Негибкость для сложной бизнес-логики:
    • Сложные вычисления: Если для мобильного приложения нужны агрегированные или вычисляемые данные, которых нет в объекте, стандартный OData не поможет.
    • Кастомные операции: Невозможно создать endpoint POST /api/orders/submit, который будет не только создавать заказ, но и проверять наличие товаров, резервировать их и проводить документ. Вам придется эмулировать это несколькими вызовами или писать собственные сервисы.
    • "Утечка" внутренней структуры: Клиент вынужден работать с внутренними именами объектов и реквизитов 1С (например, Catalog_Товары, Description), которые могут быть неудобными для внешнего API.
SOAP (Веб-сервисы) — Устаревший, но все еще встречающийся вариант

Суть и Архитектура

SOAP — это протокол на основе XML, который был стандартом до широкого распространения REST.

  1. Основа на WSDL: В 1С публикуется "Веб-сервис" (не HTTP-сервис). Для него автоматически генерируется WSDL (Web Services Description Language) — XML-документ, который жестко описывает контракт API: доступные методы, структуры принимаемых и возвращаемых данных.
  2. Строгая Типизация и Сложность: Все сообщения (запросы и ответы) упаковываются в "конверт" SOAP — строго структурированный XML-документ с заголовками и телом. Это обеспечивает высокий уровень стандартизации и безопасности, но создает большую нагрузку.
  3. Процесс взаимодействия:
    • Разработчик мобильного приложения импортирует WSDL.
    • Инструменты (например, для Android — ksoap2) генерируют шаблонный код для вызовов.
    • Приложение формирует XML-запрос, обернутый в SOAP-конверт, и отправляет его на единственный URL сервиса (например, /ws/example.1cws).
    • Сервер 1С разбирает SOAP-конверт, находит нужный метод и выполняет его.
Почему он не рекомендуется для мобильных приложений?

  • Тяжеловесность: XML по своей природе многословен. Добавление SOAP-конверта делает сообщения в 2-5 раз больше, чем аналогичные в JSON. Для мобильных сетей, где важна экономия трафика, это критично.
  • Сложность: Работа с SOAP требует больше кода и усилий на стороне клиента. Нужно работать с низкоуровневыми XML-парсерами или подключать сторонние библиотеки.
  • Производительность: Парсинг объемного XML на мобильном устройстве потребляет больше CPU и времени по сравнению с легковесным JSON.
  • Меньшая гибкость: Любое изменение в API (добавление поля в ответ) требует обновления WSDL и перегенерации клиентского кода.
  • Прямое соединение через Native API (COM, .NET) — Категорически не для мобильных приложений.
    • Суть: Работает только в рамках Windows и для толстых клиентов. Для iOS и Android неприменим.
Совет: Для новых проектов однозначно выбирайте REST API на основе HTTP-сервисов 1С.

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

А. Слоистая Архитектура (Layered Architecture)

Разделите код на независимые слои:

  1. Слой UI (ViewController / Activity / Widget): Отвечает только за отображение и действия пользователя.
  2. Слой Бизнес-логики (Bloc, ViewModel, Presenter): Обрабатывает события от UI, принимает решения, передает запросы на слой данных.
  3. Слой Данных (Repository / Data Source):
    • Локальный источник: База данных на устройстве (SQLite, Room, Realm).
    • Удаленный источник (API Client): Клиент для взаимодействия с API 1С.
Эта схема известна как Repository Pattern. UI общается только с репозиторием, не зная, откуда берутся данные — из сети или кеша.

Б. Модели данных

Создайте классы-модели (Data Classes, POJO) в мобильном приложении, которые mirror-ят структуры данных, получаемые от 1С.

  • Важно: Не используйте сырой JSON в бизнес-логике. Парсите его в объекты вашего языка (Kotlin, Swift, Dart) сразу upon получении.
  • Сериализация/Десериализация: Используйте библиотеки типа Gson/Moshi для Android или Codable/JSONDecoder для iOS для автоматического преобразования JSON в объекты и обратно.
// Пример на Kotlin с Moshi

data class Product(
val id: String,
val name: String,
val price: Double
)
// В вашем API-клиенте

val moshi: Moshi = Moshi.Builder().build()
val adapter: JsonAdapter = moshi.adapter(Product::class.java)
val product = adapter.fromJson(jsonString)

3. Ключевые Аспекты Реализации API-Клиента

А. Аутентификация и Безопасность

  • Базовая аутентификация (Логин/Пароль): Просто, но небезопасно. Никогда не храните пароли в открытом виде. Используйте токены.
  • Токены доступа (OAuth 2.0 / 1C: ws): Наиболее предпочтительный способ.
    1. Приложение отправляет логин/пароль на специальный endpoint аутентификации.
    2. Сервер 1С возвращает access token и refresh token.
    3. Access token передается в заголовке Authorization: Bearer каждого последующего запроса.
    4. По истечении с жизни access token, приложение использует refresh token для получения новой пары токенов без повторного ввода пароля.
  • HTTPS: Все коммуникации должны проходить только по HTTPS. Отключать SSL-проверки в продакшене — недопустимо.

Б. Обработка Ошибок и Повторные Попытки

Сеть ненадежна. Ваше приложение должно быть к этому готово.

  • HTTP-Status Codes: Обрабатывайте разные коды ответов (200 - OK, 400 - Ошибка клиента, 401 - Не авторизован, 500 - Ошибка сервера).
  • Таймауты: Всегда устанавливайте разумные таймауты на соединение и чтение.
  • Повторные попытки (Retry): Реализуйте механизм повторных запросов для неудачных попыток (особенно при таймаутах или ошибках 5xx). Используйте экспоненциальную задержку (exponential backoff).
  • Человеко-читаемые сообщения: Преобразуйте технические ошибки от API в понятные сообщения для пользователя.

В. Работа с Оффлайн-Режимом

Мобильное приложение должно работать без сети.

  • Кеширование: Сохраняйте полученные данные в локальную БД.
  • Очередь запросов: Для модифицирующих операций (создание, изменение) реализуйте очередь отложенных запросов. Как только соединение восстанавливается, приложение отправляет все накопленные запросы на сервер. Паттерн "Command Queue" идеально подходит для этого.

Г. Пагинация и Фоновая Загрузка

Не загружайте все справочники или документы сразу.

  • Пагинация: Сервер API 1С должен поддерживать параметры limit (размер страницы) и offset (смещение). Мобильное приложение подгружает данные порциями по мере прокрутки списка.
  • Фоновая синхронизация: Крупные обновления данных (например, полный каталог товаров) выполняйте в фоновом режиме, уведомляя пользователя о прогрессе.

Д. Производительность

  • Минимизация запросов: Проектируйте endpoints так, чтобы один запрос возвращал все необходимые для экрана данные.
  • Сжатие (GZIP): Убедитесь, что сервер 1С отдает ответы в сжатом виде.
  • Кеширование HTTP-ответов: Используйте заголовки Cache-Control для ресурсов, которые редко меняются.

4. Примерная Схема Взаимодействия

  1. Старт приложения: Проверка наличия валидного токена.
  2. Экран списка товаров: UI запрашивает у Репозитория список товаров.
  3. Репоизторий: Сначала проверяет локальную БД. Если данных нет или они устарели, обращается к API-клиенту.
  4. API-Клиент:
    • Формирует HTTP-запрос GET /catalog/products?limit=20&offset=0.
    • Добавляет заголовок Authorization: Bearer .
    • Отправляет запрос, обрабатывает таймауты и ошибки.
    • Получает JSON, парсит его в список объектов Product.
  5. Репоизторий: Сохраняет список в локальную БД и возвращает его UI.
  6. UI: Отображает список товаров.
  7. Создание нового заказа: Пользователь нажимает "Оформить заказ". Репозиторий помещает команду "СоздатьЗаказ" в очередь и сразу показывает пользователю "Заказ создается".
  8. Синхронизация: Когда появляется сеть, фоновая служба забирает команду из очереди, отправляет ее на сервер 1С и, при успехе, помечает команду как выполненную.
Организация обмена данными между мобильным приложением и 1С — это не просто "сделать запрос". Это проектирование отказоустойчивой, безопасной и пользователь-ориентированной системы.

Ключевые принципы успеха:

  1. Используйте REST API (HTTP-сервисы 1С).
  2. Разделяйте ответственность через слоистую архитектуру.
  3. Всегда работайте через локальную БД для оффлайн-доступа.
  4. Будьте параноиком в вопросах безопасности (HTTPS, Токены).
  5. Обрабатывайте все возможные ошибки сети.
Следуя этим рекомендациям, вы создадите мобильное приложение, которое будет не просто "формочкой" для ввода данных, а полноценным, надежным и быстрым клиентом вашей ERP-системы 1С.





Подписаться на рассылку: Новости Софт-портал




Вернуться к списку