Сначала запросом получаем выборку всех документов, являющихся регистраторами для нужного регистра.
Далее создаем набор записей по данному регистру.
В цикле перебора выборки из результата запроса устанавливаем отборы для набора записей по нужным регистраторам и записываем пустые наборы записей в регистр с замещением старых наборов.
Как в периодическом независимом регистре сведений «КурсыВалют» удалить все записи по валютам с наименованиями «EUR» и «USD», период которых меньше 01 января 2005 года?
Сначала получим таблицу записей, которые необходимо оставить. Поскольку условий несколько, да еще и не все они на равенство, оптимальнее это сделать при помощи запроса. Следующий запрос даст нам желаемое:
Источником данных для запроса послужила таблица записей регистра.
Были применены отборы, чтобы в результат попали записи, для которых период более или равен 01 января 2005 года, или наименования не USD и не EUR. Обратите внимание: при составлении условия по периоду, чтобы не пользоваться параметром запроса, прямо в тексте запроса применили литерал даты ДАТАВРЕМЯ(), в котором части даты указываются в «обратном» порядке: год, месяц, порядковый номер дня в месяце.
Результатом запроса будет таблица, в которой по каждой записи заполнены все поля регистра сведений КурсыВалют.
Далее выполняем запрос, выгружаем результат в таблицу значений ТаблицаОставляемыхЗаписей
Создаем переменную НаборЗаписей, тип значения РегистрСведенийНаборЗаписей.КурсыВалют, выгружаем в нее таблицу значений ТаблицаОставляемыхЗаписей.
Поскольку сама таблица была получена из регистра, то названия ее колонок совпадут с названиями полей регистра, а значит, загрузка пройдет успешно.
Далее записываем заполненный только нужными записями набор записей в регистр с замещением его исходных данных (как вы уже помните, параметр Замещать метода Записать() по умолчанию имеет значение Истина).
Если регистр сведений подчинен регистратору, то для добавления записей в него необходимо создать набор записей этого регистра с установленным отбором по нужному регистратору, заполнить этот набор записей и записать его:
По умолчанию запись выполняется с замещением, т. е. существующие записи этого регистратора в регистре сведений будут удалены.
Для того чтобы добавить записи к существующим записям регистратора, необходимо указывать значение Ложь параметра метода Записать() набора записей. При этом необходимо позаботиться о том, чтобы значения измерений добавляемых записей были уникальны для записей данного регистратора в регистре сведений, иначе запись выполнена не будет:
Переменная УдаляемаяОрганизация содержит соответствующую ссылку.
Тогда очистка регистра от удаляемых записей может быть произведена следующим образом:
Создаем переменную НаборЗаписей, устанавливаем для нее отбор по значению организации равный УдаляемаяОрганизация. Кстати, отбор набора записей регистра всегда может устанавливаться только на равенство.
Далее записываем полученный пустой набор записей с замещением.
В результате все записи, соответствовавшие отбору, будут замещены пустым набором записей.
Создаем новую запись, заполняем ее поля. Записываем новый набор записей с замещением всех записей, соответствующих отбору. Параметр Замещение метода Записать() по умолчанию имеет значение Истина.
Для чего нужно замещение?
Дело в том, что в любом регистре запись с конкретным ключом записи всегда уникальна. Для непериодического независимого регистра сведений ключом записи является конкретная комбинация значений измерений.
То есть запись с определенной комбинацией значений измерений может присутствовать только в единственном экземпляре. Попытка записать новую запись с тем же набором значений измерений привела бы к ошибке.
Кроме того, в подобной работе можно удариться в другую крайность.
Если не применить отбор, то при записи система попытается заместить все существующие записи регистра. В результате, добавляя новый набор записей с замещением, мы бы удалили все ранее введенные записи регистра! Как добавить записи в независимый регистр сведений?
Создаем переменную НаборЗаписей как набор записей регистра сведений. Поскольку мы не прочитали данные из регистра – в этот момент это пустой набор записей.
Записываем новый набор записей (пустой) с замещением всех предыдущих записей (по умолчанию параметр Замещать метода Записать() имеет значение Истина).
Данную технологию можно применять только для регистров сведений с независимым режимом записи.