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


Что можно улучшить в данном варианте?
Ну, во первых — сделать фильтр видимости колонок. Во-вторых, сделать отборы по видам событий, пользователям, дате и т.д.
А что нам в этом поможет? Верно — загрузить нашу таблицу как Набор данных Объект в схему компоновки данных. Но это, как говорится, совсем другая история!
Следите за обновлениями статьи, оставляйте голоса и комментарии! Спасибо!





Я так понимаю что пока от ничем не отличается по функционалу?
(1) Pavean, Пока что да, за исключением того, что БСП не используется:)