Как разблокировать и отредактировать заблокированный регистр сведений в 1С:Бухгалтерия 3.0?

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

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

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

Выясняем причины блокировки формы

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

  1. Настройки интеграции и ведения учета. Если в настройках параметров учета (раздел «Зарплата и кадры» — «Настройки зарплаты») установлено, что учет расчетов по зарплате ведется «Во внешней программе» (например, в «1С:ЗУП»), система автоматически блокирует ручное изменение любых параметров, связанных с расчетом резервов и начислений в бухгалтерской базе. Предполагается, что эти данные должны поступать исключительно через механизмы синхронизации, а для их регулярной передачи можно настроить автоматический обмен между базами по расписанию.
  2. Блокировка ключевых реквизитов БСП. В Библиотеке стандартных подсистем встроен механизм защиты данных от случайного изменения (миссклика). В модуле менеджера или в обработчиках формы прописывается жесткое ограничение на редактирование, из-за чего свойство формы ТолькоПросмотр устанавливается в значение Истина.
  3. Ограничения автоматических форм (автоформ) платформы. Как показывает практика, стандартные автоматически генерируемые формы списков и записей некоторых регистров в новых версиях платформы 1С:Предприятие могут вести себя некорректно или принудительно открываться в режиме чтения, если для них не созданы явные управляемые формы в конфигураторе.
  4. Дата запрета изменения данных. Традиционный механизм БСП, который блокирует любые изменения в документах и регистрах, если период относится к закрытым для редактирования датам.

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

Способ 1. Временное переключение режима ведения учета зарплаты

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

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

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

Так как блокировка накладывается только на визуальное представление (на уровне управляемой формы), сами данные в СУБД остаются открытыми для записи. Мы можем обойти интерфейс формы с помощью стандартного инструмента администратора:

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

Способ 3. Разблокировка через стандартное меню БСП «Разрешить редактирование»

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

  1. Откроем форму записи регистра.
  2. В правом верхнем углу нажмем кнопку Еще.
  3. Найдем команду Разрешить редактирование реквизитов (или аналогичную команду разблокировки формы).
  4. Подтвердим действие в появившемся диалоговом окне. Система сделает поля доступными для корректировки.

Способ 4. Программный обход блокировки и редактирование через код

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

Для поиска места наложения блокировки запустим сеанс в режиме отладки и установим точку останова в модуле управляемой формы регистра (или в общем модуле работы с формами БСП) на событие ПриСозданииНаСервере. Проанализируем значение свойства ТолькоПросмотр:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Выясняем, включена ли блокировка БСП или интеграции
    Если Параметры.Свойство("Ключ") Тогда
        // Здесь может отрабатывать общий модуль, блокирующий форму:
        // ОбщегоНазначенияБП.ОпределитьДоступностьФормы(ЭтотОбъект);
    КонецЕсли;

    // Программный сброс блокировки формы для администратора
    Если РольДоступна("ПолныеПрава") Тогда
        ЭтотОбъект.ТолькоПросмотр = Ложь;
        // Разблокируем конкретные элементы формы, если они заблокированы индивидуально
        Для Каждого Элемент Из Элементы Цикл
            Элемент.Доступность = Истина;
            Элемент.ТолькоПросмотр = Ложь;
        КонецЦикла;
    КонецЕсли;

КонецПроцедуры

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


// Создаем менеджер записи для непосредственного обращения к базе данных
МенеджерЗаписи = РегистрыСведений.НастройкиРасчетаРезервовОтпусков.СоздатьМенеджерЗаписи();

// Указываем ключевые поля (измерения) для поиска нужной записи
МенеджерЗаписи.Период = '20240101';
МенеджерЗаписи.Организация = Справочники.Организации.НайтиПоРеквизиту("ИНН", "7700000000");

// Пробуем прочитать существующую запись
МенеджерЗаписи.Прочитать();

Если МенеджерЗаписи.Выбран() Тогда
    // Изменяем ресурсы регистра напрямую
    МенеджерЗаписи.ПредельнаяВеличинаБазы = 1500000;
    МенеджерЗаписи.ПроцентОтчислений = 7.9;
    
    // Записываем обновленные данные с отключением проверок при необходимости
    МенеджерЗаписи.Записать(Истина); 
    ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Запись регистра успешно обновлена!");
КонецЕсли;

Нюанс с платформенными автоформами

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

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

← На главную