ПланВидовРасчетаСписок.<Имя плана видов расчета>.Порядок

Свойства · Order

Тип: Порядок. Содержит объект Порядок, по которому осуществляется текущее упорядочивание видов расчета в списке. В качестве имен упорядочивания объекта могут выступать имена предопределенных и обычных реквизитов видов расчета.

Полное описание, параметры и ограничения

ПланВидовРасчетаСписок.<Имя плана видов расчета>.Порядок (ChartOfCalculationTypesList.<Chart of calculation types name>.Order)

ПланВидовРасчетаСписок.<Имя плана видов расчета> (ChartOfCalculationTypesList.<Chart of calculation types name>)

Порядок (Order)

Доступен, начиная с версии 8.0.

Использование:
Только чтение.
Описание:
Тип: Порядок.
Содержит объект Порядок, по которому осуществляется текущее упорядочивание видов расчета в списке. В качестве имен упорядочивания объекта могут выступать имена предопределенных и обычных реквизитов видов расчета.
Доступность:

Сервер, толстый клиент, внешнее соединение.

Использование в версии:

Доступен, начиная с версии 8.0.

Методическая информация

Практические примеры

Список видов расчёта: показать премию, изменить порядок и вернуть все записи

На настоящем реквизите обычной формы отличим источник списка от поля UI, настроим колонки/отбор/порядок и перечитаем те же сохранённые A/B/C.

Где и как запускать

Полный модуль собственной обычной формы УчебныеМенеджерыРасчетов85 → Обработки → УчебныеВидыСписок85 → Формы → Список. Полный общий модуль и Пульт ниже; не выполнялся.

Подготовка

  1. Создайте НОВУЮ отдельную файловую базу 8.5.1.1343: имя конфигурации УчебныеМенеджерыРасчетов85, совместимость НеИспользовать, обычное приложение и толстый клиент. Не используйте рабочие ЗУП/КА/УТ/УНФ/БП. Здесь код, стенд и формы не выполнялись: runtimeVerifiedScenarios=0.

  2. План видов расчёта Уч85Начисления: Код Строка(10), переменная длина, наименование 100, уникальность кода включена. ИспользованиеПериодаДействия=Да, ЗависимостьОтВидовРасчета=ПоПериодуДействия, в базовых планах только сам Уч85Начисления. Собственный реквизит Уч85Ключ Строка(8), Индексировать. Нет предопределённых элементов, общих реквизитов, разделителей, регистров расчёта или расчётных алгоритмов. Модули пустые.

  3. В стандартном списке своего плана вручную создайте ровно три обычных вида: A — код 10, имя Учебный оклад, ключ A, ПериодДействияБазовый=Истина; B — код 20, имя Учебная премия, ключ B, ПериодДействияБазовый=Ложь; C — код 30, имя Учебное отсутствие, ключ C, ПериодДействияБазовый=Ложь. Все без пометки удаления и не предопределённые.

  4. У B вручную заполните три стандартные таблицы: БазовыеВидыРасчета содержит только ссылку A; ВедущиеВидыРасчета только A; ВытесняющиеВидыРасчета только C. У A/C все три таблицы пустые. Сохраните только эту собственную подготовку. Это технический граф связей, не утверждённая методика начисления зарплаты.

  5. Общий модуль УчебныеВиды85: неглобальный, Клиент (обычное приложение)=Да, Сервер=Нет, Привилегированный=Нет. Вставьте отдельный полный общий модуль ниже. Основной блок этого урока — модуль обычной формы Список, не общий модуль.

  6. Создайте собственную обработку УчебныеВиды85 с обычной основной формой Пульт. Кнопка Выполнить, действие ВыполнитьНажатие; отдельный полный модуль формы приведён ниже. F7 и обновление только своего стенда, запуск Пульта в толстом клиенте.

  7. Для основных опытов используется одна сессия, никаких фоновых обменов, расширений, сторонних обработчиков или других пользователей, меняющих записи. Код читает собственные виды и изменяет полученный объект только в памяти. Записать, удаление, проведение, расчёт регистров, файлы и сеть не вызываются.

  8. Создайте обработку УчебныеВидыСписок85 с обычной основной формой Список. Реквизит СписокРасчетов типа ПланВидовРасчетаСписок.Уч85Начисления. Табличное поле Виды связано именно с СписокРасчетов; колонки Код/Наименование/Уч85Ключ связаны с одноимёнными полями источника. ТолькоПросмотр=Да, стандартных команд создания/записи/удаления нет.

  9. В этой форме кнопки ТолькоПремия, ВсеПоУбыванию, Восстановить, Закрыть; назначьте соответствующие действия *Нажатие и событие ПриОткрытии. Полный модуль списка вставьте отдельно, общий УчебныеВиды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 таблицы зависимостей должны быть пустыми";
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

