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

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

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

Решение 1: Поиск по всей строке при выборе ячейки

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

Рассмотрим, как это реализовать:


НачальныйСтолбец = 1;
КонечныйСтолбец = 50; // Диапазон поиска
ЗначениеРасшифровки = Неопределено;

Для Сч = НачальныйСтолбец По КонечныйСтолбец Цикл
    ТекОбласть = ПолеТаблДок.Область(Область.Верх, Сч);
    Если ТипЗнч(ТекОбласть.Расшифровка) = Тип("СправочникСсылка.Номенклатура") Тогда
        ЗначениеРасшифровки = ТекОбласть.Расшифровка;
        Прервать;
    КонецЕсли;
КонецЦикла;

Этот способ позволяет найти номенклатуру, даже если пользователь нажал на ячейку «Цена» или «Количество», при условии, что в ячейках «Номенклатура» в этой же строке была установлена соответствующая расшифровка.

Решение 2: Использование параметра расшифровки при выводе

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

При выводе макета в цикл заполнения, выполните следующие действия:

  1. Создайте в макете параметр, например, РасшифровкаСтрока.
  2. При заполнении области текущими данными присвойте этот параметр.
  3. Установите его значение равным объекту, который вы хотите передавать при клике (в нашем случае — номенклатуре).

Пример кода для вывода строк:


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

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

Решение 3: Работа с системой компоновки данных (СКД)

Если ваш отчет построен на СКД, задача упрощается. Вам не нужно писать сложные циклы или вручную заполнять параметры в цикле вывода. Рассмотрим шаги для настройки:

  1. Перейдите на страницу Макеты в схеме компоновки данных.
  2. Добавьте макет для нужной области (группировки или детальных записей).
  3. В свойствах ячеек, где необходимо обеспечить расшифровку, укажите поле Номенклатура в качестве ПараметрРасшифровки.
  4. Система автоматически обработает клики пользователя, привязывая расшифровку к указанному полю вне зависимости от его положения в конечном отчете.

Рекомендации по реализации

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

Выбирайте способ в зависимости от сложности вашего отчета. Для простых печатных форм отлично подходит принудительная установка параметра расшифровки (Решение 2), для отчетов на СКД — настройки в макетах (Решение 3).

← На главную