Как сохранить порядок сортировки таблицы формы (источник - таблица значений)?
Управляемая форма в мобильном приложении с таблицей, источник которой - таблица значений.
Используются стандартные команды сортировки, которые в android'е через контекстные меню предоставляют выбор колонок для сортировки.
Задача: запоминать порядок сортировки для таблицы.
Можно это сделать, используя стандартные команды сортировки?
Или как это сделать, максимально похожим на типовые команды?
Нужна была дополнительная колонка, поэтому выбрал таблицу значений, а не динамический список (хотя все данные можно получить и запросом).
Используются стандартные команды сортировки, которые в android'е через контекстные меню предоставляют выбор колонок для сортировки.
Задача: запоминать порядок сортировки для таблицы.
Можно это сделать, используя стандартные команды сортировки?
Или как это сделать, максимально похожим на типовые команды?
Нужна была дополнительная колонка, поэтому выбрал таблицу значений, а не динамический список (хотя все данные можно получить и запросом).
По теме из базы знаний
- Универсальный конструктор отчетов СКД (управляемые формы, тонкий клиент)
- Таблица значений. Нюансы
- Приемы работы с СКД: выгрузка данных справочников и документов в линейном виде в табличный документ
- Библиотека процедур и функций для технологической платформы "1С: Предприятие 7.7"
- Вывод условного оформления дерева значений или табличной части в эксель
Найденные решения
Решил реализовать свои команды сортировки, выглядят также как и типовые.
Команды решил создавать динамически, чтобы можно было быстро добавлять в другие формы.
На форме предварительно должны быть добавлены 2 группы: ГруппаСортироватьПоВозрастанию и ГруппаСортироватьПоУбыванию (тип "Подменю") и процедура, которая будет обработчиком всех команд сортировки.
Перед закрытием формы сохраняю поле сортировки и тип сортировки в отдельный регистр с настройками (автоматическое сохранение настроек формы пока в мобильной платформе не работает), при открытии считываю их в динамически добавленные реквизиты сортировки (ПолеСортировки и СортировкаПоВозрастанию)
Выполнение сортировки также вынесено в общий модуль. Реализовано пока только для таблицы значений, по мере необходимости добавлю для других типов.
Команды решил создавать динамически, чтобы можно было быстро добавлять в другие формы.
На форме предварительно должны быть добавлены 2 группы: ГруппаСортироватьПоВозрастанию и ГруппаСортироватьПоУбыванию (тип "Подменю") и процедура, которая будет обработчиком всех команд сортировки.
Перед закрытием формы сохраняю поле сортировки и тип сортировки в отдельный регистр с настройками (автоматическое сохранение настроек формы пока в мобильной платформе не работает), при открытии считываю их в динамически добавленные реквизиты сортировки (ПолеСортировки и СортировкаПоВозрастанию)
Процедура динамического добавления команд на форму в серверном общем модуле |
---|
Процедура ДобавитьКомандыСортировкиНаФорму(Форма, СписокПолей) Экспорт
МассивРеквизитов = Новый Массив;
ОписаниеТиповС = Новый ОписаниеТипов("Строка");
ОписаниеТиповБ = Новый ОписаниеТипов("Булево");
МассивСуществующихРеквизитов = Форма.ПолучитьРеквизиты();
СписокРеквизитовФормы = Новый СписокЗначений;
Для Каждого Реквизит Из МассивСуществующихРеквизитов Цикл
СписокРеквизитовФормы.Добавить(Реквизит.Имя);
КонецЦикла;
Если СписокРеквизитовФормы.НайтиПоЗначению("ПолеСортировки") = Неопределено Тогда
МассивРеквизитов.Добавить(Новый РеквизитФормы("ПолеСортировки", ОписаниеТиповС));
КонецЕсли;
Если СписокРеквизитовФормы.НайтиПоЗначению("СортировкаПоВозрастанию") = Неопределено Тогда
МассивРеквизитов.Добавить(Новый РеквизитФормы("СортировкаПоВозрастанию", ОписаниеТиповБ));
КонецЕсли;
Если МассивРеквизитов.Количество()>0 Тогда
Форма.ИзменитьРеквизиты(МассивРеквизитов);
КонецЕсли;
Форма.ПолеСортировки = "";
Форма.СортировкаПоВозрастанию = Ложь;
Для Каждого КлючЗнач Из СписокПолей Цикл
ИмяКоманды = "КомандаСортироватьПоВозрастанию" + КлючЗнач.Ключ;
Команда = Форма.Команды.Добавить(ИмяКоманды);
Команда.Действие = "КомандаСортировать";
Команда.Заголовок = КлючЗнач.Значение;
Команда.Картинка = БиблиотекаКартинок.СортироватьСписокПоВозрастанию;
КнопкаВозр = Форма.Элементы.Добавить(
"Кнопка" + ИмяКоманды, //Имя элемента
Тип("КнопкаФормы"), //Тип элемента
Форма.Элементы.ГруппаСортироватьПоВозрастанию); //Владелец элемента.
КнопкаВозр.ИмяКоманды = ИмяКоманды;
ИмяКоманды = "КомандаСортироватьПоУбыванию" + КлючЗнач.Ключ;
Команда = Форма.Команды.Добавить(ИмяКоманды);
Команда.Действие = "КомандаСортировать";
Команда.Заголовок = КлючЗнач.Значение;
Команда.Картинка = БиблиотекаКартинок.СортироватьСписокПоУбыванию;
КнопкаУбыв = Форма.Элементы.Добавить(
"Кнопка" + ИмяКоманды, //Имя элемента
Тип("КнопкаФормы"), //Тип элемента
Форма.Элементы.ГруппаСортироватьПоУбыванию); //Владелец элемента.
КнопкаУбыв.ИмяКоманды = ИмяКоманды;
КонецЦикла;
КонецПроцедуры // ДобавитьКомандыСортировки Показать |
Процедура-обработчик команд сортировки на форме |
---|
&НаКлиенте
Процедура КомандаСортировать(Команда)
ОбщегоНазначенияКлиент.КомандаСортировать(ЭтаФорма, Команда, Список);
КонецПроцедуры
|
Выполнение сортировки также вынесено в общий модуль. Реализовано пока только для таблицы значений, по мере необходимости добавлю для других типов.
Процедура сортировки в общем клиентском модуле |
---|
// Процедура - КомандаСортировать
//
Процедура КомандаСортировать(Форма, Команда, Список) Экспорт
Перем СортировкаПоВозрастанию;
Если Команда = Неопределено Тогда // принудительный вызов процедуры из формы (например, при открытии формы)
ПолеСортировки = Форма.ПолеСортировки;
СортировкаПоВозрастанию = Форма.СортировкаПоВозрастанию;
Если ПолеСортировки = "" Тогда
Возврат;
КонецЕсли;
Иначе
Если СтрНачинаетсяС(Команда.Имя, "КомандаСортироватьПоВозрастанию") Тогда
ПолеСортировки = СтрЗаменить(Команда.Имя, "КомандаСортироватьПоВозрастанию", "");
СортировкаПоВозрастанию = Истина;
ИначеЕсли СтрНачинаетсяС(Команда.Имя, "КомандаСортироватьПоУбыванию") Тогда
ПолеСортировки = СтрЗаменить(Команда.Имя, "КомандаСортироватьПоУбыванию", "");
СортировкаПоВозрастанию = Ложь;
Иначе
Возврат;
КонецЕсли;
КонецЕсли;
Если ТипЗнч(Список) = Тип("ДанныеФормыКоллекция") Тогда
Список.Сортировать(ПолеСортировки + " " + ?(СортировкаПоВозрастанию, "Возр", "Убыв"));
КонецЕсли;
Форма.ПолеСортировки = ПолеСортировки;
Форма.СортировкаПоВозрастанию = СортировкаПоВозрастанию;
КонецПроцедуры // КомандаСортировать Показать |
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Решил реализовать свои команды сортировки, выглядят также как и типовые.
Команды решил создавать динамически, чтобы можно было быстро добавлять в другие формы.
На форме предварительно должны быть добавлены 2 группы: ГруппаСортироватьПоВозрастанию и ГруппаСортироватьПоУбыванию (тип "Подменю") и процедура, которая будет обработчиком всех команд сортировки.
Перед закрытием формы сохраняю поле сортировки и тип сортировки в отдельный регистр с настройками (автоматическое сохранение настроек формы пока в мобильной платформе не работает), при открытии считываю их в динамически добавленные реквизиты сортировки (ПолеСортировки и СортировкаПоВозрастанию)
Выполнение сортировки также вынесено в общий модуль. Реализовано пока только для таблицы значений, по мере необходимости добавлю для других типов.
Команды решил создавать динамически, чтобы можно было быстро добавлять в другие формы.
На форме предварительно должны быть добавлены 2 группы: ГруппаСортироватьПоВозрастанию и ГруппаСортироватьПоУбыванию (тип "Подменю") и процедура, которая будет обработчиком всех команд сортировки.
Перед закрытием формы сохраняю поле сортировки и тип сортировки в отдельный регистр с настройками (автоматическое сохранение настроек формы пока в мобильной платформе не работает), при открытии считываю их в динамически добавленные реквизиты сортировки (ПолеСортировки и СортировкаПоВозрастанию)
Процедура динамического добавления команд на форму в серверном общем модуле |
---|
Процедура ДобавитьКомандыСортировкиНаФорму(Форма, СписокПолей) Экспорт
МассивРеквизитов = Новый Массив;
ОписаниеТиповС = Новый ОписаниеТипов("Строка");
ОписаниеТиповБ = Новый ОписаниеТипов("Булево");
МассивСуществующихРеквизитов = Форма.ПолучитьРеквизиты();
СписокРеквизитовФормы = Новый СписокЗначений;
Для Каждого Реквизит Из МассивСуществующихРеквизитов Цикл
СписокРеквизитовФормы.Добавить(Реквизит.Имя);
КонецЦикла;
Если СписокРеквизитовФормы.НайтиПоЗначению("ПолеСортировки") = Неопределено Тогда
МассивРеквизитов.Добавить(Новый РеквизитФормы("ПолеСортировки", ОписаниеТиповС));
КонецЕсли;
Если СписокРеквизитовФормы.НайтиПоЗначению("СортировкаПоВозрастанию") = Неопределено Тогда
МассивРеквизитов.Добавить(Новый РеквизитФормы("СортировкаПоВозрастанию", ОписаниеТиповБ));
КонецЕсли;
Если МассивРеквизитов.Количество()>0 Тогда
Форма.ИзменитьРеквизиты(МассивРеквизитов);
КонецЕсли;
Форма.ПолеСортировки = "";
Форма.СортировкаПоВозрастанию = Ложь;
Для Каждого КлючЗнач Из СписокПолей Цикл
ИмяКоманды = "КомандаСортироватьПоВозрастанию" + КлючЗнач.Ключ;
Команда = Форма.Команды.Добавить(ИмяКоманды);
Команда.Действие = "КомандаСортировать";
Команда.Заголовок = КлючЗнач.Значение;
Команда.Картинка = БиблиотекаКартинок.СортироватьСписокПоВозрастанию;
КнопкаВозр = Форма.Элементы.Добавить(
"Кнопка" + ИмяКоманды, //Имя элемента
Тип("КнопкаФормы"), //Тип элемента
Форма.Элементы.ГруппаСортироватьПоВозрастанию); //Владелец элемента.
КнопкаВозр.ИмяКоманды = ИмяКоманды;
ИмяКоманды = "КомандаСортироватьПоУбыванию" + КлючЗнач.Ключ;
Команда = Форма.Команды.Добавить(ИмяКоманды);
Команда.Действие = "КомандаСортировать";
Команда.Заголовок = КлючЗнач.Значение;
Команда.Картинка = БиблиотекаКартинок.СортироватьСписокПоУбыванию;
КнопкаУбыв = Форма.Элементы.Добавить(
"Кнопка" + ИмяКоманды, //Имя элемента
Тип("КнопкаФормы"), //Тип элемента
Форма.Элементы.ГруппаСортироватьПоУбыванию); //Владелец элемента.
КнопкаУбыв.ИмяКоманды = ИмяКоманды;
КонецЦикла;
КонецПроцедуры // ДобавитьКомандыСортировки Показать |
Процедура-обработчик команд сортировки на форме |
---|
&НаКлиенте
Процедура КомандаСортировать(Команда)
ОбщегоНазначенияКлиент.КомандаСортировать(ЭтаФорма, Команда, Список);
КонецПроцедуры
|
Выполнение сортировки также вынесено в общий модуль. Реализовано пока только для таблицы значений, по мере необходимости добавлю для других типов.
Процедура сортировки в общем клиентском модуле |
---|
// Процедура - КомандаСортировать
//
Процедура КомандаСортировать(Форма, Команда, Список) Экспорт
Перем СортировкаПоВозрастанию;
Если Команда = Неопределено Тогда // принудительный вызов процедуры из формы (например, при открытии формы)
ПолеСортировки = Форма.ПолеСортировки;
СортировкаПоВозрастанию = Форма.СортировкаПоВозрастанию;
Если ПолеСортировки = "" Тогда
Возврат;
КонецЕсли;
Иначе
Если СтрНачинаетсяС(Команда.Имя, "КомандаСортироватьПоВозрастанию") Тогда
ПолеСортировки = СтрЗаменить(Команда.Имя, "КомандаСортироватьПоВозрастанию", "");
СортировкаПоВозрастанию = Истина;
ИначеЕсли СтрНачинаетсяС(Команда.Имя, "КомандаСортироватьПоУбыванию") Тогда
ПолеСортировки = СтрЗаменить(Команда.Имя, "КомандаСортироватьПоУбыванию", "");
СортировкаПоВозрастанию = Ложь;
Иначе
Возврат;
КонецЕсли;
КонецЕсли;
Если ТипЗнч(Список) = Тип("ДанныеФормыКоллекция") Тогда
Список.Сортировать(ПолеСортировки + " " + ?(СортировкаПоВозрастанию, "Возр", "Убыв"));
КонецЕсли;
Форма.ПолеСортировки = ПолеСортировки;
Форма.СортировкаПоВозрастанию = СортировкаПоВозрастанию;
КонецПроцедуры // КомандаСортировать Показать |
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот