Данные для базы распределения расходов / Модуль объекта

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

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

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

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

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

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

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

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

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	НастройкиОтчета 	= КомпоновщикНастроек.ПолучитьНастройки();
	
	ЗапросДанных  = Новый Запрос;
	НачалоПериода = КомпоновкаДанныхКлиентСервер.ПолучитьПараметр(НастройкиОтчета, "НачалоПериода").Значение;

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

	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
	ПроцессорВывода.Вывести(ПроцессорКомпоновки);
	
КонецПроцедуры

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

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

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

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

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

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

#КонецЕсли

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