Как удалить часть записей регистра сведений, подчиненного регистратору?
Требуется удалить записи из РС РеестрКадровыхПриказов, в регистре десятки тысяч строк, требуется удалить строки по конкретному сотруднику.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РеестрКадровыхПриказов.Организация КАК Организация,
| РеестрКадровыхПриказов.Сотрудник КАК Сотрудник
|ИЗ
| РегистрСведений.РеестрКадровыхПриказов КАК РеестрКадровыхПриказов
|ГДЕ
| РеестрКадровыхПриказов.Сотрудник = &Сотрудник;
Запрос.УстановитьПараметр("Сотрудник", Сотрудник);
РезультатЗапроса = Запрос.Выполнить();
Пока Выборка.Следующий() Цикл
СтарыйПеренос = Выборка.Регистратор.ПолучитьОбъект();
НаборЗаписей = РегистрыСведений.РеестрКадровыхПриказов.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(СтарыйПеренос.Ссылка);
НаборЗаписей.Прочитать();
ПоказатьПо теме из базы знаний
Найденные решения
(19)Просто обойдите записи набора записей регистра. Если в записи набора сотрудник - тот который надо удалить, добавьте запись в массив. Потом обойдите массив и удалите записи из набора. Запишите набор.
...
РезультатЗапроса = Запрос.Выполнить();
Пока Выборка.Следующий() Цикл
НаборЗаписей = РегистрыСведений.РеестрКадровыхПриказов.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(Выборка.Регистратор);
НаборЗаписей.Прочитать();
МассивКУдалению = Новый Массив;
Для Каждого СтрЗаписи Из НаборЗаписей Цикл
Если СтрЗаписи.Сотрудник = Сотрудник Тогда
МассивКУдалению.Добавить(СтрЗаписи);
КонецЕсли;
КонецЦикла;
Для Каждого СтрЗаписи Из МассивКУдалению Цикл
НаборЗаписей.Удалить(СтрЗаписи);
КонецЦикла;
НаборЗаписей.Записать();
КонецЦикла;
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
Выбрать * Из РегистрСведений.РеестрКадровыхПриказов ГДЕ НЕ Сотрудник = &Сотрудник ИТОГИ ПО Регистратор
Запрос.УстановитьПараметр("Сотрудник", Сотрудник);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаРегистратор = РезультатЗапроса.Выбрать(ОбходРезультатаЗапросаПоГруппировкам);
Пока ВыборкаРегистратор.Следующи() Цикл
НЗ = РегистрыСведений.РеестрКадровыхПриказов.СоздатьНаборЗаписей();
НЗ.Отбор.Регистратор.Установить(ВыборкаРегистратор.Регистратор);
Выборка = ВыборкаРегистратор.Выбрать();
Пока Выборка.Следующий() Цикл
ЗаполнитьЗначенияСвойств(НЗ.Добавить(), Выборка);
КонецЦикла;
НЗ.Записать();
КонецЦикла;
Показать
Добрый день! Не понимаю зачем запрос, но по условию задачи можно написать:
НаборЗаписей = РегистрыСведений.РеестрКадровыхПриказов.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(Сотрудник);
НаборЗаписей.Записать();
НаборЗаписей = РегистрыСведений.РеестрКадровыхПриказов.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(Сотрудник);
НаборЗаписей.Записать();
(11)Как я предполагаю, в этих документах есть записи и по другим сотрудникам, поэтому нужен запрос
Как то так, возможны ошибки в коде, писал на коленке
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РеестрКадровыхПриказов.Организация КАК Организация,
| РеестрКадровыхПриказов.Сотрудник КАК Сотрудник,
| РеестрКадровыхПриказов.Регистратор КАК Регистратор
|ИЗ
| РегистрСведений.РеестрКадровыхПриказов КАК РеестрКадровыхПриказов
|ГДЕ
| РеестрКадровыхПриказов.Сотрудник = &Сотрудник;
Запрос.УстановитьПараметр("Сотрудник", Сотрудник);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
ДокументРегистратор = ВыборкаДетальныеЗаписи.Регистратор.ПолучитьОбъект();
ПараметрыПоиска = Новый Структура("Сотрудник", ВыборкаДетальныеЗаписи.Сотрудник);
МассивНайденныхСтрок = ДокументРегистратор.ТвояТаблица.НайтиСтроки(ПараметрыПоиска);
Если МассивНайденныхСтрок.Количество Тогда
Для Каждого Строка Из МассивНайденныхСтрок Цикл
ДокументРегистратор.ТвояТаблица.Удалить(Строка);
КонецЦикла
КонецЕсли
Попытка
ДокументРегистратор.Записать(РежимЗаписиДокумента.Проведение);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецЦикла;
ПоказатьКак то так, возможны ошибки в коде, писал на коленке
(19)Просто обойдите записи набора записей регистра. Если в записи набора сотрудник - тот который надо удалить, добавьте запись в массив. Потом обойдите массив и удалите записи из набора. Запишите набор.
...
РезультатЗапроса = Запрос.Выполнить();
Пока Выборка.Следующий() Цикл
НаборЗаписей = РегистрыСведений.РеестрКадровыхПриказов.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(Выборка.Регистратор);
НаборЗаписей.Прочитать();
МассивКУдалению = Новый Массив;
Для Каждого СтрЗаписи Из НаборЗаписей Цикл
Если СтрЗаписи.Сотрудник = Сотрудник Тогда
МассивКУдалению.Добавить(СтрЗаписи);
КонецЕсли;
КонецЦикла;
Для Каждого СтрЗаписи Из МассивКУдалению Цикл
НаборЗаписей.Удалить(СтрЗаписи);
КонецЦикла;
НаборЗаписей.Записать();
КонецЦикла;
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот