Как получить значение выделенной ячейки в таблице значений в 1С 7.7 при двойном клике?

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

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

Базовый метод получения значения

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

Рассмотрим пример кода, который обычно размещается в процедуре-обработчике:


Процедура ОбработкаВыбораЯчейки()
    // Получаем текущие координаты курсора в таблице
    НомерСтроки = Тз.ТекущаяСтрока();
    ИдентификаторКолонки = Тз.ТекущаяКолонка();
    
    // Считываем значение из ячейки в переменную
    ВыбранноеЗначение = Тз.ПолучитьЗначение(НомерСтроки, ИдентификаторКолонки);
    
    // Для примера выведем результат в окно сообщений
    Сообщить("Вы выбрали: " + ВыбранноеЗначение);
КонецПроцедуры

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

Связывание кода с интерфейсом (свойство «Формула»)

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

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

  1. Откроем форму в Конфигураторе, на которой расположена таблица.
  2. Щелкнем правой кнопкой мыши по элементу «ТаблицаЗначений» и выберем «Свойства».
  3. Перейдем на закладку «Общие».
  4. Найдем поле «Формула».
  5. Впишем туда название нашей процедуры: ОбработкаВыбораЯчейки().

Теперь при каждом двойном клике по строке таблицы или при нажатии клавиши Enter, система будет автоматически обращаться к этой процедуре. Важно помнить, что если в таблице включено редактирование, первый клик может активировать режим ввода текста, поэтому для быстрого «выбора» данных часто используют дополнительные настройки.

Оптимизация работы: режим «Только чтение»

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

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

Обработка исключительных ситуаций и пустых таблиц

Хорошим тоном в программировании на 1С 7.7 считается предварительная проверка состояния объекта перед вызовом методов получения данных. Если таблица пуста, метод ТекущаяСтрока() вернет значение 0. Попытка передать ноль в метод ПолучитьЗначение() вызовет ошибку времени выполнения (Runtime Error).

Посмотрим на пример безопасного извлечения данных:


Процедура ОбработкаЯчейкиТЗ()
    // Проверяем, что в таблице есть строки и строка выбрана
    Если Тз.КоличествоСтрок() = 0 Тогда
        Возврат;
    КонецЕсли;
    
    Если Тз.ТекущаяСтрока() > 0 Тогда
        Значение = Тз.ПолучитьЗначение(Тз.ТекущаяСтрока(), Тз.ТекущаяКолонка());
        // Дальнейшая логика обработки значения
    КонецЕсли;
КонецПроцедуры

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

Типизация данных при получении значения

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

Рассмотрим разницу:


// Получаем объект (например, документ или элемент справочника)
ОбъектСсылка = Тз.ПолучитьЗначение(Тз.ТекущаяСтрока(), "Клиент");

// Получаем строковое представление для вывода в отчет или лог
ТекстЯчейки = СокрЛП(Тз.ПолучитьЗначение(Тз.ТекущаяСтрока(), "Клиент"));

Альтернативный способ: Метод ВыбратьСтроку()

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

Этот метод открывает модальное окно с содержимым таблицы. Если пользователь дважды кликает по строке, метод возвращает 1 (истина) и передает номер выбранной строки в переменную-параметр.


НомСтр = 0;
Если Тз.ВыбратьСтроку(НомСтр, "Выберите позицию из списка") = 1 Тогда
    // Пользователь сделал выбор
    ВыбранныйОбъект = Тз.ПолучитьЗначение(НомСтр, "Товар");
КонецЕсли;

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

Расширение возможностей с помощью внешних компонент

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

Подводя итог, мы проанализировали основной механизм взаимодействия с таблицей значений. Главное — помнить о связке программного кода и поля «Формула» в конфигураторе, а также всегда проверять корректность текущего индекса строки перед обращением к данным.

← На главную