В процессе администрирования или разработки в программных продуктах на платформе 1С:Предприятие 8.3 (особенно в типовых конфигурациях, таких как 1С:Бухгалтерия предприятия 3.0) специалисты часто сталкиваются со странным поведением интерфейса. Типичный пример: пользователь с полными правами заходит в независимый периодический регистр сведений, но не обнаруживает в меню кнопок для удаления или добавления записей. Кнопки отсутствуют как на форме списка, так и на форме самой записи.
В этой статье мы подробно разберем, почему возникает такая ситуация, как особенности платформы влияют на отображение форм в различных режимах запуска и какими способами можно безопасно удалить или скорректировать заблокированные записи.
Для начала проанализируем архитектурную логику конфигурации. В качестве примера рассмотрим регистр сведений ТерриториальныеУсловияПФР. Этот регистр является независимым и периодическим. Он хранит сведения о территориальных условиях работы сотрудников для корректного формирования отчетности в Социальный фонд России (СФР, ранее ПФР), например, для подраздела 1.2 формы ЕФС-1 (заменившей СЗВ-СТАЖ).
Разработчики фирмы «1С» намеренно заблокировали возможность интерактивного изменения этого регистра пользователями. Это сделано с помощью установки свойства Только просмотр для таблицы на управляемой форме списка, а также отключения автозаполнения командной панели формы. Сделано это из соображений защиты целостности данных:
Подразделения (если для конкретного офиса или филиала заданы обособленные территориальные условия, такие как районный коэффициент или коды Крайнего Севера).Некоторые специалисты пытаются обойти ограничения управляемого интерфейса «Такси», запуская информационную базу в режиме толстого клиента (обычное приложение). Существует миф, что если открыть базу в обычном режиме, платформа автоматически сгенерирует для объектов стандартные «обычные» формы (на которых по умолчанию доступны все стандартные команды, включая удаление).
Однако в современных конфигурациях (таких как БП 3.0) этот трюк не срабатывает, и платформа все равно открывает управляемую форму. Разберемся по шагам, почему это происходит:
Истина, платформа принудительно открывает управляемые (клиентские) формы для всех объектов, у которых нет явно созданных разработчиком обычных форм.ТолькоПросмотр = Истина).Перед тем как прибегать к радикальным мерам (программному удалению), всегда следует попытаться решить проблему штатными средствами конфигурации. Если запись в регистре ошибочна, скорее всего, она была неверно введена в карточке организации или подразделения.
Рассмотрим порядок действий для штатной корректировки истории территориальных условий:
Подразделения или откройте реквизиты организации.Если запись в регистре осталась «мусорной» (например, после некорректного апгрейда базы или сбоя при переносе данных) и стандартный интерфейс не позволяет её удалить, воспользуйтесь универсальным административным инструментом, встроенным в БСП (Библиотеку стандартных подсистем).
Рассмотрим, как задействовать этот механизм:
ТерриториальныеУсловияПФР.Если вам требуется автоматизировать этот процесс или вы предпочитаете решать подобные задачи с помощью написания небольших служебных скриптов, можно создать внешнюю обработку. При работе с независимыми регистрами сведений в 1С существует два основных программных подхода.
Вариант А. Удаление конкретной записи через Менеджер Записи. Это наиболее безопасный способ, когда вам точно известны ключевые поля (измерения) и период записи, которую необходимо удалить. Рассмотрим пример кода:
МенеджерЗаписи = РегистрыСведений.ТерриториальныеУсловияПФР.СоздатьМенеджерЗаписи();
// Задаем ключевые поля для поиска записи
МенеджерЗаписи.Период = Дата("20231231");
МенеджерЗаписи.СтруктурнаяЕдиница = Справочники.ПодразделенияОрганизаций.НайтиПоНаименованию("Отдел продаж");
// Читаем запись из базы данных
МенеджерЗаписи.Прочитать();
// Если запись существует, удаляем её
Если МенеджерЗаписи.Выбран() Тогда
МенеджерЗаписи.Удалить();
Сообщить("Запись успешно удалена!"); КонецЕсли;
Вариант Б. Очистка записей с отбором через Набор Записей. Этот метод используется, когда нужно удалить сразу группу записей по определенному условию.
Важное предупреждение: при работе с объектом РегистрСведенийНаборЗаписей крайне важно установить правильный отбор. Запись набора с незаполненным отбором приведет к полной очистке всего регистра сведений в базе данных!
Рассмотрим безопасный пример работы с набором записей:
// Создаем объект набора записей
НаборЗаписей = РегистрыСведений.ТерриториальныеУсловияПФР.СоздатьНаборЗаписей();
// Обязательно устанавливаем жесткий отбор по измерению
НаборЗаписей.Отбор.СтруктурнаяЕдиница.Установить(Справочники.ПодразделенияОрганизаций.НайтиПоНаименованию("Архив"));
// Метод Записать(Истина) без предварительного добавления новых строк в коллекцию
// очистит все существующие записи в базе данных, которые соответствуют установленному отбору.
НаборЗаписей.Записать(Истина);
Сообщить("Все записи по выбранному подразделению успешно удалены из регистра.");
Мы проанализировали проблему блокировки удаления записей в независимых регистрах сведений 1С. Подведем итоги:
СоздатьМенеджерЗаписи(), а для группового удаления — СоздатьНаборЗаписей() с обязательной установкой отборов.