Категории эксплуатации / Модуль менеджера

файл

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

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

#Область ДляВызоваИзДругихПодсистем

// Возвращает имена блокируемых реквизитов для механизма блокирования реквизитов БСП
//
// Возвращаемое значение:
//	Массив из Строка - имена блокируемых реквизитов.
//
Функция ПолучитьБлокируемыеРеквизитыОбъекта() Экспорт
	
	Результат = Новый Массив;
	Результат.Добавить("ИмущественныйУчет");
	Результат.Добавить("ИнвентарныйУчет");
	Результат.Добавить("УчетПоФизЛицам");
	Результат.Добавить("СрокЭксплуатации");
	Результат.Добавить("УчитыватьВВидеГрупповогоОС");
	Результат.Добавить("СпособПогашенияСтоимостиБУ");
	Результат.Добавить("СпособПогашенияСтоимостиНУ");

	Возврат Результат;
	
КонецФункции

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

//++ НЕ УТ

#Область Прочее

// Заполняет реквизиты параметров настройки счетов учета расходов, которые влияют на настройку,
// 	соответствующими им именам реквизитов аналитики учета.
//
// Параметры:
// 	СоответствиеИмен - Соответствие - ключом выступает имя реквизита, используемое в настройке счетов учета,
// 		значением является соответствующее имя реквизита аналитики учета.
// 
Процедура ЗаполнитьСоответствиеРеквизитовНастройкиСчетовУчета(СоответствиеИмен) Экспорт
	
	Возврат;
	
КонецПроцедуры

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

#КонецОбласти
	
//-- НЕ УТ

// СтандартныеПодсистемы.ВерсионированиеОбъектов
// Определяет настройки объекта для подсистемы ВерсионированиеОбъектов.
//
// Параметры:
// Настройки - Структура - настройки подсистемы.
Процедура ПриОпределенииНастроекВерсионированияОбъектов(Настройки) Экспорт
КонецПроцедуры
// Конец СтандартныеПодсистемы.ВерсионированиеОбъектов

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

#Область ОбработчикиСобытий

Процедура ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка)
	
	МультиязычностьКлиентСервер.ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка);
	
КонецПроцедуры

Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка)
	
	МультиязычностьКлиентСервер.ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка);
	
КонецПроцедуры

Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
	
	МультиязычностьСервер.ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка, Метаданные.Справочники.КатегорииЭксплуатации);
	
КонецПроцедуры

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

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

#Область ОбновлениеИнформационнойБазы

// см. ОбновлениеИнформационнойБазыБСП.ПриДобавленииОбработчиковОбновления
//
Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт

	Обработчик = Обработчики.Добавить();
	Обработчик.Процедура = "Справочники.КатегорииЭксплуатации.ОбработатьДанныеДляПереходаНаНовуюВерсию";
	Обработчик.Версия = "11.5.24.25";
	Обработчик.РежимВыполнения = "Отложенно";
	Обработчик.Идентификатор = Новый УникальныйИдентификатор("a99afde1-7432-40d5-afde-c5b0e220856f");
	Обработчик.Многопоточный = Истина;
	Обработчик.ПроцедураЗаполненияДанныхОбновления = "Справочники.КатегорииЭксплуатации.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию";
	Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы";
	
	СписокОписаний = Новый Массив;
	СписокОписаний.Добавить(НСтр("ru = 'Обновление справочника ""Категории эксплуатации"":'"));
	СписокОписаний.Добавить(НСтр("ru = '- Заполнение мультиязычных реквизитов справочника';"));
	
	Обработчик.Комментарий = СтрСоединить(СписокОписаний, Символы.ПС);
	Обработчик.Порядок = Перечисления.ПорядокОбработчиковОбновления.Обычный;
	
	Читаемые = Новый Массив;
	Читаемые.Добавить(Метаданные.Справочники.КатегорииЭксплуатации.ПолноеИмя());
	Обработчик.ЧитаемыеОбъекты = СтрСоединить(Читаемые, ",");
	
	Изменяемые = Новый Массив;
	Изменяемые.Добавить(Метаданные.Справочники.КатегорииЭксплуатации.ПолноеИмя());
	Обработчик.ИзменяемыеОбъекты = СтрСоединить(Изменяемые, ",");
	
	Блокируемые = Новый Массив;
	Блокируемые.Добавить(Метаданные.Справочники.КатегорииЭксплуатации.ПолноеИмя());
	Обработчик.БлокируемыеОбъекты = СтрСоединить(Блокируемые, ",");

