Как отредактировать реквизит формы документа в 1С 7.7 при режиме ТолькоПросмотр

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

При работе с документами в платформе 1С 7.7 часто возникает необходимость оставить пользователю возможность менять отдельные произвольные текстовые поля (например, доп. информацию, время приемки или служебные примечания), даже если сам документ открыт в режиме просмотра. Разберем, почему штатные методы не срабатывают и какими способами можно решить эту задачу.

Выясним причину ограничения платформы

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

Рассмотрим несколько проверенных способов решения этой проблемы.

Способ 1. Использование кнопки или формулы с вызовом функции ВвестиСтроку

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

Разберем алгоритм реализации по шагам:

  1. Размещаем на форме текстовое поле (надпись) для отображения текущего значения реквизита.
  2. Рядом размещаем кнопку или прописываем в свойство «Формула» текстового поля вызов специальной процедуры.
  3. При нажатии на элемент запускается процедура, вызывающая метод ВвестиСтроку() или ВвестиЗначение().

Посмотрим на пример реализации кода в модуле формы документа:


Процедура РедактироватьДопИнфо()
    Перем ТекстЗначения;
    ТекстЗначения = ДопИнфо_ВремяПриемки;
    Если ВвестиСтроку(ТекстЗначения, "Укажите время приемки:", 50) = 1 Тогда
        ДопИнфо_ВремяПриемки = ТекстЗначения;
        Форма.Обновить();
    КонецЕсли;
КонецПроцедуры

Способ 2. Отмена общего режима просмотра и адресная блокировка реквизитов через FormEx

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

При открытии формы выполняется обход всех реквизитов, и для каждого элемента (кроме нужных текстовых полей и управляющих кнопок) свойство Доступность устанавливается в 0.

Рассмотрим пример кода с использованием объекта РасширениеФормы внешнекомпонентного модуля FormEx:


Перем РасшФормы;

Процедура ПослеОткрытия()
    Если Форма.ТолькоПросмотр() = 1 Тогда
        // Снимаем блокировку формы
        Форма.ТолькоПросмотр(0);
        
        РасшФормы = СоздатьОбъект("РасширениеФормы");
        РасшФормы.УстановитьФорму(Форма);
        
        // Блокируем доступность всех атрибутов формы по циклу
        Для Счетчик = 0 По (РасшФормы.КоличествоАтрибутов() - 1) Цикл
            РасшФормы.ПолучитьАтрибут(Счетчик).Доступность = 0;
        КонецЦикла;
        
        // Включаем доступность для нужного текстового реквизита и кнопок
        Форма.ДопИнфо_ВремяПриемки.Доступность(1);
        Форма.ДопИнфо_ВремяПриемки.Редактирование(1);
        
        Форма.кнЗакрыть.Доступность(1);
    КонецЕсли;
КонецПроцедуры

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

Способ 3. Использование ActiveX-элемента

Ещё один вариант обхода ограничений платформы — размещение на форме документа ActiveX-контрола (например, Microsoft Forms 2.0 TextBox). Поскольку ActiveX функционирует как самостоятельное окно Windows, внутренние ограничения 1С 7.7 и флаг ТолькоПросмотр на него не распространяются. Элемент остается доступным для клавиатурного ввода и редактирования текста в любом режиме работы формы.

← На главную