Ячейка или поле в 1С не редактируется: находим, что ставит запрет, и снимаем его

· 11 мин

Содержание

Чтобы снять защиту с ячейки в 1С, сначала поймите, кто её поставил. В табличном документе (печатная форма, макет, отчёт) запрет даёт пара свойств: Защита у самого документа и Защита у области ячеек. Достаточно выключить любое из них. В форме документа или справочника поле запирают другие вещи: свойство ТолькоПросмотр, права роли, код модуля формы или механизм типовой конфигурации — дата запрета изменения, запрет редактирования реквизитов.

Если вы пользователь и правки в конфигураторе вам недоступны, смотрите разделы про печатные формы и типовые конфигурации: там всё делается в режиме 1С:Предприятие. Разделы про роли, свойства формы, код и отладчик — для администратора или программиста.

Какая блокировка перед вами: диагностика за пять минут

Внешне запреты похожи: курсор встаёт в поле, но значение не меняется, или поле серое. По деталям их легко различить.

ПризнакВероятная причинаГде снимать
Ячейка печатной формы или отчёта не правится, соседние правятсяЗащита области в табличном документеСвойства макета или кнопка редактирования формы печати
Вся форма объекта открыта только на чтение, кнопки «Записать» нетУ роли нет права Изменение на объектРоли и профили групп доступа
Одно-два поля серые у всех пользователейТолькоПросмотр или Доступность элемента, код модуляКонфигуратор, форма и модуль
Поле серое у одних пользователей и открыто у другихПрава роли на реквизит или условие в коде по ролиПрофили групп доступа, роли
При записи старого документа сообщение о запрете измененияДата запрета измененияНастройки дат запрета в разделе Администрирование
В карточке номенклатуры или договора заблокированы ключевые реквизитыПодсистема запрета редактирования реквизитов объектовКоманда «Разрешить редактирование реквизитов»
Ячейка табличной части серая только в некоторых строкахУсловное оформление или код в событиях таблицыФорма в конфигураторе, модуль формы

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

Где вы видите заблокированную ячейку?

Свойство «Защита» в табличном документе: печатные формы, отчёты, макеты

Табличный документ — это то, что 1С показывает в печатных формах, отчётах и макетах. Защита в нём устроена в два уровня:

  • 🔒 у табличного документа есть флаг Защита — он включает механизм;
  • 🧱 у каждой области ячеек есть свой флаг Защита — он решает, какую ячейку запереть.

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

В режиме 1С:Предприятие (печатная форма)

В типовых конфигурациях на БСП форма печати документов открывается только для просмотра. В её командной панели есть кнопка с карандашом, которая включает редактирование.

  1. Откройте документ и нажмите Печать, выберите форму.
  2. В панели формы печати нажмите кнопку редактирования (значок карандаша). Подсказка у кнопки — «Редактирование».
  3. Исправьте текст в ячейке и распечатайте или сохраните файл.

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

Если поправить нужно навсегда (например, всегда печатать другое название организации в шапке), меняйте макет. В БП 3.0 и ЗУП 3.1 макеты хранятся в Администрирование → Печатные формы, отчеты и обработки → Макеты печатных форм. Изменённый там макет переживает обновление конфигурации.

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

В конфигураторе (макет)

  1. Откройте макет: дерево конфигурации → объект → Макеты → нужный макет.
  2. Выделите ячейку или диапазон.
  3. Откройте палитру свойств (Alt+Enter).
  4. Снимите флажок Защита.
  5. Чтобы снять защиту со всего документа, щёлкните по левому верхнему углу таблицы, откройте свойства и снимите флажок Защита там.

Для файла .mxl, сохранённого из 1С, порядок тот же: откройте его в конфигураторе через Файл → Открыть, снимите флажки и сохраните.

Макеты типовой конфигурации на поддержке правьте в расширении конфигурации или через макеты печатных форм в пользовательском режиме. Прямая правка снимает объект с поддержки и усложняет каждое следующее обновление.

Программно

