1) Воспользовался расширениями конфигурации
Создал расширение документа РТиУ с формой, которую необходимо контролировать
В модуле формы вставил такой код, добавляющий события в ЖР, при открытии формы:
Далее в расширении создаем отчет Расш1_ОтчетОДействияхПользователей, добавляем в расширение подсистему “Сервис” в которую включаем данный отчет. Для отчета создаем реквизиты ДатаНачала и ДатаКонца, добавляем форму, на форму выводим реквизиты отчета, кнопку Сформировать и реквизит формы СписокПользователей (тип – СписокЗначений).
СписокЗначений заполняем программно при открытии формы отчета.
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Отчет.ДатаКонца = ТекущаяДата();
Для Каждого Элемент Из ЗаполнитьСписокПользователейНаСервере() Цикл
СписокПользователей.Добавить(Элемент);
КонецЦикла;
КонецПроцедуры
&НаСервереБезконтекста
Функция ЗаполнитьСписокПользователейНаСервере()
МассивИмен = Новый Массив;
Для Каждого Элемент Из ПользователиИнформационнойБазы.ПолучитьПользователей() Цикл
МассивИмен.Добавить(Элемент.Имя);
КонецЦикла;
&НаСервере
Функция СформироватьНаСервере()
МассивПользователейДляОтчета = Новый Массив;
Для каждого Элемент Из СписокПользователей Цикл
Если Элемент.Пометка Тогда
МассивПользователейДляОтчета.Добавить(Элемент.Значение);
КонецЕсли;
КонецЦикла;
ДА,спасибо, конечно. там я неправильно фильтр указал.. как отправил отчет сразу заметил, но исправлять не стал – ну, главное принцип.. я сам недавно только расширения использую – вещь!
По первой задаче: Все переделал с расширениями я пока не работал… Сделал так как вы указали Все отлично работает.
Отчет по количеству открытий формы сделал внешним. Только немного поправил (дополнил) фильтр для метода ВыгрузитьЖурналРегистрации
Было:
ТзЖурналаРегистрации = Новый ТаблицаЗначений;
Фильтр = Новый Структура();
Фильтр .Вставить("ДатаНачала",ДатаНачала);
Фильтр .Вставить("ДатаОкончания",ДатаОкончания);
Фильтр .Вставить("Событие","Данные.Доступ1");
Стало:
ТзЖурналаРегистрации = Новый ТаблицаЗначений;
Фильтр = Новый Структура();
Фильтр .Вставить("ДатаНачала",ДатаНачала);
Фильтр .Вставить("ДатаОкончания",ДатаОкончания);
Фильтр .Вставить("Событие","Данные.Доступ");
Фильтр .Вставить("Комментарий","Открытие документа");
Добрый день,
1.1 Добавляем в “расширение” формы документов реализация, поступление.
1.2 В расширении регистрируем открытие формы документов в журнале регистрации. Так для документа Реализации:
Макет = Отчеты.ОтчетПоДоступуСотрудников.ПолучитьМакет("Макет");
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТаблицаЖр.ИмяПользователяЖР КАК ИмяПользователя,
| ТаблицаЖр.ДанныеЖР КАК Данные,
| ТаблицаЖр.ДатаЖР КАК Дата
|ПОМЕСТИТЬ ВТ
|ИЗ
| &ТаблицаЖр КАК ТаблицаЖр
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВЫРАЗИТЬ(Вт.ИмяПользователя КАК СТРОКА(100)) Как ИмяПользователя ,
| ВТ.Данные,
| ВТ.Дата,
| 1 КАК Обращений
|ИЗ
| ВТ КАК ВТ
|ИТОГИ
| СУММА(Обращений)
|ПО
| ИмяПользователя";
ТзЖурналаРегистрации .Колонки.Добавить("ИмяПользователяЖР", Новый ОписаниеТипов ("Строка"));
ТзЖурналаРегистрации .Колонки.Добавить("ДатаЖР", Новый ОписаниеТипов ("Дата"));
ТзЖурналаРегистрации .Колонки.Добавить("ДанныеЖР", Новый ОписаниеТипов ("Строка"));
Пока ВыборкаИмяПользователя.Следующий() Цикл
ОбластьИмяПользователя.Параметры.Заполнить(ВыборкаИмяПользователя);
ТабДок.Вывести(ОбластьИмяПользователя, ВыборкаИмяПользователя.Уровень());
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетальныеЗаписи);
ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетальныеЗаписи.Уровень());
КонецЦикла;
КонецЦикла;
2. В свойствах конфигурации устанавливаем значения "Поставщик" и номер редакции, подредакции, релиза и сборки. Далее Конфигурация/Поставка Конфигурации/Комплект поставки.. Выгружаем, Устанавливаем,
Проверяем создавая новую инф базу
ps Отмечу что расширения в поставку не выгрузились, т.е их надо выгрузить в файл и при установке новой конфигурации загрузить.
3. Хранилище конфигурации, Создать хранилище, Определяем место и пользователей, подключаемся, захватывавем объекты, добавляем реквизиты, помещаем в хранилище, проверяем у разных пользователей. Отключаем хранилище.
создаем внешний отчет по просмотру зафиксированных событий доступа по пользователям Иванов, Петров. Отчет с помощью метода “ВыгрузитьЖурналРегистрации” получает таблицу значений с данными по событиям указанных пользователей в фильтре. Затем передаем таблицу в запрос подсчитываем количество событий доступа с созданием итогов с запросе по пользователям. Выводим данные в табличный документ отчета с уровнями выборки детальных записей.
Все материалы этого сайта являются составной частью Базового / Продвинутого курсов по программированию - и являются объектами авторского и имущественного права.
Любое их распространение без письменного согласования с авторами запрещено.
1) Воспользовался расширениями конфигурации
Создал расширение документа РТиУ с формой, которую необходимо контролировать
В модуле формы вставил такой код, добавляющий события в ЖР, при открытии формы:
Процедура Расш1_ПриОткрытии(Отказ)
Расш1_ПриОткрытииНаСервере();
КонецПроцедуры
&НаСервере
Процедура Расш1_ПриОткрытииНаСервере()
ДокументОбъект = Объект.Ссылка.ПолучитьОбъект();
ЗаписьЖурналаРегистрации("ОткрытиеФормыДокументаРТУ",,ДокументОбъект.Метаданные(),ДокументОбъект.Ссылка);
КонецПроцедуры
Далее в расширении создаем отчет Расш1_ОтчетОДействияхПользователей, добавляем в расширение подсистему “Сервис” в которую включаем данный отчет. Для отчета создаем реквизиты ДатаНачала и ДатаКонца, добавляем форму, на форму выводим реквизиты отчета, кнопку Сформировать и реквизит формы СписокПользователей (тип – СписокЗначений).
СписокЗначений заполняем программно при открытии формы отчета.
Процедура ПриОткрытии(Отказ)
Отчет.ДатаКонца = ТекущаяДата();
Для Каждого Элемент Из ЗаполнитьСписокПользователейНаСервере() Цикл
СписокПользователей.Добавить(Элемент);
КонецЦикла;
КонецПроцедуры
&НаСервереБезконтекста
Функция ЗаполнитьСписокПользователейНаСервере()
МассивИмен = Новый Массив;
Для Каждого Элемент Из ПользователиИнформационнойБазы.ПолучитьПользователей() Цикл
МассивИмен.Добавить(Элемент.Имя);
КонецЦикла;
Возврат МассивИмен;
КонецФункции
&НаКлиенте
Процедура Сформировать(Команда)
ТабДок = СформироватьНаСервере();
ТабДок.Показать();
КонецПроцедуры
&НаСервере
Функция СформироватьНаСервере()
МассивПользователейДляОтчета = Новый Массив;
Для каждого Элемент Из СписокПользователей Цикл
Если Элемент.Пометка Тогда
МассивПользователейДляОтчета.Добавить(Элемент.Значение);
КонецЕсли;
КонецЦикла;
Макет = Отчеты.Расш1_ОтчетОДействияхПользователей.ПолучитьМакет("Макет");
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
ОбластьИтогов = Макет.ПолучитьОбласть("Итого");
ТабДок = Новый ТабличныйДокумент;
ТЗ = Новый ТаблицаЗначений;
Фильтр = Новый Структура;
Фильтр.Вставить("Событие","ОткрытиеФормыДокументаРТУ");
Фильтр.Вставить("Пользователь",МассивПользователейДляОтчета);
Фильтр.Вставить("ДатаНачала",Отчет.ДатаНачала);
Фильтр.Вставить("ДатаОкончания ",КонецДня(Отчет.ДатаКонца));
ВыгрузитьЖурналРегистрации(ТЗ,Фильтр,"Пользователь,Дата,Данные");
ТЗ.Сортировать("Пользователь Возр");
ТабДок.Очистить();
ТабДок.Вывести(ОбластьШапка);
ТекПользователь = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ТЗ[0].Пользователь).Имя;
Сч = 0 ;
Для каждого Строка из ТЗ Цикл
Пользователь = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(Строка.Пользователь);
ОбластьСтрока.Параметры.Пользователь = Пользователь;
ОбластьСтрока.Параметры.Документ = Строка.Данные;
ОбластьСтрока.Параметры.Дата = Строка.Дата;
Если ТекПользователь = Пользователь.Имя Тогда
ТабДок.Вывести(ОбластьСтрока);
Сч = Сч + 1;
Иначе
ОбластьИтогов.Параметры.ВсегоОткрытий = Сч;
ТабДок.Вывести(ОбластьИтогов);
Сч = 1;
ТабДок.Вывести(ОбластьСтрока);
КонецЕсли;
ТекПользователь = Пользователь.Имя;
КонецЦикла;
ОбластьИтогов.Параметры.ВсегоОткрытий = Сч;
ТабДок.Вывести(ОбластьИтогов);
Возврат ТабДок;
КонецФункции
Отчет выводим в табличный документ
2) Дистрибутив создан аналогично указанному в видеоуроке
3) Сделал согласно видео-урокам. Версионирование – полезная штука )
ДА,спасибо, конечно. там я неправильно фильтр указал.. как отправил отчет сразу заметил, но исправлять не стал – ну, главное принцип.. я сам недавно только расширения использую – вещь!
Добрый день!
По первой задаче: Все переделал с расширениями я пока не работал… Сделал так как вы указали Все отлично работает.
Отчет по количеству открытий формы сделал внешним. Только немного поправил (дополнил) фильтр для метода ВыгрузитьЖурналРегистрации
Было:
Фильтр = Новый Структура();
Фильтр .Вставить("ДатаНачала",ДатаНачала);
Фильтр .Вставить("ДатаОкончания",ДатаОкончания);
Фильтр .Вставить("Событие","Данные.Доступ1");
Стало:
Фильтр = Новый Структура();
Фильтр .Вставить("ДатаНачала",ДатаНачала);
Фильтр .Вставить("ДатаОкончания",ДатаОкончания);
Фильтр .Вставить("Событие","Данные.Доступ");
Фильтр .Вставить("Комментарий","Открытие документа");
По второму и третьему заданию тоже разобрался.
Добрый день,
1.1 Добавляем в “расширение” формы документов реализация, поступление.
1.2 В расширении регистрируем открытие формы документов в журнале регистрации. Так для документа Реализации:
Процедура Расш1_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ЗаписьЖурналаРегистрации("Данные.Доступ",,Метаданные.Документы.РеализацияТоваровИУслуг,Объект.Ссылка,"Открытие документа",РежимТранзакцииЗаписиЖурналаРегистрации.Транзакционная);КонецПроцедуры
Процедура Сформировать(Команда)
ТабДок = Новый ТабличныйДокумент;
СформироватьНаСервере(Период.ДатаНачала,Период.ДатаОкончания, ТабДок);
ТабДок.Показать();
КонецПроцедуры
&НаСервереБезКонтекста
Процедура СформироватьНаСервере(ДатаНачала, ДатаОкончания,ТабДок)
ТзЖурналаРегистрации = Новый ТаблицаЗначений;
Фильтр = Новый Структура();
Фильтр .Вставить("ДатаНачала",ДатаНачала);
Фильтр .Вставить("ДатаОкончания",ДатаОкончания);
Фильтр .Вставить("Событие","Данные.Доступ1");
ВыгрузитьЖурналРегистрации(ТзЖурналаРегистрации,Фильтр);
Макет = Отчеты.ОтчетПоДоступуСотрудников.ПолучитьМакет("Макет");
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТаблицаЖр.ИмяПользователяЖР КАК ИмяПользователя,
| ТаблицаЖр.ДанныеЖР КАК Данные,
| ТаблицаЖр.ДатаЖР КАК Дата
|ПОМЕСТИТЬ ВТ
|ИЗ
| &ТаблицаЖр КАК ТаблицаЖр
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВЫРАЗИТЬ(Вт.ИмяПользователя КАК СТРОКА(100)) Как ИмяПользователя ,
| ВТ.Данные,
| ВТ.Дата,
| 1 КАК Обращений
|ИЗ
| ВТ КАК ВТ
|ИТОГИ
| СУММА(Обращений)
|ПО
| ИмяПользователя";
ТзЖурналаРегистрации .Колонки.Добавить("ИмяПользователяЖР", Новый ОписаниеТипов ("Строка"));
ТзЖурналаРегистрации .Колонки.Добавить("ДатаЖР", Новый ОписаниеТипов ("Дата"));
ТзЖурналаРегистрации .Колонки.Добавить("ДанныеЖР", Новый ОписаниеТипов ("Строка"));
ТзЖурналаРегистрации.ЗагрузитьКолонку(ТзЖурналаРегистрации.ВыгрузитьКолонку("ИмяПользователя"),"ИмяПользователяЖР");
ТзЖурналаРегистрации.ЗагрузитьКолонку(ТзЖурналаРегистрации.ВыгрузитьКолонку("Дата"),"ДатаЖр");
ТзЖурналаРегистрации.ЗагрузитьКолонку(ТзЖурналаРегистрации.ВыгрузитьКолонку("Данные"),"ДанныеЖр");
Запрос.УстановитьПараметр("ТаблицаЖр",ТзЖурналаРегистрации);
РезультатЗапроса = Запрос.Выполнить();
ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы");
ОбластьИмяПользователя = Макет.ПолучитьОбласть("ИмяПользователя");
ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали");
ТабДок.Очистить();
ТабДок.Вывести(ОбластьЗаголовок);
ТабДок.Вывести(ОбластьШапкаТаблицы);
ТабДок.НачатьАвтогруппировкуСтрок();
ВыборкаИмяПользователя = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаИмяПользователя.Следующий() Цикл
ОбластьИмяПользователя.Параметры.Заполнить(ВыборкаИмяПользователя);
ТабДок.Вывести(ОбластьИмяПользователя, ВыборкаИмяПользователя.Уровень());
ВыборкаДетальныеЗаписи = ВыборкаИмяПользователя.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетальныеЗаписи);
ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетальныеЗаписи.Уровень());
КонецЦикла;
КонецЦикла;
ТабДок.ЗакончитьАвтогруппировкуСтрок();
ТабДок.Вывести(ОбластьПодвалТаблицы);
ТабДок.Вывести(ОбластьПодвал);
//}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
КонецПроцедуры
Проверяем создавая новую инф базу
ps Отмечу что расширения в поставку не выгрузились, т.е их надо выгрузить в файл и при установке новой конфигурации загрузить.
3. Хранилище конфигурации, Создать хранилище, Определяем место и пользователей, подключаемся, захватывавем объекты, добавляем реквизиты, помещаем в хранилище, проверяем у разных пользователей. Отключаем хранилище.
Задание 2. Создал установочный дистрибутив заполненный текущими данными из базы выполнения домашнего задания каркасной конфигурации.
Задание 3. Настроил новую информационную базу для групповой разработки, создал администратора базы и пользователей (разработчиков) Иванов, петров.
Добрый день!
Выполнение задания:
Фиксирование открытия формы документа Реализация товаров услуг. Пользователями Иванов, Петров. Желательно без изменения конфигурации.
1. Включаем логирование журнала регистрации по событиям “_$Access$_.Access” документа Реализация товаров услуг.
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ПоляДоступа = Новый Массив;
ПоляДоступа.Добавить("Номер");
ПоляРегистрации = Новый Массив;
Описание = Новый ОписаниеИспользованияСобытияДоступЖурналаРегистрации;
Описание.Объект = "Документ.РеализацияТоваровИУслуг";
Описание.ПоляДоступа = ПоляДоступа;
Описание.ПоляРегистрации = ПоляРегистрации;
Доступ = Новый Массив;
Доступ.Добавить(Описание);
Использование = Новый ИспользованиеСобытияЖурналаРегистрации(Истина);
Использование.ОписаниеИспользования = Доступ;
УстановитьИспользованиеСобытияЖурналаРегистрации("_$Access$_.Access", Использование);
КонецПроцедуры
создаем внешний отчет по просмотру зафиксированных событий доступа по пользователям Иванов, Петров. Отчет с помощью метода “ВыгрузитьЖурналРегистрации” получает таблицу значений с данными по событиям указанных пользователей в фильтре. Затем передаем таблицу в запрос подсчитываем количество событий доступа с созданием итогов с запросе по пользователям. Выводим данные в табличный документ отчета с уровнями выборки детальных записей.
Необходимо же в задании доступ к конкретной форме например “ФормаДокумента”, а тут указан только “Номер”