Обесценение внеоборотных активов / Модуль менеджера

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

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

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

#Область Проведение

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

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

		ОбесценениеВНАЛокализация.ДополнитьТекстыЗапросовПроведения(Запрос, ТекстыЗапроса, Регистры);
		
	КонецЕсли;
	
	////////////////////////////////////////////////////////////////////////////
	// Получим таблицы для движений
	
	Возврат ПроведениеДокументов.ИнициализироватьДанныеДокументаДляПроведения(Запрос, ТекстыЗапроса, ДопПараметры);
	
КонецФункции

//++ НЕ УТ

// Функция возвращает текст запроса для отражения документа в регламентированном учете.
//
// Возвращаемое значение:
//	Строка - Текст запроса
//
Функция ТекстОтраженияВРеглУчете() Экспорт

	Возврат ОбесценениеВНАЛокализация.ТекстОтраженияВРеглУчете();

КонецФункции

// Функция возвращает текст запроса дополнительных временных таблиц,
// необходимых для отражения в регламентированном учете.
//
// Возвращаемое значение:
//	Строка - текст запроса создания временных таблиц.
//
Функция ТекстЗапросаВТОтраженияВРеглУчете() Экспорт

	Возврат ОбесценениеВНАЛокализация.ТекстЗапросаВТОтраженияВРеглУчете();

КонецФункции

//-- НЕ УТ

// Получает и помещает в хранилище данные для формирования документов завершения этапа.
//
// Параметры:
//	ПараметрыЗаполнения - Структура
//		*Организация - СправочникСсылка.Организации
//		*Период - Дата
//	АдресХранилища - Строка 
//	
Процедура ЗаполнитьВНА(ПараметрыЗаполнения, АдресХранилища) Экспорт
	
	ОписаниеЗамера = ОценкаПроизводительности.НачатьЗамерДлительнойОперации(
		"Документ.ОбесценениеВНА.Форма.ФормаДокумента.Команда.Заполнить");
	
	Данные = ПолучитьДанныеОбесцененияВНА(ПараметрыЗаполнения);
	
	ПоместитьВоВременноеХранилище(Данные, АдресХранилища);
	
	ОценкаПроизводительности.ЗакончитьЗамерДлительнойОперации(ОписаниеЗамера, Данные.Количество() / 100);
	
КонецПроцедуры

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

#Область ПодключаемыеКоманды

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

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

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

// Формирует печатные формы.
//
// Параметры:
//  МассивОбъектов - Массив - ссылки на объекты, которые нужно распечатать;
//  ПараметрыПечати - Структура - дополнительные настройки печати;
//  КоллекцияПечатныхФорм - ТаблицаЗначений - сформированные табличные документы (выходной параметр)
//  ОбъектыПечати - СписокЗначений - значение - ссылка на объект.
//                                            представление - имя области, в которой был выведен объект (выходной параметр);
//  ПараметрыВывода - Структура - дополнительные параметры сформированных табличных документов (выходной параметр).
//
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт

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

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

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

// СтандартныеПодсистемы.УправлениеДоступом

// Параметры:
//   Ограничение - см. УправлениеДоступомПереопределяемый.ПриЗаполненииОграниченияДоступа.Ограничение.
//
Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт

	Ограничение.Текст =
	"РазрешитьЧтениеИзменение
	|ГДЕ
	|	ЗначениеРазрешено(Организация)";

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

// Конец СтандартныеПодсистемы.УправлениеДоступом

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

КонецПроцедуры
// Конец СтандартныеПодсистемы.ВерсионированиеОбъектов

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

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

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

#Область Проведение

Функция АдаптированныйТекстЗапросаДвиженийПоРегистру(ИмяРегистра) Экспорт

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

	Результат = ОбновлениеИнформационнойБазыУТ.РезультатАдаптацииЗапроса();
	Результат.ЗначенияПараметров = ЗначенияПараметров;
	Результат.ТекстЗапроса = ТекстЗапроса;
	
	Возврат Результат;
	
КонецФункции

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

Функция ЗначенияПараметровПроведения(Реквизиты = Неопределено)

	ЗначенияПараметровПроведения = Новый Структура;
	ЗначенияПараметровПроведения.Вставить("ИдентификаторМетаданных", ОбщегоНазначения.ИдентификаторОбъектаМетаданных("Документ.ОбесценениеВНА"));

	Возврат ЗначенияПараметровПроведения;
	
КонецФункции

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

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

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

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

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

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

#Область ЗагрузкаИзФайла

////////////////////////////////////////////////////////////////////////////////
// Интерфейс для работы с подсистемой Загрузка из файла.

