Как сделать видимой и доступной кнопку «Открыть» в поле табличной части со свойством «Только просмотр»?

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

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

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

Решение 1. Имитация режима «Только просмотр» через свойства поля

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

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

Шаг 1. Настройка свойств элемента в конфигураторе

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

  1. ТолькоПросмотр — устанавливаем в значение Ложь (это ключевое условие, чтобы кнопка открытия не исчезла с экрана).
  2. РедактированиеТекста — устанавливаем в значение Ложь. Это действие полностью заблокирует возможность ручного ввода букв или цифр в ячейку.
  3. КнопкаВыбора — выбираем значение Нет. Этим мы убираем кнопку с многоточием, исключая стандартный выбор из справочника.
  4. КнопкаОчистки — устанавливаем в Нет, чтобы у пользователя не появлялся крестик для удаления значения.
  5. КнопкаСоздания — устанавливаем в Нет (блокирует быстрое создание новых элементов из этого поля).
  6. БыстрыйВыбор — устанавливаем в Ложь.
  7. КнопкаОткрытия — принудительно устанавливаем в значение Да (вместо значения по умолчанию Авто). Это гарантирует стабильное отображение лупы.

Шаг 2. Программное перекрытие «лазеек» для изменения данных

Если мы ограничимся только настройками свойств в конфигураторе, у пользователя все равно останется возможность изменить данные обходными путями. Например, установив фокус на ячейку, он может нажать клавишу F4 (вызов формы выбора), Backspace или Delete (очистка значения), а также начать автоподбор. Чтобы полностью исключить эту возможность, напишем три простых обработчика событий для нашего поля ввода.

Создадим обработчики событий для элемента формы и пропишем в них отмену стандартной обработки:


&НаКлиенте
Процедура ТЧТоварыНоменклатураНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    // Блокируем вызов диалога выбора (в том числе по горячей клавише F4)
    СтандартнаяОбработка = Ложь;
КонецПроцедуры

&НаКлиенте
Процедура ТЧТоварыНоменклатураОчистка(Элемент, СтандартнаяОбработка)
    // Запрещаем очистку поля кнопками Backspace или Delete
    СтандартнаяОбработка = Ложь;
КонецПроцедуры

&НаКлиенте
Процедура ТЧТоварыНоменклатураАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка)
    // Отключаем попытки платформы подобрать значение при вводе с клавиатуры
    СтандартнаяОбработка = Ложь;
КонецПроцедуры

Благодаря этой несложной комбинации поле визуально выглядит доступным, кнопка «Открыть» активна и выполняет свою функцию, но интерактивно отредактировать ячейку становится абсолютно невозможно. Для быстрой проверки и настройки свойств элементов открытой формы в пользовательском режиме можно использовать обработку для редактирования свойств элементов формы.

Решение 2. Использование события «Выбор» таблицы (Двойной клик)

Бывают ситуации, когда первый метод применить невозможно. Например, если вся форма документа или сама табличная часть жестко переведены платформой в режим «Только просмотр» (из-за закрытого периода, отсутствия прав доступа или установленного свойства ТолькоПросмотр = Истина для всей таблицы). В этом случае все кнопки внутри полей ввода будут скрыты независимо от индивидуальных настроек элементов.

В такой ситуации отличным решением является обработка двойного клика мыши (или нажатия клавиши Enter) на ячейке табличной части.

Для реализации этого подхода выделим в конфигураторе саму Таблицу (а не отдельную колонку) и создадим для нее обработчик события Выбор:


&НаКлиенте
Процедура ТоварыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
    
    // Проверяем, что пользователь совершил выбор именно в интересующей нас колонке
    Если Поле.Имя = "ТоварыНоменклатура" Тогда
        
        // Отменяем стандартный переход ячейки в режим редактирования
        СтандартнаяОбработка = Ложь;
        
        // Получаем данные текущей строки таблицы
        ТекущиеДанные = Элемент.ТекущиеДанные;
        
        Если ТекущиеДанные <> Неопределено Тогда
            СсылкаНаОбъект = ТекущиеДанные.Номенклатура;
            
            // Проверяем, что поле заполнено и содержит ссылку
            Если ЗначениеЗаполнено(СсылкаНаОбъект) Тогда
                // Открываем форму объекта для просмотра
                ПоказатьЗначение(, СсылкаНаОбъект);
            КонецЕсли;
        КонецЕсли;
        
    КонецЕсли;
    
КонецПроцедуры

Преимущество метода: Он работает безотказно при абсолютно любых режимах блокировки формы или таблицы.

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

Решение 3. Оформление ячейки в виде гиперссылки

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

Разберем по шагам, как это настроить:

  1. Откроем форму в конфигураторе и выберем колонку табличной части.
  2. В палитре свойств найдем параметр ГиперссылкаЯчейки и установим его в значение Истина. Теперь текст внутри ячейки окрасится в синий цвет и станет подчеркнутым при наведении курсора мыши.
  3. Само по себе включение этого свойства в табличной части не открывает форму объекта автоматически. Нам обязательно нужно связать его с кодом. Для этого мы используем обработчик события Выбор для таблицы, который мы подробно разобрали в Решении 2.

В результате пользователь увидит привычное оформление ссылки, и при клике по ней платформа сразу откроет карточку соответствующего элемента справочника или документа.

Важное замечание для платформы версии 8.5 и выше

Если вы работаете на современных версиях платформы 1С:Предприятие (начиная с версии 8.5), то данная методологическая сложность была устранена разработчиками самой фирмы «1С». В новом интерфейсе управляемых форм кнопка открытия в колонках табличных частей была концептуально вынесена за пределы поля ввода.

Благодаря этому изменению, если для колонки установлено ограничение ТолькоПросмотр = Истина, кнопка с лупой теперь остается видимой, активной и доступной для нажатия по умолчанию, не требуя от программиста написания дополнительного программного кода или изменения настроек кнопок выбора.

Резюме

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

← На главную