Очистка регистра сведений
Программисту 1с в работе не редко нужно очистить регистр сведений от записей. В этой заметке разберу примеры очистки различных вариантов регистров сведений.
Регистр сведений – объект конфигурации, позволяющий хранить произвольные данные в разрезе нескольких измерений. Например, в регистре сведений можно хранить цены в разрезе номенклатуры и виде цен, или курсы валют в разрезе валюты.
Очистка регистра сведений без регистратора
Что бы удалить все записи из регистра достаточно написать две строчки кода.
- Выбрать регистр сведений для удаления.
- Создать набор записей.
- Записать пустой набор записей.
Удаление записей в независимом регистре сведений с отбором. В примере удаляются все записи из регистра сведений “СтатусыЗаданий” по определенной организации.
- Считаем что в переменную Орг установлена нужная для очистки организация.
- Создаем набор записей.
- Устанавливаем отбор по организации.
- Записываем пустой набор данных.
Удаление записей из регистра сведений подчиненного регистратору
Для очистки регистра сведений подчиненного регистратору в отборе обязательно указывать регистратор, в остальном работает так же как удаление записей в регистре сведений с отбором.
Удаление записей из регистра сведений подчиненного регистратору с дополнительным отбором
Для удаления части записей из регистра сведений в пределах одного регистратора нужно сделать отбор по регистратору, а потом отобрать записи для удаления. Например если мы хотим удалить из регистра цены только по определенной номенклатуре. Важно помнить, что при перепроведении документа удаленные записи появятся снова.
В этом примере установив отбор по регистратору, я добавляю обход полученных записей и создаю список записей подходящих по условию, а после удаляю их из набора. Набор записывается уже без этих записей.
Удаление записей из регистра с большим количеством записей
В больших высоконагруженных базах бывает необходимо удалить миллионы или даже десятки миллионов записей, очень часто перечисленные выше способы вылетают с ошибкой памяти или не могут выполнится по другим причинам.
В этом примере я выберу все записи которые нужно удалить запросом, а потом буду удалять по одной, это позволит не блокировать таблицу на долгое время и не потреблять много памяти за один раз.
Полная очистка НЕЗАВИСИМОГО регистра сведений
Код 1C v 8.х
Создаем переменную НаборЗаписей как набор записей регистра сведений. Поскольку мы не прочитали данные из регистра – в этот момент это пустой набор записей.
Записываем новый набор записей (пустой) с замещением всех предыдущих записей (по умолчанию параметр Замещать метода Записать() имеет значение Истина).
Данную технологию можно применять только для регистров сведений с независимым режимом записи.
Как очистить регистр сведений?
Не так давно мне потребовалось очистить регистр сведений. Этот регистр хранил в себе историю изменения некоторых объектов конфигурации и содержал несколько миллионов записей.
Обычный вариант программной очистки регистра сведений не подчиненного регистратору производится при помощи записи пустого набора записей, примерно так:
Но в данном случае очистка регистра подобным способом заняло бы много часов. Поэтому был выбран другой способ — быстрый способ очистки регистра сведений.
Шаг 1. Делаем резервную копию базы. Этот пункт, конечно, не обязателен, но привычка делать резервную копию перед любым потенциально опасным действием обязательно сохранит Вам нервы/время/зарплату/карьеру.
Шаг 2. Копируем требуем регистр сведений.
Копируем регистр
Шаг 3. Удаляем оригинал регистра сведений
Удаляем регистр
Шаг 4. Переименовываем копию в оригинал и применяем изменения.
Переименовываем и применяем изменения
Вот таким нехитрым способом очистка регистра сведений займет несколько минут, вне зависимости от размеров этого регистра. Разница заключается в том, что во втором способе таблица регистра сведений удаляется целиком, что значительно быстрее.
Подобным способом можно произвести очистку практически любого элемента конфигурации. Но, разумеется, корректность учета после проведения такой операции никто не гарантирует.
Если Вы нашли ошибку или неточность, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
(оценок: 1, средняя оценка: 5,00 из 5)
Работа с регистрами сведений
Отличие от предыдущего примера в том, что мы не будем читать запись, а просто добавим ее. Если была запись с теми же измерениями, она будет замещена.
Очистка регистра сведений
Отбор в наборе записей — это вообще важная вещь. Например, чтобы очистить регистр, нам достаточно записать набор записей без отбора.
Логирование записей в регистр сведений
Ну и под конец интересненькое. Предположим, мы хотим записывать в лог все изменения записей регистра. Для хранения лога подойдет файл mxl, расположенный на сервере. Также нам понадобится макет. Макет и файл лога у меня не сохранились, но из кода все довольно очевидно.