Если табличный документ формирует ваш код, защиту выключают свойствами:

// Снять защиту со всего документа
ТабДок.Защита = Ложь;
ТабДок.ТолькоПросмотр = Ложь;

// Или открыть только одну ячейку, оставив защиту остальных
Область = ТабДок.Область("R5C3");
Область.Защита = Ложь;

Обратите внимание на ТолькоПросмотр. Это отдельный флаг: он запрещает правку всего документа, даже если защита снята. Проверяйте оба.

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

Права в 1С проверяются до того, как форма откроется. Поэтому, если права нет, никакие свойства формы поле не откроют.

Право на объект целиком

Если у роли нет права Изменение на справочник или документ, форма откроется только для просмотра. Проверка:

  1. Администрирование → Настройки пользователей и прав → Профили групп доступа — посмотрите, какие роли входят в профиль пользователя.
  2. В конфигураторе откройте роль: Общие → Роли, найдите объект в дереве прав и проверьте флажки Изменение, Интерактивное изменение (для документов и справочников ещё Добавление).

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

Право на отдельный реквизит

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

Права разных ролей пользователя складываются. Достаточно одной роли, где реквизит разрешён к редактированию, и поле откроется.

Ограничение на уровне записей

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

Права меняйте на группе пользователей или профиле, а не «выдавайте полные права, чтобы проверить и забыть». Временную роль администратора потом обязательно снимите.

Свойства формы и элемента, которые запирают поле

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

СвойствоГдеКак выглядит у пользователя
ТолькоПросмотр формыСвойства самой формыВся форма на чтение
ТолькоПросмотр элементаПоле, таблица, группаЗначение видно, но не меняется
Доступность элементаПоле, таблица, группаПоле серое, нельзя даже выделить
Условное оформление с Только просмотрСвойство формы УсловноеОформлениеЗакрыты отдельные строки или ячейки таблицы

Порядок проверки:

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

Если поле закрыто только в табличной части и только у некоторых строк — почти всегда виновато условное оформление или обработчик ПриАктивизацииСтроки. Начинайте с них.

Ещё одна причина — пользовательская настройка формы. Пользователь может скрыть поле через Ещё → Изменить форму, но сделать его «только для чтения» так нельзя. Если поле пропало, а не посерело, верните стандартные настройки там же.

Код модуля формы: где программист закрыл поле

Свойства в конфигураторе могут быть открыты, но код при открытии формы всё равно закроет поле. Так в типовых конфигурациях обычно и делают: блокируют реквизит по состоянию объекта — проведён, есть подчинённые документы, выбран определённый вид операции.

Что искать

Откройте модуль формы и найдите строки вида:

Элементы.Контрагент.ТолькоПросмотр = Истина;
Элементы.Товары.Доступность = Ложь;
ЭтотОбъект.ТолькоПросмотр = Истина;

Поиск по модулю — Ctrl+F, поиск по всей конфигурации — Правка → Глобальный поиск (Ctrl+Shift+F). Ищите по имени элемента и по словам ТолькоПросмотр, Доступность.

В каких обработчиках обычно стоит запрет

  • 🟢 ПриСозданииНаСервере — запрет ставится один раз при открытии формы;
  • 🟡 ПриЧтенииНаСервере — запрет зависит от данных объекта;
  • 🔵 обработчики ПриИзменении других полей — поле закрывается после выбора значения в соседнем;
  • 🟣 общие процедуры вида «УправлениеФормой» или «УстановитьДоступность» — в типовых конфигурациях логику доступности часто собирают в одну процедуру и вызывают из нескольких мест.

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

Как поменять без снятия с поддержки

В типовой конфигурации модуль не правят напрямую. Создайте расширение и в его модуле формы добавьте свой обработчик после типового:

&НаСервере
&После("ПриСозданииНаСервере")
Процедура Расш_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	Элементы.Контрагент.ТолькоПросмотр = Ложь;
КонецПроцедуры

