Как доработать обмен данными в мобильном приложении 1С:Документооборот для отображения табличных частей?

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

При работе с мобильным приложением 1С:Документооборот разработчики часто сталкиваются с тем, что стандартный функционал отображения предметов задачи через HTML-файл недостаточно удобен для глубокого анализа данных. Возникает необходимость добавить полноценную табличную часть (например, список товаров или услуг) непосредственно в справочник ПредметыЗадач и обеспечить ее корректную синхронизацию между основным сервером и мобильным устройством. Разберем подробно, как реализовать этот механизм, учитывая сложную архитектуру очередей и XDTO-сериализации.

Анализ архитектуры обмена данными

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

  1. Регистрация изменений объектов в специальной очереди на стороне сервера.
  2. Порционная генерация JSON-ответов при обращении мобильного клиента к HTTP-сервису MobileApp.
  3. Десериализация JSON на стороне мобильного приложения и запись данных в локальную базу данных (SQLite).

Для реализации нашей задачи — добавления табличной части — нам придется задействовать все три звена этой цепи.

Работа с XDTO-пакетами: фундамент данных

Рассмотрим причину, по которой данные могут не попадать в мобильное приложение, даже если вы добавили их в код формирования сообщения. Основная сложность заключается в использовании XDTO-пакетов (обычно это пакет с префиксом MobileAppDocumentManagement). Если структура передаваемого JSON не соответствует описанию в XDTO, сериализатор 1С просто проигнорирует новые поля.

Что нужно сделать:

  1. Откроем конфигурацию и найдем соответствующий XDTO-пакет.
  2. Найдем тип объекта, отвечающий за предмет задачи (например, TaskSubject).
  3. Добавим в это определение новое свойство (например, Goods).
  4. Установим тип этого свойства как список (параметр MaxOccurs установим в значение -1 или Unbounded), чтобы передавать несколько строк табличной части.

Без этого шага любые изменения в серверном коде будут бесполезны, так как мобильное приложение не сможет «узнать» входящую структуру данных.

Модификация серверной логики выгрузки

Теперь разберем, где именно в коде происходит формирование данных для отправки. На стороне серверной конфигурации (основной базы «1С:Документооборот») нам необходимо внедрить логику заполнения новой табличной части в JSON.

Проанализируем модуль МП_Изменения. Нам интересна процедура ДобавитьПредметыКВыгрузке. Именно здесь описывается логика подготовки предметов согласования для включения в сообщение обмена. Нам нужно дополнить этот процесс:


// Пример логики в расширении или модуле МП_Изменения
Процедура ДобавитьПредметыКВыгрузке(ПредметыЗадачи, СтруктураJSON)
    // Находим данные нашей табличной части в объекте ИБ
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ * ИЗ Справочник.ПредметыЗадач.Товары ГДЕ Ссылка = &Ссылка";
    Запрос.УстановитьПараметр("Ссылка", ПредметыЗадачи.Ссылка);
    
    Результат = Запрос.Выполнить().Выгрузить();
    
    // Формируем массив структур для JSON, соответствующий XDTO
    МассивТоваров = Новый Массив;
    Для Каждого СтрокаТЧ Из Результат Цикл
        СтруктураСтроки = Новый Структура("Номенклатура, Количество, Цена");
        ЗаполнитьЗначенияСвойств(СтруктураСтроки, СтрокаТЧ);
        МассивТоваров.Добавить(СтруктураСтроки);
    КонецЦикла;
    
    // Добавляем данные в общую структуру
    СтруктураJSON.Вставить("Goods", МассивТоваров);
КонецПроцедуры

Также стоит обратить внимание на модуль МП_Сериализация. В нем содержатся функции, отвечающие за превращение объектов информационной базы в структуры, готовые к отправке. Найдем функцию, заполняющую данные предмета задачи, и допишем в ней выгрузку строк вашей новой табличной части.

Обработка данных на стороне мобильного приложения

После того как данные успешно ушли с сервера в формате JSON, их нужно принять и обработать в самом мобильном приложении (файл конфигурации .mcf). Выясним, где находится точка входа для входящих данных.

В мобильной конфигурации за это отвечает общий модуль ОбменОбработкаСервер, а именно процедура СоздатьИзменитьЗагружаемыйЭлемент. Посмотрим на алгоритм действий:

  1. Система получает очередной объект из JSON-пакета.
  2. Происходит сопоставление типов данных мобильной платформы.
  3. Выполняется запись данных в локальные таблицы справочников или документов.

Вам необходимо модифицировать эту процедуру так, чтобы при получении объекта TaskSubject система обходила массив Goods и записывала его в локальную табличную часть справочника ПредметыЗадач мобильного приложения.

Настройка интерфейса и визуализация

Передача данных — это только половина дела. Теперь нам нужно отобразить эти данные пользователю. В мобильном приложении «1С:Документооборот» просмотр часто реализован через HTML-шаблоны. Если мы хотим уйти от этого, нам нужно:

  1. В мобильной конфигурации открыть форму просмотра задачи.
  2. Добавить на форму элемент типа «Таблица».
  3. Связать этот элемент с табличной частью справочника ПредметыЗадач.
  4. Если используется механизм «Декораций» (HTML), потребуется модифицировать JavaScript или HTML-шаблон, который генерирует итоговый файл, чтобы включить туда строки нашей таблицы.

Важное замечание: Если вы используете современную версию «1С:Документооборот 3.0» и работаете через Мобильный клиент, то описанные выше сложности с XDTO и очередями обмена вас не касаются. В мобильном клиенте формы транслируются напрямую с сервера, и добавление табличной части на форму в основной базе автоматически отобразит ее у пользователя мобильного устройства.

Методы отладки обмена

Разберем, как эффективно отлаживать этот процесс, так как сообщения формируются фоновыми заданиями. Для поиска истины используем следующие приемы:

Проанализировав ситуацию, мы видим, что ключ к успеху лежит в строгом соблюдении цепочки: XDTO-пакет -> Серверный модуль сериализации -> Очередь обмена -> Мобильный модуль десериализации. Изменение только одного звена приведет к потере данных при синхронизации.

← На главную