Распределение доходов по направлениям деятельности / Модуль менеджера

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

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

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

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

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

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

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

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

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

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

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

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

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

		Возврат КомандаСоздатьНаОсновании;
	КонецЕсли;

	Возврат Неопределено;
КонецФункции

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

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

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

	РаспределениеДоходовИРасходовПоНаправлениямДеятельностиЛокализация.ДобавитьКомандыПечати(КомандыПечати);

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область ОбработчикиЭтаповЗакрытияМесяца

#Область РаспределениеДоходовИРасходовПоНаправлениямДеятельности

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

// Обработчики этапа.

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

Процедура Выполнить_РаспределениеДоходовПоНаправлениямДеятельности(ПараметрыОбработчика) Экспорт
	
	ПараметрыРасчета = ПараметрыОбработчика.ПараметрыРасчета;
	
	КоличествоФЗ = РасчетСебестоимостиПовтИсп.ЗначенияТехнологическихПараметров(Перечисления.ОперацииЗакрытияМесяца.ПустаяСсылка()).МаксимальноеКоличествоФЗФормированияДокументов;
	КоличествоСтрок = ПараметрыРасчета.МассивОрганизаций.Количество();
	СтрокВФЗ = Цел(КоличествоСтрок / ?(КоличествоФЗ = 0, 1, КоличествоФЗ));
	
	Если КоличествоФЗ < 2 ИЛИ СтрокВФЗ < 1 Тогда
		
		// Однопоточное распределение
		РаспределениеДоходовИРасходовПоНаправлениямДеятельностиЛокализация.РаспределитьДоходыПоНаправлениямДеятельности(
			ПараметрыОбработчика,
			ПараметрыРасчета.МассивОрганизаций);
		
	Иначе

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

					ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
						НСтр("ru = 'Фоновое задание формирования документов %1
						|%2'", ОбщегоНазначения.КодОсновногоЯзыка()),
						?(Задание.Состояние = СостояниеФоновогоЗадания.Отменено,
							НСтр("ru = 'отменено'", ОбщегоНазначения.КодОсновногоЯзыка()),
							НСтр("ru = 'завершено аварийно'", ОбщегоНазначения.КодОсновногоЯзыка())),
						?(Задание.ИнформацияОбОшибке = Неопределено,
							НСтр("ru = '<Нет описания ошибки>'", ОбщегоНазначения.КодОсновногоЯзыка()),
							ПодробноеПредставлениеОшибки(Задание.ИнформацияОбОшибке)));
							
					ЗакрытиеМесяцаСервер.ЗафиксироватьНаличиеПроблемыПриВыполненииРасчета(
						ПараметрыОбработчика,
						ТекстОшибки);
					
				КонецЕсли;
				
			КонецЦикла;
			
			ЗаданияЗавершены = (МассивЗаданий.Количество() = 0);
			
		КонецЦикла;
		
	КонецЕсли;
	
КонецПроцедуры

// Проверки состояния системы, относящиеся к этапу.

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

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

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

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

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

#КонецЕсли

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

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

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

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

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

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

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

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

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

Функция ДополнительныеИсточникиДанныхДляДвижений(ИмяРегистра) Экспорт

	ИсточникиДанных = Новый Соответствие;

	Возврат ИсточникиДанных; 

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

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

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

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

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

	ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
	Возврат ТекстЗапроса;
КонецФункции

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область БлокировкаПриОбновленииИБ

Процедура ПроверитьБлокировкуВходящихДанныхПриОбновленииИБ(ПредставлениеОперации)
	
	ВходящиеДанные = Новый Соответствие;
	
	ВходящиеДанные.Вставить(Метаданные.Документы.РаспределениеДоходовПоНаправлениямДеятельности);
	ВходящиеДанные.Вставить(Метаданные.РегистрыНакопления.ПрочиеДоходы);
	ВходящиеДанные.Вставить(Метаданные.РегистрыНакопления.ПрочиеРасходы);
	
	ЗакрытиеМесяцаСервер.ПроверитьБлокировкуВходящихДанныхПриОбновленииИБ(ВходящиеДанные, ПредставлениеОперации);
	
КонецПроцедуры

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

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

#КонецЕсли

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