Обработчик с аннотацией &После выполнится после типового и снимет запрет. Если типовая форма ставит запрет ещё и в ПриЧтенииНаСервере или при изменении полей, повторите то же в соответствующих обработчиках.

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

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

Когда кода много, а поиск ничего не дал, быстрее посмотреть, что происходит при открытии формы.

  1. Сделайте копию базы и работайте в ней. Отладка на рабочей базе мешает пользователям и останавливает выполнение кода.
  2. В конфигураторе поставьте точку останова (F9) в начале ПриСозданииНаСервере, ПриЧтенииНаСервере и ПриОткрытии формы.
  3. Запустите отладку: Отладка → Начать отладку (F5).
  4. В пользовательском режиме откройте объект. Выполнение остановится на точке.
  5. Идите по коду: F11 — шаг с заходом в процедуру, F10 — шаг через неё.
  6. Добавьте в табло выражение Элементы.Контрагент.ТолькоПросмотр (подставьте имя элемента). После строки, на которой значение сменится на Истина, вы и найдёте источник.

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

Перезапуск службы агента сервера оборвёт сеансы всех пользователей кластера. Делайте это вне рабочего времени или на тестовом сервере.

💡 Полезный приём: если запрет появляется не при открытии, а после действия пользователя, поставьте точку в обработчике ПриИзменении поля, которое меняли перед этим. Цепочка «выбрал вид операции → поле закрылось» находится так за минуту.

Запреты типовых конфигураций: что снимается без программиста

В БП 3.0, ЗУП 3.1, УТ 11 и других конфигурациях на БСП часть запретов — это не ошибка, а настройка. Их снимает администратор базы в пользовательском режиме.

Дата запрета изменения

Документы до даты запрета нельзя записать, даже если поле в форме открыто. Ошибка появляется при записи. Настройка находится в разделе Администрирование: откройте «Даты запрета изменения» (быстрее всего найти через поиск по разделу). Можно сдвинуть дату для всех пользователей или задать исключение одному.

После исправления верните дату обратно, иначе закрытый период снова станет доступен для правок.

Запрет редактирования ключевых реквизитов

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

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

Команду видит пользователь с правом на её выполнение. Обычно это роль администратора или ответственного за справочник.

Проведённые документы и подчинённые объекты

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

  1. Посмотрите связанные документы: Ещё → Структура подчиненности.
  2. Отмените проведение или удалите подчинённый документ.
  3. Исправьте поле и проведите документы заново в правильном порядке.

Отмена проведения в закрытом периоде меняет обороты и может потребовать перезакрытия месяца и уточнённой отчётности. Согласуйте это с главным бухгалтером.

Чек-лист перед тем, как звать программиста

Проверьте сами
Выполнено: 0 / 5

Если все пункты пройдены, а поле закрыто — запрет стоит в коде формы. Тогда нужен доступ к конфигуратору и отладчик.

Частые вопросы

Почему после снятия защиты в печатной форме мои правки пропали?
Форма печати показывает временную копию. При следующей печати документ формируется из макета заново. Чтобы правка сохранялась, меняйте макет печатной формы.
Можно ли снять защиту ячейки в отчёте, который сформирован в 1С?
Да, если отчёт выводится в табличный документ без флага «Только просмотр». Многие отчёты позволяют править результат прямо на экране. Правки не сохраняются в базе, но попадают в печать и в сохранённый файл.
Защита ячейки сохраняется при выгрузке в Excel?
Флаг защиты 1С относится к табличному документу 1С. После сохранения в другом формате проверьте файл в той программе, где будете его открывать: поведение зависит от формата и программы.
Почему поле открыто в конфигураторе, а у пользователя серое?
Свойство в конфигураторе — только стартовое значение. Код формы меняет его при открытии, а права роли проверяются отдельно. Ищите присваивание в модуле формы или в профиле пользователя.
Можно ли снять запрет, просто дав пользователю полные права?
Это поможет только против ограничений прав. Даты запрета, код формы и запрет редактирования реквизитов работают и для администратора. Полные права пользователю ради одного поля давать не стоит.