ВытесняющиеВидыРасчета.<Имя плана видов расчета>

Типы · <Chart of calculation types name>

Предопределенная табличная часть вида расчета - список вытесняющих видов расчета. Такая табличная часть определена только для планов видов расчета с признаком "Использует период действия". Имеет колонки - ВидРасчета(CalculationKind) типа ПланВидовРасчетаСсылка.<Имя плана видов расчета> и Предопределенный(Predefined) типа Булево.

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

ВытесняющиеВидыРасчета.<Имя плана видов расчета> (DisplacingCalculationTypes.<Chart of calculation types name>)

ВытесняющиеВидыРасчета.<Имя плана видов расчета> (DisplacingCalculationTypes.<Chart of calculation types name>)

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

Элементы коллекции:
ВытесняющиеВидыРасчетаСтрока.<Имя плана видов расчета>
Для объекта доступен обход коллекции посредством оператора Для каждого … Из … Цикл. При обходе выбираются элементы коллекции.
Возможно обращение к элементу коллекции посредством оператора [...]. В качестве аргумента передается индекс (нумерация с 0) строки.

Методы:
Вставить (Insert)
Выгрузить (Unload)
ВыгрузитьКолонку (UnloadColumn)
Добавить (Add)
Загрузить (Load)
ЗагрузитьКолонку (LoadColumn)
Индекс (IndexOf)
Итог (Total)
Количество (Count)
Найти (Find)
НайтиСтроки (FindRows)
Очистить (Clear)
Получить (Get)
Свернуть (GroupBy)
Сдвинуть (Move)
Сортировать (Sort)
Удалить (Delete)

Описание:

Предопределенная табличная часть вида расчета - список вытесняющих видов расчета. Такая табличная часть определена только для планов видов расчета с признаком "Использует период действия".
Имеет колонки - ВидРасчета(CalculationKind) типа ПланВидовРасчетаСсылка.<Имя плана видов расчета> и Предопределенный(Predefined) типа Булево.

Доступность:

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

См. также:
ПланВидовРасчетаОбъект.<Имя плана видов расчета>, свойство ВытесняющиеВидыРасчета
ПланВидовРасчетаСсылка.<Имя плана видов расчета>, свойство ВытесняющиеВидыРасчета
ПланВидовРасчетаВыборка.<Имя плана видов расчета>, свойство ВытесняющиеВидыРасчета

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

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

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

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

Найти одну строку и все совпадения: вытесняющие виды

Зависимости вытеснения периода действия: порядок строк здесь не задаёт приоритет начислений. Дубликат намеренно создаётся только в памяти, чтобы показать отличие Найти от НайтиСтроки.

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

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

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

  2. Планы видов расчёта → Добавить: УчебныеНачисления85. ТипКода Строка, ДлинаКода 10, ДлинаНаименования 100. ИспользованиеПериодаДействия включено; ЗависимостьОтВидовРасчета=ПоПериодуДействия.

  3. В настройке базовых планов видов расчёта выберите только сам УчебныеНачисления85. Это позволяет учебным видам ссылаться на другие виды того же плана. Предопределённые виды, пользовательские реквизиты и табличные части не создавайте.

  4. Модули объекта/менеджера оставьте пустыми, регистры расчёта и бизнес-алгоритмы не добавляйте. Обновите конфигурацию БД и создайте серверный ВыполнитьПример() Экспорт собственной обработки.

  5. Фрагмент вставляется внутрь процедуры. Все виды и строки зависимостей создаются только в памяти; Записать, блокировки, удаления объектов и привилегированный режим не вызываются.

  6. Случайные ссылки зависимостей — ПЛАНОВЫЕ идентификаторы, соответствующих сохранённых видов нет. Они нужны для разбора типизированных списков, а не для запуска расчёта.

Описание = Метаданные.ПланыВидовРасчета.Найти("УчебныеНачисления85");
Если Описание = Неопределено Тогда
    ВызватьИсключение "Создайте собственный план УчебныеНачисления85";
КонецЕсли;
Если Описание.ТипКода <> Метаданные.СвойстваОбъектов.ТипКодаПланаВидовРасчета.Строка
    Или Описание.ДлинаКода <> 10 Или Описание.ДлинаНаименования <> 100
    Или Не Описание.ИспользованиеПериодаДействия
    Или Описание.ЗависимостьОтВидовРасчета <> Метаданные.СвойстваОбъектов.ИспользованиеБазыПланаВидовРасчета.ПоПериодуДействия Тогда
    ВызватьИсключение "Настройки учебного плана не соответствуют подготовке";
