Собственно, ничего нового и необычного. Собрано на скорую руку, возможно поможет тем, к кому как и ко мне прибегут с вопросами типа: "Кто редактировал?" или "Нужны данные, что и сколько пользователь за период сделал в программе?".
Тестировал на конфигурации "Управление торговым предприятием для Украины", редакция 1.2. (1.2.63.1), Платформа 1С:Предприятие 8.3 (8.3.15.1700)
Код основной процедуры:
Процедура ЗаполнениеТПСписок()
	Если Пользователи.Количество() = 0 И Данные.Количество() = 0 Тогда
		Предупреждение("Необходимо указать пользователей или данные справочников/документов отбора");
		Возврат;
	КонецЕсли;
	Если НачПериода = Дата(1,1,1) ИЛИ КонПериода = Дата(1,1,1) Тогда
		Предупреждение("Необходимо указать период отбора");
		Возврат;
	КонецЕсли;
	Если НЕ ТПСписок.Количество() = 0 Тогда
		Если НЕ Вопрос("Перезаполнить таблицу?", РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Да Тогда
			Возврат;
		КонецЕсли;
	КонецЕсли;
	ТПСписок.Очистить();
	ТПСписок.Колонки.Очистить();
	МассивСобытий = Новый Массив;
	МассивПользователей = Новый Массив;
	МассивМетаданных = Новый Массив;
	МассивДанных = Новый Массив;
	МассивСобытий.Добавить("_$Data$_.New");
	МассивСобытий.Добавить("_$Data$_.Update");
	Для Каждого Эл Из Метаданные.Документы Цикл
		МассивМетаданных.Добавить(Эл);
	КонецЦикла;
	Для Каждого Эл Из Метаданные.Справочники Цикл
		МассивМетаданных.Добавить(Эл);
	КонецЦикла;
	Фильтр = Новый Структура("ДатаНачала, ДатаОкончания, Событие, Метаданные");
	Фильтр.ДатаНачала = НачПериода;
	Фильтр.ДатаОкончания = КонецДня(КонПериода);
	Фильтр.Событие = МассивСобытий;
	Фильтр.Метаданные = МассивМетаданных;
	Если НЕ Пользователи.Количество() = 0 Тогда
		Для Каждого Эл Из Пользователи Цикл
			ТекПользователь = Эл.Значение;
			Если ТекПользователь = Неопределено ИЛИ НЕ ТипЗнч(ТекПользователь) = Тип("СправочникСсылка.Пользователи") Тогда
				ТекПользователь = Справочники.Пользователи.ПустаяСсылка();
			КонецЕсли;
			Если НЕ ЗначениеЗаполнено(ТекПользователь) Тогда
				Продолжить;
			КонецЕсли;
			ТекНаимП = СокрЛП(ТекПользователь.Наименование);
			Если ТекНаимП = Неопределено ИЛИ НЕ ТипЗнч(ТекНаимП) = Тип("Строка") Тогда
				ТекНаимП = "";
			КонецЕсли;
			Если НЕ ЗначениеЗаполнено(ТекНаимП) Тогда
				Продолжить;
			КонецЕсли;
			МассивПользователей.Добавить(ТекПользователь.Наименование);
		КонецЦикла;
		Если НЕ МассивПользователей.Количество() = 0 Тогда
			Фильтр.Вставить("Пользователь", МассивПользователей);
		КонецЕсли;	
	КонецЕсли;
	ТекСсылка = Неопределено;
	Если НЕ Данные.Количество() = 0 Тогда
		Для Каждого Эл Из Данные Цикл
			ТекСсылка = Эл.Значение;
			Если ТекСсылка = Неопределено ИЛИ НЕ ЗначениеЗаполнено(ТекСсылка) Тогда
				Продолжить;
			КонецЕсли;
			Фильтр.Вставить("Данные", ТекСсылка);
			Прервать;
		КонецЦикла;
	КонецЕсли;
	Если МассивПользователей.Количество() = 0 И (ТекСсылка = Неопределено ИЛИ НЕ ЗначениеЗаполнено(ТекСсылка)) Тогда
		Предупреждение("Необходимо корректно указать пользователей или данные справочников или документов отбора");
		Возврат;
	КонецЕсли;
	СтрКолонок = "Дата,ИмяПользователя,Событие,Метаданные,Данные,ПредставлениеДанных";
	СтрокаКолонок = "Date,UserName,EventName,MetadataName,Data,DataPresentation";
	ТаблицаКолонок = ТаблицаКолонокЖурналаРегистрации();
	//	Переименовываем колонки журнала регистрации к типу "NameXML"
	ПереименоватьКолонкиТаблицыЖурналаРегистрации(ТПСписок, "NameXML", , ТаблицаКолонок);
	//	Дополняем колонки
	Если ТПСписок.Колонки.Найти("Месяц") = Неопределено Тогда
		ТПСписок.Колонки.Добавить("Месяц", Новый ОписаниеТипов("Дата"), "Месяц", 15);
	КонецЕсли;	
	Колонки = ТПСписок.Колонки;
	ЛюбаяСсылка = Справочники.ТипВсеСсылки();
	ЛюбаяСсылка = Новый ОписаниеТипов(ЛюбаяСсылка, Документы.ТипВсеССылки().Типы());
	Если СтрокаКолонок = Неопределено Тогда
		Для Каждого ОписаниеКолонки Из ТаблицаКолонок Цикл
			Если Колонки.Найти(ОписаниеКолонки.NameXML) = Неопределено Тогда
				Если ОписаниеКолонки.NameXML = "Данные"  ИЛИ ОписаниеКолонки.NameXML = "Data" Тогда
					Колонки.Добавить(ОписаниеКолонки.Имя, ЛюбаяСсылка , ОписаниеКолонки.Представление);
				Иначе	
					Колонки.Добавить(ОписаниеКолонки.Имя, ОписаниеКолонки.Тип , ОписаниеКолонки.Представление);
				КонецЕсли;	
			КонецЕсли
		КонецЦикла;
	Иначе
		СтруктураКолонок = Новый Структура(СтрокаКолонок);
		Для Каждого ЭлементКолонки Из СтруктураКолонок Цикл
			ОписаниеКолонки = ТаблицаКолонок.Найти(ЭлементКолонки.Ключ, "Имя, Name, NameXML");
			Если ОписаниеКолонки <> Неопределено Тогда
				Если Колонки.Найти(ОписаниеКолонки.NameXML) = Неопределено Тогда
					Если ОписаниеКолонки.NameXML = "Данные" ИЛИ ОписаниеКолонки.NameXML = "Data" Тогда
						Колонки.Добавить(ОписаниеКолонки.Имя, ЛюбаяСсылка , ОписаниеКолонки.Представление);
					Иначе	
						Колонки.Добавить(ОписаниеКолонки.Имя, ОписаниеКолонки.Тип , ОписаниеКолонки.Представление);
					КонецЕсли;	
				КонецЕсли
			КонецЕсли;
		КонецЦикла;
	КонецЕсли;
	ВтСписок = ТПСписок.СкопироватьКолонки();
	Состояние("Запрос данных");
	ВыгрузитьЖурналРегистрации(ВтСписок, Фильтр, СтрКолонок);
	Для Каждого СтрВт Из ВтСписок Цикл
		Состояние("Выгрузка данных " + (ВтСписок.Индекс(СтрВт) + 1) + " из " + ВтСписок.Количество()); 
		СтрН = ТПСписок.Добавить();
		ЗаполнитьЗначенияСвойств(СтрН, СтрВт);
		Если НЕ ТПСписок.Колонки.Найти("Месяц") = Неопределено Тогда
			СтрН.Месяц = НачалоМесяца(СтрН.Дата);
		КонецЕсли;	
		Если НЕ ТПСписок.Колонки.Найти("Событие") = Неопределено Тогда
			Если СтрН.Событие = "_$Data$_.New" Тогда
				СтрН.Событие = "Создан";
			КонецЕсли;
			Если СтрН.Событие = "_$Data$_.Update" Тогда
				СтрН.Событие = "Изменен";
			КонецЕсли;	
		КонецЕсли;	
	КонецЦикла;
	Если Данные.Количество() > 1 Тогда
		Для н = 1 По Данные.Количество() - 1 Цикл
			Эл = Данные.Получить(н);
			ТекСсылка = Эл.Значение;
			Если ТекСсылка = Неопределено ИЛИ НЕ ЗначениеЗаполнено(ТекСсылка) Тогда
				Продолжить;
			КонецЕсли;
			Фильтр.Вставить("Данные", ТекСсылка);
			ВтСписок = ТПСписок.СкопироватьКолонки();
			Состояние("Запрос данных по док. " + н + " из " + Данные.Количество());
			ВыгрузитьЖурналРегистрации(ВтСписок, Фильтр, СтрКолонок);
			Для Каждого СтрВт Из ВтСписок Цикл
				Состояние("Выгрузка данных по док. " + (ВтСписок.Индекс(СтрВт) + 1) + " из " + ВтСписок.Количество()); 
				СтрН = ТПСписок.Добавить();
				ЗаполнитьЗначенияСвойств(СтрН, СтрВт);
				Если НЕ ТПСписок.Колонки.Найти("Месяц") = Неопределено Тогда
					СтрН.Месяц = НачалоМесяца(СтрН.Дата);
				КонецЕсли;	
				Если НЕ ТПСписок.Колонки.Найти("Событие") = Неопределено Тогда
					Если СтрН.Событие = "_$Data$_.New" Тогда
						СтрН.Событие = "Создан";
					КонецЕсли;
					Если СтрН.Событие = "_$Data$_.Update" Тогда
						СтрН.Событие = "Изменен";
					КонецЕсли;	
				КонецЕсли;	
			КонецЦикла;
		КонецЦикла;	
	КонецЕсли;
	ТПСписок.Сортировать("ИмяПользователя,Месяц,Дата");
	ЭлементыФормы.ТПСписок.СоздатьКолонки();
	КолДан = ЭлементыФормы.ТПСписок.Колонки.Найти("Данные");
	Если НЕ КолДан = Неопределено Тогда
		КолДан.ЭлементУправления.КнопкаОткрытия = Истина;
	КонецЕсли;	
КонецПроцедуры // ЗаполнениеТПСписок()
Вступайте в нашу телеграмм-группу Инфостарт
