#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область СлужебныеПроцедурыИФункции
#Область ОбновлениеИнформационнойБазы
Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт
Обработчик = Обработчики.Добавить();
Обработчик.Процедура = "РегистрыСведений.УдалитьСвязиПоказателейБюджетов.ОбработатьДанныеДляПереходаНаНовуюВерсию";
Обработчик.Версия = "2.5.25.3";
Обработчик.РежимВыполнения = "Отложенно";
Обработчик.Порядок = Перечисления.ПорядокОбработчиковОбновления.Некритичный;
Обработчик.Идентификатор = Новый УникальныйИдентификатор("a2527f5b-4896-44e9-9a19-bbe3490cd63b");
Обработчик.Многопоточный = Истина;
Обработчик.ПроцедураЗаполненияДанныхОбновления = "РегистрыСведений.УдалитьСвязиПоказателейБюджетов.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию";
Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы";
СписокОписаний = Новый Массив;
СписокОписаний.Добавить(НСтр("ru = 'Заполнение справочника ""Правила расчета связанных остатков и оборотов бюджетов"":'"));
СписокОписаний.Добавить(НСтр("ru = 'перенос записей из регистра сведений ""Связи показателей бюджетов""';"));
Обработчик.Комментарий = СтрСоединить(СписокОписаний, Символы.ПС);
Читаемые = Новый Массив;
Читаемые.Добавить(Метаданные.РегистрыСведений.УдалитьСвязиПоказателейБюджетов.ПолноеИмя());
Обработчик.ЧитаемыеОбъекты = СтрСоединить(Читаемые, ",");
Изменяемые = Новый Массив;
Изменяемые.Добавить(Метаданные.РегистрыСведений.УдалитьСвязиПоказателейБюджетов.ПолноеИмя());
Обработчик.ИзменяемыеОбъекты = СтрСоединить(Изменяемые, ",");
Блокируемые = Новый Массив;
Блокируемые.Добавить(Метаданные.РегистрыСведений.УдалитьСвязиПоказателейБюджетов.ПолноеИмя());
Обработчик.БлокируемыеОбъекты = СтрСоединить(Блокируемые, ",");
Обработчик.ПриоритетыВыполнения = ОбновлениеИнформационнойБазы.ПриоритетыВыполненияОбработчика();
КонецПроцедуры
Процедура ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию(Параметры) Экспорт
ПолноеИмяРегистра = Метаданные.РегистрыСведений.УдалитьСвязиПоказателейБюджетов.ПолноеИмя();
ПараметрыВыборки = Параметры.ПараметрыВыборки;
ПараметрыВыборки.ПолныеИменаРегистров = ПолноеИмяРегистра;
ПараметрыВыборки.СпособВыборки = ОбновлениеИнформационнойБазы.СпособВыборкиИзмеренияНезависимогоРегистраСведений();
ДополнительныеПараметры = ОбновлениеИнформационнойБазы.ДополнительныеПараметрыОтметкиОбработки();
ДополнительныеПараметры.ЭтоНезависимыйРегистрСведений = Истина;
ДополнительныеПараметры.ПолноеИмяРегистра = ПолноеИмяРегистра;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ДанныеРегистра.СтатьяБюджетов КАК СтатьяБюджетов,
| ДанныеРегистра.СвязанныйПоказательБюджетов КАК СвязанныйПоказательБюджетов
|ИЗ
| РегистрСведений.УдалитьСвязиПоказателейБюджетов КАК ДанныеРегистра
|ГДЕ
| НЕ ИСТИНА В
| (ВЫБРАТЬ ПЕРВЫЕ 1
| ИСТИНА
| ИЗ
| Справочник.ПравилаРасчетаСвязанныхОстатковИОборотовБюджетов КАК ПравилаРасчета
| ГДЕ
| ДанныеРегистра.СтатьяБюджетов = ПравилаРасчета.Источник
| И ДанныеРегистра.СвязанныйПоказательБюджетов = ПравилаРасчета.Приемник)";
ТаблицаРезультат = Запрос.Выполнить().Выгрузить();
ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, ТаблицаРезультат, ДополнительныеПараметры);
КонецПроцедуры
Процедура ОбработатьДанныеДляПереходаНаНовуюВерсию(Параметры) Экспорт
МетаданныеОбъекта = Метаданные.РегистрыСведений.УдалитьСвязиПоказателейБюджетов;
ПолноеИмяОбъекта = МетаданныеОбъекта.ПолноеИмя();
Если Не ОбновлениеИнформационнойБазы.ЕстьДанныеДляОбработки(Параметры.Очередь, ПолноеИмяОбъекта) Тогда
Параметры.ОбработкаЗавершена = Истина;
Возврат;
КонецЕсли;
ОбновляемыеДанные = ОбновлениеИнформационнойБазы.ДанныеДляОбновленияВМногопоточномОбработчике(Параметры);
Если ОбновляемыеДанные.Количество() = 0 Тогда
Параметры.ОбработкаЗавершена = Ложь;
Возврат;
КонецЕсли;
МаксимальноеКоличествоАналитик = БюджетированиеКлиентСервер.МаксимальноеКоличествоАналитик();
Для каждого ЗаписьРегистра Из ОбновляемыеДанные Цикл
НаборЗаписей = РегистрыСведений.УдалитьСвязиПоказателейБюджетов.СоздатьНаборЗаписей();
ВидыАналитикПоказателя = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ЗаписьРегистра.СвязанныйПоказательБюджетов,
"ВидАналитики1,ВидАналитики2,ВидАналитики3,ВидАналитики4,ВидАналитики5,ВидАналитики6");
НачатьТранзакцию();
Попытка
ПричинаИсключения = "Блокировка";
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить(ПолноеИмяОбъекта);
Для каждого ЭлементИзмерения Из ОбновляемыеДанные.Колонки Цикл
ЭлементБлокировки.УстановитьЗначение(ЭлементИзмерения.Имя, ЗаписьРегистра[ЭлементИзмерения.Имя]);
НаборЗаписей.Отбор[ЭлементИзмерения.Имя].Установить(ЗаписьРегистра[ЭлементИзмерения.Имя]);
КонецЦикла;
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый;
Блокировка.Заблокировать();
ПричинаИсключения = "ПлохиеДанные";
НаборЗаписей.Прочитать();
Для Каждого Запись Из НаборЗаписей Цикл
ПравилоРасчетаОбъект = Справочники.ПравилаРасчетаСвязанныхОстатковИОборотовБюджетов.СоздатьЭлемент();
ПравилоРасчетаОбъект.Приемник = ЗаписьРегистра.СвязанныйПоказательБюджетов;
ПравилоРасчетаОбъект.Источник = ЗаписьРегистра.СтатьяБюджетов;
ПравилоРасчетаОбъект.Наименование = Справочники.ПравилаРасчетаСвязанныхОстатковИОборотовБюджетов.СформироватьНаименованиеПравила(
ПравилоРасчетаОбъект.Наименование, ПравилоРасчетаОбъект.Источник, ПравилоРасчетаОбъект.Приемник);
ПравилоРасчетаОбъект.Статус = Перечисления.СтатусыПравилБюджетирования.Действует;
НоваяСтрока = ПравилоРасчетаОбъект.НастройкиРасчетаДанных.Добавить();
НоваяСтрока.Коэффициент = Запись.Коэффициент;
НоваяСтрока.ОбратныйЗнак = Запись.Расход;
Для НомерАналитики = 1 По МаксимальноеКоличествоАналитик Цикл
СтрокаВидАналитики = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("ВидАналитики%1",
НомерАналитики);
Если Не ЗначениеЗаполнено(ВидыАналитикПоказателя[СтрокаВидАналитики]) Тогда
Продолжить;
КонецЕсли;
НоваяСтрока = ПравилоРасчетаОбъект.НастройкиЗаполненияАналитик.Добавить();
НоваяСтрока.ВидАналитики = ВидыАналитикПоказателя[СтрокаВидАналитики];
СтрокаТранслироватьАналитику = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
"ТранслироватьАналитику%1", НомерАналитики);
Если Не Запись[СтрокаТранслироватьАналитику] Тогда
НоваяСтрока.СпособЗаполнения = Перечисления.СпособыЗаполненияАналитикСтатейБюджетов.УказаннымЗначением;
СтрокаАналитика = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("Аналитика%1",
НомерАналитики);
НоваяСтрока.ЗначениеАналитики = Запись[СтрокаАналитика];
Иначе
НоваяСтрока.СпособЗаполнения = Перечисления.СпособыЗаполненияАналитикСтатейБюджетов.ИзИсточникаДанных;
СтрокаАдресТрансляцииАналитики = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
"АдресТрансляцииАналитики%1", НомерАналитики);
НоваяСтрока.ВыражениеЗаполненияАналитики = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
"Аналитика%1", Запись[СтрокаАдресТрансляцииАналитики]);
КонецЕсли;
КонецЦикла;
ПравилоРасчетаОбъект.Записать();
КонецЦикла;
ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(НаборЗаписей);
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
Если ПричинаИсключения = "ПлохиеДанные" Тогда
ОбновлениеИнформационнойБазыУТ.СообщитьОНеудачнойОбработке(ИнформацияОбОшибке(), ЗаписьРегистра.СвязанныйПоказательБюджетов);
ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(НаборЗаписей);
ОбновлениеИнформационнойБазы.ЗарегистрироватьПроблемуСДанными(ЗаписьРегистра.СвязанныйПоказательБюджетов,
ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецЕсли;
КонецПопытки;
КонецЦикла;
Параметры.ОбработкаЗавершена = ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена(Параметры.Очередь,
ПолноеИмяОбъекта, Новый Структура);
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#КонецЕсли