При разработке мобильных приложений на платформе 1С часто возникает задача организации интерфейса подбора товаров. Разработчики нередко пытаются сделать это «в лоб»: создать колонку Количество непосредственно в Динамическом списке и пытаться менять её значение при интерактивном выборе пользователем. Однако такой подход сталкивается с серьезными архитектурными ограничениями платформы.
Давайте разберем, почему это происходит и как правильно организовать работу с данными в мобильном клиенте.
Динамический список — это инструмент, предназначенный исключительно для эффективного чтения и отображения данных из базы данных. Он работает через механизм КомпоновкиДанных и подгружает данные порциями. Когда вы пытаетесь изменить значение в текущей строке списка, вы сталкиваетесь со следующими проблемами:
ТекущиеДанные, не сохраняются в базе данных автоматически.Правильный подход, принятый в типовых конфигурациях 1С, заключается в разделении функций отображения (каталог) и функций накопления (выбранный товар). Рассмотрим, как реализовать это по шагам.
Динамический список (каталог номенклатуры). Второй — Таблица значений (или Таблица формы), в которой будут храниться уже выбранные товары с указанным количеством.Выбор у элемента Динамический список. При выборе строки вызывайте вторую форму, в которой пользователь укажет необходимое количество.Таблицу значений, которую видит пользователь.Если вам необходимо программно получить данные, которые сейчас видит пользователь в списке, вы можете воспользоваться методами компоновки данных. Рассмотрим пример функции, которая выводит содержимое динамического списка в таблицу значений:
&НаСервере
Функция ДинамическийСписокВТаблицуЗначений()
Схема = Элементы.Список.ПолучитьИсполняемуюСхемуКомпоновкиДанных();
Настройки = Элементы.Список.ПолучитьИсполняемыеНастройкиКомпоновкиДанных();
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(Схема, Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
Результат = ПроцессорВывода.Вывести(ПроцессорКомпоновки);
Возврат Результат;
КонецФункции
Этот подход позволяет работать с данными гибко, не нарушая работу самого списка. Однако помните, что для мобильного приложения выполнение такой операции на сервере может быть ресурсоемким при большом объеме данных.
Работая над мобильным интерфейсом, мы должны учитывать специфику устройств:
ПриПолученииДанныхНаСервере. В мобильном приложении это приведет к ощутимым «тормозам» при прокрутке списка, так как сервер будет вынужден каждый раз выполнять тяжелые запросы.Используя описанный архитектурный подход, вы избавите себя от необходимости реализовывать сложные и ненадежные «костыли», а ваше приложение будет работать стабильно и соответствовать стандартам разработки 1С.