Быстрый переход

Программный вариант полной очистки:

При выполнении записи регистра сведений будут быстро удалены. Если регистр сведений объемный, это займет некоторое время, но обычно пару секунд.

Набор записей — это специальный «менеджер» для управления группой записей.

В случае, если не установлен отбор по измерениям и не производится начальное считывание методом Прочитать(), то в момент вызова Записать(), сохраняется текущее — пустое состояние.

Интерактивное удаление записей регистра сведений

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

Выделяем через shift и все записи командой Ctrl+A и нажимаем «Delete» или через контекстное меню «Удалить»

В случае, если количество записей больше 1000, тогда система при выделении выдаст предупреждение о длительности операций, но позволит продолжить выделение.

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

В обычных же формах стандартно можно удалять по одной строке.

Обработки для удаления записей регистров сведений

  • Кроме изменения и удаления записей регистров, добавлена возможность использовать произвольный алгоритм.
  • Выбор РС из списка, на форме отображается динамический список регистра.
  • Генерирует прямо на форме поля для изменения текущей записи. Можно изменять, добавлять, удалять записи.
  • Для группы записей (выделенные строки динамического списка) можно изменять поля, в том числе измерения. ВАЖНО: Запись идет в режиме перезаписи, так что если итоговая запись уже есть или вы изменили единственное измерение у группы записей — последствия могут быть плачевными. Но, надеюсь, вы понимаете, что собираетесь сделать.
  • При изменении полей — подсвечивается рамка. Вы всегда в курсе, что будет изменяться. Особенно актуально для групп записей.
  • Есть возможность записи в режиме загрузки
  • Есть возможность установить дополнительные свойства записи (иногда очень важно)
  • Использует привилегированный режим.
Групповая обработка регистров сведений на основе обработки от Gmix
  • Изменение (от одного до всех полей), удаление и копирование (с заменой любого количества полей) записей регистров сведений.

Не так давно мне потребовалось очистить регистр сведений. Этот регистр хранил в себе историю изменения некоторых объектов конфигурации и содержал несколько миллионов записей.

Обычный вариант программной очистки регистра сведений не подчиненного регистратору производится при помощи записи пустого набора записей, примерно так:

НаборЗаписей = РегистрыСведений.НашРегистр.СоздатьНаборЗаписей(); НаборЗаписей.Записать();

НаборЗаписей= РегистрыСведений. НашРегистр. СоздатьНаборЗаписей() ;

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

Но в данном случае очистка регистра подобным способом заняло бы много часов. Поэтому был выбран другой способ — быстрый способ очистки регистра сведений.

Шаг 1. Делаем резервную копию базы. Этот пункт, конечно, не обязателен, но привычка делать резервную копию перед любым потенциально опасным действием обязательно сохранит Вам нервы/время/зарплату/карьеру.

Шаг 2. Копируем требуем регистр сведений.

Шаг 3. Удаляем оригинал регистра сведений

Шаг 4. Переименовываем копию в оригинал и применяем изменения.

Вот таким нехитрым способом очистка регистра сведений займет несколько минут, вне зависимости от размеров этого регистра. Разница заключается в том, что во втором способе таблица регистра сведений удаляется целиком, что значительно быстрее.

Подобным способом можно произвести очистку практически любого элемента конфигурации. Но, разумеется, корректность учета после проведения такой операции никто не гарантирует.

Если Вы нашли ошибку или неточность, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter .

В этой статье рассмотрим как правильно удалять и записывать записи регистра сведений . Причем в первую очередь рассмотрим именно удаление записей, т.к. не столько важно насоздавать новых записей, сколько сохранить имеющиеся.

А при неосторожном обращении с регистром сведений очень легко удалить все имеющиеся записи, что будет показано ниже. В качестве примера будем использовать вот такой регистр сведений

Удаление записей регистра сведений

Как известно для работы с регистром сведений используется набор записей. Напишем две простейшие строчки кода для нашего регистра и запустим их на выполнение

НаборЗаписпей = РегистрыСведений. Цена. СоздатьНаборЗаписей() ; НаборЗаписпей. Записать() ;

