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

Методы · FindRows

Осуществляет поиск строк табличной части, соответствующих заданному условию поиска.

Синтаксис

НайтиСтроки(<ПараметрыОтбора>)
Полное описание, параметры и ограничения

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

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

НайтиСтроки (FindRows)

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

Синтаксис:
НайтиСтроки(<ПараметрыОтбора>)
Параметры:

<ПараметрыОтбора> (обязательный)
Тип: Структура.
Задает условия поиска: ключ структуры определяет имя колонки, по которой будет осуществляться поиск, а значение структуры - искомое значение.
Возвращаемое значение:
Тип: Массив.
Массив из строк табличной части ВытесняющиеВидыРасчетаСтрока.<Имя плана видов расчета>, соответствующих заданному условию поиска.
Замечание! Массив хранит ссылки на строки табличной части, то есть при изменении строки в табличной части, значение в массиве тоже будет изменено.
Описание:

Осуществляет поиск строк табличной части, соответствующих заданному условию поиска.

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

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

Примечание:
Метод эффективно использовать для выборки неуникальных значений.
Использование в версии:

Доступен, начиная с версии 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С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.