Добрый день, уважаемые читатели!
Однажды меня окончательно замучало лазить в журнал регистрации и каждый раз его настраивать, чтобы посмотреть лог изменения документа или справочника.
Как известно, лень - двигатель прогресса. Вот и мне стало лень клацать лишние кнопки, и я решил немного упростить себе жизнь.
Итак - задача. Из любого документа или справочника сделать возможным открытие журнала регистрации по текущему выбранному элементу.
В данной небольшой статье я опишу простейший способ реализации - через вывод таблицы значений.
Статья будет дополняться по мере доработки механизма. Основной функционал мы рассмотрим ниже, а красивости и фишки будем добавлять по ходу.
Итак, определим, что же нам понадобится.
В рассматриваемом варианте реализации (а я прекрасно понимаю, что одну и ту же задачу можно решить кучей способов) нам понадобится
Общая команда "ЖурналРегистрацииПоОбъекту";
Группа команд "ЖурналРегистрации";
Отчет "Журнал регистрации по объекту".
Общую команду размещаем в нашей группе команд (можно обойтись без группы, но лично мне так удобее в дальнейшем добавлять/удалять команды), и указываем режим использования параметра - "Одиночный"
Обязательно указываем типы параметра команды - нужно отметить флажками все справочники и все документы. А также можно добавить и другие метаданные, если вдруг мы захотим. Например, планы видов характеристик.
В модуле команды пишем
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
ОткрытьФорму("Отчет.ЖурналРегистрацииПоОбъекту.ФормаОбъекта",Новый Структура("ПараметрОбъект", ПараметрКоманды));
КонецПроцедуры
В отчете создаем форму отчета. В форме создаем пустой реквизит с типом "Таблица значений" и добавляем его на форму.
В модуле формы пишем
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Перем ПараметрКоманды;
ПараметрКоманды = Параметры.ПараметрОбъект;
ТЗ_рез = РеквизитФормыВЗначение("ТаблицаЖурналаРегистрации");
ВыгрузитьЖурналРегистрации(ТЗ_рез,Новый Структура("Данные", ПараметрКоманды),,,10000);
Для Каждого СтрокаТЗ Из ТЗ_рез Цикл
СтрокаТЗ.Уровень = Строка(СтрокаТЗ.Уровень);
СтрокаТЗ.СтатусТранзакции = Строка(СтрокаТЗ.СтатусТранзакции);
КонецЦикла;
МассивРеквизитов = Новый Массив;
Для Каждого Колонка ИЗ ТЗ_рез.Колонки Цикл
НоваяКолонка = Новый РеквизитФормы(Колонка.Имя, Колонка.ТипЗначения, "ТаблицаЖурналаРегистрации");
МассивРеквизитов.Добавить(НоваяКолонка);
КонецЦикла;
ИзменитьРеквизиты(МассивРеквизитов);
ЗначениеВРеквизитФормы(ТЗ_рез, "ТаблицаЖурналаРегистрации");
//Создаем элементы на форме для отображения колонок
ЭлементТЗ = Элементы["ТаблицаЖурналаРегистрации"];
Для Каждого Колонка ИЗ ТЗ_рез.Колонки Цикл
НовыйЭлементФормы = Элементы.Добавить("ТаблицаЖурналаРегистрации"+Колонка.Имя, Тип("ПолеФормы"), ЭлементТЗ);
НовыйЭлементФормы.Вид = ВидПоляФормы.ПолеВвода;
НовыйЭлементФормы.ПутьКДанным = "ТаблицаЖурналаРегистрации" + "." + Колонка.Имя;
КонецЦикла;
КонецПроцедуры
Вот и все. Простейший вариант открытия журнала регистрации по конкретному объекту готов.
Небольшое замечание. На клиенте недоступны типы УровеньЖурналаРегистрации и СтатусТранзакцииЗаписиЖурналаРегистрации, поэтому преобразуем их в строку.
Что можно улучшить в данном варианте?
Ну, во первых - сделать фильтр видимости колонок. Во-вторых, сделать отборы по видам событий, пользователям, дате и т.д.
А что нам в этом поможет? Верно - загрузить нашу таблицу как Набор данных Объект в схему компоновки данных. Но это, как говорится, совсем другая история!
Следите за обновлениями статьи, оставляйте голоса и комментарии! Спасибо!