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

1. CnupT 70 16.01.13 09:27 Сейчас в теме
Собственно, сабж.
При переносе из 1С 7.7 ЗиК в 1С 8.2 ЗУП было создано большое количество документов "Перенос данных", который по сути является оболочкой для прямой работы с регистрами сведений, накопления и расчета.

Как всегда у нас бывает, уже после переноса заказчик решил, что ему не нужна информация по сотрудникам, помеченным на удаление (всего около пятисот человек). удалить их в лоб - не получается, т.к. есть ссылки в
регистрах сведений и накопления, созданных документами Перенос данных.

И вот уже несколько часов я откровенно туплю: в пользовательском режиме любая запись из данных документов удаляется на ура, но как повторить этот фокус программно догадаться не могу:(
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Akcium 363 16.01.13 11:22 Сейчас в теме
Первое, что приходит в голову, запросами по табличным частям документа найти ссылки и номера строк с помеченными на удаление сотрудниками, удалить строки из табличных частей документа, перепровести документ.
3. CnupT 70 16.01.13 11:35 Сейчас в теме
(2) Akcium, так ведь нет как таковых табличных частей у документа.
Из документа напрямую идет обращение к регистрам. И редактирование табличной части идет сразу на уровне регистров.
4. yalo 16.01.13 11:56 Сейчас в теме
Обратитесь к регистрам через набор записей. Найдите сотрудников, помеченных на удаление и удалите эти записи из регистра
6. CnupT 70 16.01.13 12:10 Сейчас в теме
(4) yalo, именно так я делаю с регистрами сведений. Но вот как быть с регистрами накопления?
Проблема в том, что я не могу наложить на набор записей никаких отборов, кроме собственно регистратора.
А так как документ-регистратор это Перенос данных, к которому привязано несколько миллионов записей....
Но если ничего другого не придумается, придется решать именно так.
5. DenisCh 16.01.13 12:02 Сейчас в теме
прочитать движения регистра.
удалить из них лишние записи.
записать обратно.
вспомнить, что забыл сделать архив.
обнаружить, что удалил не то.
материться.
7. CnupT 70 16.01.13 12:13 Сейчас в теме
(5) DenisCh, я чувствую у тебя большой опыт:)
8. Гость 16.01.13 13:15
Создаешь набор записей (Набор). Накладываешь отбор по регистратору. Прочитываешь.
Далее идешь в цикле по каждой записи из набора (Для Каждого ТекСтрокаНабора Из Набор Цикл).
Проверяешь, если сотрудник удаленный, то Продолжить, иначе Запись = ТекСтрокаНабора.Добавить() с заполнением.
После цикла записываешь набор с пометкой замещения (Набор.Записать(Истина)). Хотя Истину можно и не указывать, набор по умолчанию запишется с замещением.
9. CnupT 70 16.01.13 13:30 Сейчас в теме
(8) Tashko, я уже тоже склонился к этому варианту. Останавливало то, что записей очень уж много, хотелось красиво наложить отборы. А не получается что-то :(
10. alul 21.10.15 17:49 Сейчас в теме
(8) Tashko,
Для Каждого ТекСтрокаНабора Из Набор Цикл
Запись = ТекСтрокаНабора.Добавить();


Точно не сработает, т.к. ТекСтрокаНабора - это уже запись из набора.

Если нужно удалить какие-то записи избирательно, то алгоритм будет выглядеть так:
Для Каждого ТекСтрокаНабора Из Набор Цикл
Если ТекСтрокаНабора.ИзмерениеРегистра1 = Значение1 и ТекСтрокаНабора.ИзмерениеРегистраN = ЗначениеN Тогда
Набор.Удалить(ТекСтрокаНабора);
КонецЕсли;
КонецЦикла;
Набор.Записать();
Оставьте свое сообщение

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