План счетов бухгалтерского учета / Модуль менеджера

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

// Возвращает представление плана в финансовых отчетах
//
// Возвращаемое значение:
// 	Строка - Представление плана счетов в финансовых отчетах
//
Функция ПредставлениеВФинансовыхОтчетах() Экспорт
	
	Возврат НСтр("ru = 'Регламентированный'");
	
КонецФункции

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

// Возвращает счета доступные для выбора с учетом параметров выбора.
// 
// Параметры:
// 	Параметры - Структура - Может содержать свойства "ВидыСубконто", "ВГруппе".
// 	
// Возвращаемое значение:
// 	Массив из ПланСчетовСсылка.Хозрасчетный - доступные для выбора счета.
Функция СчетаДляВыбора(Параметры) Экспорт

	СписокСчетов = Новый Массив;
	
	Если Параметры.Свойство("ВидыСубконто") Тогда
		ИсключаемыеСсылки = Неопределено;
		Параметры.Свойство("ИсключаемыеСсылки", ИсключаемыеСсылки);
		СписокСчетов = СчетаСНаборомСубконто(Параметры.ВидыСубконто, ИсключаемыеСсылки);
	КонецЕсли;
	
	Если Параметры.Свойство("ВГруппе") Тогда
		
		ТекстЗапроса = 
		"ВЫБРАТЬ РАЗРЕШЕННЫЕ
		|	Хозрасчетный.Ссылка
		|ИЗ
		|	ПланСчетов.Хозрасчетный КАК Хозрасчетный
		|ГДЕ
		|	(НЕ &ОтборПоСпискуСчетов
		|		ИЛИ Хозрасчетный.Ссылка В (&СписокСчетов))
		|	И Хозрасчетный.Ссылка В ИЕРАРХИИ(&ВГруппе)";
		
		Запрос = Новый Запрос(ТекстЗапроса);
		Запрос.УстановитьПараметр("ВГруппе", Параметры.ВГруппе);
		Запрос.УстановитьПараметр("СписокСчетов", СписокСчетов);
		Запрос.УстановитьПараметр("ОтборПоСпискуСчетов", СписокСчетов.Количество() <> 0);
		
		СписокСчетов = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");
		
	КонецЕсли;

	Возврат СписокСчетов;
	
КонецФункции

// Возвращает массив счетов-исключений, настройки которых не редактируются пользователем.
//
// Возвращаемое значение:
//	ФиксированныйМассив - Массив счетов.
//
Функция ПолучитьСчетаИсключения() Экспорт
	
	МассивСчетовИсключений = Новый Массив;
	
	МассивСчетовИсключений.Добавить(ПланыСчетов.Хозрасчетный.ВекселяВыданные); 											// 60.03
	МассивСчетовИсключений.Добавить(ПланыСчетов.Хозрасчетный.ВекселяПолученные); 										// 62.03
	МассивСчетовИсключений.Добавить(ПланыСчетов.Хозрасчетный.РасчетыПоИмущественномуЛичномуИДобровольномуСтрахованию);	// 76.01
	МассивСчетовИсключений.Добавить(ПланыСчетов.Хозрасчетный.РасчетыПоПричитающимсяДивидендам); 						// 76.03
	МассивСчетовИсключений.Добавить(ПланыСчетов.Хозрасчетный.РасчетыПоИмущественномуИЛичномуСтрахованиюВал);      		// 76.21
	МассивСчетовИсключений.Добавить(ПланыСчетов.Хозрасчетный.СпецоснасткаИСпецодеждаВЭксплуатации);                     // 10.11
	МассивСчетовИсключений.Добавить(ПланыСчетов.Хозрасчетный.ДопРасходыМатериалы);										// 10.ДР
	МассивСчетовИсключений.Добавить(ПланыСчетов.Хозрасчетный.ДопРасходыТовары);											// 41.ДР
	МассивСчетовИсключений.Добавить(ПланыСчетов.Хозрасчетный.ДопОборудованиеКУстановке);								// 07.ДР
	
	Возврат Новый ФиксированныйМассив(МассивСчетовИсключений);
	
КонецФункции

// Определяет перечень аналитики, которая может присутствовать на счете,
// но скрыта от пользователя, до тех пор, пока не предполагает вариативности.
// 
// Возвращаемое значение:
//  Массив - неиспользуемая аналитика. Элементы массива: 
//       * ПланВидовХарактеристикСсылка.ВидыСубконтоХозрасчетные - вид субконто на счете
//       * Строка - имя измерения регистра бухгалтерии ("Подразделение")
//
Функция НеиспользуемаяАналитика() Экспорт

	НеиспользуемаяАналитика = Новый Массив;
	Если БухгалтерскийУчетВызовСервераПовтИсп.ИспользоватьОднуНоменклатурнуюГруппу() Тогда
		НеиспользуемаяАналитика.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.НоменклатурныеГруппы);
	КонецЕсли;
	Если Не РаботаСДоговорамиКонтрагентовБПВызовСервера.ВестиУчетПоДоговорам() Тогда
		НеиспользуемаяАналитика.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Договоры);
	КонецЕсли;
	Если Не БухгалтерскийУчетПереопределяемый.ИспользоватьПодразделения() Тогда
		НеиспользуемаяАналитика.Добавить("Подразделение");
	КонецЕсли;
	
	Возврат НеиспользуемаяАналитика;
	
КонецФункции

// Обработка переименования счета 68.12.
//
Процедура ПереименоватьСчетНалогаУСН() Экспорт

	Если ПланыОбмена.ГлавныйУзел() <> Неопределено Тогда // В подчиненных узлах РИБ не выполняется
		Возврат;
	КонецЕсли;
	
	УстановитьПривилегированныйРежим(Истина);
	
	Попытка
	
		СчетСсылка = ПланыСчетов.Хозрасчетный.ЕНприУСН;

		РеквизитыСчета = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(СчетСсылка,
			"Код, Наименование, ЗапретитьИспользоватьВПроводках, Забалансовый");
			
		Если НЕ РеквизитыСчета.ЗапретитьИспользоватьВПроводках
			И НЕ РеквизитыСчета.Забалансовый
			И РеквизитыСчета.Код = "68.12"
			И СокрЛП(РеквизитыСчета.Наименование) = НСтр("ru = 'Единый налог при применении упрощенной системы налогообложения'") Тогда

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

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

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

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

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

#КонецЕсли

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

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

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

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

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

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

// Заполняет список команд печати.
// 
// Параметры:
//   КомандыПечати - см. УправлениеПечатью.СоздатьКоллекциюКомандПечати
//
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт

	// Простой список
	КомандаПечати = КомандыПечати.Добавить();
	КомандаПечати.Идентификатор = "ПростойСписок";
	КомандаПечати.Представление = НСтр("ru = 'Простой список'");
	КомандаПечати.ЗаголовокФормы= НСтр("ru = 'План счетов'");
	КомандаПечати.СписокФорм    = "ФормаСписка, ФормаВыбора";
	
	// С подробными описаниями
	КомандаПечати = КомандыПечати.Добавить();
	КомандаПечати.Идентификатор = "СПодробнымиОписаниями";
	КомандаПечати.Представление = НСтр("ru = 'С подробными описаниями'");
	КомандаПечати.ЗаголовокФормы= НСтр("ru = 'План счетов (с подробными описаниями)'");
	КомандаПечати.СписокФорм    = "ФормаСписка, ФормаВыбора";
	
КонецПроцедуры

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

Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
	
	Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ПростойСписок") Тогда
		// Формируем табличный документ и добавляем его в коллекцию печатных форм.
		УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "ПростойСписок", НСтр("ru = 'Простой список'"), ПечатьПланаСчетов());                                            
	КонецЕсли;
	
	Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "СПодробнымиОписаниями") Тогда
		// Формируем табличный документ и добавляем его в коллекцию печатных форм.
		УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "СПодробнымиОписаниями", НСтр("ru = 'С подробными описаниями'"), ПечатьПланаСчетов(Истина));                                            
	КонецЕсли;
		
КонецПроцедуры

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

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

Процедура ЗаполнитьПредопределенныеНастройки() Экспорт
	
	ПС = ПланыСчетов.Хозрасчетный;
	
	ЗначенияРеквизитов = Новый Структура;
	ЗначенияРеквизитов.Вставить("ИсключитьСуммуБУИзПереоценкиПоПлануСчетов", Истина);
	ЗначенияРеквизитов.Вставить("ИсключитьСуммуУУИзПереоценкиПоПлануСчетов", Истина);
	
	УстановитьРеквизитыСчета(ПС.РасчетыПоАвансамВыданнымВал, ЗначенияРеквизитов);
	УстановитьРеквизитыСчета(ПС.РасчетыПоАвансамВыданнымУЕ, ЗначенияРеквизитов);
	УстановитьРеквизитыСчета(ПС.РасчетыПоАвансамПолученнымВал, ЗначенияРеквизитов);
	УстановитьРеквизитыСчета(ПС.РасчетыПоАвансамПолученнымУЕ, ЗначенияРеквизитов);
	УстановитьРеквизитыСчета(ПС.РасчетыСПодотчетнымиЛицамиВал, ЗначенияРеквизитов);
	
КонецПроцедуры

Процедура УстановитьРеквизитыСчета(Счет, ЗначенияРеквизитов)
	
	ОбъектСчета = Счет.ПолучитьОбъект();
	
	Для каждого КлючИЗначение Из ЗначенияРеквизитов Цикл
		ОбъектСчета[КлючИЗначение.Ключ] = КлючИЗначение.Значение;
	КонецЦикла;
	
	ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ОбъектСчета);
	
КонецПроцедуры

Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт
	
	Обработчик = Обработчики.Добавить();
	Обработчик.Процедура = "ПланыСчетов.Хозрасчетный.ОбработатьДанныеДляПереходаНаНовуюВерсию";
	Обработчик.Версия = "2.5.25.79";
	Обработчик.РежимВыполнения = "Отложенно";
	Обработчик.Идентификатор = Новый УникальныйИдентификатор("f21aecfa-73a8-400f-bb0d-41e3f75f4b67");
	Обработчик.Многопоточный = Истина;
	Обработчик.ПроцедураЗаполненияДанныхОбновления = "ПланыСчетов.Хозрасчетный.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию";
	Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы";
	Обработчик.Порядок = Перечисления.ПорядокОбработчиковОбновления.Некритичный;
	Обработчик.Комментарий = НСтр("ru = 'Заполняет и исправляет реквизиты предопределенных элементов плана счетов ""Хозрасчетный"".'");
	
	Читаемые = Новый Массив;
	Читаемые.Добавить(Метаданные.ПланыСчетов.Хозрасчетный.ПолноеИмя());
	Обработчик.ЧитаемыеОбъекты = СтрСоединить(Читаемые, ",");
	
	Изменяемые = Новый Массив;
	Изменяемые.Добавить(Метаданные.ПланыСчетов.Хозрасчетный.ПолноеИмя());
	Обработчик.ИзменяемыеОбъекты = СтрСоединить(Изменяемые, ",");
	
	Блокируемые = Новый Массив;
	Блокируемые.Добавить(Метаданные.ПланыСчетов.Хозрасчетный.ПолноеИмя());
	Обработчик.БлокируемыеОбъекты = СтрСоединить(Блокируемые, ",");
	
КонецПроцедуры

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

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

Функция СписокСчетовКУдалению()
	
	МассивСчетов = Новый Массив;
	МассивСчетов.Добавить(ПредопределенноеЗначение("ПланСчетов.Хозрасчетный.УдалитьПФР_ОПС_СвышеПредела")); // 69.02.8
	
	Возврат Новый ФиксированныйМассив(МассивСчетов);
	
КонецФункции

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

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

#КонецЕсли

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