Немного про СКД
Система Компоновки Данных (далее СКД) это достаточно мощное средство для визуализации данных без применения программирования. Она включает в себя множество инструментов, позволяющих относительно быстро сделать отчет на основе имеющихся данных. Благодаря этому его можно менять “на лету” или создавать несколько вариантов отчетов. Можно долго перечислять достоинства и возможности СКД, но сегодня не об этом. О них вы можете прочитать на сайте ИТС, где можно найти и документацию по работе в СКД. Если же у вас еще нет доступа к ресурсам ИТС и Вы хотите получать регулярные обновления программ 1С, вы можете обратиться к нам. Ознакомиться со списком наших услуг вы можете по ссылке – Цены на услуги обслуживания.
Суть задачи
Итак, “вернемся к нашим баранам”. Хотя СКД дает множество возможностей, в реальных задачах порой возникает необходимость программно дорабатывать отчет. Одна из таких задач, возникших при работе с СКД, и будет рассмотрена в этой статье. Задача заключается в том, чтобы при двойном нажатии на значение поля ресурса выводить формулу, по которой оно рассчитано. При этом, такой механизм должен распространяться только на поля ресурсов, остальные поля должны отрабатывать стандартный образом.
Решение задачи
Для начала необходимо создать форму отчета, в модуле которой мы и будем писать программный код. Для этого необходимо в дереве конфигурации развернуть нужный отчет. Далее выбираем пункт Формы и через правую кнопку мыши выбираем пункт Добавить. В появившемся окне нужно выбрать тип формы Форма отчета. На форме находим реквизит Результат, который представляет собой табличный документ. В свойствах данного реквизита находим событие Обработка расшифровки и открываем его (значок лупы, создаем на клиенте). Конфигуратор автоматически создаст стандартную функцию РезультатОбработкаРасшифровки().
Итак, у нас есть процедура на клиенте по обработке результата. Для начала нам необходимо понять, на какое именно поля нажал пользователь. У нас для этого есть Расшифровка. Но в данной переменной хранится лишь информация о расшифровки поля, а нам необходимо получить само поля. Для этого создадим на Сервере функцию, которая будет возвращать поле по данным расшифровки.
&НаСервере
Функция ПолеРасшифровки(Расшифровка)
Возврат ПолучитьИзВременногоХранилища(ДанныеРасшифровки).Элементы[Расшифровка].ПолучитьПоля()[0].Поле;
КонецФункции
Далее перейдем к самой процедуре демонстрации формулы при нажатии на поле. Назовем ее ПоказатьФормулу(). Она будет принимать значение расшифровки. Для начала, получаем с помощью описанной выше функции выбранное поле. Затем составляем структуру, каждый элемент которой это пара – название поля и описание формулы. После составления структуры необходимо вывести сообщение пользователя. Было решено это сделать с помощью ПоказатьПредупреждение(). Таким образом, процедура будет выглядеть следующим образом:
&НаКлиенте
Процедура ПоказатьФормулу(Расшифровка)
ВыбранноеПоле = ПолеРасшифровки(Расшифровка);
ОписаниеФормулПолей = Новый Структура();
ОписаниеФормулПолей.Вставить("Поле1", "Ваше описание формулы Поля1");
ОписаниеФормулПолей.Вставить("Поле2", "Ваше описание формулы Поля2");
ПоказатьПредупреждение(, ОписаниеФормулПолей[ВыбранноеПоле],,"Тут можно указать название окна сообщения");
КонецПроцедуры
Теперь необходимо в процедуре РезультатОбработкаРасшифровки прописать условие, при выборе каких полей будет показываться формула. Это нужно для того, чтобы для других полей оставить стандартный механизм работы расшифровки. Если Вам это не нужно, то условие можно не прописывать.
&НаКлиенте
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка, ДополнительныеПараметры)
ВыбранноеПоле = ПолеРасшифровки(Расшифровка);
Если ВыбранноеПоле = "Поле1"
ИЛИ ВыбранноеПоле = "Поле2" Тогда
СтандартнаяОбработка = Ложь;
ПоказатьФормулу(Расшифровка);
Иначе
СтандартнаяОбработка = Истина;
КонецЕсли;
КонецПроцедуры
Заключение
Приведенный пример решения задачи очень прост, но в этом и есть его преимущество. Решения подобных задач на просторах интернета порой просто банально не работают или не понятны для новичка. Данная статья как раз таки создавалась для тех, кто только начинает свой путь программиста 1С.
Возможно, Вам пригодится: “Лишняя иерархия” в СКД | Собственные шаблоны текста в редакторе кода.