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

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

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

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

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

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

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

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

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

#КонецЕсли

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