Как удалить часть записей регистра сведений, подчиненного регистратору?

1. babLucy 11.05.21 09:51 Сейчас в теме
Требуется удалить записи из РС РеестрКадровыхПриказов, в регистре десятки тысяч строк, требуется удалить строки по конкретному сотруднику.
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	РеестрКадровыхПриказов.Организация КАК Организация,
		|	РеестрКадровыхПриказов.Сотрудник КАК Сотрудник
		|ИЗ
		|	РегистрСведений.РеестрКадровыхПриказов КАК РеестрКадровыхПриказов
		|ГДЕ
		|	РеестрКадровыхПриказов.Сотрудник = &Сотрудник;
	
	Запрос.УстановитьПараметр("Сотрудник", Сотрудник);
	
	РезультатЗапроса = Запрос.Выполнить();
          Пока Выборка.Следующий() Цикл
			
			СтарыйПеренос = Выборка.Регистратор.ПолучитьОбъект();
			НаборЗаписей = РегистрыСведений.РеестрКадровыхПриказов.СоздатьНаборЗаписей();
			НаборЗаписей.Отбор.Регистратор.Установить(СтарыйПеренос.Ссылка);
			НаборЗаписей.Прочитать();
						

Показать
По теме из базы знаний
Найденные решения
22. Sashares 34 11.05.21 13:51 Сейчас в теме
(19)Просто обойдите записи набора записей регистра. Если в записи набора сотрудник - тот который надо удалить, добавьте запись в массив. Потом обойдите массив и удалите записи из набора. Запишите набор.

...
РезультатЗапроса = Запрос.Выполнить();
Пока Выборка.Следующий() Цикл
            
НаборЗаписей = РегистрыСведений.РеестрКадровыхПриказов.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(Выборка.Регистратор);
НаборЗаписей.Прочитать();

МассивКУдалению = Новый Массив;
Для Каждого СтрЗаписи Из НаборЗаписей Цикл
Если СтрЗаписи.Сотрудник = Сотрудник Тогда
МассивКУдалению.Добавить(СтрЗаписи);
КонецЕсли;
КонецЦикла;

Для Каждого СтрЗаписи Из МассивКУдалению Цикл
НаборЗаписей.Удалить(СтрЗаписи);
КонецЦикла;

НаборЗаписей.Записать();

КонецЦикла;
Показать
Dmitry888; Antoska; ulen; babLucy; knuck; +5 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. nomad_irk 72 11.05.21 10:03 Сейчас в теме
(1)
Выбрать * Из РегистрСведений.РеестрКадровыхПриказов ГДЕ НЕ Сотрудник = &Сотрудник ИТОГИ ПО Регистратор

Запрос.УстановитьПараметр("Сотрудник", Сотрудник);
РезультатЗапроса = Запрос.Выполнить();

ВыборкаРегистратор = РезультатЗапроса.Выбрать(ОбходРезультатаЗапросаПоГруппировкам);

Пока ВыборкаРегистратор.Следующи() Цикл

      НЗ  = РегистрыСведений.РеестрКадровыхПриказов.СоздатьНаборЗаписей();
      НЗ.Отбор.Регистратор.Установить(ВыборкаРегистратор.Регистратор);

      Выборка = ВыборкаРегистратор.Выбрать();

      Пока Выборка.Следующий() Цикл
          ЗаполнитьЗначенияСвойств(НЗ.Добавить(), Выборка);
      КонецЦикла;
      НЗ.Записать();     
КонецЦикла;
Показать
6. Fox-trot 158 11.05.21 10:20 Сейчас в теме
(1) директора удалить решил?
2. knuck 4 11.05.21 10:03 Сейчас в теме
Добрый день! Не понимаю зачем запрос, но по условию задачи можно написать:
НаборЗаписей = РегистрыСведений.РеестрКадровыхПриказов.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(Сотрудник);
НаборЗаписей.Записать();
4. Swetlana 25 11.05.21 10:14 Сейчас в теме
(2) автору поста нужно оставить всех сотрудников вместо одного, у вас запишется набор записей по конкретному сотруднику, которого на самом деле нужно исключить
5. knuck 4 11.05.21 10:19 Сейчас в теме
(4)мне кажется, вы ошибаетесь) запишется пустая запись по этому сотруднику, что значит - затруться все записи по этому сотруднику, главное ставить отбор.
Fox-trot; +1 Ответить
7. Swetlana 25 11.05.21 10:21 Сейчас в теме
(5) автор поста может проверить на копии базы) и я тоже могу ошибаться, давно с НЗ не работала )
11. babLucy 11.05.21 10:33 Сейчас в теме
(2) В РС по одному сотруднику есть два регистратора, на самом деле, в запросе есть условие на регистратор