КонецПроцедуры

// Параметры:
// 	Параметры - см. ОбновлениеИнформационнойБазы.ОсновныеПараметрыОтметкиКОбработке
//
Процедура ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию(Параметры) Экспорт
	
	ПараметрыВыборки = Параметры.ПараметрыВыборки;
	ПараметрыВыборки.ПолныеИменаОбъектов = ПустаяСсылка().Метаданные().ПолноеИмя();
	ПараметрыВыборки.СпособВыборки = ОбновлениеИнформационнойБазы.СпособВыборкиСсылки();
		
	ИспользуютсяДопЯзыки = Ложь;
	Для Каждого ИспользуетсяДопЯзык Из МультиязычностьСервер.СведенияОЯзыках().Используется Цикл
		
		Если ИспользуетсяДопЯзык.Значение = Истина Тогда
			
			ИспользуютсяДопЯзыки = Истина;
			Прервать;
			
		КонецЕсли;
		
	КонецЦикла;
	
	Если Не ИспользуютсяДопЯзыки Тогда
		
		Возврат;
		
	КонецЕсли;
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	КатегорииЭксплуатации.Ссылка КАК Ссылка
	|ИЗ
	|	Справочник.КатегорииЭксплуатации КАК КатегорииЭксплуатации
	|ГДЕ
	|	НЕ КатегорииЭксплуатации.Наименование = """"
	|	И КатегорииЭксплуатации.НаименованиеЯзык1 = """"
	|	
	|ОБЪЕДИНИТЬ 
	|
	|ВЫБРАТЬ
	|	КатегорииЭксплуатации.Ссылка КАК Ссылка
	|ИЗ
	|	Справочник.КатегорииЭксплуатации КАК КатегорииЭксплуатации
	|ГДЕ
	|	НЕ КатегорииЭксплуатации.Наименование = """"
	|	И КатегорииЭксплуатации.НаименованиеЯзык2 = """"";
	
	ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"));
	
КонецПроцедуры

