Журнал регистрации - основные методы работы через БСП

11.11.21

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

В данной небольшой статье я привожу практические примеры работы с журналом регистрации средствами и методами библиотеки стандартных подсистем.

 

Введение

Всем доброго времени суток!

В данной статье я предлагаю рассмотреть практические примеры возможностей актуальной библиотеки стандартных подсистем (БСП) в области функционала работы с "Журналом регистрации конфигурации". На момент написания статьи - я использую БСП версии 3.1.5.208. Все практические примеры статьи были реализованы на указанной версии БСП, использую платформу 1с 8.3.19.1264.

Публикация будет полезна всем разработчикам- программистам и администраторам баз данных, ну а так же любым пользователям, желающим познакомиться с основным функционалом журнал регистрации и методами записи и получения информации из него в типовых современных конфигурациях (работающих на БСП).

Примеры статьи актуальны для серверных и файловых баз.

Материал статьи я разделил на две части - в первой части описаны методы записи в журнал, а во второй - получение данных из журнала посредством методов библиотеки стандартных подсистем.

Итак, перейдем к первой части - методам записи в журнал регистрации:

 

Часть 1. Методы записи в журнал регистрации.

Самый простой метод регистрации в журнале возможен при выполнении такой процедуры

Процедура ДобавитьСообщениеДляЖурналаРегистрации(Знач ИмяСобытия, Знач ПредставлениеУровня = "Информация", Знач Комментарий = "", Знач ДатаСобытия = "", Знач ЗаписатьСобытия = Ложь) Экспорт

 

код исполнения выглядит вот так:

 
 ДобавитьСообщениеДляЖурналаРегистрации

 

&НаКлиенте
Процедура ВыполнитьЗаписьНаКлиенте()
	
	ИмяСобытия = "Событие тестовое строкой на клиенте";
		
	ПредставлениеУровня = "Ошибка";   //представление уровня записи - "Информация", "Ошибка", "Предупреждение", "Примечание".
	Комментарий = "Комментарий к записи на клиенте"; 
	//	ДатаСобытия = ТекущаяДата();
		
	ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытия, ПредставлениеУровня, Комментарий,,Истина);	
	
КонецПроцедуры	

 

Результат исполнения процедуры записи выглядит вот так:

 

Рис.1. Данная запись создана процедурой ДобавитьСообщениеДляЖурналаРегистрации.

 

Рассмотрим еще один способ пакетной записи в журнал регистрации через структуру с помощью процедуры ЗаписатьСобытияВЖурналРегистрации(СобытияДляЖурналаРегистрации) Экспорт.

 

код исполнения выглядит вот так:

 
 ЗаписатьСобытияВЖурналРегистрации

 

&НаСервере
Процедура ВыполнитьНаСервере()

	
		СтруктураСобытий = Новый Структура("ИмяСобытия, ПредставлениеУровня, Комментарий,ДатаСобытия");
		
		СтруктураСобытий.ИмяСобытия 		 = "Тестовая запись в журнал";
		
		СтруктураСобытий.ПредставлениеУровня = "Предупреждение";	//"Информация", "Ошибка", "Предупреждение", "Примечание".
		СтруктураСобытий.Комментарий 		 = "Комментарий к событию";
		//СтруктураСобытий.ДатаСобытия 		 = ТекущаяДата();
		
		СобытияДляЖурналаРегистрации = Новый СписокЗначений();
		СобытияДляЖурналаРегистрации.Добавить(СтруктураСобытий);
		
		ЖурналРегистрации.ЗаписатьСобытияВЖурналРегистрации(СобытияДляЖурналаРегистрации);
	
КонецПроцедуры

 

 

Убедимся, что работает. Результат исполнения данной процедуры аналогичен предыдущей - запись появилась.

 

Рис.2. Данная запись создана процедурой ЗаписатьСобытияВЖурналРегистрации.

 

С методами записи в журнал считаю, что достаточно. Предлагаю перейти ко второй части статью - методам получения информации  из журнала регистрации.

 

Часть 2. Методы получения информации из журнала регистрации.

Для начала рассмотрим самый простой способ получения информации по отбору в форме самого журнала. Для этого воспользуемся процедурой ОткрытьЖурналРегистрации(Знач Отбор = Неопределено, Владелец = Неопределено) Экспорт

 

Код с отбором выглядит вот так:

 
 Открытие формы журнала регистрации с отбором

 

&НаКлиенте
Процедура ОткрытьПоОтбору(Команда)
	
	//  Отбор - Структура:
	//      Пользователь              - Строка
	//                                - СписокЗначений - имя или список пользователей информационной базы.
	//      СобытиеЖурналаРегистрации - Строка, Массив - идентификатор события.
	//      ДатаНачала                - Дата           - начало интервала отображаемых событий.
	//      ДатаОкончания             - Дата           - конец интервала отображаемых событий.
	//      Данные                    - Произвольный   - данные любого типа.
	//      Сеанс                     - СписокЗначений - список выбираемых сеансов.
	//      Уровень                   - Строка, Массив - представление уровня важности события журнала регистрации.
	//      ИмяПриложения             - Массив         - массив идентификаторов приложения.
	
	Отбор = Новый Структура("Пользователь, СобытиеЖурналаРегистрации, ДатаНачала, ДатаОкончания, Данные, Сеанс, Уровень");
	
	Отбор.Пользователь 	= "Администратор";
	Отбор.ДатаНачала 	= НачалоДня(ТекущаяДата());
	Отбор.ДатаОкончания = КонецДня(ТекущаяДата());
	Отбор.Уровень = "Ошибка";  
	Отбор.СобытиеЖурналаРегистрации = "Событие тестовое строкой1";
		
	ЖурналРегистрацииКлиент.ОткрытьЖурналРегистрации(Отбор, ЭтаФорма);
	
КонецПроцедуры

 

 

Результат выполнения кода вот такой:

 

Рис.3. Программное открытие формы журнала регистрации с заданным отбором.

 

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

Для этого воспользуемся стандартной процедурой БСП ПрочитатьСобытияЖурналаРегистрации, которая вернет нам структуру записей журнала. Да-Да, именно вернет.

Данная типовая процедура помещает результат выполнения (в данном случае - это структура записей журнала регистрации) в хранилище. Код этой типовой процедуры выглядит вот так:

 
 ПрочитатьСобытияЖурналаРегистрации (БСП)

 

Процедура ПрочитатьСобытияЖурналаРегистрации(ПараметрыОтчета, АдресХранилища) Экспорт
	
	ОтборЖурналаНаКлиенте          = ПараметрыОтчета.ОтборЖурналаРегистрации;
	КоличествоСобытий              = ПараметрыОтчета.КоличествоПоказываемыхСобытий;
	МенеджерВладельца              = ПараметрыОтчета.МенеджерВладельца;
	ДобавлятьДополнительныеКолонки = ПараметрыОтчета.ДобавлятьДополнительныеКолонки;
	
	// Проверяем параметры на корректность.
	ДатаНачала    = Неопределено;
	ДатаОкончания = Неопределено;
	ДатыОтбораУказаны = ОтборЖурналаНаКлиенте.Свойство("ДатаНачала", ДатаНачала) И ОтборЖурналаНаКлиенте.Свойство("ДатаОкончания", ДатаОкончания)
		И ЗначениеЗаполнено(ДатаНачала) И ЗначениеЗаполнено(ОтборЖурналаНаКлиенте.ДатаОкончания);
		
	Если ДатыОтбораУказаны И ДатаНачала > ДатаОкончания Тогда
		ВызватьИсключение НСтр("ru = 'Некорректно заданы условия отбора журнала регистрации. Дата начала больше даты окончания.'");
	КонецЕсли;
	СмещениеВремениСервера = СмещениеВремениСервера();
	
	// Подготовка отбора
	Отбор = Новый Структура;
	Для Каждого ЭлементОтбора Из ОтборЖурналаНаКлиенте Цикл
		Отбор.Вставить(ЭлементОтбора.Ключ, ЭлементОтбора.Значение);
	КонецЦикла;
	ПреобразованиеОтбора(Отбор, СмещениеВремениСервера);
	
	// Выгрузка отбираемых событий и формирование структуры таблицы.
	СобытияЖурнала = Новый ТаблицаЗначений;
	ВыгрузитьЖурналРегистрации(СобытияЖурнала, Отбор, , , КоличествоСобытий);
	
	СобытияЖурнала.Колонки.Дата.Имя = "ДатаНаСервере";
	СобытияЖурнала.Колонки.Добавить("Дата", Новый ОписаниеТипов("Дата"));
	
	СобытияЖурнала.Колонки.Добавить("НомерРисунка", Новый ОписаниеТипов("Число"));
	СобытияЖурнала.Колонки.Добавить("АдресДанных",  Новый ОписаниеТипов("Строка"));
	
	Если ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда
		СобытияЖурнала.Колонки.Добавить("РазделениеДанныхСеанса", Новый ОписаниеТипов("Строка"));
		СобытияЖурнала.Колонки.Добавить("ПредставлениеРазделенияДанныхСеанса", Новый ОписаниеТипов("Строка"));
	КонецЕсли;
	
	Если ДобавлятьДополнительныеКолонки Тогда
		МенеджерВладельца.ДобавитьДополнительныеКолонкиСобытия(СобытияЖурнала);
	КонецЕсли;
	
	Если ОбщегоНазначения.РазделениеВключено()
	   И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных()
	   И ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда
		
		МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса");
		ПсевдонимыПользователей    = Новый Соответствие();
	Иначе
		МодульРаботаВМоделиСервиса = Неопределено;
		ПсевдонимыПользователей    = Неопределено;
	КонецЕсли;
	
	Для Каждого СобытиеЖурнала Из СобытияЖурнала Цикл
		СобытиеЖурнала.Дата = СобытиеЖурнала.ДатаНаСервере - СмещениеВремениСервера;
		
		// Заполнение номеров картинок строк.
		МенеджерВладельца.УстановитьНомерРисунка(СобытиеЖурнала);
		
		Если ДобавлятьДополнительныеКолонки Тогда
			// Заполнение дополнительных полей, определенных только у владельца.
			МенеджерВладельца.ЗаполнитьДополнительныеКолонкиСобытия(СобытиеЖурнала);
		КонецЕсли;
		
		// Преобразование массива метаданных в список значений.
		СписокПредставленийМетаданных = Новый СписокЗначений;
		Если ТипЗнч(СобытиеЖурнала.ПредставлениеМетаданных) = Тип("Массив") Тогда
			СписокПредставленийМетаданных.ЗагрузитьЗначения(СобытиеЖурнала.ПредставлениеМетаданных);
			СобытиеЖурнала.ПредставлениеМетаданных = СписокПредставленийМетаданных;
		Иначе
			СобытиеЖурнала.ПредставлениеМетаданных = Строка(СобытиеЖурнала.ПредставлениеМетаданных);
		КонецЕсли;
		
		// Преобразование массива "ПредставлениеРазделенияДанныхСеанса" в список значений.
		Если ОбщегоНазначения.РазделениеВключено()
			И Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда
			ПолноеПредставлениеРазделенияДанныхСеанса = "";
			
			РазделениеДанныхСеанса = СобытиеЖурнала.РазделениеДанныхСеанса;
			СписокРеквизитовРазделенияДанных = Новый СписокЗначений;
			Для Каждого РазделительСеанса Из РазделениеДанныхСеанса Цикл
				ПредставлениеРазделителя = Метаданные.ОбщиеРеквизиты.Найти(РазделительСеанса.Ключ).Синоним;
				ПредставлениеРазделителя = ПредставлениеРазделителя + " = " + РазделительСеанса.Значение;
				ЗначениеРазделителя = РазделительСеанса.Ключ + "=" + РазделительСеанса.Значение;
				СписокРеквизитовРазделенияДанных.Добавить(ЗначениеРазделителя, ПредставлениеРазделителя);
				ПолноеПредставлениеРазделенияДанныхСеанса = ?(Не ПустаяСтрока(ПолноеПредставлениеРазделенияДанныхСеанса),
				                                            ПолноеПредставлениеРазделенияДанныхСеанса + "; ", "")
				                                            + ПредставлениеРазделителя;
			КонецЦикла;
			СобытиеЖурнала.РазделениеДанныхСеанса = СписокРеквизитовРазделенияДанных;
			СобытиеЖурнала.ПредставлениеРазделенияДанныхСеанса = ПолноеПредставлениеРазделенияДанныхСеанса;
		КонецЕсли;
		
		// Обработка данных специальных событий.
		Если СобытиеЖурнала.Событие = "_$Access$_.Access" Тогда
			УстановитьСтрокуАдресаДанных(СобытиеЖурнала);
			
			Если СобытиеЖурнала.Данные <> Неопределено Тогда
				СобытиеЖурнала.Данные = ?(СобытиеЖурнала.Данные.Данные = Неопределено, "", "...");
			КонецЕсли;
			
		ИначеЕсли СобытиеЖурнала.Событие = "_$Access$_.AccessDenied" Тогда
			УстановитьСтрокуАдресаДанных(СобытиеЖурнала);
			
			Если СобытиеЖурнала.Данные <> Неопределено Тогда
				Если СобытиеЖурнала.Данные.Свойство("Право") Тогда
					СобытиеЖурнала.Данные = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
						НСтр("ru = 'Право: %1'"), 
						СобытиеЖурнала.Данные.Право);
				Иначе
					ДанныеЖурнала = СобытиеЖурнала.Данные; // Структура
					СобытиеЖурнала.Данные = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
						НСтр("ru = 'Действие: %1%2'"), 
						ДанныеЖурнала.Действие, ?(СобытиеЖурнала.Данные.Данные = Неопределено, "", ", ...") );
				КонецЕсли;
			КонецЕсли;
			
		ИначеЕсли СобытиеЖурнала.Событие = "_$Session$_.Authentication"
		      Или СобытиеЖурнала.Событие = "_$Session$_.AuthenticationError" Тогда
			
			УстановитьСтрокуАдресаДанных(СобытиеЖурнала);
			
			СобытиеЖурналаДанные = "";
			Если СобытиеЖурнала.Данные <> Неопределено Тогда
				Для Каждого КлючИЗначение Из СобытиеЖурнала.Данные Цикл
					Если ЗначениеЗаполнено(СобытиеЖурналаДанные) Тогда
						СобытиеЖурналаДанные = СобытиеЖурналаДанные + ", ...";
						Прервать;
					КонецЕсли;
					СобытиеЖурналаДанные = КлючИЗначение.Ключ + ": " + КлючИЗначение.Значение;
				КонецЦикла;
			КонецЕсли;
			СобытиеЖурнала.Данные = СобытиеЖурналаДанные;
			
		ИначеЕсли СобытиеЖурнала.Событие = "_$User$_.Delete" Тогда
			УстановитьСтрокуАдресаДанных(СобытиеЖурнала);
			
			СобытиеЖурналаДанные = "";
			Если СобытиеЖурнала.Данные <> Неопределено Тогда
				Для каждого КлючИЗначение Из СобытиеЖурнала.Данные Цикл
					СобытиеЖурналаДанные = КлючИЗначение.Ключ + ": " + КлючИЗначение.Значение;
					Прервать;
				КонецЦикла;
			КонецЕсли;
			СобытиеЖурнала.Данные = СобытиеЖурналаДанные;
			
		ИначеЕсли СобытиеЖурнала.Событие = "_$User$_.New"
		      ИЛИ СобытиеЖурнала.Событие = "_$User$_.Update" Тогда
			УстановитьСтрокуАдресаДанных(СобытиеЖурнала);
			
			ИмяПользователяИБ = "";
			Если СобытиеЖурнала.Данные <> Неопределено Тогда
				СобытиеЖурнала.Данные.Свойство("Имя", ИмяПользователяИБ);
			КонецЕсли;
			СобытиеЖурнала.Данные = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Имя: %1, ...'"), ИмяПользователяИБ);
			
		КонецЕсли;
		
		УстановитьПривилегированныйРежим(Истина);
		// Уточнение имени пользователя.
		Если СобытиеЖурнала.Пользователь = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000") Тогда
			СобытиеЖурнала.ИмяПользователя = НСтр("ru = '<Неопределен>'");
			
		ИначеЕсли СобытиеЖурнала.ИмяПользователя = "" Тогда
			СобытиеЖурнала.ИмяПользователя = Пользователи.ПолноеИмяНеУказанногоПользователя();
			
		ИначеЕсли ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(СобытиеЖурнала.Пользователь) = Неопределено Тогда
			СобытиеЖурнала.ИмяПользователя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 <Удален>'"), СобытиеЖурнала.ИмяПользователя);
		КонецЕсли;
		
		Если МодульРаботаВМоделиСервиса <> Неопределено Тогда
			Если ПсевдонимыПользователей.Получить(СобытиеЖурнала.Пользователь) = Неопределено Тогда
				ПсевдонимПользователя = МодульРаботаВМоделиСервиса.ПсевдонимПользователяИнформационнойБазы(СобытиеЖурнала.Пользователь);
				ПсевдонимыПользователей.Вставить(СобытиеЖурнала.Пользователь, ПсевдонимПользователя);
			Иначе
				ПсевдонимПользователя = ПсевдонимыПользователей.Получить(СобытиеЖурнала.Пользователь);
			КонецЕсли;
			
			Если ЗначениеЗаполнено(ПсевдонимПользователя) Тогда
				СобытиеЖурнала.ИмяПользователя = ПсевдонимПользователя;
			КонецЕсли;
		КонецЕсли;
		
		// Преобразование идентификатора в имя для использования в дальнейшем при установке отборе.
		ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(СобытиеЖурнала.Пользователь);
		Если ПользовательИБ <> Неопределено Тогда
			СобытиеЖурнала.Пользователь = ПользовательИБ.Имя;
		КонецЕсли;
		УстановитьПривилегированныйРежим(Ложь);
	КонецЦикла;
	
	// Успешное завершение
	Результат = Новый Структура;
	Результат.Вставить("СобытияЖурнала", СобытияЖурнала);
	
	ПоместитьВоВременноеХранилище(Результат, АдресХранилища);
	
КонецПроцедуры

 

 

Чтобы получить результат, воспользуемся возможностями БСП - ДлительныеОперации. Общий код получения выглядит вот так:

Структура

 

&НаСервере
Функция ПараметрыОтчета() // конструктор отбора для выполнения процедуры
	
	ОтборЖурналаРегистрации = Новый Структура("ДатаНачала, ДатаОкончания");
	
	ОтборЖурналаРегистрации.ДатаНачала 	  = НачалоДня(ТекущаяДата());
	ОтборЖурналаРегистрации.ДатаОкончания = КонецДня(ТекущаяДата());
	
	ПараметрыОтчета = Новый Структура;
	ПараметрыОтчета.Вставить("ОтборЖурналаРегистрации", ОтборЖурналаРегистрации);
	ПараметрыОтчета.Вставить("КоличествоПоказываемыхСобытий", 1000);
	ПараметрыОтчета.Вставить("УникальныйИдентификатор", УникальныйИдентификатор);
	ПараметрыОтчета.Вставить("МенеджерВладельца", Обработки.ЖурналРегистрации);
	ПараметрыОтчета.Вставить("ДобавлятьДополнительныеКолонки", Ложь);
	//ПараметрыОтчета.Вставить("Журнал", РеквизитФормыВЗначение("Журнал"));

	Возврат ПараметрыОтчета;
	
КонецФункции

&НаСервере
Процедура СобытияЖурнала()
	
	ПараметрыОтчета = ПараметрыОтчета();
	
	ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
	ПараметрыВыполнения.ОжидатьЗавершение = 0;
	ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Обновление журнала регистрации'");
	
	РезультатВыполнения = ДлительныеОперации.ВыполнитьВФоне("ЖурналРегистрации.ПрочитатьСобытияЖурналаРегистрации", ПараметрыОтчета, ПараметрыВыполнения);
	
	СтруктураЗаписейЖурнала = ПолучитьИЗВременногоХранилища(РезультатВыполнения.АдресРезультата);
	
		
КонецПроцедуры

 

 

Результат, который мы получим (вернули структуру с записями журнала):

 

Рис.4. Структура записей событий журнала.

 

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

 

Заключение и выводы

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

Так же в статье затронута еще одна подсистема конфигурации - ДлительныеОперации. О ДлительныхОперациях вы можете прочитать мои статьи. Список полезных статей приведен в конце статьи.

Все эксперименты для написания этой статьи проводились на платформе 1С - 8.3.19.1264 и "чистой конфигурации" БСП 3.1.5.208.

Спасибо за прочтение данного материала. Если статья вам понравилась - прошу поддержать ее.

 

Другие мои материалы по подсистемам БСП

Также прошу ознакомиться с другими моими статьями по функционалу библиотеки стандартных подсистем и типовым конфигурациям по разделам:

 

Длительные операции:

Запуск почти любых процедур и функции конфигураций в асинхронном режиме - БСП - Длительные операции [Часть 2]

БСП - рабочие примеры асинхронного запуска функций и процедур

 

Работа со штрихкодами и печатными макетами:

Генерация штрихкодов с помощью БСП для программистов

Полезные встроенные функции для работы с печатными формами и не только на УТ 11.4 и БП 3.0 (сравнение)

Печать макета MS Word в любом документе с помощью БСП

 

Администрирование баз с помощью БСП:

Базовые приемы работы с кластером 1С при помощи БСП

 

журнал регистрации бсп запись чтение типовые конфигурации

См. также

Журнал изменений с восстановлением состояния ссылочных объектов и архивацией по HTTP / COM (расширение + конфигурация, 8.3.14+, ЛЮБАЯ конфигурация)

Архивирование (backup) Журнал регистрации Поиск данных Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 1С:Управление торговлей 11 Платные (руб)

База данных «сама» меняет данные в документах/справочниках? Тогда данный журнал изменений для Вас! Практически не влияет на скорость записи объектов за счет быстрого алгоритма! Скорость работы почти в 2 раза выше типового механизма "История изменений"! Позволяет следить за изменениями и удалением в любых ссылочных объектах конфигурации, с возможностью архивации по HTTP(!) или COM, и сверткой данных. А так же, может восстановить состояние реквизитов (значения) до момента изменения или удаления объекта из базы. Есть ДЕМО-база где можно самостоятельно протестировать часть функционала! Работает на любых платформах выше 8.3.14+ и любых конфигурациях! Версия 3.1 от 24.08.2023!

21600 руб.

15.05.2017    42645    10    24    

38

Версионирование объектов для Альфа-авто, ред 4 и 5.

Оптовая торговля Розничная торговля Журнал регистрации Платформа 1С v8.3 Конфигурации 1cv8 Автомобили, автосервисы Управленческий учет Платные (руб)

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

4800 руб.

03.09.2016    42312    33    24    

37

LogManager - Внешний журнал регистрации в SQL

Журнал регистрации Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Журнал регистрации платформы 1С в SQL. Общая база хранения всех журналов. Через com-подключение регламентным заданием периодически догружает журналы регистраций из рабочих баз. Предоставляет настраиваемый доступ к журналам по правам подразделений. Формирует отчеты по пользователям и данным.

10000 руб.

23.05.2014    55595    52    16    

47

Мониторинг баз и серверов 1С

Журнал регистрации Мониторинг Платформа 1С v8.3 Платные (руб)

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

9000 руб.

28.08.2019    31133    14    21    

66

LogiCH - хранение и анализ журнала регистрации в сверхбыстрой СУБД ClickHouse

Журнал регистрации Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

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

5000 руб.

28.11.2018    19633    13    6    

37

БСП. Добавляем отчет в меню Отчеты

БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Добавим новый отчет в меню нового документа средствами БСП.

02.04.2024    3128    John_d    10    

89
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. retr0 11.11.21 10:50 Сейчас в теме
Не очень понял прикола использовать БСПшную запись в ЖР. Смысл данной обертки вообще не понятен.
Gendelf; qvazare; zqzq; +3
2. AnryMc 849 11.11.21 11:08 Сейчас в теме
(1)
Не очень понял прикола использовать БСПшную запись в ЖР. Смысл данной обертки вообще не понятен.


Да и получить запись ЖР, если написать "свой" будет в разы короче...
Meverix; Gendelf; qvazare; +3
9. vaskomain 07.12.21 08:34 Сейчас в теме
(1) Это чтобы с клиента вызывать и свои обертки не писать
Tolpinski; +1
10. retr0 07.12.21 08:41 Сейчас в теме
(9) Ну звучит логично. Спасибо, не подумал, просто в целом за все время никогда не приходилось на клиенте писать в ЖР что-либо..
+
3. vld1973 85 11.11.21 11:26 Сейчас в теме
Спасибо за то, что пишете статьи про функции БСП, хотя и использовал эти функции, но добавлю статью в избранное, чтобы быстро находить в случае необходимости.
LeXXeR; Tolpinski; user616816_Romeo8044; Serg O.; Lem0n; quazare; aximo; davdykin; +8
4. davdykin 25 11.11.21 11:46 Сейчас в теме
Так же поддерживаю описание различных возможностей БСП, не скажу, что я от нее в восторге, но что имеем то имеем и знание как можно использовать этот механизм - будет весьма полезна.
Meverix; user616816_Romeo8044; aximo; +3
5. aleksey2 86 11.11.21 14:57 Сейчас в теме
До кучи надо сделать сохранение этого журнала в Эксель и отправка на почту.
Процедура СобытияЖурнала()
	ПараметрыОтчета = ПараметрыОтчета();
	АдресВХ = ПоместитьВоВременноеХранилище( неопределено, новый УникальныйИдентификатор() );
	ЖурналРегистрации.ПрочитатьСобытияЖурналаРегистрации( ПараметрыОтчета, АдресВХ );
	Рез = ПолучитьИЗВременногоХранилища( АдресВХ );
	ТЗ = Рез.СобытияЖурнала;
	ТабДок = Новый ТабличныйДокумент;
	Построитель = Новый ПостроительОтчета();
        Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных( ТЗ );
        Построитель.Вывести( ТабДок );
        ИмяФайла = "C:\Temp\"+прав(Константы.ЗаголовокСистемы.Получить(),4)+"_ЖурналРегистрации.xls";    
        ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.XLS );
КонецПроцедуры
Показать
triviumfan; quazare; +2
6. quazare 3606 11.11.21 15:01 Сейчас в теме
Есть метод получения технического файла в xml файл - если интересно - опишу его
user1564146; +1
7. quazare 3606 12.11.21 09:52 Сейчас в теме
вот вам товарищи, интересная процедура, которая запишет выборку журнала в xml файл и поместит его в хранилище.

Функция ЖурналДляТехподдержки(ОтборЖурналаРегистрации, КоличествоСобытий, УникальныйИдентификатор = Неопределено) Экспорт
	
	Отбор = Новый Структура;
	Для Каждого ЭлементОтбора Из ОтборЖурналаРегистрации Цикл
		Отбор.Вставить(ЭлементОтбора.Ключ, ЭлементОтбора.Значение);
	КонецЦикла;
	СмещениеВремениСервера = СмещениеВремениСервера();
	ПреобразованиеОтбора(Отбор, СмещениеВремениСервера);
	
	// Выгрузка отбираемых событий и формирование структуры таблицы.
	ВременныйФайл = ПолучитьИмяВременногоФайла("xml");
	ВыгрузитьЖурналРегистрации(ВременныйФайл, Отбор, , , КоличествоСобытий);
	ДвоичныеДанные = Новый ДвоичныеДанные(ВременныйФайл);
	УдалитьФайлы(ВременныйФайл);
	
	Возврат ПоместитьВоВременноеХранилище(ДвоичныеДанные, УникальныйИдентификатор);
	
КонецФункции
Показать


если вам интересно - могу дать рабочий пример
+
8. quazare 3606 12.11.21 10:14 Сейчас в теме
11. RustIG 1595 26.05.22 12:08 Сейчас в теме
(0) спасибо - пригодилось!
+
12. RustIG 1595 26.05.22 12:15 Сейчас в теме
Журнал регистрации например в КА 2.4 не дает выбрать для поиска упаковки.

Поскольку открывается форма выбора единиц измерения - см. скрин.

в 1с КА 2.4 две формы для выбора - одна для выбора ед.изм, вторая для выбора упаковок - на самом деле форм выбора еще больше - например из документа или из других форм
вот так сложно устроили выбор...

Получилось вытащить сведения из ЖР только программно (открытие журнала программно - воспользовался данной статьей-подсказкой)... При этом совершенно невозможно получить ссылку на упаковку другими способами как только программно... То есть нельзя интерактивно указать упаковку - поскольку надо опять-таки перепрограммировать форму выбора...
Прикрепленные файлы:
+
13. Светлый ум 406 26.07.22 10:49 Сейчас в теме
+1 взял на вооружение
+
14. sevarm 61 02.10.22 14:25 Сейчас в теме
+1. Очень помогла статья для анализа и отправки уведомлений при ошибках в обмене данными.
+
15. Gendelf 27.10.22 16:56 Сейчас в теме
Я так и не понял, почему адрес хранилища не передаётся в исполняемую функцию?
+
16. KuroiKagE 24.05.23 15:34 Сейчас в теме
Подскажите, пожалуйста, что нужно передать в реквизит УникальныйИдентификатор в последнем примере:

ПараметрыОтчета.Вставить("УникальныйИдентификатор", УникальныйИдентификатор);
+
17. ufedor 58 03.06.23 21:43 Сейчас в теме
Знаете чего я не нашел в функционале ЖР?
Работу с внешним файлом журнала. Платформа позволяет открывать файл журнала используя встроенные возможности толстого клиента и конфигуратора. Но почему бы не дать открывать внешний файл через обработку в БСП? Было бы логично.
Может быть кто-то добавлял такой функционал?
+
Оставьте свое сообщение