Почему нельзя удалить запись независимого регистра сведений в 1С и как решить эту проблему?

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

В процессе администрирования или разработки в программных продуктах на платформе 1С:Предприятие 8.3 (особенно в типовых конфигурациях, таких как 1С:Бухгалтерия предприятия 3.0) специалисты часто сталкиваются со странным поведением интерфейса. Типичный пример: пользователь с полными правами заходит в независимый периодический регистр сведений, но не обнаруживает в меню кнопок для удаления или добавления записей. Кнопки отсутствуют как на форме списка, так и на форме самой записи.

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

Выясняем первопричину: почему запись заблокирована?

Для начала проанализируем архитектурную логику конфигурации. В качестве примера рассмотрим регистр сведений ТерриториальныеУсловияПФР. Этот регистр является независимым и периодическим. Он хранит сведения о территориальных условиях работы сотрудников для корректного формирования отчетности в Социальный фонд России (СФР, ранее ПФР), например, для подраздела 1.2 формы ЕФС-1 (заменившей СЗВ-СТАЖ).

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

  1. Записи в этом регистре должны строго соответствовать кадровой структуре организации.
  2. Информация в регистр должна записываться автоматически при изменении реквизитов в карточке организации (раздел Главное — Налоги и отчеты) или в карточке справочника Подразделения (если для конкретного офиса или филиала заданы обособленные территориальные условия, такие как районный коэффициент или коды Крайнего Севера).
  3. Ручное интерактивное вмешательство неизбежно приведет к рассинхронизации данных между справочниками структуры предприятия и регистром сведений. В результате регламентированная отчетность по персонифицированному учету начнет заполняться некорректно, а программа станет выдавать ошибки при проведении кадровых документов.

Особенности платформы: почему запуск в режиме обычного приложения не помог?

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

Однако в современных конфигурациях (таких как БП 3.0) этот трюк не срабатывает, и платформа все равно открывает управляемую форму. Разберемся по шагам, почему это происходит:

  1. Отсутствие обычных форм в метаданных. Конфигурация «Бухгалтерия предприятия 3.0» полностью спроектирована на управляемом интерфейсе. Обычные формы для объектов в ней физически отсутствуют ради облегчения конфигурации и оптимизации её поддержки.
  2. Свойство конфигурации. В свойствах корневого объекта конфигурации установлен флаг Использовать управляемые формы в обычном приложении (в некоторых версиях платформы описание внизу палитры свойств уточняет: «Использовать управляемые формы в толстом клиенте в обычном режиме»). Когда это свойство установлено в значение Истина, платформа принудительно открывает управляемые (клиентские) формы для всех объектов, у которых нет явно созданных разработчиком обычных форм.
  3. Сохранение логики кода. Даже если управляемая форма запускается в сеансе обычного приложения, она сохраняет все свои свойства и ограничения, заложенные разработчиком (включая свойство ТолькоПросмотр = Истина).

Способ 1. Штатное исправление данных через интерфейс

Перед тем как прибегать к радикальным мерам (программному удалению), всегда следует попытаться решить проблему штатными средствами конфигурации. Если запись в регистре ошибочна, скорее всего, она была неверно введена в карточке организации или подразделения.

Рассмотрим порядок действий для штатной корректировки истории территориальных условий:

  1. Перейдите в справочник Подразделения или откройте реквизиты организации.
  2. Найдите поле, отвечающее за территориальные условия (например, РК, МКС или ЧАЭС).
  3. Рядом с полем будет доступна гиперссылка История. Нажмите на нее.
  4. В открывшейся специализированной форме «Редактирование истории» платформа позволяет изменять, добавлять или удалять записи за определенные периоды. При этом встроенные алгоритмы программы проконтролируют, чтобы изменения корректно отразились во всей базе данных.

Способ 2. Использование обработки «Групповое изменение реквизитов»

Если запись в регистре осталась «мусорной» (например, после некорректного апгрейда базы или сбоя при переносе данных) и стандартный интерфейс не позволяет её удалить, воспользуйтесь универсальным административным инструментом, встроенным в БСП (Библиотеку стандартных подсистем).

Рассмотрим, как задействовать этот механизм:

  1. Перейдите в раздел Администрирование, затем выберите пункт Обслуживание и откройте ссылку Групповое изменение реквизитов (в некоторых релизах она находится в подразделе «Корректировка данных»).
  2. По умолчанию регистры сведений скрыты из списка доступных объектов. Чтобы отобразить их, нажмите кнопку Дополнительные параметры внизу формы и установите флаг Показывать служебные реквизиты.
  3. В поле «Выбирать элементы» найдите и выберите наш регистр ТерриториальныеУсловияПФР.
  4. Нажмите на ссылку «Все элементы» и настройте строгий отбор (например, укажите конкретный период или подразделение), чтобы случайно не повредить другие записи.
  5. Выполните необходимое действие с отобранными записями. Данная обработка работает на уровне платформы и позволяет обходить интерфейсные запреты управляемых форм.

Способ 3. Программный метод удаления записей

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

Вариант А. Удаление конкретной записи через Менеджер Записи. Это наиболее безопасный способ, когда вам точно известны ключевые поля (измерения) и период записи, которую необходимо удалить. Рассмотрим пример кода:


МенеджерЗаписи = РегистрыСведений.ТерриториальныеУсловияПФР.СоздатьМенеджерЗаписи();

// Задаем ключевые поля для поиска записи
МенеджерЗаписи.Период = Дата("20231231");
МенеджерЗаписи.СтруктурнаяЕдиница = Справочники.ПодразделенияОрганизаций.НайтиПоНаименованию("Отдел продаж");

// Читаем запись из базы данных
МенеджерЗаписи.Прочитать();

// Если запись существует, удаляем её
Если МенеджерЗаписи.Выбран() Тогда
    МенеджерЗаписи.Удалить();
    Сообщить("Запись успешно удалена!"); КонецЕсли;

Вариант Б. Очистка записей с отбором через Набор Записей. Этот метод используется, когда нужно удалить сразу группу записей по определенному условию.

Важное предупреждение: при работе с объектом РегистрСведенийНаборЗаписей крайне важно установить правильный отбор. Запись набора с незаполненным отбором приведет к полной очистке всего регистра сведений в базе данных!

Рассмотрим безопасный пример работы с набором записей:


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

// Обязательно устанавливаем жесткий отбор по измерению
НаборЗаписей.Отбор.СтруктурнаяЕдиница.Установить(Справочники.ПодразделенияОрганизаций.НайтиПоНаименованию("Архив"));

// Метод Записать(Истина) без предварительного добавления новых строк в коллекцию
// очистит все существующие записи в базе данных, которые соответствуют установленному отбору.
НаборЗаписей.Записать(Истина);

Сообщить("Все записи по выбранному подразделению успешно удалены из регистра.");

Резюме

Мы проанализировали проблему блокировки удаления записей в независимых регистрах сведений 1С. Подведем итоги:

← На главную