Как удалить данные из регистра сведений за прошлые периоды и остановить бесконечные перерасчеты в 1С

Программист 1С v8.3 (Управляемые формы) 1С:Зарплата и Управление Персоналом IT и автоматизация бизнеса
← На главную

В процессе сопровождения конфигурации 1С:Зарплата и управление персоналом 3.1 часто возникает ситуация, когда система настойчиво предлагает выполнить перерасчет зарплаты за очень старые периоды (например, за 2018 год). Это происходит из-за того, что механизм отслеживания изменений регистрирует любые корректировки в документах или настройках, которые потенциально влияют на прошлые начисления. Консультанты и бухгалтеры часто ищут способ физически удалить эти данные из базы, чтобы «очистить» очередь перерасчетов. В данной статье мы подробно разберем, как это сделать правильно и какие инструменты для этого существуют.

Механизм возникновения перерасчетов: выясняем причину

Перед тем как приступать к удалению данных, проанализируем ситуацию. Почему 1С просит пересчитать 2018 год? В платформе 1С существует понятие «Очередь перерасчетов». Как только кто-то заходит в документ 2018 года и просто нажимает кнопку Записать (даже не меняя цифр), система ставит пометку в специальный служебный регистр о том, что данные этого периода стали неактуальными. Также это может случиться при изменении состава начислений, входящих в расчетную базу среднего заработка, или при редактировании графиков работы задним числом.

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

Способ 1: Отмена перерасчетов через пользовательский интерфейс

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

Разберем последовательность действий:

  1. Перейдем в раздел Зарплата, затем выберем пункт Сервис — Перерасчеты.
  2. В открывшемся окне мы увидим список всех сотрудников и периодов, по которым система считает расчеты неактуальными.
  3. Найдем записи за 2018 год. Мы можем воспользоваться стандартным поиском или настроить отбор.
  4. Выделим нужные строки (или все сразу с помощью комбинации Ctrl + A) и нажмем кнопку Отменить.

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

Способ 2: Программное удаление данных через Набор Записей

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

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


// Создаем объект набора записей для конкретного регистра
Набор = РегистрыСведений.ИмяРегистра.СоздатьНабор();

// Устанавливаем отбор по документу-регистратору, данные которого нужно удалить
Набор.Отбор.Регистратор.Установить(СсылкаНаДокумент);

// Читаем данные из базы в оперативную память (необязательно для полной очистки, но полезно для отладки)
Набор.Прочитать();

// Очищаем содержимое набора (если мы не добавляем новые записи в Набор, он будет пустым)
// При записи пустого набора с установленным отбором старые данные в БД удаляются
Набор.Записать();

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


Набор = РегистрыСведений.УдаляемыйРегистр.СоздатьНабор();
// Если мы хотим удалить записи за конкретный год, 
// нам нужно перебрать их или использовать отборы, доступные для данного регистра.
// Внимание: стандартный отбор в наборе записей работает только на РАВЕНСТВО.
Набор.Отбор.Период.Установить(ДатаНачала2018Года); 
Набор.Записать();

Способ 3: Использование обработки «Универсальный обмен данными в формате XML»

Малоизвестный, но эффективный встроенный инструмент для администратора — это вкладка удаления данных в обработке обмена. Рассмотрим, как ею воспользоваться:

  1. Откроем Функции для технического специалиста (или «Все функции»).
  2. Найдем в списке обработок Универсальный обмен данными в формате XML.
  3. Перейдем на вкладку Удаление данных.
  4. В списке объектов найдем нужный нам регистр сведений.
  5. Настроим период (в нашем случае — весь 2018 год) и нажмем кнопку Удалить.

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

Способ 4: Групповое изменение реквизитов

Еще один мощный инструмент — стандартная обработка ГрупповоеИзменениеРеквизитов. Хотя она предназначена для изменения значений, в последних версиях платформы она позволяет удалять объекты.

Разберем этот алгоритм:

  1. Запустим обработку Групповое изменение реквизитов.
  2. В поле «Изменять» выберем нужный регистр сведений.
  3. Нажмем Добавить условие отбора и выберем поле Период. Укажем интервал за 2018 год.
  4. В меню «Дополнительные параметры» установим флажок Показывать служебные объекты и Разрешить изменение спец. реквизитов.
  5. После настройки отбора можно будет выполнить действие по удалению найденных записей.

Последствия и риски удаления исторических данных

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

Проанализировав ситуацию, мы рекомендуем: если ваша цель — просто избавиться от назойливых сообщений о перерасчетах, используйте Способ №1 (Отмена в очереди перерасчетов). Если же база перегружена и вы хотите физически избавиться от старья, лучшим решением будет проведение штатной процедуры Свертка информационной базы на начало актуального года. Она корректно свернет остатки и очистит ненужные обороты, сохранив при этом целостность учета.

← На главную