Каталог решений - Проверка регистраторов при обновлении конфигурации

Проверка регистраторов при обновлении конфигурации

Проверка регистраторов при обновлении конфигурации

В наличии

При обновлении конфигурации состав движений документов может быть изменен. Если в них были сделаны движения по своим регистрам, то их нужно восстановить. Если забыть это сделать — данные будут утеряны.

Категория:

Описание

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

Также можно забыть восстановить слетевшие изменения в определяемых типах. 

Чтобы гарантировать себя от этой ситуации, я сделал проверку состава регистраторов для добавленных регистров. Она состоит из двух модулей — для клиентской и серверной части.

Серверный модуль выглядит так:

Процедура ПроверкаКонфигурации(Отказ) Экспорт
	
	Если Не РольДоступна("ПолныеПрава") Тогда
		возврат;
	КонецЕсли;
	
	ПроверитьРегистраторы_РегистраНакопления_мт_ВыполнениеПроизводственныхОпераций(Отказ);
	
	ПроверитьОпределяемыйТип_ВладелецПрисоединенныхФайлов(Отказ);
	ПроверитьОпределяемыйТип_ПрисоединенныйФайл(Отказ);
	ПроверитьОпределяемыйТип_ПрисоединенныйФайлОбъект(Отказ);
	
КонецПроцедуры

Процедура ПроверитьРегистраторы_РегистраНакопления_мт_ВыполнениеПроизводственныхОпераций(Отказ)
	
	МетаданныеРегистра = Метаданные.РегистрыНакопления.мт_ВыполнениеПроизводственныхОпераций;
	
	ТребуемыеРегистраторы = Новый Массив;
	ТребуемыеРегистраторы.Добавить(Метаданные.Документы.КорректировкаРегистров);
	ТребуемыеРегистраторы.Добавить(Метаданные.Документы.ПоступлениеОтПереработчика);
	ТребуемыеРегистраторы.Добавить(Метаданные.Документы.ПроизводственнаяОперация2_2);
	
	ПроверитьНаличиеРегистраторов(МетаданныеРегистра, ТребуемыеРегистраторы, Отказ);
	
КонецПроцедуры

Процедура ПроверитьОпределяемыйТип_ВладелецПрисоединенныхФайлов(Отказ)
	
	МетаданныеОпределяемогоТипа = Метаданные.ОпределяемыеТипы.ВладелецПрисоединенныхФайлов;
	
	ТребуемыеТипы = Новый Массив;
	ТребуемыеТипы.Добавить(Тип("ДокументСсылка.мт_АктОБраке"));
	ТребуемыеТипы.Добавить(Тип("ДокументСсылка.мт_СогласованиеОтклонений"));
	
	ПроверитьВхождениеТипов_в_ОпределяемыйТип(МетаданныеОпределяемогоТипа, ТребуемыеТипы, Отказ)
	
КонецПроцедуры

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

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

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

Процедура ПроверкаКонфигурации() Экспорт
	
	Отказ = Ложь;
	мт_ТестированиеКонфигурации_Сервер.ПроверкаКонфигурации(Отказ);
	
	Если Отказ Тогда
		
		ПоказатьПредупреждение(, "Обнаружены ошибки при проверке конфигурации (см. журнал регистрации)");
		
	КонецЕсли;
	
КонецПроцедуры

Функция вызывается при старте системы. Сообщение об ошибке будет выдано при запуске тестовой копии обновленной базы, и будет исправлено до того, как попадет в рабочую базу.

has been added to your cart:
Оформление заказа