Разбор по шагам

  1. Источник СписокРасчетов создаётся как реквизит обычной формы обработки. Конструктора Новый ПланВидовРасчетаСписок нет. Виды — отдельное визуальное табличное поле, связанное с этим источником.

  2. Полный общий модуль запуска получает собственную новую закрытую форму по уникальному ключу. До открытия вызывает её экспортную ПодготовитьДоОткрытия; ПриОткрытии откажет прямому неподготовленному запуску.

  3. Экспортная ПолучитьСвоиВиды общего модуля проверяет настоящие три записи и связи. Основной блок — полный модуль списка; полный общий модуль запуска и проверки дан отдельно.

  4. Колонки источника имеют тип КолонкиСписка. Для Код, Наименование, Уч85Ключ добавляем только отсутствующие элементы. Визуальные колонки уже связаны с этими полями при подготовке формы.

  5. Колонки, Отбор и Порядок — readonly свойства списка: их не заменяем новыми объектами. Изменяем содержимое полученных коллекций их собственными методами.

  6. Сбросить отключает использование всех отборов, Порядок.Установить("Код Возр") задаёт порядок перечитывания. ПриОткрытии вызывает Обновить; будущая видимая последовательность 10/A,20/B,30/C проверяется вручную.

  7. ТолькоПремия устанавливает значение B и использование отбора Уч85Ключ. Метод Установить задаёт Равно, затем Обновить перечитывает базу. Должна остаться одна строка B; другие виды не удалены.

  8. ВсеПоУбыванию отключает отбор и задаёт Код Убыв: ожидаем 30/C,20/B,10/A. Обновить не возвращает таблицу и не является записью или расчётом.

  9. Восстановить возвращает исходный отбор/порядок. Перед каждым действием собственный набор проверяется повторно. Закрыть закрывает только эту форму; ТолькоПросмотр ограничивает UI, а не права доступа.

Как проверить результат

  1. Будущий тест: основной блок вставить в модуль списка; отдельно вставить общий модуль и Пульт. Назначить все четыре действия и ПриОткрытии, F7 и запустить собственный Пульт.

  2. При открытии видны 10/A,20/B,30/C с реальными именами. Если колонка Уч85Ключ пустая, проверить связь визуальной колонки, а не добавлять фиктивный реквизит.

  3. ТолькоПремия: одна строка 20/Учебная премия/B. Не считать строку Сообщить доказательством: сверить реальные строки поля.

  4. ВсеПоУбыванию: три строки 30/C,20/B,10/A. Восстановить: снова 10/A,20/B,30/C.

  5. Закрыть закрывает своё окно. В стандартном списке плана после опыта те же три записи и прежние зависимости B; записи/удаления нет.

Ожидаемый результат

Будущий UI-опыт показывает три состояния одного настоящего списка: все по возрастанию, только B, все по убыванию. Исходный вид и его зависимости не меняются.

На что обратить внимание

  1. ДинамическийСписок управляемой формы — другой тип. Этот урок для обычной формы толстого клиента.

  2. Источник списка и ЭлементыФормы.Виды не одно и то же; коллекция КолонкиСписка не заменяет визуальные колонки табличного поля.

  3. Проверка строк UI здесь ручная и будущая, не выполненная. Обновить перечитывает базу без возвращаемого набора строк.

  4. Сбросить отключает использование фильтров, не удаляет записи и не обязательно стирает прежние значения элементов отбора.

  5. Форма своя и открывается по уникальному ключу. Не перенастраивайте чужую открытую форму и не переносите опыт в рабочую конфигурацию.

  6. ТолькоПросмотр не является защитой базы от записи сторонним кодом. runtimeVerifiedScenarios=0.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.