При работе с табличными документами в 1С часто возникает задача: пользователь кликает на любую ячейку в строке отчета, и нам необходимо получить конкретное значение (например, номенклатуру), которое находится в этой же строке, но в другом столбце. Стандартное поведение расшифровки часто ограничивается только той ячейкой, на которую нажали. Разберем, как сделать этот процесс гибким и независимым от порядка следования колонок.
Если вы не хотите менять структуру вывода отчета, можно реализовать алгоритм поиска нужного значения программно в событии ОбработкаРасшифровки или Выбор. Суть метода заключается в том, чтобы при клике перебрать все ячейки текущей строки и найти ту, в которой заполнена расшифровка нужного нам типа.
Рассмотрим, как это реализовать:
НачальныйСтолбец = 1;
КонечныйСтолбец = 50; // Диапазон поиска
ЗначениеРасшифровки = Неопределено;
Для Сч = НачальныйСтолбец По КонечныйСтолбец Цикл
ТекОбласть = ПолеТаблДок.Область(Область.Верх, Сч);
Если ТипЗнч(ТекОбласть.Расшифровка) = Тип("СправочникСсылка.Номенклатура") Тогда
ЗначениеРасшифровки = ТекОбласть.Расшифровка;
Прервать;
КонецЕсли;
КонецЦикла;
Этот способ позволяет найти номенклатуру, даже если пользователь нажал на ячейку «Цена» или «Количество», при условии, что в ячейках «Номенклатура» в этой же строке была установлена соответствующая расшифровка.
Более профессиональный и надежный подход — установить расшифровку для всей строки еще на этапе формирования табличного документа. Вместо того чтобы полагаться на случайное расположение столбцов, мы принудительно назначаем расшифровку для всех ячеек в рамках одной строки.
При выводе макета в цикл заполнения, выполните следующие действия:
РасшифровкаСтрока.Пример кода для вывода строк:
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетальныеЗаписи);
// Назначаем расшифровку для всех ячеек, использующих этот параметр
ОбластьДетальныхЗаписей.Параметры.РасшифровкаСтрока = ВыборкаДетальныеЗаписи.Номенклатура;
ТабДок.Вывести(ОбластьДетальныхЗаписей);
КонецЦикла;
При таком подходе неважно, в каком визуальном столбце находится номенклатура. Система будет использовать значение из параметра РасшифровкаСтрока для каждой ячейки этой строки.
Если ваш отчет построен на СКД, задача упрощается. Вам не нужно писать сложные циклы или вручную заполнять параметры в цикле вывода. Рассмотрим шаги для настройки:
Номенклатура в качестве ПараметрРасшифровки.Для того чтобы код был максимально чистым и поддерживаемым, придерживайтесь следующих правил:
Структуру и передавайте её в Расшифровка. Это позволит извлекать данные по ключу (например, Расшифровка.Номенклатура), что делает код обработки событий очень понятным.Выбирайте способ в зависимости от сложности вашего отчета. Для простых печатных форм отлично подходит принудительная установка параметра расшифровки (Решение 2), для отчетов на СКД — настройки в макетах (Решение 3).