КонецЕсли;
Если Описание.БазовыеВидыРасчета.Количество() <> 1
    Или Не Описание.БазовыеВидыРасчета.Содержит(Описание) Тогда
    ВызватьИсключение "Выберите только собственный план как базовый";
КонецЕсли;
Менеджер = ПланыВидовРасчета.УчебныеНачисления85;
Премия = Менеджер.СоздатьВидРасчета();
Премия.Код = "BONUS";
Премия.Наименование = "Учебная премия";
Премия.ПериодДействияБазовый = Истина;
Премия.ДополнительныеСвойства.Вставить("Метка", "Не реальное начисление");
ПервыйВид = Менеджер.ПолучитьСсылку(Новый УникальныйИдентификатор);
ВторойВид = Менеджер.ПолучитьСсылку(Новый УникальныйИдентификатор);
ТретийВид = Менеджер.ПолучитьСсылку(Новый УникальныйИдентификатор);
Список = Премия.ВытесняющиеВидыРасчета;
Первая = Список.Добавить();
Первая.ВидРасчета = ПервыйВид;
Вторая = Список.Добавить();
Вторая.ВидРасчета = ПервыйВид;
Третья = Список.Добавить();
Третья.ВидРасчета = ВторойВид;
Одна = Список.Найти(ПервыйВид, "ВидРасчета");
Если Одна = Неопределено Тогда
    ВызватьИсключение "Не найдена собственная добавленная зависимость";
КонецЕсли;
Сообщить(Одна.ВидРасчета = ПервыйВид);
Отбор = Новый Структура("ВидРасчета", ПервыйВид);
Все = Список.НайтиСтроки(Отбор);
Сообщить(Все.Количество() = 2);
Сообщить(Список.Найти(ТретийВид, "ВидРасчета") = Неопределено);
Сообщить(Список.НайтиСтроки(Новый Структура("ВидРасчета", ТретийВид)).Количество() = 0);
ИзМассива = Все[0];
Сообщить(Список.Индекс(ИзМассива) >= 0);
ИзМассива.ВидРасчета = ТретийВид;
Сообщить(Список.Получить(Список.Индекс(ИзМассива)).ВидРасчета = ТретийВид);
Сообщить(Все[0].ВидРасчета = ТретийВид);
Сообщить(Список.НайтиСтроки(Отбор).Количество() = 1);
Сообщить(Все.Количество() = 2);

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

  1. Ищем по точному полю ВидРасчета и типизированной ссылке, а не по строке названия несуществующего вида.

  2. Найти возвращает одну строку или Неопределено; обязательно проверяем отсутствие результата до обращения к свойству.

  3. НайтиСтроки возвращает массив всех подходящих строк. Первоначально в нём два совпадения.

  4. Элементы массива — живые строки этой части, не независимые копии. Изменение через массив видно в исходной части.

  5. Массив не является динамическим фильтром: после изменения содержит те же две строки, а новый поиск даёт одну.

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

  1. Девять логических сообщений дают Истина.

  2. Повторный поиск первого вида находит одну строку. Ранее полученный массив содержит две, одна уже с ТретийВид.

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

Показаны отсутствие результата, дубликаты и различие между массивом живых строк и повторным отбором.

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

  1. Дубликаты — только учебный эксперимент в новом объекте; пригодность такого определения для записи не проверяется.

  2. ВидРасчета — ссылка, не строковое наименование. Не читайте Наименование у случайного планового UUID.

  3. Сохранение изменения рабочего объекта потребовало бы отдельного решения; здесь записи нет.

  4. Зависимости вытеснения периода действия: порядок строк здесь не задаёт приоритет начислений.

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

Вставить, переместить и удалить собственную строку: вытесняющие виды

Зависимости вытеснения периода действия: порядок строк здесь не задаёт приоритет начислений. Работаем с двумя строками нового определения Премия в памяти, не с сохранённой ссылкой.

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

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

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

  2. Планы видов расчёта → Добавить: УчебныеНачисления85. ТипКода Строка, ДлинаКода 10, ДлинаНаименования 100. ИспользованиеПериодаДействия включено; ЗависимостьОтВидовРасчета=ПоПериодуДействия.

  3. В настройке базовых планов видов расчёта выберите только сам УчебныеНачисления85. Это позволяет учебным видам ссылаться на другие виды того же плана. Предопределённые виды, пользовательские реквизиты и табличные части не создавайте.

  4. Модули объекта/менеджера оставьте пустыми, регистры расчёта и бизнес-алгоритмы не добавляйте. Обновите конфигурацию БД и создайте серверный ВыполнитьПример() Экспорт собственной обработки.

  5. Фрагмент вставляется внутрь процедуры. Все виды и строки зависимостей создаются только в памяти; Записать, блокировки, удаления объектов и привилегированный режим не вызываются.

  6. Случайные ссылки зависимостей — ПЛАНОВЫЕ идентификаторы, соответствующих сохранённых видов нет. Они нужны для разбора типизированных списков, а не для запуска расчёта.

Описание = Метаданные.ПланыВидовРасчета.Найти("УчебныеНачисления85");
Если Описание = Неопределено Тогда
    ВызватьИсключение "Создайте собственный план УчебныеНачисления85";
КонецЕсли;
Если Описание.ТипКода <> Метаданные.СвойстваОбъектов.ТипКодаПланаВидовРасчета.Строка
    Или Описание.ДлинаКода <> 10 Или Описание.ДлинаНаименования <> 100
    Или Не Описание.ИспользованиеПериодаДействия
    Или Описание.ЗависимостьОтВидовРасчета <> Метаданные.СвойстваОбъектов.ИспользованиеБазыПланаВидовРасчета.ПоПериодуДействия Тогда
    ВызватьИсключение "Настройки учебного плана не соответствуют подготовке";
КонецЕсли;
Если Описание.БазовыеВидыРасчета.Количество() <> 1
    Или Не Описание.БазовыеВидыРасчета.Содержит(Описание) Тогда
    ВызватьИсключение "Выберите только собственный план как базовый";
КонецЕсли;
Менеджер = ПланыВидовРасчета.УчебныеНачисления85;
Премия = Менеджер.СоздатьВидРасчета();
Премия.Код = "BONUS";
Премия.Наименование = "Учебная премия";
Премия.ПериодДействияБазовый = Истина;
Премия.ДополнительныеСвойства.Вставить("Метка", "Не реальное начисление");
ПервыйВид = Менеджер.ПолучитьСсылку(Новый УникальныйИдентификатор);
ВторойВид = Менеджер.ПолучитьСсылку(Новый УникальныйИдентификатор);
Список = Премия.ВытесняющиеВидыРасчета;
Первая = Список.Добавить();
Первая.ВидРасчета = ПервыйВид;
Вторая = Список.Вставить(0);
Вторая.ВидРасчета = ВторойВид;
Сообщить(Список.Количество() = 2);
Сообщить(Список.Индекс(Вторая) = 0);
Сообщить(Список.Получить(0) = Вторая);
Сообщить(Вторая.НомерСтроки = 1);
Сообщить(Не Вторая.Предопределенный);
Список.Сдвинуть(Первая, -1);
Сообщить(Список.Индекс(Первая) = 0);
Сообщить(Первая.НомерСтроки = 1);
Если Вторая.Предопределенный Тогда
    ВызватьИсключение "Предопределённые строки не удаляем";
КонецЕсли;
Список.Удалить(Вторая);
Сообщить(Список.Количество() = 1);
Сообщить(Список.Получить(0).ВидРасчета = ПервыйВид);

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

  1. Добавить помещает первую строку в конец. Вставить(0) ставит вторую перед ней.

  2. Индекс начинается с 0, а НомерСтроки с 1. После перемещения позицию вычисляем заново, не храним устаревший индекс.

  3. Сдвинуть принимает саму строку и отрицательное смещение к началу. Перемещение не меняет ссылку ВидРасчета.

  4. Предопределенный проверяем до удаления. У собственных добавленных строк он Ложь; у строк конфигурации может быть Истина.

  5. Удалить получает строку этой же коллекции. Удаляется только зависимость в памяти, не вид расчёта в базе.

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

  1. Девять логических сообщений дают Истина; остаётся одна строка с ПервыйВид.

  2. В сохранённых видах и расчётных регистрах нет новых данных. Новое определение не записывалось.

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

Разобраны позиция, номер строки, перемещение и безопасная граница удаления строки зависимости.

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

  1. Мутирующие методы недоступны у частей, полученных из ссылки или выборки: нужен объект.

  2. Удаление предопределённой строки может сделать запись вида невозможной. Не экспериментируйте на рабочем объекте.

  3. Плановые ссылки не соответствуют сохранённым начислениям; этот пример не рассчитывает деньги.

  4. Зависимости вытеснения периода действия: порядок строк здесь не задаёт приоритет начислений.

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

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

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

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

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