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

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

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

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

Способ 1. Тонкая настройка свойств поля (без кода)

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

Проанализируем необходимые настройки для элемента формы (поля ввода в колонке ТЧ или в рамках доработки динамического списка):

  1. Установите свойство ТолькоПросмотр в значение Ложь. Это критически важно для того, чтобы кнопки внутри поля оставались активными.
  2. Установите РедактированиеТекста в значение Ложь. Теперь пользователь не сможет вводить данные с клавиатуры.
  3. Свойства КнопкаВыбора, КнопкаСоздания и КнопкаВыпадающегоСписка переключите в значение Нет. Это уберет лишние интерактивные элементы.
  4. Свойство КнопкаОткрытия установите в значение Да.
  5. Для свойства ИсторияВыбораПриВводе выберите Не использовать.
  6. Дополнительно можно установить БыстрыйВыбор в значение Нет.

Результат: Поле выглядит как обычное, но при попытке ввода ничего не происходит, а единственная доступная кнопка — это «лупа», которая открывает форму объекта. Это решение работает на уровне платформенных механизмов и не требует написания ни одной строчки кода.

Способ 2. Использование режима гиперссылки

Рассмотрим альтернативный вариант, который становится все более популярным в современных интерфейсах «Такси». Вместо классической кнопки открытия мы можем превратить само значение в ячейке в кликабельную ссылку.

Для реализации этого метода выполните следующие шаги:

  1. Установите для поля в колонке свойство ТолькоПросмотр в значение Истина.
  2. Установите свойство Гиперссылка в значение Истина.

В этом случае текст в ячейке окрасится в синий цвет и станет подчеркнутым при наведении. При нажатии на текст платформа автоматически откроет форму объекта.

Способ 3. Программная обработка события «Выбор»

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

Разберем пример кода, который позволит открывать значение даже в заблокированной колонке:


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

КонецПроцедуры

Важный нюанс: если колонка имеет признак ТолькоПросмотр, событие Выбор (двойной клик или нажатие Enter) все равно будет отрабатывать, что позволяет нам перехватить действие пользователя и программно вызвать открытие формы через ПоказатьЗначение.

Способ 4. Универсальная процедура для настройки множества колонок

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

Этот код проходит по элементам табличной части и устанавливает режим «псевдо-ридонли», сохраняя кнопку открытия:


// Элементы - элементы формы; 
// ИмяТаблицы - строка, имя ТЧ; 
// ТолькоПросмотр - булево
Процедура НастроитьПросмотрКолонок(Элементы, ИмяТаблицы, ТолькоПросмотр) Экспорт
    
    ТаблицаФормы = Элементы[ИмяТаблицы];
    Для Каждого ЭлементТЧ Из ТаблицаФормы.ПодчиненныеЭлементы Цикл
        
        // Работаем только с полями ввода
        Если ТипЗнч(ЭлементТЧ) = Тип("ПолеФормы") И ЭлементТЧ.Вид = ВидПоляФормы.ПолеВвода Тогда
            
            Если ТолькоПросмотр Тогда
                ЭлементТЧ.КнопкаВыбора = Ложь;
                ЭлементТЧ.КнопкаВыпадающегоСписка = Ложь;
                ЭлементТЧ.КнопкаОчистки = Ложь;
                ЭлементТЧ.КнопкаСоздания = Ложь;
                ЭлементТЧ.КнопкаОткрытия = Истина;
                ЭлементТЧ.РедактированиеТекста = Ложь;
                ЭлементТЧ.ИсторияВыбораПриВводе = ИсторияВыбораПриВводе.НеИспользовать;
            Иначе
                // Возвращаем стандартные настройки, если нужно
                ЭлементТЧ.РедактированиеТекста = Истина;
                // ... донастроить по необходимости
            КонецЕсли;
            
        КонецЕсли;
    КонецЦикла;
    
КонецПроцедуры

Почему стандартная кнопка может не появляться?

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

Подводя итог, проанализируем ситуацию: наиболее современным и рекомендуемым способом является использование свойства Гиперссылка вместе с ТолькоПросмотр. Это соответствует гайдлайнам интерфейса 1С и интуитивно понятно пользователям. Однако, если требуется сохранить классический вид с «лупой», используйте комбинацию из Способа 1.

← На главную