При работе с мобильным приложением 1С:Документооборот разработчики часто сталкиваются с тем, что стандартный функционал отображения предметов задачи через HTML-файл недостаточно удобен для глубокого анализа данных. Возникает необходимость добавить полноценную табличную часть (например, список товаров или услуг) непосредственно в справочник ПредметыЗадач и обеспечить ее корректную синхронизацию между основным сервером и мобильным устройством. Разберем подробно, как реализовать этот механизм, учитывая сложную архитектуру очередей и XDTO-сериализации.
Прежде всего, нам необходимо понять, что обмен в мобильном документообороте реализован не через стандартные планы обмена, а с использованием собственной системы очередей и HTTP-сервисов. Процесс обмена строится на передаче JSON-пакетов, структура которых жестко детерминирована XDTO-пакетами. Проанализируем основные этапы передачи данных:
MobileApp.Для реализации нашей задачи — добавления табличной части — нам придется задействовать все три звена этой цепи.
Рассмотрим причину, по которой данные могут не попадать в мобильное приложение, даже если вы добавили их в код формирования сообщения. Основная сложность заключается в использовании XDTO-пакетов (обычно это пакет с префиксом MobileAppDocumentManagement). Если структура передаваемого JSON не соответствует описанию в XDTO, сериализатор 1С просто проигнорирует новые поля.
Что нужно сделать:
TaskSubject).Goods).MaxOccurs установим в значение -1 или Unbounded), чтобы передавать несколько строк табличной части.Без этого шага любые изменения в серверном коде будут бесполезны, так как мобильное приложение не сможет «узнать» входящую структуру данных.
Теперь разберем, где именно в коде происходит формирование данных для отправки. На стороне серверной конфигурации (основной базы «1С:Документооборот») нам необходимо внедрить логику заполнения новой табличной части в JSON.
Проанализируем модуль МП_Изменения. Нам интересна процедура ДобавитьПредметыКВыгрузке. Именно здесь описывается логика подготовки предметов согласования для включения в сообщение обмена. Нам нужно дополнить этот процесс:
// Пример логики в расширении или модуле МП_Изменения
Процедура ДобавитьПредметыКВыгрузке(ПредметыЗадачи, СтруктураJSON)
// Находим данные нашей табличной части в объекте ИБ
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ * ИЗ Справочник.ПредметыЗадач.Товары ГДЕ Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", ПредметыЗадачи.Ссылка);
Результат = Запрос.Выполнить().Выгрузить();
// Формируем массив структур для JSON, соответствующий XDTO
МассивТоваров = Новый Массив;
Для Каждого СтрокаТЧ Из Результат Цикл
СтруктураСтроки = Новый Структура("Номенклатура, Количество, Цена");
ЗаполнитьЗначенияСвойств(СтруктураСтроки, СтрокаТЧ);
МассивТоваров.Добавить(СтруктураСтроки);
КонецЦикла;
// Добавляем данные в общую структуру
СтруктураJSON.Вставить("Goods", МассивТоваров);
КонецПроцедуры
Также стоит обратить внимание на модуль МП_Сериализация. В нем содержатся функции, отвечающие за превращение объектов информационной базы в структуры, готовые к отправке. Найдем функцию, заполняющую данные предмета задачи, и допишем в ней выгрузку строк вашей новой табличной части.
После того как данные успешно ушли с сервера в формате JSON, их нужно принять и обработать в самом мобильном приложении (файл конфигурации .mcf). Выясним, где находится точка входа для входящих данных.
В мобильной конфигурации за это отвечает общий модуль ОбменОбработкаСервер, а именно процедура СоздатьИзменитьЗагружаемыйЭлемент. Посмотрим на алгоритм действий:
Вам необходимо модифицировать эту процедуру так, чтобы при получении объекта TaskSubject система обходила массив Goods и записывала его в локальную табличную часть справочника ПредметыЗадач мобильного приложения.
Передача данных — это только половина дела. Теперь нам нужно отобразить эти данные пользователю. В мобильном приложении «1С:Документооборот» просмотр часто реализован через HTML-шаблоны. Если мы хотим уйти от этого, нам нужно:
ПредметыЗадач.Важное замечание: Если вы используете современную версию «1С:Документооборот 3.0» и работаете через Мобильный клиент, то описанные выше сложности с XDTO и очередями обмена вас не касаются. В мобильном клиенте формы транслируются напрямую с сервера, и добавление табличной части на форму в основной базе автоматически отобразит ее у пользователя мобильного устройства.
Разберем, как эффективно отлаживать этот процесс, так как сообщения формируются фоновыми заданиями. Для поиска истины используем следующие приемы:
MobileApp в методах Get или Post. Это позволит увидеть «сырой» текст JSON в момент его формирования сервером.Проанализировав ситуацию, мы видим, что ключ к успеху лежит в строгом соблюдении цепочки: XDTO-пакет -> Серверный модуль сериализации -> Очередь обмена -> Мобильный модуль десериализации. Изменение только одного звена приведет к потере данных при синхронизации.