// Устанавливает параметры загрузки.
//
Процедура УстановитьПараметрыЗагрузкиИзФайлаВТЧ(Параметры) Экспорт
	
	Для Каждого ТабличнаяЧасть Из Метаданные.Документы.ОбесценениеВНА.ТабличныеЧасти Цикл
		Если Найти(Параметры.ИмяТабличнойЧасти, ТабличнаяЧасть.Имя) <> 0 Тогда
			
			Параметры.ИмяМакетаСШаблоном = ТабличнаяЧасть.Имя;
			Возврат;
			
		КонецЕсли;
	КонецЦикла;
	
КонецПроцедуры

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

	Если ТипЗнч(ДополнительныеПараметры) = Тип("Структура") Тогда
		
		Запрос = Новый Запрос;

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

	КонецЕсли;
	
	ПоместитьВоВременноеХранилище(ТаблицаРезультата, АдресТаблицыСопоставления);
	
КонецПроцедуры

Функция ПреобразоватьЗагружаемыеДанные(ЗагружаемыеДанные)
	ТипЧисло =  Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(31, 2, ДопустимыйЗнак.Неотрицательный));
	
	Данные = Новый ТаблицаЗначений;
	Для Каждого Колонка Из ЗагружаемыеДанные.Колонки Цикл
		Если Найти(Колонка.Имя, "ВозмещаемаяСтоимость") <> 0 Тогда
			ТипДанных = ТипЧисло;
		Иначе
			ТипДанных = Колонка.ТипЗначения;
		КонецЕсли;
		
		Данные.Колонки.Добавить(Колонка.Имя, ТипДанных);
	КонецЦикла;
	
	Для Каждого Строка Из ЗагружаемыеДанные Цикл
		СтрокаДанных = Данные.Добавить();
		ЗаполнитьЗначенияСвойств(СтрокаДанных, Строка, ,"ВозмещаемаяСтоимостьРегл, ВозмещаемаяСтоимостьУпр");
		
		СтрокаДанных.ВозмещаемаяСтоимостьРегл = ПривестиЗначениеКТипу(Строка.ВозмещаемаяСтоимостьРегл, ТипЧисло);
		СтрокаДанных.ВозмещаемаяСтоимостьУпр  = ПривестиЗначениеКТипу(Строка.ВозмещаемаяСтоимостьУпр , ТипЧисло);
	КонецЦикла;
	
	Возврат Данные;

КонецФункции

Функция ПривестиЗначениеКТипу(Значение, ОписаниеТипов)
	
	Для каждого Тип Из ОписаниеТипов.Типы() Цикл
		Если Тип = Тип("Дата") Тогда
			
			Возврат СтроковыеФункцииКлиентСервер.СтрокаВДату(Значение, ОписаниеТипов.КвалификаторыДаты.ЧастиДаты);
			
		ИначеЕсли Тип = Тип("Булево") Тогда
			
			ОписаниеТипаБулево = Новый ОписаниеТипов("Булево");
			Возврат ОписаниеТипаБулево.ПривестиЗначение(Значение);
			
		ИначеЕсли Тип = Тип("Строка") Тогда
			
			ОписаниеТипаСтрока = Новый ОписаниеТипов("Строка");
			Возврат ОписаниеТипаСтрока.ПривестиЗначение(Значение);
			
		ИначеЕсли Тип = Тип("Число") Тогда
			
			НецифровыеСимволы = СтрСоединить(СтрРазделить(Значение, "1234567890,."));
			Значение = СтрСоединить(СтрРазделить(Значение, НецифровыеСимволы));
			ОписаниеТипаЧисло = Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(31, 2, ДопустимыйЗнак.Неотрицательный));
			Возврат ОписаниеТипаЧисло.ПривестиЗначение(Значение);
			
		КонецЕсли;
	КонецЦикла;
	
	Возврат Значение;
	
КонецФункции

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

// Возвращает таблицу, переданную через временное хранилище
// 
// Параметры:
// 	АдресВременногоХранилища - Строка - адрес хранилища, в котором лежит таблица
// Возвращаемое значение:
// 	ТаблицаЗначений - таблица с колонками:
// 		* Идентификатор - Число - порядковый номер.
// 		Остальные колонки.
Функция ПрочитатьТаблицуКЗагрузке(АдресВременногоХранилища)
	
	Возврат ПолучитьИзВременногоХранилища(АдресВременногоХранилища); // ТаблицаЗначений
	
КонецФункции

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

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

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

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

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

	Возврат РезультатЗапроса.Выгрузить();

КонецФункции

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

#КонецЕсли

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