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