Регистры налогового учета / Форма отчета / Модуль формы

файл
#Область ОписаниеПеременных

&НаКлиенте
Перем ПараметрыОбработчикаОжидания; // См. ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания

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

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	ИнициализироватьНастройкиРасшифровки();      
	
	БухгалтерскиеОтчетыВызовСервера.ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка);
	
	НастроитьПоОрганизации();
	
	УстановитьУсловноеОформление();
	
	ЭтаФорма.ПроверятьЗаполнениеАвтоматически = Истина; 
	
КонецПроцедуры

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

&НаКлиенте
Процедура Подключаемый_ОткрытьФормуВыбораПредопределенногоВарианта()
	
	ВыборВариантаЗавершение = Новый ОписаниеОповещения("ВыборПредопределенногоВариантаЗавершение", ЭтотОбъект);
	
	ПараметрыФормы = Новый Структура();
	ПараметрыФормы.Вставить("РежимВыбора", Истина);
	ПараметрыФормы.Вставить("ТолькоВарианты", Истина);
	ПараметрыФормы.Вставить("ВыборГруппИЭлементов", Ложь);
	ПараметрыФормы.Вставить("МножественныйВыбор", Ложь);
	ПараметрыФормы.Вставить("МножественныйВыбор", Ложь);
	Отбор = Новый Структура("ТипОтчета", ПредопределенноеЗначение("Перечисление.ТипыОтчетов.Внутренний"));
	ПараметрыФормы.Вставить("Отбор", Отбор);
	ПараметрыФормы.Вставить("СтрокаПоиска", "Регистр");
	
	ОткрытьФорму("Справочник.ВариантыОтчетов.ФормаВыбора", ПараметрыФормы, ЭтотОбъект, Истина,,,ВыборВариантаЗавершение);
	
КонецПроцедуры

&НаКлиенте
Процедура ВыборПредопределенногоВариантаЗавершение(Результат, ДополнительныеПараметры) Экспорт
	
	Если Результат <> Неопределено И ИнициализироватьПредопределенныйВариант(Результат) Тогда
		
		ОткрытиеЗавершение();
	Иначе
		
		Закрыть();
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ОткрытиеЗавершение()

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

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

&НаКлиенте
Процедура ПриЗакрытии(ЗавершениеРаботы)
	
	БухгалтерскиеОтчетыКлиент.ПриЗакрытии(ЭтаФорма, ЗавершениеРаботы);
	
КонецПроцедуры

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

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

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

&НаСервере
Процедура ПередЗагрузкойВариантаНаСервере(Настройки)
	
	Схема = ПолучитьИзВременногоХранилища(СхемаКомпоновкиДанных);
	
	ПредопределенныйВариантОтчета = Схема.ВариантыНастроек.Найти(КлючТекущегоВарианта);
	
	ЭтоПредопределенныйВариант = Схема.ВариантыНастроек.Найти(КлючТекущегоВарианта) <> Неопределено;
	
	Если ЭтоПредопределенныйВариант Тогда
		
		Отчет.НазваниеРегистра =  ПолучитьНазваниеРегистра(ПредопределенныйВариантОтчета);
		РегистрПредопределенный = КлючТекущегоВарианта;
		Отчет.Регистр = КлючТекущегоВарианта;
		
		УстановитьЗаголовокФормы(
			Заголовок,
			Отчет.НазваниеРегистра,
			ПредставлениеПериодаЗаголовок,
			ПредставлениеОрганизации);
		
	ИначеЕсли НайтиВариантПоКлючу(КлючТекущегоВарианта) Тогда
		РегистрПредопределенный = Отчет.Регистр;
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ПриСохраненииВариантаНаСервере(Настройки)
	
	Если Не КомпоновщикИнициализирован И ПустаяСтрока(Отчет.Регистр) Тогда
		Отчет.Регистр = РегистрПредопределенный;
	КонецЕсли;

	Настройки.ДополнительныеСвойства.Вставить("Регистр", Отчет.Регистр);
	ЭтоПредопределенныйВариант = Ложь;
	
КонецПроцедуры

&НаСервере
Процедура ВычислитьСуммуВыделенныхЯчеекТабличногоДокументаВКонтекстеНаСервере()
	
	ПолеСумма = БухгалтерскиеОтчетыВызовСервера.ВычислитьСуммуВыделенныхЯчеекТабличногоДокумента(
		Результат, КэшВыделеннойОбласти);
	
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_РезультатПриАктивизацииОбластиПодключаемый()
	
	НеобходимоВычислятьНаСервере = Ложь;
	БухгалтерскиеОтчетыКлиент.ВычислитьСуммуВыделенныхЯчеекТабличногоДокумента(
		ПолеСумма, Результат, Элементы.Результат, КэшВыделеннойОбласти, НеобходимоВычислятьНаСервере);
	
	Если НеобходимоВычислятьНаСервере Тогда
		ВычислитьСуммуВыделенныхЯчеекТабличногоДокументаВКонтекстеНаСервере();
	КонецЕсли;
	
	ОтключитьОбработчикОжидания("Подключаемый_РезультатПриАктивизацииОбластиПодключаемый");
	
КонецПроцедуры

&НаКлиенте
Процедура РезультатПриАктивизацииОбласти(Элемент)
	
	Если ТипЗнч(Результат.ВыделенныеОбласти) = Тип("ВыделенныеОбластиТабличногоДокумента") Тогда
		ИнтервалОжидания = ?(ПолучитьСкоростьКлиентскогоСоединения() = СкоростьКлиентскогоСоединения.Низкая, 1, 0.2);
		ПодключитьОбработчикОжидания("Подключаемый_РезультатПриАктивизацииОбластиПодключаемый", ИнтервалОжидания, Истина);
	КонецЕсли;
	
КонецПроцедуры

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

#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура ВыбратьПериод(Команда)
	
	СправкиРасчетыКлиент.НачатьВыборИнтервала(
		ЭтотОбъект,
		Новый ОписаниеОповещения("ВыборПериода", ЭтотОбъект));
	
	// См. далее ВыборПериода()
	
КонецПроцедуры

&НаКлиенте
Процедура ВыборПериода(РезультатВыбора, НеиспользуемыйОбязательныйПараметр) Экспорт // обработчик оповещения
	
	Если РезультатВыбора = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Отчет.НачалоПериода = РезультатВыбора.НачалоПериода;
	Отчет.КонецПериода  = РезультатВыбора.КонецПериода;
	
	НастроитьПериодНаКлиенте(Истина);
	
КонецПроцедуры

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

&НаКлиенте
Процедура ЗакрытьНастройки(Команда)
	
	Элементы.Сформировать.КнопкаПоУмолчанию = Истина;
	ПодключитьОбработчикОжидания("Подключаемый_ЗакрытьНастройки", 0.1, Истина);
	
КонецПроцедуры

&НаКлиенте
Процедура ПоказатьНастройки(Команда)
	Элементы.ПрименитьНастройки.КнопкаПоУмолчанию = Истина;
	
	Если Не КомпоновщикИнициализирован Тогда
		ИнициализацияКомпоновщикаНастроек();
	КонецЕсли;
	
	ПодключитьОбработчикОжидания("Подключаемый_ОткрытьНастройки", 0.1, Истина);
КонецПроцедуры

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

#Область ОбработчикиСобытийЭлементовШапкиФормы

&НаКлиенте
Процедура НачалоПериодаПриИзменении(Элемент)
	
	НастроитьПериодНаКлиенте();
	
КонецПроцедуры

&НаКлиенте
Процедура КонецПериодаПриИзменении(Элемент)
	
	НастроитьПериодНаКлиенте();
	
КонецПроцедуры

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

&НаКлиенте
Процедура ПолеОрганизацияОткрытие(Элемент, СтандартнаяОбработка)
	
	ОбщегоНазначенияБПКлиент.ПолеОрганизацияОткрытие(Элемент, СтандартнаяОбработка,
		ПолеОрганизация, СоответствиеОрганизаций);
		
КонецПроцедуры
	
&НаКлиенте
Процедура ПолеОрганизацияОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
	
	ОбщегоНазначенияБПКлиент.ПолеОрганизацияОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка, 
		СоответствиеОрганизаций, Отчет.Организация, Отчет.ВключатьОбособленныеПодразделения);
	
КонецПроцедуры

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

&НаКлиенте
Процедура РезультатОбработкаДополнительнойРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
	
	// Не будем обрабатывать нажатие на правую кнопку мыши.
	// Покажем стандартное контекстное меню ячейки табличного документа.
	Расшифровка = Неопределено;
	
КонецПроцедуры

#Область ОбработчикиСобытийЭлементовГруппыГруппировка

&НаКлиенте
Процедура ГруппировкаПриИзменении(Элемент)

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

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

&НаКлиенте
Процедура ГруппировкаПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
	
	БухгалтерскиеОтчетыКлиент.ГруппировкаПередНачаломДобавления(ЭтаФорма, Элемент, Отказ, Копирование, Родитель, Группа);  
	
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура ГруппировкаПередУдалением(Элемент, Отказ)
	
	Если Элемент.ТекущиеДанные.Предопределенная И ЭтоПредопределенныйВариант Тогда
		Отказ = Истина;
	КонецЕсли;
	
КонецПроцедуры

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

#Область ОбработчикиСобытийЭлементовГруппыОтборы

&НаКлиенте
Процедура ОтборыПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
	
	БухгалтерскиеОтчетыКлиент.ОтборыПередНачаломДобавления(ЭтаФорма, Элемент, Отказ, Копирование, Родитель, Группа);

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

&НаКлиенте
Процедура ОтборыПередНачаломИзменения(Элемент, Отказ)
	
	БухгалтерскиеОтчетыКлиент.ОтборыПередНачаломИзменения(ЭтаФорма, Элемент, Отказ);	
	
КонецПроцедуры

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

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

	КонецЕсли;	
	
КонецПроцедуры

&НаКлиенте
Процедура ОтборыПередУдалением(Элемент, Отказ)
	
	Если Элемент.ТекущиеДанные.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный Тогда
		Отказ = Истина;
	КонецЕсли;
	
КонецПроцедуры

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

#Область ОбработчикиСобытийЭлементовГруппыДополнительныеПоля

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

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

&НаКлиенте
Процедура ДополнительныеПоляПриИзменении(Элемент)
	
	Если Не ЗначениеЗаполнено(ИдентификаторЗадания) Тогда
		ОбщегоНазначенияКлиентСервер.УстановитьСостояниеПоляТабличногоДокумента(Элементы.Результат, "НеАктуальность");
	КонецЕсли;

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

&НаКлиенте
Процедура ДополнительныеПоляПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
	
	БухгалтерскиеОтчетыКлиент.ДополнительныеПоляПередНачаломДобавления(ЭтаФорма, Элемент, Отказ, Копирование, Родитель, Группа);
	
КонецПроцедуры

&НаКлиенте
Процедура ДополнительныеПоляПередНачаломИзменения(Элемент, Отказ)
	
	БухгалтерскиеОтчетыКлиент.ДополнительныеПоляПередНачаломИзменения(ЭтаФорма, Элемент, Отказ);
	
КонецПроцедуры

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

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

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

#Область ОбработчикиСобытийЭлементовГруппыСортировка

&НаКлиенте
Процедура СортировкаПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
	
	БухгалтерскиеОтчетыКлиент.СортировкаПередНачаломДобавления(ЭтаФорма, Элемент, Отказ, Копирование, Родитель, Группа);
	
КонецПроцедуры

&НаКлиенте
Процедура СортировкаПередНачаломИзменения(Элемент, Отказ)
	
	БухгалтерскиеОтчетыКлиент.СортировкаПередНачаломИзменения(ЭтаФорма, Элемент, Отказ);
	
КонецПроцедуры

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

#Область ОбработчикиСобытийЭлементовГруппыОформление

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

&НаКлиенте
Процедура ВыводитьЗаголовокПриИзменении(Элемент)

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

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

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

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

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

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

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

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

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

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

#Область ЗаголовокФормы

&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьЗаголовокФормы(Заголовок, Знач ПредставлениеРегистра, ПредставлениеПериода, ПредставлениеОрганизации)
	
	Если ПустаяСтрока(ПредставлениеРегистра) Тогда
		ПредставлениеРегистра = НСтр("ru = 'Регистр налогового учета'");
	КонецЕсли;
	
	Заголовок = СправкиРасчетыКлиентСервер.ТекстЗаголовка(
		ПредставлениеРегистра,
		ПредставлениеПериода,
		ПредставлениеОрганизации);

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

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

#Область НастройкаПоПериоду

// Изменение периода может требовать дорогого контекстного вызова сервера, но часто - не требует.

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

&НаСервере
Процедура НастроитьПериодНаСервере(ИнформацияНалоговыйПериод)
	
	ИнформированиеНалоговыйПериод.НастроитьЭлементИнформирования(
		Элементы,
		ИнформацияНалоговыйПериод,
		Элементы.Результат);
	
КонецПроцедуры		

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

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

#Область НастройкаПоОрганизации

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

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

&НаСервере
Процедура УстановитьУсловноеОформление()

	// ГруппировкаТипГруппировки, ГруппировкаПредставление

	ЭлементУО = УсловноеОформление.Элементы.Добавить();

	КомпоновкаДанныхКлиентСервер.ДобавитьОформляемоеПоле(ЭлементУО.Поля, "ГруппировкаТипГруппировки");
	КомпоновкаДанныхКлиентСервер.ДобавитьОформляемоеПоле(ЭлементУО.Поля, "ГруппировкаПредставление");

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

	ЭлементУО.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(WindowsШрифты.ШрифтДиалоговИМеню, , , Ложь, Истина, Ложь, Ложь, ));

	ЭлементУО.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
	
КонецПроцедуры

&НаСервере
Функция ПолучитьНазваниеРегистра(Вариант)
	                
	ПолноеНаименование = Отчеты[БухгалтерскиеОтчетыКлиентСервер.ПолучитьИдентификаторОбъекта(ЭтаФорма)].ПолучитьПараметрыВариантовОтчета().Получить(Вариант.Имя);
	Возврат ?(ПолноеНаименование = Неопределено,Вариант.Представление,ПолноеНаименование.Наименование); 
	
КонецФункции	

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

&НаКлиенте
Функция ПолучитьЗапрещенныеПоля(Режим = "") Экспорт
	
	СписокПолей = Новый Массив;
	
	// Если список субконто задан
	Если Отчет.СписокВидовСубконто.Количество() > 0 Тогда
		СписокПолей.Добавить("Субконто1");
		СписокПолей.Добавить("Субконто2");
		СписокПолей.Добавить("Субконто3");
	КонецЕсли;
	
	Для Каждого Субконто Из Отчет.СписокВидовСубконто Цикл
		СписокПолей.Удалить(0);			
	КонецЦикла;
	
	СписокПолей.Добавить("UserFields");
	СписокПолей.Добавить("DataParameters");
	СписокПолей.Добавить("SystemFields");
	СписокПолей.Добавить("Показатели");
	СписокПолей.Добавить("Период");
	СписокПолей.Добавить("БухТипРесурса");
	СписокПолей.Добавить("ДатаОперации");
	СписокПолей.Добавить("ДоляЕНВД");
	СписокПолей.Добавить("Содержание");
	СписокПолей.Добавить("Организация");
	СписокПолей.Добавить("ОстатокБУ");
	СписокПолей.Добавить("ОстатокНУ");
	СписокПолей.Добавить("Регистратор");
	
	// Убираем специфические поля
	Если Отчет.Регистр <> "ДоходыОтРеализацииТоваровИУслуг" Тогда
		СписокПолей.Добавить("ВидДоходов");
	КонецЕсли;
	
	Если Отчет.Регистр <> "ПрямыеРасходыОтносящиесяКРеализованнымТоварамУслугам" Тогда
		СписокПолей.Добавить("ВидЦенностей");
	КонецЕсли;
	
	Если СтрНайти("ОперацииВыбытияИмуществаРаботУслуг, ВнереализационныеДоходы, РасходыОтРеализацииПрочегоИмущества, ПрямыеРасходыОтносящиесяКРеализованнымТоварамУслугам",Отчет.Регистр) <> 0 Тогда
		СписокПолей.Добавить("ВидДеятельности");
		СписокПолей.Добавить("Счет");
	КонецЕсли;
	
	Субконто1ПрочиеДоходыИРасходы 	= Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Субконто1ПрочиеДоходыИРасходы"));
	Субконто1СтатьяЗатрат 			= Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Субконто1СтатьяЗатрат"));
	ВидРегистра 					= Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ВидРегистра"));

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура ЗагрузитьПодготовленныеДанные()

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

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

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

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

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

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

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

&НаСервереБезКонтекста
Функция ЗаданиеВыполнено(ИдентификаторЗадания)
	
	Возврат ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗадания);
	
КонецФункции

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

&НаКлиентеНаСервереБезКонтекста
Процедура ОбновитьТекстЗаголовка(Форма)
	
	Отчет = Форма.Отчет;
	
	Если СокрЛП(Отчет.НазваниеРегистра) = "" Тогда
		
		Отчет.НазваниеРегистра  = НСтр("ru = 'Регистр налогового учета'");
		
	КонецЕсли;
	
	ЗаголовокОтчета = Отчет.НазваниеРегистра + БухгалтерскиеОтчетыКлиентСервер.ПолучитьПредставлениеПериода(Отчет.НачалоПериода, Отчет.КонецПериода);

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

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

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

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

&НаКлиенте
Процедура Подключаемый_ОткрытьНастройки()
	
	Элементы.РазделыОтчета.ТекущаяСтраница = Элементы.НастройкиОтчета;
	
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ЗакрытьНастройки()
	
	Элементы.РазделыОтчета.ТекущаяСтраница = Элементы.Отчет;
	
КонецПроцедуры

&НаСервере
Процедура УправлениеЭлементамиФормы()
	
	Элементы.ВариантНалогообложенияПрибыли.Видимость = ИспользуетсяРаздельныйУчет;
	
КонецПроцедуры

&НаСервере
Процедура ИнициализироватьНастройкиРасшифровки()
	
	Если Параметры.ПользовательскиеНастройки = Неопределено 
		ИЛИ НЕ Параметры.РежимРасшифровки Тогда
	    Возврат;
	КонецЕсли;

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

	НоваяСтрока = Отчет.СписокВидовСубконто.Добавить();
	НоваяСтрока.Предопределенная = Истина;
	НоваяСтрока.ВидСубконто = ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура;
	
КонецПроцедуры

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

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