// Обработчик обновления
// 
// Параметры:
// 	Параметры - См. ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляМногопоточнойОбработки 
//
Процедура ОбработатьДанныеДляПереходаНаНовуюВерсию(Параметры) Экспорт
	
	Параметры.ОбработкаЗавершена = Ложь;
	
	ПолноеИмяОбъекта = ПустаяСсылка().Метаданные().ПолноеИмя();
	
	ОбновляемыеДанные = ОбновлениеИнформационнойБазы.ДанныеДляОбновленияВМногопоточномОбработчике(Параметры);
	
	Если ОбновляемыеДанные.Количество() = 0 Тогда
		
		Параметры.ОбработкаЗавершена =
			ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена(Параметры.Очередь, ПолноеИмяОбъекта);
		Возврат;
		
	КонецЕсли;
	
	ОбъектовОбработано = 0;
	ПроблемныхОбъектов = 0;
	ИсключенияПриОбновлении = Новый Массив;
	
	СписокОписаний = Новый Массив;
	СписокОписаний.Добавить(НСтр("ru = 'Не удалось обработать справочник ""Категории эксплуатации"" по обработчику:'"));
	СписокОписаний.Добавить(НСтр("ru = '- Заполнение мультиязычных реквизитов справочника';"));
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	ДанныеДляОбновления.Ссылка КАК Ссылка
	|ПОМЕСТИТЬ ВТ
	|ИЗ
	|	&ДанныеДляОбновления КАК ДанныеДляОбновления
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	ВТ.Ссылка КАК Ссылка,
	|	КатегорииЭксплуатации.ВерсияДанных КАК ВерсияДанных
	|ИЗ
	|	ВТ КАК ВТ
	|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КатегорииЭксплуатации КАК КатегорииЭксплуатации
	|		ПО ВТ.Ссылка = КатегорииЭксплуатации.Ссылка";
	
	Запрос.УстановитьПараметр("ДанныеДляОбновления", ОбновляемыеДанные);
	
	Справочник = Запрос.Выполнить().Выбрать();
	
	Пока Справочник.Следующий() Цикл
		
		ПричинаИсключения = 0;
		Рекомендация = "";
		
		НачатьТранзакцию();
		
		Попытка
			
			ПричинаИсключения = 1; // Блокировка
			
			Блокировка = Новый БлокировкаДанных;
			
			ЭлементБлокировки = Блокировка.Добавить(ПолноеИмяОбъекта);
			ЭлементБлокировки.УстановитьЗначение("Ссылка", Справочник.Ссылка);
			ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
			
			Блокировка.Заблокировать();
			
			СправочникОбъект = ОбновлениеИнформационнойБазыУТ.ПроверитьПолучитьОбъект(
				Справочник.Ссылка, Справочник.ВерсияДанных, Параметры.Очередь); // СправочникОбъект
			
			ПричинаИсключения = 2; // ПлохиеДанные
			Рекомендация = НСтр("ru = 'Проверьте данные справочника вручную.'");
			
			ОбъектИзменен = Ложь;
			
			Если СправочникОбъект <> Неопределено Тогда
				
				Если Не ЗначениеЗаполнено(СправочникОбъект.НаименованиеЯзык1) Тогда
					
					СправочникОбъект.НаименованиеЯзык1 = СправочникОбъект.Наименование;
					
				КонецЕсли;
				
				Если Не ЗначениеЗаполнено(СправочникОбъект.НаименованиеЯзык2) Тогда
					
					СправочникОбъект.НаименованиеЯзык2 = СправочникОбъект.Наименование;
					
				КонецЕсли;
				
				ОбъектИзменен = Истина;
				
			КонецЕсли;
			
			ПричинаИсключения = 3; // Запись
			
			Если ОбъектИзменен Тогда
				ОбновлениеИнформационнойБазы.ЗаписатьДанные(СправочникОбъект);
			Иначе
				ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(Справочник.Ссылка);
			КонецЕсли;
			
			ОбъектовОбработано = ОбъектовОбработано + 1;
			ЗафиксироватьТранзакцию();
			
		Исключение
			
			ОтменитьТранзакцию();
			
			ПроблемныхОбъектов = ПроблемныхОбъектов + 1;
			ОбновлениеИнформационнойБазыУТ.СообщитьОНеудачнойОбработке(ИнформацияОбОшибке(), Справочник.Ссылка);
			
			Если ПричинаИсключения = 2 Тогда
				
				ОписаниеПроблемы = ОбновлениеИнформационнойБазыУТ.ПроблемаСДанными(
					Справочник.Ссылка, Рекомендация, ИнформацияОбОшибке());
				ИсключенияПриОбновлении.Добавить(ОписаниеПроблемы);
				
			ИначеЕсли ПричинаИсключения = 3 Тогда
				
				ОбновлениеИнформационнойБазыУТ.ЗаписатьПлохиеДанные(
					ИсключенияПриОбновлении, ОбъектовОбработано, Параметры);
				ВызватьИсключение СтрСоединить(СписокОписаний, Символы.ПС);
				
			КонецЕсли;
			
		КонецПопытки;
		
	КонецЦикла;
	
	Параметры.ОбработкаЗавершена =
		ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена(Параметры.Очередь, ПолноеИмяОбъекта);
	
КонецПроцедуры

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

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

#КонецЕсли

Связанные материалы