Тип: Порядок. Содержит объект Порядок, по которому осуществляется текущее упорядочивание видов расчета в списке. В качестве имен упорядочивания объекта могут выступать имена предопределенных и обычных реквизитов видов расчета.
Полное описание, параметры и ограничения
ПланВидовРасчетаСписок.<Имя плана видов расчета>.Порядок (ChartOfCalculationTypesList.<Chart of calculation types name>.Order)
ПланВидовРасчетаСписок.<Имя плана видов расчета> (ChartOfCalculationTypesList.<Chart of calculation types name>)
Порядок (Order)
Доступен, начиная с версии 8.0.
Использование:
Только чтение.
Описание:
Тип: Порядок.
Содержит объект Порядок, по которому осуществляется текущее упорядочивание видов расчета в списке. В качестве имен упорядочивания объекта могут выступать имена предопределенных и обычных реквизитов видов расчета.
Доступность:
Сервер, толстый клиент, внешнее соединение.
Использование в версии:
Доступен, начиная с версии 8.0.
Методическая информация
Практические примеры
Список видов расчёта: показать премию, изменить порядок и вернуть все записи
На настоящем реквизите обычной формы отличим источник списка от поля UI, настроим колонки/отбор/порядок и перечитаем те же сохранённые A/B/C.
Где и как запускать
Полный модуль собственной обычной формы УчебныеМенеджерыРасчетов85 → Обработки → УчебныеВидыСписок85 → Формы → Список. Полный общий модуль и Пульт ниже; не выполнялся.
Подготовка
Создайте НОВУЮ отдельную файловую базу 8.5.1.1343: имя конфигурации УчебныеМенеджерыРасчетов85, совместимость НеИспользовать, обычное приложение и толстый клиент. Не используйте рабочие ЗУП/КА/УТ/УНФ/БП. Здесь код, стенд и формы не выполнялись: runtimeVerifiedScenarios=0.
План видов расчёта Уч85Начисления: Код Строка(10), переменная длина, наименование 100, уникальность кода включена. ИспользованиеПериодаДействия=Да, ЗависимостьОтВидовРасчета=ПоПериодуДействия, в базовых планах только сам Уч85Начисления. Собственный реквизит Уч85Ключ Строка(8), Индексировать. Нет предопределённых элементов, общих реквизитов, разделителей, регистров расчёта или расчётных алгоритмов. Модули пустые.
В стандартном списке своего плана вручную создайте ровно три обычных вида: A — код 10, имя Учебный оклад, ключ A, ПериодДействияБазовый=Истина; B — код 20, имя Учебная премия, ключ B, ПериодДействияБазовый=Ложь; C — код 30, имя Учебное отсутствие, ключ C, ПериодДействияБазовый=Ложь. Все без пометки удаления и не предопределённые.
У B вручную заполните три стандартные таблицы: БазовыеВидыРасчета содержит только ссылку A; ВедущиеВидыРасчета только A; ВытесняющиеВидыРасчета только C. У A/C все три таблицы пустые. Сохраните только эту собственную подготовку. Это технический граф связей, не утверждённая методика начисления зарплаты.
Общий модуль УчебныеВиды85: неглобальный, Клиент (обычное приложение)=Да, Сервер=Нет, Привилегированный=Нет. Вставьте отдельный полный общий модуль ниже. Основной блок этого урока — модуль обычной формы Список, не общий модуль.
Создайте собственную обработку УчебныеВиды85 с обычной основной формой Пульт. Кнопка Выполнить, действие ВыполнитьНажатие; отдельный полный модуль формы приведён ниже. F7 и обновление только своего стенда, запуск Пульта в толстом клиенте.
Для основных опытов используется одна сессия, никаких фоновых обменов, расширений, сторонних обработчиков или других пользователей, меняющих записи. Код читает собственные виды и изменяет полученный объект только в памяти. Записать, удаление, проведение, расчёт регистров, файлы и сеть не вызываются.
Создайте обработку УчебныеВидыСписок85 с обычной основной формой Список. Реквизит СписокРасчетов типа ПланВидовРасчетаСписок.Уч85Начисления. Табличное поле Виды связано именно с СписокРасчетов; колонки Код/Наименование/Уч85Ключ связаны с одноимёнными полями источника. ТолькоПросмотр=Да, стандартных команд создания/записи/удаления нет.
В этой форме кнопки ТолькоПремия, ВсеПоУбыванию, Восстановить, Закрыть; назначьте соответствующие действия *Нажатие и событие ПриОткрытии. Полный модуль списка вставьте отдельно, общий УчебныеВиды85 оставьте обычным клиентским модулем по общей подготовке.
Перем Подготовлено;
Процедура ПодготовитьДоОткрытия() Экспорт
Подготовлено = Ложь;
Свои = УчебныеВиды85.ПолучитьСвоиВиды();
Если ЭтаФорма.Открыта() Или ТипЗнч(СписокРасчетов) <> Тип("ПланВидовРасчетаСписок.Уч85Начисления") Тогда
ВызватьИсключение "Нужен настоящий реквизит списка своей закрытой обычной формы";
КонецЕсли;
Колонки = СписокРасчетов.Колонки;
Если ТипЗнч(Колонки) <> Тип("КолонкиСписка") Тогда
ВызватьИсключение "Колонки списка не равны визуальным колонкам поля";
КонецЕсли;
Для Каждого Имя Из СтрРазделить("Код,Наименование,Уч85Ключ", ",") Цикл
Если Колонки.Найти(Имя) = Неопределено Тогда
Колонки.Добавить(Имя);
КонецЕсли;
КонецЦикла;
Если ТипЗнч(СписокРасчетов.Отбор) <> Тип("Отбор") Или ТипЗнч(СписокРасчетов.Порядок) <> Тип("Порядок") Тогда
ВызватьИсключение "Нужны реальные коллекции отбора и порядка";
КонецЕсли;
СписокРасчетов.Отбор.Сбросить();
СписокРасчетов.Порядок.Установить("Код Возр");
ЭлементыФормы.Виды.ТолькоПросмотр = Истина;
Подготовлено = Истина;
КонецПроцедуры
Процедура ПриОткрытии()
Если Подготовлено <> Истина Тогда
ВызватьИсключение "Открывайте этот список через собственный Пульт после подготовки";
КонецЕсли;
СписокРасчетов.Обновить();
Сообщить("Проверьте три строки: 10/A, 20/B, 30/C. Порядок задан источнику, не массиву строк.");
КонецПроцедуры
Процедура ПроверитьСвойОткрытыйСписок()
Свои = УчебныеВиды85.ПолучитьСвоиВиды();
Если Подготовлено <> Истина Или Не ЭтаФорма.Открыта() Тогда
ВызватьИсключение "Нужен свой подготовленный открытый список";
КонецЕсли;
КонецПроцедуры
Процедура ТолькоПремияНажатие(Кнопка)
ПроверитьСвойОткрытыйСписок();
СписокРасчетов.Отбор.Сбросить();
СписокРасчетов.Отбор.Уч85Ключ.Установить("B", Истина);
СписокРасчетов.Обновить();
Сообщить("Проверьте одну строку: код 20, Учебная премия, ключ B. A и C скрыты, но не удалены.");
КонецПроцедуры
Процедура ВсеПоУбываниюНажатие(Кнопка)
ПроверитьСвойОткрытыйСписок();
СписокРасчетов.Отбор.Сбросить();
СписокРасчетов.Порядок.Установить("Код Убыв");
СписокРасчетов.Обновить();
Сообщить("Проверьте порядок трёх строк: 30/C, 20/B, 10/A. В базе те же записи.");
КонецПроцедуры
Процедура ВосстановитьНажатие(Кнопка)
ПроверитьСвойОткрытыйСписок();
СписокРасчетов.Отбор.Сбросить();
СписокРасчетов.Порядок.Установить("Код Возр");
СписокРасчетов.Обновить();
Сообщить("Проверьте исходные 10/A, 20/B, 30/C. Обновить перечитал базу, не записывал её.");
КонецПроцедуры
Процедура ЗакрытьНажатие(Кнопка)
ПроверитьСвойОткрытыйСписок();
ЭтаФорма.Закрыть();
КонецПроцедурыУчебныеВиды85.Пульт
УчебныеМенеджерыРасчетов85 → Обработки → УчебныеВиды85 → Формы → Пульт → Модуль
Полный модуль собственной обычной формы, не выполнялся.
Процедура ВыполнитьНажатие(Кнопка)
УчебныеВиды85.ВыполнитьПример();
КонецПроцедурыУчебныеВиды85.ОбщийМодуль
УчебныеМенеджерыРасчетов85 → Общие модули → УчебныеВиды85
Полный обычный клиентский общий модуль запуска и проверки собственной подготовки. Не выполнялся.
Процедура ВыполнитьПример() Экспорт
ПроверитьСвойСтенд();
Свои = ПолучитьСвоиВиды();
Ключ = Новый УникальныйИдентификатор;
Окно = Обработки.УчебныеВидыСписок85.ПолучитьФорму("Список", , Ключ);
Если Окно = Неопределено Тогда
ВызватьИсключение "Создайте собственную обычную форму Список";
КонецЕсли;
Если ТипЗнч(Окно) <> Тип("Форма") Тогда
ВызватьИсключение "Нужна обычная форма толстого клиента";
КонецЕсли;
Если Окно.Открыта() Или Окно.КлючУникальности <> Ключ Тогда
ВызватьИсключение "Не перенастраиваем чужую или ранее открытую форму";
КонецЕсли;
Окно.ПодготовитьДоОткрытия();
Окно.Открыть();
КонецПроцедуры
Процедура ПроверитьСвойКонтекст()
Если Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости.НеИспользовать Тогда
ВызватьИсключение "Нужен собственный стенд УчебныеМенеджерыРасчетов85 платформы 8.5.1.1343";
КонецЕсли;
Если ТранзакцияАктивна() Тогда
ВызватьИсключение "Учебный вывод не должен выполняться внутри чужой транзакции";
КонецЕсли;
КонецПроцедуры
Процедура ПроверитьСвойОсновнойПлан()
Описание = Метаданные.ПланыВидовРасчета.Найти("Уч85Начисления");
Если Описание = Неопределено Тогда
ВызватьИсключение "Создайте собственный план Уч85Начисления";
КонецЕсли;
Если Описание.ТипКода <> Метаданные.СвойстваОбъектов.ТипКодаПланаВидовРасчета.Строка
Или Описание.ДлинаКода <> 10 Или Описание.ДлинаНаименования <> 100
Или Не Описание.ИспользованиеПериодаДействия
Или Описание.ЗависимостьОтВидовРасчета <> Метаданные.СвойстваОбъектов.ИспользованиеБазыПланаВидовРасчета.ПоПериодуДействия Тогда
ВызватьИсключение "Настройки учебного плана не соответствуют подготовке";
КонецЕсли;
Если Описание.БазовыеВидыРасчета.Количество() <> 1
Или Не Описание.БазовыеВидыРасчета.Содержит(Описание) Тогда
ВызватьИсключение "Выберите только собственный план как базовый";
КонецЕсли;
КонецПроцедуры
Функция ПолучитьСвоиВиды() Экспорт
ПроверитьСвойОсновнойПлан();
Менеджер = ПланыВидовРасчета.Уч85Начисления;
A = Менеджер.НайтиПоРеквизиту("Уч85Ключ", "A");
B = Менеджер.НайтиПоРеквизиту("Уч85Ключ", "B");
C = Менеджер.НайтиПоРеквизиту("Уч85Ключ", "C");
Если A.Пустая() Или B.Пустая() Или C.Пустая() Или A = B Или A = C Или B = C Тогда
ВызватьИсключение "Подготовьте три разные реальные ссылки своего основного плана";
КонецЕсли;
Коды = Новый Структура("A,B,C", "10", "20", "30");
Имена = Новый Структура("A,B,C", "Учебный оклад", "Учебная премия", "Учебное отсутствие");
Свои = Новый Структура("Менеджер,A,B,C,Коды,Имена", Менеджер, A, B, C, Коды, Имена);
Ключи = Новый Массив;
Выборка = Менеджер.Выбрать(, "Код Возр");
Пока Выборка.Следующий() Цикл
Ключ = Выборка.Уч85Ключ;
ОжидаемыйКод = Неопределено;
ОжидаемоеИмя = Неопределено;
Если Не Коды.Свойство(Ключ, ОжидаемыйКод) Или Не Имена.Свойство(Ключ, ОжидаемоеИмя) Тогда
ВызватьИсключение "В основной выборке есть лишний учебный вид";
КонецЕсли;
Если Выборка.Код <> ОжидаемыйКод Или Выборка.Наименование <> ОжидаемоеИмя
Или Выборка.ПометкаУдаления Или Выборка.Предопределенный Или Выборка.ИмяПредопределенныхДанных <> ""
Или Выборка.Ссылка <> Свои[Ключ] Тогда
ВызватьИсключение "Поля собственного вида не совпали с подготовкой";
КонецЕсли;
ПроверитьСвоиСвязи(Выборка, Ключ, Свои);
Ключи.Добавить(Ключ);
КонецЦикла;
Если СтрСоединить(Ключи, ",") <> "A,B,C" Тогда
ВызватьИсключение "Основной план должен содержать ровно A,B,C в порядке кода";
КонецЕсли;
Возврат Свои;
КонецФункции
Процедура ПроверитьСвоиСвязи(Выборка, Ключ, Свои)
Если ТипЗнч(Выборка.ПериодДействияБазовый) <> Тип("Булево") Или Выборка.ПериодДействияБазовый <> (Ключ = "A") Тогда
ВызватьИсключение "Только собственный A имеет подготовленный признак базового периода";
КонецЕсли;
Если Ключ = "B" Тогда
Если Выборка.БазовыеВидыРасчета.Количество() <> 1 Или Выборка.ВедущиеВидыРасчета.Количество() <> 1
Или Выборка.ВытесняющиеВидыРасчета.Количество() <> 1 Тогда
ВызватьИсключение "У B нужны три реальные подготовленные строки зависимостей";
КонецЕсли;
Если Выборка.БазовыеВидыРасчета.Получить(0).ВидРасчета <> Свои.A
Или Выборка.ВедущиеВидыРасчета.Получить(0).ВидРасчета <> Свои.A
Или Выборка.ВытесняющиеВидыРасчета.Получить(0).ВидРасчета <> Свои.C Тогда
ВызватьИсключение "У B базовый/ведущий A и вытесняющий C, не плановые случайные ссылки";
КонецЕсли;
Иначе
Если Выборка.БазовыеВидыРасчета.Количество() <> 0 Или Выборка.ВедущиеВидыРасчета.Количество() <> 0
Или Выборка.ВытесняющиеВидыРасчета.Количество() <> 0 Тогда
ВызватьИсключение "У A/C таблицы зависимостей должны быть пустыми";
КонецЕсли;
КонецЕсли;
КонецПроцедурыРазбор по шагам
Источник СписокРасчетов создаётся как реквизит обычной формы обработки. Конструктора Новый ПланВидовРасчетаСписок нет. Виды — отдельное визуальное табличное поле, связанное с этим источником.
Полный общий модуль запуска получает собственную новую закрытую форму по уникальному ключу. До открытия вызывает её экспортную ПодготовитьДоОткрытия; ПриОткрытии откажет прямому неподготовленному запуску.
Экспортная ПолучитьСвоиВиды общего модуля проверяет настоящие три записи и связи. Основной блок — полный модуль списка; полный общий модуль запуска и проверки дан отдельно.
Колонки источника имеют тип КолонкиСписка. Для Код, Наименование, Уч85Ключ добавляем только отсутствующие элементы. Визуальные колонки уже связаны с этими полями при подготовке формы.
Колонки, Отбор и Порядок — readonly свойства списка: их не заменяем новыми объектами. Изменяем содержимое полученных коллекций их собственными методами.
Сбросить отключает использование всех отборов, Порядок.Установить("Код Возр") задаёт порядок перечитывания. ПриОткрытии вызывает Обновить; будущая видимая последовательность 10/A,20/B,30/C проверяется вручную.
ТолькоПремия устанавливает значение B и использование отбора Уч85Ключ. Метод Установить задаёт Равно, затем Обновить перечитывает базу. Должна остаться одна строка B; другие виды не удалены.
ВсеПоУбыванию отключает отбор и задаёт Код Убыв: ожидаем 30/C,20/B,10/A. Обновить не возвращает таблицу и не является записью или расчётом.
Восстановить возвращает исходный отбор/порядок. Перед каждым действием собственный набор проверяется повторно. Закрыть закрывает только эту форму; ТолькоПросмотр ограничивает UI, а не права доступа.
Как проверить результат
Будущий тест: основной блок вставить в модуль списка; отдельно вставить общий модуль и Пульт. Назначить все четыре действия и ПриОткрытии, F7 и запустить собственный Пульт.
При открытии видны 10/A,20/B,30/C с реальными именами. Если колонка Уч85Ключ пустая, проверить связь визуальной колонки, а не добавлять фиктивный реквизит.
ТолькоПремия: одна строка 20/Учебная премия/B. Не считать строку Сообщить доказательством: сверить реальные строки поля.
ВсеПоУбыванию: три строки 30/C,20/B,10/A. Восстановить: снова 10/A,20/B,30/C.
Закрыть закрывает своё окно. В стандартном списке плана после опыта те же три записи и прежние зависимости B; записи/удаления нет.
Ожидаемый результат
Будущий UI-опыт показывает три состояния одного настоящего списка: все по возрастанию, только B, все по убыванию. Исходный вид и его зависимости не меняются.
На что обратить внимание
ДинамическийСписок управляемой формы — другой тип. Этот урок для обычной формы толстого клиента.
Источник списка и ЭлементыФормы.Виды не одно и то же; коллекция КолонкиСписка не заменяет визуальные колонки табличного поля.
Проверка строк UI здесь ручная и будущая, не выполненная. Обновить перечитывает базу без возвращаемого набора строк.
Сбросить отключает использование фильтров, не удаляет записи и не обязательно стирает прежние значения элементов отбора.
Форма своя и открывается по уникальному ключу. Не перенастраивайте чужую открытую форму и не переносите опыт в рабочую конфигурацию.
ТолькоПросмотр не является защитой базы от записи сторонним кодом. runtimeVerifiedScenarios=0.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.