Удаление произвольного набора записей из регистра накопления, подчиненного регистратору
Собственно, сабж.
При переносе из 1С 7.7 ЗиК в 1С 8.2 ЗУП было создано большое количество документов "Перенос данных", который по сути является оболочкой для прямой работы с регистрами сведений, накопления и расчета.
Как всегда у нас бывает, уже после переноса заказчик решил, что ему не нужна информация по сотрудникам, помеченным на удаление (всего около пятисот человек). удалить их в лоб - не получается, т.к. есть ссылки в
регистрах сведений и накопления, созданных документами Перенос данных.
И вот уже несколько часов я откровенно туплю: в пользовательском режиме любая запись из данных документов удаляется на ура, но как повторить этот фокус программно догадаться не могу:(
При переносе из 1С 7.7 ЗиК в 1С 8.2 ЗУП было создано большое количество документов "Перенос данных", который по сути является оболочкой для прямой работы с регистрами сведений, накопления и расчета.
Как всегда у нас бывает, уже после переноса заказчик решил, что ему не нужна информация по сотрудникам, помеченным на удаление (всего около пятисот человек). удалить их в лоб - не получается, т.к. есть ссылки в
регистрах сведений и накопления, созданных документами Перенос данных.
И вот уже несколько часов я откровенно туплю: в пользовательском режиме любая запись из данных документов удаляется на ура, но как повторить этот фокус программно догадаться не могу:(
По теме из базы знаний
- Всякие полезности
- 74 полезности из комплексного курса по конфигурированию 1С 8.2
- Выгрузка-загрузка любых данных из 1С (и измененных) в XML между похожими конфигурациями (ФАЙЛ, HTTP, COM) ЛЮБЫХ баз 1С 8.1-8.3 с обработкой и поиском данных по произвольным полям поиска
- 50+ советов для успешной сдачи 1С: Специалист по платформе
- Инструментарий для анализа и редактирования регистров 1С (Управляемые формы)
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(4) yalo, именно так я делаю с регистрами сведений. Но вот как быть с регистрами накопления?
Проблема в том, что я не могу наложить на набор записей никаких отборов, кроме собственно регистратора.
А так как документ-регистратор это Перенос данных, к которому привязано несколько миллионов записей....
Но если ничего другого не придумается, придется решать именно так.
Проблема в том, что я не могу наложить на набор записей никаких отборов, кроме собственно регистратора.
А так как документ-регистратор это Перенос данных, к которому привязано несколько миллионов записей....
Но если ничего другого не придумается, придется решать именно так.
Создаешь набор записей (Набор). Накладываешь отбор по регистратору. Прочитываешь.
Далее идешь в цикле по каждой записи из набора (Для Каждого ТекСтрокаНабора Из Набор Цикл).
Проверяешь, если сотрудник удаленный, то Продолжить, иначе Запись = ТекСтрокаНабора.Добавить() с заполнением.
После цикла записываешь набор с пометкой замещения (Набор.Записать(Истина)). Хотя Истину можно и не указывать, набор по умолчанию запишется с замещением.
Далее идешь в цикле по каждой записи из набора (Для Каждого ТекСтрокаНабора Из Набор Цикл).
Проверяешь, если сотрудник удаленный, то Продолжить, иначе Запись = ТекСтрокаНабора.Добавить() с заполнением.
После цикла записываешь набор с пометкой замещения (Набор.Записать(Истина)). Хотя Истину можно и не указывать, набор по умолчанию запишется с замещением.
(8) Tashko,
Для Каждого ТекСтрокаНабора Из Набор Цикл
Запись = ТекСтрокаНабора.Добавить();
Точно не сработает, т.к. ТекСтрокаНабора - это уже запись из набора.
Если нужно удалить какие-то записи избирательно, то алгоритм будет выглядеть так:
Для Каждого ТекСтрокаНабора Из Набор Цикл
Если ТекСтрокаНабора.ИзмерениеРегистра1 = Значение1 и ТекСтрокаНабора.ИзмерениеРегистраN = ЗначениеN Тогда
Набор.Удалить(ТекСтрокаНабора);
КонецЕсли;
КонецЦикла;
Набор.Записать();
Для Каждого ТекСтрокаНабора Из Набор Цикл
Запись = ТекСтрокаНабора.Добавить();
Точно не сработает, т.к. ТекСтрокаНабора - это уже запись из набора.
Если нужно удалить какие-то записи избирательно, то алгоритм будет выглядеть так:
Для Каждого ТекСтрокаНабора Из Набор Цикл
Если ТекСтрокаНабора.ИзмерениеРегистра1 = Значение1 и ТекСтрокаНабора.ИзмерениеРегистраN = ЗначениеN Тогда
Набор.Удалить(ТекСтрокаНабора);
КонецЕсли;
КонецЦикла;
Набор.Записать();
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот