Работа с Системой компоновки данных (СКД) в мобильном приложении 1С имеет ряд существенных отличий от настольной версии. Разработчики часто сталкиваются с ситуацией, когда код, идеально работающий в «толстом» или «тонком» клиенте, на мобильном устройстве выдает трудночитаемые ошибки или вовсе отказывается функционировать. Разберем по шагам, как правильно реализовать программный вывод отчета на мобильной платформе, проанализируем основные причины сбоев и найдем эффективные способы их решения.
Рассмотрим ситуацию, когда при попытке программного формирования отчета на СКД возникает ошибка: «Ошибка отображения типов: Отображение лексического значения "" в значение типа "УникальныйИдентификатор"». Выясним причину этого поведения. Проанализируем исходный программный код, который часто приводит к такому результату:
СКД = ПолучитьОбщийМакет("ПотраченныеФинансы");
Настройки = СКД.НастройкиПоУмолчанию;
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СКД, Настройки, ДанныеРасшифровки);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);
РезультатОтчета.Очистить();
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(РезультатОтчета);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
Основная причина ошибки в мобильном приложении зачастую кроется в объекте ДанныеРасшифровкиКомпоновкиДанных. На мобильной платформе механизм расшифровки реализован в упрощенном виде. Попробуем исключить использование расшифровки из кода, если она не является критически важной для вашего мобильного отчета. Как показывает практика, передача пустого значения или исключение параметров расшифровки из методов Выполнить() и Инициализировать() во многих случаях снимает проблему с типами УникальныйИдентификатор.
Разберем важный нюанс: работа с коллекцией параметров данных. В десктопной версии 1С мы привыкли свободно добавлять параметры программно. Однако в мобильном приложении метод Добавить() для коллекции ПараметрыДанных.Элементы может возвращать Неопределено или вызывать сбой. Посмотрим на правильный алгоритм работы с параметрами:
Найти().Проанализируем пример корректного заполнения параметров для мобильной версии:
// Вместо Добавить() используем Найти()
ПараметрНачало = Настройки.ПараметрыДанных.Элементы.Найти("НачалоПериода");
Если ПараметрНачало <> Неопределено Тогда
ПараметрНачало.Значение = Объект.ДатаНачала;
ПараметрНачало.Использование = Истина;
КонецЕсли;
Мобильная платформа использует SQLite в качестве базы данных. Это накладывает ограничения на сложные вложенные запросы и виртуальные таблицы СКД. Если ваш отчет со сворачиваемыми группировками работает крайне медленно или вызывает «зависание» интерфейса, применим следующие оптимизации:
Использование внешних наборов данных. Это один из самых надежных способов работы СКД на МП. Вместо того чтобы заставлять СКД выполнять запрос к локальной базе данных, мы сами получаем данные с помощью обычного объекта Запрос, выгружаем их в ТаблицуЗначений и передаем в СКД как внешний набор.
Разберем по шагам, как это реализовать:
// 1. Получаем данные запросом
Запрос = Новый Запрос("ВЫБРАТЬ Пользователь, Сумма ИЗ РегистрНакопления.Финансы");
ТЗДанных = Запрос.Выполнить().Выгрузить();
// 2. Помещаем в структуру для внешних наборов
ВнешниеНаборыДанных = Новый Структура;
ВнешниеНаборыДанных.Вставить("ВнешниеДанные", ТЗДанных);
// 3. Передаем в процессор компоновки
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных);
Такой подход решает 90% проблем с некорректной интерпретацией параметров запроса и виртуальных таблиц на мобильных устройствах.
Если мобильное приложение работает в связке с центральной базой, рассмотрим вариант серверного формирования. Вместо того чтобы нагружать процессор мобильного устройства сложными вычислениями, мы можем:
ТабличныйДокумент на стороне сервера.Это значительно ускоряет работу пользователя, особенно если отчет содержит сотни строк и сложные условные оформления, которые в мобильной версии могут сильно замедлять отрисовку.
Проанализируем влияние версии мобильной платформы. Проблемы с методом НастройкиПоУмолчанию часто наблюдались в ранних релизах. Начиная с версии 8.3.13.45 и выше, работа с СКД стала более стабильной. Если вы используете старую версию платформы, крайне рекомендуется обновить её до актуальной (например, 8.3.18 или выше).
Важные советы для разработки мобильной СКД:
ВыбранныеПоля всегда вызывайте метод Очистить(), чтобы избежать дублирования или обращения к несуществующим полям метаданных.Подводя итог, можно сказать: СКД в мобильном приложении 1С — это рабочий инструмент, если учитывать специфику платформы. Используя внешние наборы данных и аккуратно работая с коллекцией параметров, вы сможете создавать функциональные и быстрые отчеты для мобильных пользователей.