Тип: Порядок. Порядок для вывода отчета.
Полное описание, параметры и ограничения
ПостроительОтчета.Порядок (ReportBuilder.Order)
ПостроительОтчета (ReportBuilder)
Порядок (Order)
Доступен, начиная с версии 8.0.
Использование:
Только чтение.
Описание:
Тип: Порядок.
Порядок для вывода отчета.
Доступность:
Сервер, толстый клиент, внешнее соединение.
Использование в версии:
Доступен, начиная с версии 8.0.
Методическая информация
Практические примеры
Вывести самые дорогие учебные строки первыми
Порядок отчёта сортирует вывод по сумме, затем по названию. Разбираем элементы порядка и изменение их коллекции.
Где и как запускать
Модуль новой управляемой формы учебной внешней обработки. Код содержит готовые процедуры с директивами; вставляйте на уровне модуля, не внутрь другого обработчика. Каждую задачу запускайте в отдельной копии формы.
Подготовка
Учебная внешняя обработка с пустой управляемой основной формой. Создайте команду УчебныйПример, кнопку команды и назначьте действие УчебныйПример.
Вставьте полный модуль урока: клиентский обработчик и серверную функцию. Каждый урок — отдельная копия модуля.
Откройте EPF в тонком клиенте Windows. Данные Книга/Ручка/Коробка создаются только в памяти; запрос урока с параметрами не читает таблицы базы.
ПостроительОтчета — существующий API для изучения/сопровождения старого кода. Это не СистемаКомпоновкиДанных и не рекомендация заменять ею современные отчёты.
&НаКлиенте
Процедура УчебныйПример(Команда)
ТабДок = СформироватьУчебныйОтчет();
ТабДок.ТолькоПросмотр = Истина;
ТабДок.Показать("Учебный ПостроительОтчета");
КонецПроцедуры
&НаСервере
Функция СформироватьУчебныйОтчет()
Данные = Новый ТаблицаЗначений;
Данные.Колонки.Добавить("Категория", Новый ОписаниеТипов("Строка"));
Данные.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка"));
Данные.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число"));
Данные.Колонки.Добавить("Цена", Новый ОписаниеТипов("Число"));
Данные.Колонки.Добавить("Сумма", Новый ОписаниеТипов("Число"));
Образцы = Новый Массив;
Образцы.Добавить(Новый Структура("Категория,Наименование,Количество,Цена", "Канцелярия", "Книга", 3, 250));
Образцы.Добавить(Новый Структура("Категория,Наименование,Количество,Цена", "Канцелярия", "Ручка", 1, 50));
Образцы.Добавить(Новый Структура("Категория,Наименование,Количество,Цена", "Упаковка", "Коробка", 2, 30));
Для Каждого Образец Из Образцы Цикл
СтрокаДанных = Данные.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаДанных, Образец);
СтрокаДанных.Сумма = СтрокаДанных.Количество * СтрокаДанных.Цена;
КонецЦикла;
Описание = Новый ОписаниеИсточникаДанных(Данные);
Для Каждого Колонка Из Описание.Колонки Цикл
Колонка.Поле = Истина;
Колонка.Отбор = Истина;
Колонка.Порядок = Истина;
Колонка.Измерение = Колонка.Имя = "Категория";
КонецЦикла;
Построитель = Новый ПостроительОтчета;
Построитель.ИсточникДанных = Описание;
Построитель.АвтоДетальныеЗаписи = Ложь;
Построитель.ВыводитьДетальныеЗаписи = Истина;
Построитель.ВыводитьЗаголовокОтчета = Истина;
Построитель.ВыводитьОбщиеИтоги = Ложь;
Построитель.ВыводитьПодвалОтчета = Ложь;
Построитель.ВыводитьПодвалТаблицы = Ложь;
Построитель.ВыводитьШапкуТаблицы = Истина;
Построитель.ОтображатьСостояние = Ложь;
Построитель.ОбрабатыватьПрерываниеПользователя = Истина;
Построитель.ТекстЗаголовка = "Учебный отчёт — вымышленные данные";
Порядок = Построитель.Порядок;
Порядок.Очистить();
Порядок.Добавить("Сумма", "ПоСумме", "Сумма по убыванию", НаправлениеСортировки.Убыв);
Порядок.Добавить("Наименование", "ПоНазванию", "Название", НаправлениеСортировки.Возр);
Сумма = Порядок.Найти("ПоСумме");
Название = Порядок.Найти("ПоНазванию");
Сообщить(Порядок.Количество() = 2);
Сообщить(Сумма.Направление = НаправлениеСортировки.Убыв);
Сообщить(Сумма.ПутьКДанным = "Сумма");
Сообщить(Сумма.Имя = "ПоСумме");
Сообщить(Порядок.Индекс(Название) = 1);
Порядок.Сдвинуть(1, -1);
Сообщить(Порядок.Получить(0).Имя = "ПоНазванию");
Порядок.Удалить(0);
Сообщить(Порядок.Количество() = 1);
// Установить заменяет порядок собственным описанием по доступным путям.
Порядок.Установить("Сумма Убыв, Наименование Возр");
Сообщить(Данные.Получить(1).Наименование = "Ручка");
ТабДок = Новый ТабличныйДокумент;
Построитель.Вывести(ТабДок);
Возврат ТабДок;
КонецФункции
Разбор по шагам
Отдельная коллекция порядка создаёт две сортировки. Направление задано явно.
Имя ПоСумме отличается от пути Сумма; находим настройку по имени.
Индекс/Получить относятся к позиции условия сортировки, а не к позиции товарной строки.
Временно переставляем и удаляем условие по названию, затем задаём итоговый порядок строкой Установить.
Исходная таблица остаётся в прежнем порядке Книга/Ручка/Коробка. Вывод сортируется отдельно.
Как проверить результат
Восемь булевых проверок Истина.
В выводе порядок Книга 750, Коробка 60, Ручка 50.
Проверка исходной строки 1 всё ещё Ручка.
Ожидаемый результат
Реальная сортировка отчёта разобрана отдельно от перестановки исходных данных.
На что обратить внимание
Сдвинуть у Порядок принимает индекс, а не обязательно объект элемента: здесь используем документированный числовой вариант.
Установить описывает доступные пути данных, а не пользовательские заголовки.
Добавить у Порядок не используем как возвращающий объект: элемент получаем через Найти.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Отделить доступность сортировки от порядка отчёта
Создаём и меняем коллекцию правил: Наименование доступно для редактирования, Сумма сначала недоступна. Отчёт всё время остаётся отсортирован по сумме убыванию.
Где и как запускать
Полный серверный общий модуль собственной учебной базы; интерфейс обычного табличного поля не открывается.
Подготовка
Собственная учебная база 8.5.1.1343, серверный общий модуль УчебнаяДоступностьСортировки. Вставьте полный модуль и вызовите ВыполнитьПример() своей серверной командой.
Три товара создаются только в памяти: Книга 750, Ручка 50, Коробка 60. ПостроительОтчета используется для проверки настоящего порядка результата, не для обращения к базе.
НастройкаПорядка — коллекция разрешений интерактивного изменения, не список сортировки. В этом упражнении она самостоятельная и к элементу управления не подключена.
Для настоящего обычного табличного поля используется его собственное свойство НастройкаПорядка; видимость/блокировка диалога интерфейса данным серверным уроком не проверяется.
Процедура ВыполнитьПример() Экспорт
Данные = Новый ТаблицаЗначений;
Данные.Колонки.Добавить("Категория", Новый ОписаниеТипов("Строка"));
Данные.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка"));
Данные.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число"));
Данные.Колонки.Добавить("Цена", Новый ОписаниеТипов("Число"));
Данные.Колонки.Добавить("Сумма", Новый ОписаниеТипов("Число"));
Образцы = Новый Массив;
Образцы.Добавить(Новый Структура("Категория,Наименование,Количество,Цена", "Канцелярия", "Книга", 3, 250));
Образцы.Добавить(Новый Структура("Категория,Наименование,Количество,Цена", "Канцелярия", "Ручка", 1, 50));
Образцы.Добавить(Новый Структура("Категория,Наименование,Количество,Цена", "Упаковка", "Коробка", 2, 30));
Для Каждого Образец Из Образцы Цикл
СтрокаДанных = Данные.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаДанных, Образец);
СтрокаДанных.Сумма = СтрокаДанных.Количество * СтрокаДанных.Цена;
КонецЦикла;
Описание = Новый ОписаниеИсточникаДанных(Данные);
Для Каждого Колонка Из Описание.Колонки Цикл
Колонка.Поле = Истина;
Колонка.Отбор = Истина;
Колонка.Порядок = Истина;
Колонка.Измерение = Колонка.Имя = "Категория";
КонецЦикла;
Построитель = Новый ПостроительОтчета;
Построитель.ИсточникДанных = Описание;
Построитель.АвтоДетальныеЗаписи = Ложь;
Построитель.ВыводитьДетальныеЗаписи = Истина;
Построитель.ВыбранныеПоля.Очистить();
Построитель.ВыбранныеПоля.Добавить("Наименование");
Построитель.ВыбранныеПоля.Добавить("Сумма");
Построитель.Порядок.Установить("Сумма Убыв");
Построитель.Выполнить();
ДоИзменения = Построитель.Результат.Выгрузить();
Управление = Новый НастройкаПорядка;
Название = Управление.Добавить("Наименование", Истина);
Сумма = Управление.Добавить("Сумма", Ложь);
Сообщить(Управление.Количество() = 2);
Сообщить(Название.Имя = "Наименование");
Сообщить(Название.Доступность);
Сообщить(НЕ Сумма.Доступность);
Сообщить(Управление.Найти("Сумма") = Сумма);
Сообщить(Управление.Найти("НеизвестноеПоле") = Неопределено);
Сообщить(Управление.Индекс(Сумма) = 1);
Сообщить(Управление.Получить(0) = Название);
Сумма.Доступность = Истина;
Сообщить(Сумма.Доступность);
Управление.Удалить(Название);
Сообщить(Управление.Количество() = 1);
Сообщить(Управление.Получить(0).Имя = "Сумма");
Управление.Очистить();
Сообщить(Управление.Количество() = 0);
Построитель.Выполнить();
ПослеИзменения = Построитель.Результат.Выгрузить();
Сообщить(ДоИзменения.Количество() = 3 И ПослеИзменения.Количество() = 3);
Сообщить(ПослеИзменения[0].Сумма = 750);
Сообщить(ПослеИзменения[1].Сумма = 60);
Сообщить(ПослеИзменения[2].Сумма = 50);
Сообщить(ПослеИзменения.Итог("Сумма") = 860);
Сообщить("Коллекция разрешений изменена, но настоящий порядок Сумма Убыв остался прежним.");
КонецПроцедурыРазбор по шагам
Создать собственный источник данных и настоящий порядок Сумма Убыв у построителя. Получить результат до изменения правил.
Создать НастройкаПорядка и два правила по именам полей. Имя элемента только читается, Доступность изменяется.
Найти правило Сумма по имени, проверить индекс и получить по позиции. Для неизвестного имени приходит Неопределено.
Включить редактирование суммы, удалить собственное правило названия, затем очистить только свою коллекцию правил.
Повторить выполнение построителя и проверить 750, 60, 50. Очистка правил интерактивной доступности не равна очистке Построитель.Порядок и не удаляет данные.
Как проверить результат
Семнадцать булевых проверок дают Истина.
Результат: Книга 750, Коробка 60, Ручка 50; общий итог 860. В конце Управление пустое, исходные данные сохраняются.
Ожидаемый результат
Полный пример всех операций коллекции разрешений с независимым настоящим результатом сортировки.
На что обратить внимание
Самостоятельная коллекция не ограничивает интерфейс автоматически: её нужно отличать от собственной коллекции конкретного обычного поля.
Доступность = Ложь не является правами на данные и не запрещает программную сортировку.
Для переименования элемента создайте новое правило: Имя только для чтения. У коллекции нет Вставить или Сдвинуть.
Удалить принимает элемент правила, не строку имени и не индекс.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.