ГДЕ
		|	РеестрКадровыхПриказов.Сотрудник = &Сотрудник
		|	И РеестрКадровыхПриказов.Регистратор.Номер = ""xxx""";


Удалит нужно записи по одному регистратору.
13. knuck 4 11.05.21 10:49 Сейчас в теме
(11)Как я предполагаю, в этих документах есть записи и по другим сотрудникам, поэтому нужен запрос

Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |    РеестрКадровыхПриказов.Организация КАК Организация,
        |    РеестрКадровыхПриказов.Сотрудник КАК Сотрудник,
        |    РеестрКадровыхПриказов.Регистратор КАК Регистратор
        |ИЗ
        |    РегистрСведений.РеестрКадровыхПриказов КАК РеестрКадровыхПриказов
        |ГДЕ
        |    РеестрКадровыхПриказов.Сотрудник = &Сотрудник;
    
    Запрос.УстановитьПараметр("Сотрудник", Сотрудник);
    
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

	ДокументРегистратор = ВыборкаДетальныеЗаписи.Регистратор.ПолучитьОбъект();
        ПараметрыПоиска = Новый Структура("Сотрудник", ВыборкаДетальныеЗаписи.Сотрудник);
        МассивНайденныхСтрок = ДокументРегистратор.ТвояТаблица.НайтиСтроки(ПараметрыПоиска);
        Если МассивНайденныхСтрок.Количество Тогда
               Для Каждого Строка Из МассивНайденныхСтрок Цикл
                       ДокументРегистратор.ТвояТаблица.Удалить(Строка);             
               КонецЦикла 
        КонецЕсли 
        Попытка
            ДокументРегистратор.Записать(РежимЗаписиДокумента.Проведение);
        Исключение
            Сообщить(ОписаниеОшибки());
        КонецПопытки; 
    КонецЦикла; 
Показать


Как то так, возможны ошибки в коде, писал на коленке
17. babLucy 11.05.21 13:32 Сейчас в теме
(2)
НаборЗаписей.Отбор.Регистратор.Установить(Сотрудник);


Объясните, пожалуйста, эту строку Регистратор - Сотрудник
18. knuck 4 11.05.21 13:36 Сейчас в теме
(17)прошу прощения, написал неправильно, так правильно:
НаборЗаписей.Отбор.Сотрудник.Установить(Сотрудник)
19. babLucy 11.05.21 13:46 Сейчас в теме
(18) Есть только отбор по регистратору, добавить отбор по сотруднику либо нельзя, либо я не умею
Прикрепленные файлы:
20. nomad_irk 72 11.05.21 13:49 Сейчас в теме
(19)Чушь советует. У подчиненного регистра отбор может быть ТОЛЬКО по регистратору.
23. knuck 4 11.05.21 13:53 Сейчас в теме
(20)Вы правы, не обратил внимания.
21. knuck 4 11.05.21 13:50 Сейчас в теме
(19)Да, этот вариант не подходит, вариант решения написал выше с помощью запроса.
22. Sashares 34 11.05.21 13:51 Сейчас в теме
(19)Просто обойдите записи набора записей регистра. Если в записи набора сотрудник - тот который надо удалить, добавьте запись в массив. Потом обойдите массив и удалите записи из набора. Запишите набор.

...
РезультатЗапроса = Запрос.Выполнить();
Пока Выборка.Следующий() Цикл
            
НаборЗаписей = РегистрыСведений.РеестрКадровыхПриказов.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(Выборка.Регистратор);
НаборЗаписей.Прочитать();

МассивКУдалению = Новый Массив;
Для Каждого СтрЗаписи Из НаборЗаписей Цикл
Если СтрЗаписи.Сотрудник = Сотрудник Тогда
МассивКУдалению.Добавить(СтрЗаписи);
КонецЕсли;
КонецЦикла;

Для Каждого СтрЗаписи Из МассивКУдалению Цикл
НаборЗаписей.Удалить(СтрЗаписи);
КонецЦикла;

НаборЗаписей.Записать();

КонецЦикла;
Показать
Dmitry888; Antoska; ulen; babLucy; knuck; +5 Ответить
27. Dmitry888 41 11.12.23 20:16 Сейчас в теме
(22)
МассивКУдалению = Новый Массив;

Алгоритм с МассивомКУдалению не раз меня выручал. Удобная штука.
8. burgomister 59 11.05.21 10:24 Сейчас в теме
9. babLucy 11.05.21 10:25 Сейчас в теме
(8)
helpf.pro/faq/view/882.html

Спасибо, но в моем случает зависимый регистр.
10. МимохожийОднако 141 11.05.21 10:29 Сейчас в теме
Удалить из документа-регистратора не предлагать?
12. babLucy 11.05.21 10:34 Сейчас в теме
25. МимохожийОднако 141 12.05.21 07:29 Сейчас в теме
(12) Тогда предлагаю найти в табличной части этого сотрудника, удалить его и провести документ. Это всё штатно, если нет запрета редактирования или не хватает прав
14. NikeDyu 11.05.21 11:31 Сейчас в теме
воспользоваться расширением "Инструменты разработчика"?
15. babLucy 11.05.21 11:50 Сейчас в теме
(14) Регистратор - ПереносДанных, чтобы изменить/удалить запись ИР не требуется, если я правильно мысль поняла
16. NikeDyu 11.05.21 12:01 Сейчас в теме
(15)
если есть возможность из регистратора удалить запись, то ИР не нужен :)
но лично мне удобней напрямую из регистра удалять ненужные записи не перепроводя регистратор.
24. МимохожийОднако 141 12.05.21 07:27 Сейчас в теме
(16) Всегда найдётся тот, кто проведёт после тебя. И наступит облом.
26. NikeDyu 12.05.21 08:40 Сейчас в теме
(24)
в теории да, но если права на редактирование документа только у меня, то нет :) если речь про перенос данных
а так есть дата запрета редактирования документов, которую тоже править могу только я :)
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот