Отправка уведомлений при сбое синхронизации

03.04.24

Интеграция - Перенос данных 1C

Расширение предназначено для отправки уведомления по электронной почте при ошибках обмена 1С.

Файлы

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

Наименование Скачано Купить файл
Отправка уведомлений при сбое синхронизации для БП 3.0
.cfe 16,98Kb ver:1.3
12 3 000 руб. Купить
Отправка уведомлений при сбое синхронизации для УТ 11
.cfe 17,05Kb ver:1.3
6 3 000 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

Расширение предназначено для отправки уведомления по электронной почте при сбое обмена между конфигурациями.

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

Также отрабатывается информационное событие "Сообщение обмена было ранее принято". 

Для отправки используется системная запись электронной почты. Адрес куда отправлять храниться в константе "Электронная почта для уведомления" - доступ через "Все функции".

Предназначена для любых конфигураций с БСП.

Тестировалась на БП 3.0.121.25, УТ 11.5.12.256.

Вступайте в нашу телеграмм-группу Инфостарт

Отправка уведомлений сбой синхронизации ошибка обмена сообщение почту

См. также

Перенос данных 1C Программист 1С:Предприятие 8 1С:Управление производственным предприятием 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос документов, начальных остатков и справочной информации из УПП 1.3 в ERP 2 | из УПП 1.3 в УТ 11 | из УПП в КА 2 | Правила конвертации (КД 2) | Более 360 предприятий выполнили переход с использованием этого продукта! | Сэкономьте время - используйте готовое решение для перехода! | Позволяет перенести из УПП 1.3 в ERP / УТ 11 / КА 2 всю возможную информацию | В переносе есть фильтр по организации и множество других опциональных параметров выгрузки | Есть несколько алгоритмов выгрузки остатков на выбор

58000 руб.

04.08.2015    187624    449    302    

454

SALE! 15%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Платные (руб)

Правила в универсальном формате обмена для ERP 2.5, КА 2.5, УТ 11.5, БП 3.0, Розница, УНФ, для последних версий конфигураций. Ссылки на другие конфигурации в описании публикации. Правила совместимы со всеми другими версиями конфигураций новыми и старыми, поддерживающими обмен и синхронизацию в формате EnterpriseData. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

27633 руб.

12.06.2017    160838    968    321    

482

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Переносите справочную информацию, остатки и документы из УПП 1.3 в Бухгалтерию 3.0 с помощью готовых правил. Переносится более 50 видов документов. Простой интерфейс и понятные настройки.

42000 руб.

15.12.2021    34228    259    64    

195

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена | Можно выполнить переход с УПП на БП 3 или запускать выгрузку данных за выбранный период времени | Переносятся документы, начальные остатки и вся справочная информация | Есть фильтр по организации и множество других параметров выгрузки | Поддерживается несколько сценариев работы: как первичный полный перенос, так и перенос только новых документов | Перенос данных возможен в "1С: Бухгалтерия 3.0" версии ПРОФ, КОРП или базовую | Переход с "1С: УПП1.3" / "1С:КА 1.1" на "1С:БП3.0" с помощью правил конвертации будет максимально комфортным! | Можно бесплатно проверить перенос на вашем сервере!

50050 руб.

25.02.2015    188300    360    289    

418

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Бухгалтер 1С:Предприятие 8 1С:Бухгалтерия 2.0 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Налоговый учет Платные (руб)

Перенос данных из БП 2 в БП 3 готовые правила конвертации данных (КД 2), сэкономьте свое время! | Выполнить переход с БП 2 на БП 3 в ситуациях, когда простым обновлением перейти не получается | Переносится вся справочная информация, документы за выбранный период, а также начальные остатки на выбранную дату (то есть можно еще и свертку базы сделать при переносе) | Есть фильтр по организациям при выгрузке данных | Перенос можно проверить перед покупкой прямо на вашем сервере! Обращайтесь за проверкой!

50600 руб.

21.05.2019    58112    81    131    

73

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос данных из ERP в БП 3 | из КА 2 в БП 3 | из УТ 11 в БП 3 | из ЕРП в БП 3 | Сэкономьте время - используйте готовое решение для перехода! | Перенос разработан в формате КД 2 (правила конвертации данных) | Переносятся все возможные виды документов, начальных остатков и нормативно-справочная информация| Можно опционально выгружать каждую пару "номенклатура+характеристика" как отдельную номенклатуру | Есть выгрузка настроек счетов учета и зарплатных данных из ERP / КА 2 | Можно проверить на вашем сервере перед покупкой

58000 руб.

15.04.2019    84141    225    175    

162

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист 1С:Предприятие 8 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Платные (руб)

Правила переноса кадровых и расчетных данных и справочной информации из "1С:УПП1.3" или "1С:КА 1.1" в "1С:ЗУП 3.1 | Разработан в формате КД 2 (правила конвертации данных) | При выгрузке есть фильтр по организациям | Обновляется при выходе новых релизов 1С | Развитие алгоритмов | Расчетные документы переносятся в документ "Перенос данных" | Создаются документы "Начальная штатная расстановка" и "Начальная задолженность по зарплате", переносятся кадровые документы

58000 руб.

29.10.2018    62824    82    132    

81
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Tarlich 96 04.10.22 12:37 Сейчас в теме
Хороша идея .... так можно по любому событию допилить ...
2. Komanda1C 14.10.22 14:13 Сейчас в теме
Расширение само генерит ошибку, что вызывает аварийное завершение регламентного задания -

Значение не является значением объектного типа (СобытияЖурнала)
{ув_ОтправкаУведомленийОбОшибкахОбмена ОбщийМодуль.ОбменДаннымиСервер.Модуль(72)}:СобытияЖурнала=СтруктураЗаписейЖурнала.СобытияЖурнала;
{ув_ОтправкаУведомленийОбОшибкахОбмена ОбщийМодуль.ОбменДаннымиСервер.Модуль(10)}:СобытияЖурнала(Тело, УзелИнформационнойБазы);
{ОбщийМодуль.ОбменДаннымиСервер.Модуль(15318)}:ПослеВыполненияОбменов(Выборка.УзелИнформационнойБазы, ОтказПоСтрокеСценария);
{ОбщийМодуль.ОбменДаннымиСервер.Модуль(15371)}:ВыполнитьОбменДаннымиПоСценариюОбменаДанными(Ложь, Выборка.Ссылка);
3. sevarm 66 14.10.22 17:58 Сейчас в теме
(2) А релиз и конфигурация у Вас какие?
4. Komanda1C 15.10.22 08:26 Сейчас в теме
(3)
Управление холдингом, редакция 3.1 (3.1.17.13)
Платформа 8.3.20.1613
5. sevarm 66 15.10.22 22:25 Сейчас в теме
(4) К сожалению нет у меня такой конфигурации и достать не удалось. На бухгалтерии все работает четко.
Я добавил процедуры работы с журналами прямо в расширение. Попробуйте скачать новую версию (должно бесплатно дать скачать) и проверить как будет у Вас работать.
6. Komanda1C 17.10.22 11:28 Сейчас в теме
(5)в УХ точно такая же БСП как и в БП. Новое расширение ничем не отличается от старого ))
7. sevarm 66 17.10.22 14:59 Сейчас в теме
(6) Отличается. Я не знаю как дает скачивать файл инфостарт если обновлялось. Можете сами дописать в расшиерение:
В строке 67 модуля "ОбменДаннымиСервер" расширения текст "ЖурналРегистрации.ПрочитатьСобытияЖурналаРегистрации" заменен на "ув_ЖурналРегистрации.ПрочитатьСобытияЖурналаРегистрации"

Добавлен общий модуль ув_ЖурналРегистрации :

#Область СлужебныйПрограммныйИнтерфейс

// Выполняет чтение событий журнала регистрации в соответствии с установленным отбором.
//
// Параметры:
//
//     ПараметрыОтчета - Структура - содержит параметры для чтения событий журнала регистрации. Содержит поля:
//      *  Журнал                  - ТаблицаЗначений         - содержит записи журнала регистрации.
//      *  ОтборЖурналаРегистрации   - Структура             - настройки отбора для чтения записей журнала регистрации:
//          ** ДатаНачала - Дата - дата начала событий (опционально).
//          ** ДатаОкончания - Дата - дата окончания событий (опционально).
//      *  КоличествоСобытий       - Число                   - ограничение числа считываемых событий журнала.
//      *  УникальныйИдентификатор - УникальныйИдентификатор - уникальный идентификатор формы.
//      *  МенеджерВладельца       - Произвольный            - менеджер объекта, в форме которого отображается журнал
//                                                             регистрации, необходим для обратного вызова функций
//                                                             оформления.
//      *  ДобавлятьДополнительныеКолонки - Булево           - определяет необходимость обратного вызова для добавления
//                                                             дополнительных колонок.
//     АдресХранилища - Строка
//                    - УникальныйИдентификатор - адрес временного хранилища для результата.
//
// Результат представляет собой структуру с полями:
//     СобытияЖурнала - ТаблицаЗначений - Отобранные события.
//
Процедура ПрочитатьСобытияЖурналаРегистрации(ПараметрыОтчета, АдресХранилища) Экспорт
	
	ОтборЖурналаНаКлиенте          = ПараметрыОтчета.ОтборЖурналаРегистрации;
	КоличествоСобытий              = ПараметрыОтчета.КоличествоПоказываемыхСобытий;
	МенеджерВладельца              = ПараметрыОтчета.МенеджерВладельца;
	ДобавлятьДополнительныеКолонки = ПараметрыОтчета.ДобавлятьДополнительныеКолонки;
	
	// Проверяем параметры на корректность.
	ДатаНачала    = Неопределено;
	ДатаОкончания = Неопределено;
	ДатыОтбораУказаны = ОтборЖурналаНаКлиенте.Свойство("ДатаНачала", ДатаНачала) И ОтборЖурналаНаКлиенте.Свойство("ДатаОкончания", ДатаОкончания)
		И ЗначениеЗаполнено(ДатаНачала) И ЗначениеЗаполнено(ОтборЖурналаНаКлиенте.ДатаОкончания);
		
	Если ДатыОтбораУказаны И ДатаНачала > ДатаОкончания Тогда
		ВызватьИсключение НСтр("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 <Удален>'"), СобытиеЖурнала.ИмяПользователя);
		КонецЕсли;
		
		Если МодульРаботаВМоделиСервиса <> Неопределено Тогда
			Если ПсевдонимыПользователей.Получить(СобытиеЖурнала.Пользователь) = Неопределено Тогда
				ПсевдонимПользователя = МодульРаботаВМоделиСервиса.ПсевдонимПользователяИнформационнойБазы(СобытиеЖурнала.Пользователь);
				ПсевдонимыПользователей.Вставить(СобытиеЖурнала.Пользователь, ПсевдонимПользователя);
			Иначе
				ПсевдонимПользователя = ПсевдонимыПользователей.Получить(СобытиеЖурнала.Пользователь);
			КонецЕсли;
			
			Если ЗначениеЗаполнено(ПсевдонимПользователя) Тогда
				СобытиеЖурнала.ИмяПользователя = ПсевдонимПользователя;
			КонецЕсли;
		КонецЕсли;
		
		// Преобразование идентификатора в имя для использования в дальнейшем при установке отборе.
		ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(СобытиеЖурнала.Пользователь);
		Если ПользовательИБ <> Неопределено Тогда
			СобытиеЖурнала.Пользователь = ПользовательИБ.Имя;
		КонецЕсли;
		УстановитьПривилегированныйРежим(Ложь);
	КонецЦикла;
	
	// Успешное завершение
	Результат = Новый Структура;
	Результат.Вставить("СобытияЖурнала", СобытияЖурнала);
	
	ПоместитьВоВременноеХранилище(Результат, АдресХранилища);
КонецПроцедуры

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

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

// Определяет смещение времени сервера относительно времени программы.
//
// Возвращаемое значение:
//   Число - смещение времени в секундах.
//       Может использоваться для приведения фильтров, применяемых к журналу, к дате сервера,
//       а также для приведения дат, полученных из журнала, к датам программы.
//
Функция СмещениеВремениСервера() Экспорт
	
	СмещениеВремениСервера = ТекущаяДата() - ТекущаяДатаСеанса(); // АПК:143 Требуется дата компьютера
	Если СмещениеВремениСервера >= -1 И СмещениеВремениСервера <= 1 Тогда
		СмещениеВремениСервера = 0;
	КонецЕсли;
	Возврат СмещениеВремениСервера;
	
КонецФункции

#КонецОбласти  

#Область СлужебныеПроцедурыИФункции

// Преобразование отбора.
//
// Параметры:
//  Отбор - Отбор - передаваемый отбор.
//
Процедура ПреобразованиеОтбора(Отбор, СмещениеВремениСервера)
	
	Для Каждого ЭлементОтбора Из Отбор Цикл
		Если ТипЗнч(ЭлементОтбора.Значение) = Тип("СписокЗначений") Тогда
			ПреобразованиеЭлементаОтбора(Отбор, ЭлементОтбора);
		ИначеЕсли ВРег(ЭлементОтбора.Ключ) = ВРег("Транзакция") Тогда
			Если СтрНайти(ЭлементОтбора.Значение, "(") = 0 Тогда
				Отбор.Вставить(ЭлементОтбора.Ключ, "(" + ЭлементОтбора.Значение);
			КонецЕсли;
		ИначеЕсли СмещениеВремениСервера <> 0
			И (ВРег(ЭлементОтбора.Ключ) = ВРег("ДатаНачала") Или ВРег(ЭлементОтбора.Ключ) = ВРег("ДатаОкончания")) Тогда
			Отбор.Вставить(ЭлементОтбора.Ключ, ЭлементОтбора.Значение + СмещениеВремениСервера);
		КонецЕсли;
	КонецЦикла;
	
КонецПроцедуры

// Преобразование элемента отбора.
//
// Параметры:
//  Отбор - Отбор - передаваемый отбор.
//  Отбор - ЭлементОтбора - элемент передаваемого отбора.
//
Процедура ПреобразованиеЭлементаОтбора(Отбор, ЭлементОтбора)
	
	КлючСтруктурыОтбора = ЭлементОтбора.Ключ;
	// Эта процедура вызывается, если элемент отбора является списком значений,
	// в отборе же должен быть массив значений. Преобразуем список в массив.
	Если ВРег(КлючСтруктурыОтбора) = ВРег("РазделениеДанныхСеанса") Тогда
		НовоеЗначение = Новый Структура;
	Иначе
		НовоеЗначение = Новый Массив;
	КонецЕсли;
	
	КлючСтруктурыОтбора = ЭлементОтбора.Ключ;
	
	Для Каждого ЗначениеИзСписка Из ЭлементОтбора.Значение Цикл
		Если ВРег(КлючСтруктурыОтбора) = ВРег("Уровень") Тогда
			// Уровни сообщений представлены строкой, требуется преобразование в значение перечисления.
			НовоеЗначение.Добавить(Обработки.ЖурналРегистрации.УровеньЖурналаРегистрацииЗначениеПоИмени(ЗначениеИзСписка.Значение));
		ИначеЕсли ВРег(КлючСтруктурыОтбора) = ВРег("СтатусТранзакции") Тогда
			// Статусы транзакций представлены строкой, требуется преобразование в значение перечисления.
			НовоеЗначение.Добавить(Обработки.ЖурналРегистрации.СтатусТранзакцииЗаписиЖурналаРегистрацииЗначениеПоИмени(ЗначениеИзСписка.Значение));
		ИначеЕсли ВРег(КлючСтруктурыОтбора) = ВРег("РазделениеДанныхСеанса") Тогда
			МассивЗначенийРазделителей = Новый Массив;
			КлючСтруктурыОтбора = "РазделениеДанныхСеанса";
			РазделениеДанныхМассив = СтрРазделить(ЗначениеИзСписка.Значение, "=", Истина);
			
			ЗначенияРазделителя = СтрРазделить(РазделениеДанныхМассив[1], ",", Истина);
			Для Каждого ЗначениеРазделителя Из ЗначенияРазделителя Цикл
				ЭлементОтбораПоРазделителю = Новый Структура("Значение, Использование", Число(ЗначениеРазделителя), Истина);
				МассивЗначенийРазделителей.Добавить(ЭлементОтбораПоРазделителю);
			КонецЦикла;
			
			НовоеЗначение.Вставить(РазделениеДанныхМассив[0], МассивЗначенийРазделителей);
			
		Иначе
			Если ТипЗнч(ЗначениеИзСписка.Значение) = Тип("Число") Тогда
				НовоеЗначение.Добавить(ЗначениеИзСписка.Значение);
				Продолжить;
			Иначе
				ЗначенияОтбора = СтрРазделить(ЗначениеИзСписка.Значение, Символы.ПС, Ложь);
			КонецЕсли;
			Для Каждого ЗначениеОтбора Из ЗначенияОтбора Цикл
				НовоеЗначение.Добавить(ЗначениеОтбора);
			КонецЦикла;
		КонецЕсли;
	КонецЦикла;
	
	Отбор.Вставить(ЭлементОтбора.Ключ, НовоеЗначение);
	
КонецПроцедуры

// Добавить ограничение в представление отбора.
//
// Параметры:
//  ОтборЖурналаРегистрации - Отбор - отбор журнала регистрации.
//  ПредставлениеОтбора - Строка - представление отбора.
//  ИмяОграничения - Строка - имя ограничения.
//  ОтборЖурналаРегистрацииПоУмолчанию - Отбор - отбор журнала регистрации по умолчанию.
//
Процедура ДобавитьОграничениеВПредставлениеОтбора(ОтборЖурналаРегистрации, ПредставлениеОтбора, ИмяОграничения,
	ОтборЖурналаРегистрацииПоУмолчанию = Неопределено)
	
	Если Не ОтборЖурналаРегистрации.Свойство(ИмяОграничения) Тогда
		Возврат;
	КонецЕсли;
	
	СписокОграничений = ОтборЖурналаРегистрации[ИмяОграничения];
	Ограничение       = "";
	
	// Не формируем представление отбора, если его значение соответствует значению отбора по умолчанию.
	Если ОтборЖурналаРегистрацииПоУмолчанию <> Неопределено Тогда
		СписокОграниченийПоУмолчанию = "";
		Если ОтборЖурналаРегистрацииПоУмолчанию.Свойство(ИмяОграничения, СписокОграниченийПоУмолчанию) Тогда
			Если СписокОграниченийПоУмолчанию.Количество() = СписокОграничений.Количество() Тогда
				Возврат;
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;
	
	Если ИмяОграничения = "Событие" И СписокОграничений.Количество() > 5 Тогда
		
		Ограничение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'События (%1)'"), СписокОграничений.Количество());
		
	ИначеЕсли ИмяОграничения = "Сеанс" И СписокОграничений.Количество() > 3 Тогда
		
		Ограничение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Сеансы (%1)'"), СписокОграничений.Количество());
		
	Иначе
		
		Для Каждого ЭлементСписка Из СписокОграничений Цикл
			Если Не ПустаяСтрока(Ограничение) Тогда
				Ограничение = Ограничение + ", ";
			КонецЕсли;
			
			Если Не ЗначениеЗаполнено(ЭлементСписка.Представление) Тогда
				ЗначениеОграничения = ЭлементСписка.Значение;
			Иначе
				ЗначениеОграничения = ЭлементСписка.Представление;
			КонецЕсли;
			
			Если (ВРег(ИмяОграничения) = ВРег("Сеанс")
				ИЛИ ВРег(ИмяОграничения) = ВРег("Уровень"))
				И ПустаяСтрока(Ограничение) Тогда
				
				Если ИмяОграничения = "Сеанс" Тогда
					ПредставлениеОграничения = НСтр("ru = 'Сеанс'");
				Иначе
					ПредставлениеОграничения = НСтр("ru = 'Уровень'");
				КонецЕсли;
				
				Ограничение = НСтр("ru = '%1: %2'");
				Ограничение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Ограничение, ПредставлениеОграничения, ЗначениеОграничения);
			Иначе
				Ограничение = Ограничение + ЗначениеОграничения;
			КонецЕсли;
		КонецЦикла;
		
	КонецЕсли;
	
	Если Не ПустаяСтрока(ПредставлениеОтбора) Тогда 
		ПредставлениеОтбора = ПредставлениеОтбора + "; ";
	КонецЕсли;
	
	ПредставлениеОтбора = ПредставлениеОтбора + Ограничение;
	
КонецПроцедуры

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

////////////////////////////////////////////////////////////­////////////////////
// Вспомогательные процедуры и функции.

// Только для внутреннего использования.
//
Процедура УстановитьСтрокуАдресаДанных(СобытиеЖурнала)
	
	ЗаписьXML = Новый ЗаписьXML();
	ЗаписьXML.УстановитьСтроку();
	СериализаторXDTO.ЗаписатьXML(ЗаписьXML, СобытиеЖурнала.Данные); 
	СобытиеЖурнала.АдресДанных = ЗаписьXML.Закрыть();
	
КонецПроцедуры

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

#КонецОбласти

Показать
8. PANovikov 14 03.04.24 13:41 Сейчас в теме
Добрый день! приобрели у Вас данное расширение, но в УТ11 выдет ошибку:
Значение не является значением объектного типа (СобытияЖурнала)
{ув_ОтправкаУведомленийОбОшибкахОбмена ОбщийМодуль.ОбменДаннымиСервер.Модуль(72)}:СобытияЖурнала=СтруктураЗаписейЖурнала.СобытияЖурнала;
{ув_ОтправкаУведомленийОбОшибкахОбмена ОбщийМодуль.ОбменДаннымиСервер.Модуль(10)}:СобытияЖурнала(Тело, УзелИнформационнойБазы);
{ОбщийМодуль.ОбменДаннымиСервер.Модуль(9342)}:ПослеВыполненияОбменов(УзелИнформационнойБазы, Отказ);
{Обработка.ВыполнениеОбменаДанными.МодульМенеджера(41)}:ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(
{(1)}:Обработки.ВыполнениеОбменаДанными.ВыполнитьЗапускОбменаДанными(Параметры[0],Параметры[1])
{ОбщийМодуль.ОбщегоНазначения.Модуль(5315)}:Выполнить ИмяМетода + "(" + ПараметрыСтрока + ")";
{ОбщийМодуль.ДлительныеОперации.Модуль(1413)}:ОбщегоНазначения.ВыполнитьМетодКонфигурации(ИмяПроцедуры, ПараметрыВызова);
{ОбщийМодуль.ДлительныеОперации.Модуль(1390)}:ВызватьПроцедуру(ВсеПараметры.ИмяПроцедуры, ВсеПараметры.ПараметрыПроцедуры);
Направьте на путь истинный.
9. sevarm 66 03.04.24 17:26 Сейчас в теме
(8) Здравствуйте! Какой у Вас релиз УТ11?
10. PANovikov 14 03.04.24 18:20 Сейчас в теме
11. sevarm 66 03.04.24 22:43 Сейчас в теме
(10) Проверьте настройки системной учетной записи электронной почты. Там должны быть рабочие данные, т.к. отправка идет через нее.
Условие при котором возможна такая ошибка добавил в новую версию.
Прикрепленные файлы:
13. PANovikov 14 09.04.24 14:00 Сейчас в теме
(11)Добрый день! Не сбрасывали?
12. пользователь 04.04.24 08:13
Сообщение было скрыто модератором.
...
Для отправки сообщения требуется регистрация/авторизация