Разработка и Конфигурация · 10 мин
Как открыть форму только для чтения в 1С
Как открыть форму только для чтения в 1С 8.3: параметр ТолькоПросмотр, ОткрытьФорму, программные способы, права доступа и типичные ошибки разработчика.
Открытие формы в режиме «только чтение» — типовая задача при разработке и доработке конфигураций 1С. Она возникает, когда пользователю нужно показать данные документа, элемента справочника или записи регистра без возможности их изменить: например, при просмотре проведённых документов из журнала, при выводе информации из отчёта или при ограничении прав отдельных сотрудников.
В управляемом приложении 1С 8.3 для этого есть штатный механизм — свойство формы ТолькоПросмотр и одноимённый параметр при программном открытии. Дополнительно режим просмотра можно обеспечить настройкой прав доступа ролей, что работает уже на уровне платформы и не требует изменения кода.
Ниже разобраны основные способы: программное открытие формы с параметром, установка свойства внутри самой формы, ограничение через права и особенности работы с обычными формами. Для каждого варианта указаны условия применения и ограничения.
Что означает режим «только чтение» в 1С
Режим «только чтение» означает, что пользователь видит все данные объекта на форме, но не может изменить ни одно поле, а кнопки записи и проведения становятся недоступными. При этом форма остаётся полноценной: работают переходы по ссылкам, открытие связанных объектов, печать и формирование отчётов по объекту.
Важно понимать разницу между тремя уровнями ограничения. Свойство формы ТолькоПросмотр блокирует редактирование только в конкретной открытой форме. Права доступа роли запрещают изменение объекта на уровне платформы — в любой форме, через обмен данными и даже программно. Наконец, блокировка объекта в базе (например, дата запрета редактирования) влияет на всех пользователей сразу.
Открытие формы с параметром ТолькоПросмотр
Основной способ — передать параметр при вызове метода ОткрытьФорму(). Параметры передаются структурой, где ключ — имя параметра, а значение — нужное значение. Платформа автоматически распознаёт стандартный параметр ТолькоПросмотр и переводит форму в режим просмотра ещё до её отображения.
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Ключ", ОбъектСсылка);
ПараметрыФормы.Вставить("ТолькоПросмотр", Истина);
ОткрытьФорму("Документ.РеализацияТоваровУслуг.Форма.ФормаДокумента", ПараметрыФормы);
Тот же приём работает для справочников, планов счетов, записей регистров сведений и внешних обработок. Если форма открывается из списка по команде, параметр можно добавить в обработчике команды перед стандартным открытием.
ПараметрыФормы = Новый Структура("Ключ, ТолькоПросмотр", СсылкаНаОбъект, Истина);
ОткрытьФорму("Справочник.Номенклатура.Форма.ФормаЭлемента", ПараметрыФормы);Обратите внимание: параметр ТолькоПросмотр — стандартный, его не нужно объявлять в модуле формы. Платформа обрабатывает его сама, поэтому способ работает даже с типовыми формами, которые нельзя или нежелательно дорабатывать.
Установка свойства внутри модуля формы
Если логика просмотра определяется внутри самой формы — например, по состоянию документа или по роли пользователя — свойство устанавливают программно в обработчике ПриСозданииНаСервере или ПриОткрытии.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Объект.Проведен И Не ПравоДоступа("Изменение", Объект.Ссылка.Метаданные()) Тогда
ТолькоПросмотр = Истина;
КонецЕсли;
КонецПроцедуры
Свойство можно менять и в процессе работы формы: например, после определённого действия пользователя перевести форму в режим просмотра, установив ТолькоПросмотр = Истина. Обратный переход (ТолькоПросмотр = Ложь) тоже возможен, пока форма открыта.
Ограничение редактирования через права доступа
Когда режим «только чтение» должен действовать постоянно для группы пользователей, правильнее настроить роли, а не дорабатывать формы. В конфигураторе у роли для нужного объекта снимают права «Добавление», «Изменение» и «Удаление», оставляя «Чтение» и «Просмотр». Пользователь сможет открыть любую форму объекта, но платформа не даст записать изменения.
Преимущество подхода — надёжность: ограничение работает везде, включая обмены, веб-сервисы и программную запись из внешних обработок. Недостаток — меньшая гибкость: роль действует на весь вид объектов, а не на отдельные документы. Для выборочных ограничений (например, запрет изменения только проведённых документов) применяют RLS-записи, подписки на события или проверки в обработчиках записи.
Сравнение вариантов
Подходит для разового открытия формы в режиме просмотра из кода. Не защищает данные — тот же объект можно открыть на редактирование из списка.
Подходит, когда решение зависит от состояния объекта. Требует доработки формы, что усложняет обновление типовой конфигурации.
Подходит для постоянных ограничений групп пользователей. Действует на уровне платформы, но не различает отдельные экземпляры объектов.
Открытие из списка и из отчёта
Двойной щелчок по списку
Чтобы из динамического списка объект всегда открывался на просмотр, используют событие Выбор таблицы формы. В обработчике отменяют стандартную обработку и открывают форму с параметром ТолькоПросмотр.
&НаКлиенте
Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Ключ", Элемент.ТекущиеДанные.Ссылка);
ПараметрыФормы.Вставить("ТолькоПросмотр", Истина);
ОткрытьФорму("Документ.РеализацияТоваровУслуг.Форма.ФормаДокумента", ПараметрыФормы);
КонецПроцедуры
Расшифровка отчёта
При расшифровке отчёта на СКД платформа по умолчанию открывает объект стандартно. Чтобы открыть его на просмотр, в обработчике ОбработкаРасшифровки отменяют стандартное действие и вызывают ОткрытьФорму с параметром ТолькоПросмотр, получив ссылку из данных расшифровки.
- 1Определите, откуда открывается форма: код, список, отчёт или права пользователя
- 2Для разового открытия добавьте параметр ТолькоПросмотр=Истина в структуру параметров ОткрытьФорму
- 3Для постоянного ограничения настройте права роли: оставьте Чтение и Просмотр, снимите Изменение
- 4Откройте форму и проверьте, что поля недоступны, а кнопки записи отключены
- 5Проверьте, что объект при необходимости всё ещё открывается на редактирование из других мест
Обычные формы и тонкие места
В обычном приложении (режим, актуальный для старых конфигураций) подход другой: у обычной формы нет параметра ТолькоПросмотр при открытии. Там режим задают через свойство ТолькоПросмотр самой формы в обработчике ПриОткрытии либо блокируют элементы по отдельности через Доступность.
Отдельный нюанс управляемых форм: параметр ТолькоПросмотр не мешает программной записи объекта. Если в модуле формы есть кнопки, которые записывают объект кодом, они могут сработать и в режиме просмотра. В типовых формах это учтено, но в самописных стоит проверить обработчики команд.
Проверка результата и типичные ошибки
После настройки откройте форму под целевым пользователем и проверьте три вещи: поля не редактируются, кнопки «Записать» и «Провести» недоступны, объект при этом нормально отображается без ошибок обращения к данным. Затем убедитесь, что из других точек системы объект открывается в нужном режиме — на просмотр или на редактирование, в зависимости от задумки.
Как проверить результат
Поля видны, но недоступны для ввода
Поля редактируются — параметр не передан или переопределён в коде формы
Кнопки «Записать» и «Провести» неактивны
Кнопки активны — проверьте обработчики команд с программной записью
Из списка объект открывается в задуманном режиме
По двойному щелчку открывается на редактирование — не настроен обработчик Выбор
Что важно запомнить
Для разового просмотра передавайте ТолькоПросмотр=Истина в ОткрытьФорму, для логики внутри формы используйте одноимённое свойство, а постоянные ограничения реализуйте правами ролей. Режим просмотра формы не заменяет защиту данных на уровне прав доступа.
Частые вопросы
Можно ли открыть форму списка только для чтения?
Да, параметр ТолькоПросмотр работает и для форм списков: команды создания, изменения и удаления станут недоступны. Однако пользователь всё равно сможет открыть отдельный объект, если у него есть права, поэтому при необходимости ограничивайте и формы объектов.
Почему параметр ТолькоПросмотр игнорируется?
Чаще всего причина в опечатке имени параметра или в том, что форма открывается не через ОткрытьФорму, а другим способом (например, стандартной командой интерфейса). Проверьте имя ключа структуры и точку вызова. Также убедитесь, что в модуле формы свойство не сбрасывается обратно в Ложь.
Как запретить редактирование только проведённых документов?
Установите ТолькоПросмотр = Истина в обработчике ПриСозданииНаСервере при условии Объект.Проведен. Для надёжной защиты добавьте подписку на событие записи или дату запрета изменения данных, чтобы запрет действовал и при программной записи.
Заблокирует ли ТолькоПросмотр программную запись объекта?
Нет. Свойство влияет только на интерактивное редактирование через форму. Команды с вызовом Записать() в коде, внешние обработки и обмены данными могут изменить объект. Для полноценного запрета используйте права ролей или проверки в подписках на события.
Как заблокировать не всю форму, а только несколько полей?
Используйте свойство Доступность конкретных элементов формы или группы, в которую они собраны: Элементы.ГруппаДанные.Доступность = Ложь. Свойство ТолькоПросмотр всегда действует на форму целиком.
Работает ли способ в файловой и клиент-серверной базе одинаково?
Да, механизм ТолькоПросмотр — часть платформы и не зависит от варианта развёртывания. Различия возможны только в производительности открытия форм, но не в поведении режима просмотра.