Поздравляю! Мы только что грохнули все записи в регистре сведений. Хотя казалось бы, что при записи пустого набора записей ничего криминального произойти не может. Но если обратиться к синтакс-помощнику, то можно увидеть, что никакого противоречия нет. Если мы записываем набор записей и в методе Записать() в параметрах не указано Ложь (а по умолчанию подставляется Истина), то происходит замещение существующего набора записей тем, который мы записываем, в соответствии с установленным отбором. А поскольку мы отбор не устанавливали, то для замещения выбираются все записи регистра, и успешно замещаются пустым набором записей. И это грабли на которые иной раз наступают разработчики, которые не первый день в 1С. Кстати, если мы умышленно хотим полностью очистить регистр, то как раз именно этим методом и надо пользоваться. Заостряю на этом внимание, потому что достаточно часто встречается код, когда перед удалением набор записей прочитывается, потом очищается и только потом записывается. Хотя чтение и очистка набора записей здесь абсолютно излишни.

Теперь представим, что нам надо удалить не все записи регистра, а только с конкретными значениями измерений. Алгоритм действия в этом случае такой же, только перед записью необходимо для нашего пустого набора записей установить соответствующий отбор. В статье про мы в качестве примера рассматривали этот же регистр сведений - Цена . Напомню, что там у нас были следующие записи

Допустим, что мы хотим удалить записи, где Товар - Карандаш , а Период - 01.01.2017 . Напомню, что для периодических регистров сведений отбор можно устанавливать не только по измерениям, но и по периоду. В этом случае код у нас будет выглядеть вот так

НаборЗаписпей = РегистрыСведений. Цена. СоздатьНаборЗаписей() ; НаборЗаписпей. Отбор. Период. Установить("20170101") ; НаборЗаписпей. Отбор. Товар. Установить(Справочники. Товары. НайтиПоНаименованию("Карандаш" ) ) ; НаборЗаписпей. Записать() ;

Хочу также обратить внимание на метод Установить() . В том случае, когда вид сравнения в отборе - Равно этот метод позволяет установить отбор с минимальным количеством кода.
После выполнения этого кода в нашем регистре останутся следующие записи

Могут быть конечно и более сложные случаи при удалении записей. Например, когда нужно удалить записи по определенным значениям ресурсов или реквизитов.

Здесь использовать отбор уже не получиться, т.к. его можно устанавливать только для измерений, регистраторов и периодов. И вот тут уже придется перебирать один или несколько наборов записей, удалять отдельные записи и перезаписывать набор.

Добавление записей в регистр сведений

В качестве примера по созданию записей регистра сведений, восстановим удаленные ранее записи

НаборЗаписпей = РегистрыСведений. Цена. СоздатьНаборЗаписей() ; НаборЗаписпей. Отбор. Период. Установить("20170101") ; НаборЗаписпей. Отбор. Товар. Установить(Справочники. Товары. НайтиПоНаименованию("Карандаш" ) ) ; НоваяЗапись = НаборЗаписпей. Добавить() ; НоваяЗапись. Период = "20170101"; НоваяЗапись. Поставщик = Справочники. Контрагенты. НайтиПоНаименованию("ООО " "Леспром" "" ) ; НоваяЗапись. Товар = Справочники. Товары. НайтиПоНаименованию("Карандаш" ) ; НоваяЗапись. Сумма = 10 ; НоваяЗапись = НаборЗаписпей. Добавить() ; НоваяЗапись. Период = "20170101"; НоваяЗапись. Поставщик = Справочники. Контрагенты. НайтиПоНаименованию("ПАО " "Канцтовары" "" ) ; НоваяЗапись. Товар = Справочники. Товары. НайтиПоНаименованию("Карандаш" ) ; НоваяЗапись. Сумма = 27 ; НаборЗаписпей. Записать(Ложь ) ;

В методе Записать() параметр отвечающий за замещение существующих записей установлен в Ложь . Это означает, что наш набор записей будет только добавляться к существующему. В первый раз код отрабатывает успешно. Если же мы повторно попытаемся выполнить этот код, то получим окно с сообщением об ошибке, т.к. у нас уже есть записи с таким набором измерений и добавить еще одни такие же невозможно.


А вот если мы установим режим замещения в Истину , то при повторной записи никакой ошибки возникать не будет, т.к. существующие записи будут перезаписываться.

В случае работы с одной записью вместо набора записей можно использовать менеджер записи.