Выгрузка данных из журнала регистрации в таблицу на форме (обычное приложение)

26.08.21

База данных - Журнал регистрации

Обработка для выгрузки данных из журнала регистрации в табличную часть формы с возможность отбора по периоду, пользователю, объекту.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Выгрузка данных из журнала регистрации в таблицу на форме (обычное приложение):
.epf 10,54Kb
23
23 Скачать (1 SM) Купить за 1 850 руб.

Собственно, ничего нового и необычного. Собрано на скорую руку, возможно поможет тем, к кому как и ко мне прибегут с вопросами типа: "Кто редактировал?" или "Нужны данные, что и сколько пользователь за период сделал в программе?".

Тестировал на конфигурации "Управление торговым предприятием для Украины", редакция 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" Тогда
						СтрН.Событие = "Изменен";
					КонецЕсли;	
				КонецЕсли;	
			КонецЦикла;
		КонецЦикла;	
	КонецЕсли;
	ТПСписок.Сортировать("ИмяПользователя,Месяц,Дата");
	ЭлементыФормы.ТПСписок.СоздатьКолонки();
	КолДан = ЭлементыФормы.ТПСписок.Колонки.Найти("Данные");
	Если НЕ КолДан = Неопределено Тогда
		КолДан.ЭлементУправления.КнопкаОткрытия = Истина;
	КонецЕсли;	
КонецПроцедуры // ЗаполнениеТПСписок()

 

Журнал регистрации

См. также

Журнал регистрации Системный администратор Платформа 1С v8.3 Управляемые формы 1C:Бухгалтерия Россия Платные (руб)

История изменений реквизитов и табличных частей справочников, документов, независимых регистров сведений, возможность отката изменения, восстановление удаленных объектов, сбор статистики использования базы 1С. Альтернативный журнал регистрации.

22800 руб.

22.02.2018    35963    59    54    

57

Журнал регистрации Системный администратор Платформа 1С v8.3 1C:Бухгалтерия Платные (руб)

Конфигурация LogiCH эффективно решает проблему хранения и анализа записей журналов регистрации. Разработка использует столбцовую СУБД ClickHouse, одну из самых быстрых Big Data OLAP СУБД. Любой анализ журнала можно выполнить в одном отчете, в котором доступны все возможности СКД с учетом ограничений RLS. Количество подключаемых баз не ограничено и не влияет на скорость построения анализа.

6000 руб.

28.11.2018    21338    18    7    

44

Журнал регистрации Программист Россия Бесплатно (free)

В материале рассматривается сравнение двух инструментов для работы с журналом регистрации 1С: утилиты ibcmd и платформы Vector. Описаны их функциональные возможности, тестирование производительности и практическое применение для преобразования логов в формат JSON.

20.11.2024    1968    user1913000    13    

20

Журнал регистрации Тестирование QA Программист Бесплатно (free)

Поговорим про логирование в приложениях на базе 1С, рассмотрим проблемы, которые возникают при сборе информации из этих систем, и обсудим практический опыт применения внутренних и внешних инструментов для анализа логов.

21.10.2024    4027    leemuar    8    

24

Инструменты администратора БД Журнал регистрации Системный администратор Платформа 1С v8.3 1С:Управление торговлей 11 Абонемент ($m)

Внешняя обработка для регламентного сокращения журнала регистрации для конфигураций на базе БСП и платформы 8.3.20+

1 стартмани

29.12.2023    2647    43    dima_gsv    3    

14

Журнал регистрации Мониторинг Системный администратор Программист Абонемент ($m)

Как легко и быстро с помощью специализированных решений собирать, парсить и передавать логи и метрики.

1 стартмани

19.11.2023    1846    6    AlexSTAL    0    

8

Мониторинг Журнал регистрации Технологический журнал Системный администратор Программист Абонемент ($m)

Как легко и быстро с помощью специализированных решений собирать, парсить и передавать логи и метрики.

1 стартмани

13.11.2023    5655    11    AlexSTAL    0    

47
Оставьте свое сообщение