Как настроить частичную защиту областей в макете и табличном документе 1С?

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

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

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

Фундаментальное правило: взаимодействие свойств

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

  1. Защита (на уровне табличного документа): Это основной флаг. Если ТабДок.Защита = Ложь, то пользователь может редактировать любую ячейку, даже если в ее свойствах стоит галочка «Защита». Для активации механизма ограничений мы обязательно должны установить этот параметр в значение Истина.
  2. ТолькоПросмотр: Это свойство часто путают с защитой. Если установить ТабДок.ТолькоПросмотр = Истина, документ превращается в «картинку». Пользователь не сможет даже активировать курсор в ячейке, не говоря уже о редактировании. Поэтому для реализации частичного ввода мы должны убедиться, что ТолькоПросмотр = Ложь.
  3. Защита (на уровне конкретной ячейки или области): Когда общий флаг Защита включен, система начинает проверять это свойство у каждой ячейки. Те ячейки, где стоит Защита = Истина, будут заблокированы. Где Защита = Ложь — доступны для ввода.

Реализация защиты через макет (интерактивно)

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

Разберем по шагам:

  1. Выделим все ячейки макета (Ctrl+A), откроем палитру свойств и убедимся, что на вкладке «Защита» установлен флажок Защита. По умолчанию в 1С он обычно включен для всех новых ячеек.
  2. Теперь выделим область, которую пользователю нужно редактировать (например, область подписей). В свойствах этой области снимем флажок Защита.
  3. Чтобы проверить работу в режиме 1С:Предприятие, не забудьте, что программный вывод макета может переопределять эти настройки. Если вы просто выводите макет в отчет, убедитесь, что в коде формирования документа устанавливается общая защита.

Программная настройка защиты в коде

Часто структура документа формируется динамически, и нам нужно управлять защитой из встроенного языка. Выясним, в какой последовательности лучше всего применять настройки, чтобы избежать ошибок.

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


// Сначала формируем документ обычным способом
ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("Макет");

// Выводим основные области
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ТабДок.Вывести(ОбластьШапка);

// Выводим область, которую нужно будет редактировать
ОбластьПодписи = Макет.ПолучитьОбласть("Подписи");
// Важно: снимаем защиту с конкретной области перед или после вывода
ОбластьПодписи.Область().Защита = Ложь; 
ТабДок.Вывести(ОбластьПодписи);

// В самом конце настраиваем общие свойства документа
ТабДок.ТолькоПросмотр = Ложь; // Разрешаем выделение и активацию ячеек
ТабДок.Защита = Истина;        // Включаем механизм защиты по флажкам ячеек

Обратите внимание: если вы устанавливаете защиту до того, как вывели области в итоговый документ, настройки могут «слететь», так как метод Вывести() копирует свойства из макета. Рекомендуется выполнять финальную настройку защиты уже после того, как весь ТабличныйДокумент сформирован.

Особенности работы на формах (управляемых и обычных)

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

Проанализируем свойства элемента формы:

Дополнительные возможности защиты

Когда мы устанавливаем ТабДок.Защита = Истина, нам открываются дополнительные инструменты управления пользовательским интерфейсом, о которых часто забывают:

Запрет выделения защищенных ячеек. Мы можем сделать так, чтобы курсор пользователя даже не вставал на защищенные ячейки, а «прыгал» только по разрешенным полям. Для этого используется свойство СпособВыбора. Рассмотрим пример:


// Устанавливаем режим, при котором нельзя выбирать защищенные ячейки
ТабДок.СпособВыбора = СпособВыбораЯчеекТабличногоДокумента.Незащищенные;

Скрытие формул и содержимого. Если в ячейках содержатся промежуточные расчеты, которые не должен видеть пользователь, в свойствах ячейки макета (или через код Область.СкрыватьСодержимое = Истина) можно включить режим скрытия. При включенной общей защите документа содержимое таких ячеек не будет отображаться в строке редактирования.

Типичные ошибки и способы их исправления

Разберем, почему может возникнуть ситуация «сделала, теперь вообще ничего не дает менять»:

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

← На главную