Видалення регістрів відомостей 1с обробка. Створення та видалення записів регістру відомостей. Програмний варіант повного очищення

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

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

Видалення записів регістру відомостей

Як відомо для роботи з регістром відомостей, використовується набір записів. Напишемо два найпростіші рядки коду для нашого регістру і запустимо їх на виконання

Набір Записів = Реєстри Відомостей. Ціна. СтворитиНабірЗаписів() ; Набір Записів. Записати() ;

Вітаю! Ми щойно гримнули всі записи в регістрі відомостей. Хоча здавалося б, що з запису порожнього набору записів нічого кримінального статися може. Але якщо звернутися до синтаксу-помічника, то можна побачити, що жодної суперечності немає. Якщо ми записуємо набір записів та у методі Записати()у параметрах не вказано Брехня(а за замовчуванням підставляється Істина), відбувається заміщення існуючого набору записів тим, який ми записуємо, відповідно до встановленого відбору. А оскільки ми не встановлювали відбір, то для заміщення вибираються всі записи регістру, і успішно заміщуються порожнім набором записів. І це граблі на які іноді наступають розробники, які не перший день в 1С. До речі, якщо ми навмисне хочемо повністю очистити регістр, то саме цим методом і треба користуватися. Загострюю на цьому увагу, тому що досить часто зустрічається код, коли перед видаленням набір записів прочитується, потім очищається і потім записується. Хоча читання та очищення набору записів тут абсолютно зайві.

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

Припустимо, що ми хочемо видалити записи, де Товар - Олівець, а Період - 01.01.2017. Нагадаю, що з періодичних регістрів відомостей відбір можна встановлювати як за вимірами, а й у періоду. У цьому випадку код у нас буде виглядати так

Набір Записів = Реєстри Відомостей. Ціна. СтворитиНабірЗаписів() ; Набір Записів. Добір. період. Встановити("20170101") ; Набір Записів. Добір. Товар. Установити(Довідники. Товари. ЗнайтиПо Найменуванню("Олівець" ) ) ; Набір Записів. Записати() ;

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

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

Тут використовувати відбір не вийде, т.к. його можна встановлювати лише для вимірювань, реєстраторів та періодів. І ось тут уже доведеться перебирати один або кілька наборів записів, видаляти окремі записи та перезаписувати набір.

Додавання записів у регістр відомостей

Як приклад створення записів регістру відомостей, відновимо видалені раніше записи

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

У методі Записати()параметр, який відповідає за заміщення існуючих записів, встановлено в Брехня. Це означає, що наш набір записів буде додаватися до існуючого. Вперше код відпрацьовує успішно. Якщо ж ми повторно спробуємо виконати цей код, отримаємо вікно з повідомленням про помилку, т.к. у нас вже є записи з таким набором вимірювань і додати ще одні такі самі неможливо.


А ось якщо ми встановимо режим заміщення в Істину, то при повторному запису жодної помилки не виникатиме, т.к. існуючі записи перезаписуватимуться.

У разі роботи з одним записом замість набору записів можна використовувати менеджер запису.

Нещодавно мені потрібно було очистити регістр відомостей. Цей регістр зберігав у собі історію зміни деяких об'єктів конфігурації та містив кілька мільйонів записів.

Звичайний варіант програмного очищення регістру відомостей не підпорядкованого реєстратору проводиться за допомогою запису порожнього набору записів приблизно так:

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

Набір Записів = Реєстри Відомостей. НашРегістр. СтворитиНабірЗаписів() ;

Набір записів. Записати() ;

Але в даному випадку очищення регістру подібним способом зайняло багато годин. Тому був обраний інший спосіб - швидкий спосіб очищення регістру відомостей.

Крок 1. Робимо резервну копію бази. Цей пункт, звичайно, не є обов'язковим, але звичка робити резервну копію перед будь-якою потенційно небезпечною дією обов'язково збереже Вам нерви/час/зарплату/кар'єру.

Крок 2. Копіюємо і вимагаємо регістр відомостей.

Крок 3. Видаляємо оригінал регістру відомостей

Крок 4. Перейменовуємо копію на оригінал і застосовуємо зміни.

Ось таким нехитрим способом очищення регістру відомостей займе кілька хвилин, незалежно від розмірів цього регістру. Різниця полягає в тому, що у другому способі таблиця регістру відомостей видаляється цілком, що значно швидше.

Подібним способом можна очистити практично будь-який елемент конфігурації. Але, ясна річ, коректність обліку після проведення такої операції ніхто не гарантує.

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

швидкий перехід

Програмний варіант повного очищення:

При виконанні запису регістру відомостей буде швидко видалено. Якщо регістр відомостей об'ємний, це займе деякий час, але кілька секунд.

Набір записів— це спеціальний менеджер для управління групою записів.

У випадку, якщо не встановлено відбір за вимірами і не проводиться початкове зчитування методом Прочитати(), то в момент виклику Записати() зберігається поточний - порожній стан.

Інтерактивне видалення записів регістру відомостей

У режимі роботи конфігурації за умовчанням увімкнено множинний вибір записів регістру, і, якщо регістр незалежний (не підпорядкований документу-реєстратору), можливе видалення групи записів.

Виділяємо через shift та всі записи командою Ctrl+A та натискаємо «Delete» або через контекстне меню «Видалити»

Якщо кількість записів більше 1000, тоді система при виділенні видасть попередження про тривалість операцій, але дозволить продовжити виділення.

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

У звичайних формах стандартно можна видаляти по одному рядку.

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

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


Copyright © 2022 Прості істини та жіночі хитрощі. Про стосунки.