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