Себестоимость товаров / Модуль объекта

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

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

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

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

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

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

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

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

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

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

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

// Процедура вывода предупреждения в табличный документ.
//
// Параметры:
//	ДокументРезультат - ТабличныйДокумент - основной табличный документ отчета
//	СписокПолей - Массив - массив строк с именами полей
//	
Процедура ВывестиПредупреждениеОбОтбореПоРесурсам(ДокументРезультат, СписокПолей)
	
	ТекстПредупреждения = НСтр("ru = 'В отчете ""Себестоимость товаров"" не поддерживаются общие отборы по количественным и стоимостным показателям для всего отчета (настройки отчета - закладка ""Фильтры"").
								|Такие отборы следует перенести в отборы группировок (настройки отчета -> закладка ""Структура"" -> кнопка ""Расширенный"" внизу окна настроек -> открыть конкретную группировку и установить отбор на закладке ""Фильтры"").
								|Отборы необходимо добавить во всех группировках, отмеченных для вывода в отчете (отмечены галочками на закладке ""Структура"").
								|Группировка ""Детализация до исходных затрат"" не поддерживает отборы по количеству.
								|
								|Отборы по следующим полям неоходимо отключить или перенести в группировки:'");
	
	Для Каждого Поле Из СписокПолей Цикл
		ТекстПредупреждения = ТекстПредупреждения + Символы.ПС
			+ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
						НСтр("ru = ' - %1'"),
						Поле);
	КонецЦикла; 
		
	ТаблицаПредупреждение = Новый ТабличныйДокумент;
	ОбластьПредупреждение = ТаблицаПредупреждение.Область(1,1,1,1);
	
	ОбластьПредупреждение.Текст 	 = ТекстПредупреждения;
	ОбластьПредупреждение.ЦветТекста = ЦветаСтиля.ЦветОтрицательногоЧисла;
	
	ДокументРезультат.ВставитьОбласть(
		ОбластьПредупреждение,
		ДокументРезультат.Область(1,1,1,1),
		ТипСмещенияТабличногоДокумента.ПоВертикали);
	
КонецПроцедуры

// Процедура настройки параметров отчета.
//
// Параметры:
//	НастройкиОтчета - Структура - настройки отчета
//	НовыеНастройкиКД - НастройкиКомпоновкиДанных - настройки компоновки данных
//	НовыеПользовательскиеНастройкиКД - ПользовательскиеНастройкиКомпоновкиДанных - пользовательские настройки 
//
Процедура НастроитьПараметрыОтчетаПоВариантуОтчета(НастройкиОтчета, НовыеНастройкиКД, НовыеПользовательскиеНастройкиКД)
	
	ПредопределенныйВариант = ПолучитьПредопределенныйВариант(НастройкиОтчета.ВариантСсылка);
	
	ПараметрДанныеОтчета = СхемаКомпоновкиДанных.Параметры.Найти("ДанныеОтчета");
	ПараметрПоПредприятию = СхемаКомпоновкиДанных.Параметры.Найти("ПоПредприятию");
	
	СписокВыбора = Новый СписокЗначений;
	
	Если ПредопределенныйВариант.КлючВарианта = "СебестоимостьТоваровПоПредприятию"
	 ИЛИ ПредопределенныйВариант.КлючВарианта = "СебестоимостьТоваровПоОперациямПоПредприятию"
	 ИЛИ ПредопределенныйВариант.КлючВарианта = "ДинамикаЗакупокПредприятия" Тогда
		
		СписокВыбора.Добавить(1, НСтр("ru = 'В валюте упр. учета с НДС'"));
		СписокВыбора.Добавить(2, НСтр("ru = 'В валюте упр. учета без НДС'"));
		ПараметрПоПредприятию.Значение = Истина;
		
	Иначе
		
		Если РасчетСебестоимостиПовтИсп.УправленческийУчетОрганизаций() Тогда
			СписокВыбора.Добавить(3, НСтр("ru = 'В валюте упр. учета'"));
		КонецЕсли;
		СписокВыбора.Добавить(4, НСтр("ru = 'В валюте регл. учета'"));
		ПараметрПоПредприятию.Значение = Ложь;
		
	КонецЕсли;
	
	ПараметрДанныеОтчета.УстановитьДоступныеЗначения(СписокВыбора);
	
	Если НовыеНастройкиКД = Неопределено
		Или НовыеПользовательскиеНастройкиКД = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	ЗначениеПараметраДанныеОтчета = НовыеНастройкиКД.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ДанныеОтчета"));
	НастройкаДанныеОтчета = НовыеПользовательскиеНастройкиКД.Элементы.Найти(ЗначениеПараметраДанныеОтчета.ИдентификаторПользовательскойНастройки);
	Если Не НастройкаДанныеОтчета = Неопределено
		И СписокВыбора.НайтиПоЗначению(НастройкаДанныеОтчета.Значение) = Неопределено Тогда
		НастройкаДанныеОтчета.Значение = СписокВыбора[0].Значение;
	КонецЕсли;
	
КонецПроцедуры

Функция ПолучитьПредопределенныйВариант(Знач Вариант)
	
	КлючиВариантов = Новый Массив;
	КлючиВариантов.Добавить("СебестоимостьТоваровБазовая");
	КлючиВариантов.Добавить("СебестоимостьТоваровПоОперациямБазовая");
	КлючиВариантов.Добавить("ДинамикаЗакупокПредприятия");
	КлючиВариантов.Добавить("ДинамикаЗакупокОрганизаций");
	КлючиВариантов.Добавить("СебестоимостьТоваровПоОрганизациям");
	КлючиВариантов.Добавить("СебестоимостьТоваровПоОперациямПоОрганизациям");
	КлючиВариантов.Добавить("СебестоимостьТоваровПоПредприятию");
	КлючиВариантов.Добавить("СебестоимостьТоваровПоОперациямПоПредприятию");
	
	// Если вариант не задан, то возьмем первый из списка по умолчанию
	Если Вариант = Неопределено Тогда
		Возврат Новый Структура("КлючВарианта", КлючиВариантов[0]);
	КонецЕсли;
	
	Пока КлючиВариантов.Найти(Вариант.КлючВарианта) = Неопределено
		И ЗначениеЗаполнено(Вариант.Родитель) Цикл
		Вариант = Вариант.Родитель;
	КонецЦикла;
	
	Возврат Вариант;
	
КонецФункции

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

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

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

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

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

#Область НастройкаПараметровОтчета

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

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

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

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

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

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

#КонецЕсли

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