Операция (регламентированный учет) / Форма документа / Модуль формы

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

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

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

	// ИнтеграцияС1СДокументооборотом
	ИнтеграцияС1СДокументооборотБазоваяФункциональность.ПриСозданииНаСервере(ЭтотОбъект);
	// Конец ИнтеграцияС1СДокументооборотом
	
	МежотчетныйПериод = Объект.УточнениеПериода <> 0;
	
	УправлениеФормой(ЭтотОбъект);
	
КонецПроцедуры

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

&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)

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

&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)

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

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

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

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	// СтандартныеПодсистемы.ПодключаемыеКоманды
	ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
	// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура ОрганизацияПриИзменении(Элемент)

	ЕстьДвижения = Объект.Движения.Хозрасчетный.Количество() > 0;

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

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

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

	Если НачалоДня(Объект.Дата) = НачалоДня(ТекущаяДатаДокумента) Тогда
		// Изменение времени не влияет на поведение документа.
		ТекущаяДатаДокумента = Объект.Дата;
		Возврат;
	КонецЕсли;

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

&НаКлиенте
Процедура КомментарийНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

	ОбщегоНазначенияКлиент.ПоказатьФормуРедактированияКомментария(Элемент.ТекстРедактирования, ЭтотОбъект, "Объект.Комментарий");

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

&НаКлиенте
Процедура КорректировкаРегистровНДСПриИзменении(Элемент)
	
	КорректировкаРегистровНДСПриИзмененииСервер();
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура МежотчетныйПериодПриИзменении(Элемент)
	
	Объект.Дата = КонецГода(Объект.Дата);
	
КонецПроцедуры

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

#Область ОбработчикиСобытийСпискаХозрасчетный

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

&НаКлиенте
Процедура ХозрасчетныйПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ)

	ОбновитьИтогиПоДокументу(ЭтотОбъект);

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

&НаКлиенте
Процедура ХозрасчетныйПослеУдаления(Элемент)

	ОбновитьИтогиПоДокументу(ЭтотОбъект);

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

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

	ОбработатьИзменениеСчета("Дт");

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

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

	ОбработатьИзменениеСчета("Кт");

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

&НаКлиенте
Процедура ХозрасчетныйВалютаДтПриИзменении(Элемент)

	ТекущиеДанные = Элементы.Хозрасчетный.ТекущиеДанные;

	Если ТекущиеДанные.ВалютнаяСуммаДт = Null Тогда
		ТекущиеДанные.ВалютнаяСуммаДт = ОписаниеТиповСумма.ПривестиЗначение(ТекущиеДанные.ВалютнаяСуммаДт);
	КонецЕсли;

	РасчетСуммы("ВалютнаяСуммаДт");
	ОбновитьИтогиПоДокументу(ЭтотОбъект);
	
КонецПроцедуры

&НаКлиенте
Процедура ХозрасчетныйВалютнаяСуммаДтПриИзменении(Элемент)
	
	РасчетСуммы("ВалютнаяСуммаДт");
	ОбновитьИтогиПоДокументу(ЭтотОбъект);
	
КонецПроцедуры

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

	ТекущиеДанные = Элементы.Хозрасчетный.ТекущиеДанные;

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

	Если ТекущиеДанные.ВалютнаяСуммаКт = Null Тогда
		ТекущиеДанные.ВалютнаяСуммаКт = ОписаниеТиповСумма.ПривестиЗначение(ТекущиеДанные.ВалютнаяСуммаКт);
	КонецЕсли;

	РасчетСуммы("ВалютнаяСуммаКт");
	ОбновитьИтогиПоДокументу(ЭтотОбъект);

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

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

&НаКлиенте
Процедура ХозрасчетныйСуммаПриИзменении(Элемент)
	
	РасчетСуммы("Сумма");
	ОбновитьИтогиПоДокументу(ЭтотОбъект);
	
КонецПроцедуры

&НаКлиенте
Процедура ХозрасчетныйСуммаУУПриИзменении(Элемент)
	
	РасчетСуммы("СуммаУУ");
	ОбновитьИтогиПоДокументу(ЭтотОбъект);
	
КонецПроцедуры

&НаКлиенте
Процедура ХозрасчетныйСубконтоДт1НачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

	ОбработатьНачалоВыбораСубконто("Дт", Элемент, СтандартнаяОбработка);

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

&НаКлиенте
Процедура ХозрасчетныйСубконтоДт1ПриИзменении(Элемент)
	
	ИзменитьПараметрыВыбораПолейСубконто(ЭтотОбъект, "Дт");
	
КонецПроцедуры

&НаКлиенте
Процедура ХозрасчетныйСубконтоДт1ОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
	
	ОчиститьПараметрыВыбора(Элемент);
	
КонецПроцедуры

&НаКлиенте
Процедура ХозрасчетныйСубконтоДт2НачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

	ОбработатьНачалоВыбораСубконто("Дт", Элемент, СтандартнаяОбработка);

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

&НаКлиенте
Процедура ХозрасчетныйСубконтоДт2ПриИзменении(Элемент)
	
	ИзменитьПараметрыВыбораПолейСубконто(ЭтотОбъект, "Дт");
	
КонецПроцедуры

&НаКлиенте
Процедура ХозрасчетныйСубконтоДт2ОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
	
	ОчиститьПараметрыВыбора(Элемент);
	
КонецПроцедуры

&НаКлиенте
Процедура ХозрасчетныйСубконтоДт3НачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

	ОбработатьНачалоВыбораСубконто("Дт", Элемент, СтандартнаяОбработка);

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

&НаКлиенте
Процедура ХозрасчетныйСубконтоДт3ПриИзменении(Элемент)
	
	ИзменитьПараметрыВыбораПолейСубконто(ЭтотОбъект, "Дт");
	
КонецПроцедуры

&НаКлиенте
Процедура ХозрасчетныйСубконтоДт3ОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
	
	ОчиститьПараметрыВыбора(Элемент);
	
КонецПроцедуры

&НаКлиенте
Процедура ХозрасчетныйСубконтоКт1НачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

	ОбработатьНачалоВыбораСубконто("Кт", Элемент, СтандартнаяОбработка);

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

&НаКлиенте
Процедура ХозрасчетныйСубконтоКт1ПриИзменении(Элемент)
	
	ИзменитьПараметрыВыбораПолейСубконто(ЭтотОбъект, "Кт");
	
КонецПроцедуры

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

&НаКлиенте
Процедура ХозрасчетныйСубконтоКт2НачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

	ОбработатьНачалоВыбораСубконто("Кт", Элемент, СтандартнаяОбработка);

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

&НаКлиенте
Процедура ХозрасчетныйСубконтоКт2ПриИзменении(Элемент)
	
	ИзменитьПараметрыВыбораПолейСубконто(ЭтотОбъект, "Кт");
	
КонецПроцедуры

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

&НаКлиенте
Процедура ХозрасчетныйСубконтоКт3НачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

	ОбработатьНачалоВыбораСубконто("Кт", Элемент, СтандартнаяОбработка);

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

&НаКлиенте
Процедура ХозрасчетныйСубконтоКт3ПриИзменении(Элемент)
	
	ИзменитьПараметрыВыбораПолейСубконто(ЭтотОбъект, "Кт");
	
КонецПроцедуры

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

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

#Область ОбработчикиСобытийСписковРегистровНакопленийИСведений

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

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

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

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

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

&НаКлиенте
Процедура ЗаписатьДокумент(Команда)
	
	ОбщегоНазначенияУТКлиент.Записать(ЭтаФорма);
	
КонецПроцедуры

&НаКлиенте
Процедура КнопкаЗаполнить(Команда)

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

&НаКлиенте
Процедура ПодтвердитьАктуальностьПроводок(Команда)
	
	Записать();
	Закрыть();
	
КонецПроцедуры

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

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

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

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

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

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

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

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

#Область Печать

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

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

&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
	ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецПроцедуры
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды

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

&НаКлиенте
Процедура ПровестиИЗакрыть(Команда)
	
	ОбщегоНазначенияУТКлиент.ПровестиИЗакрыть(ЭтаФорма);
	
КонецПроцедуры

&НаКлиенте
Процедура ПровестиДокумент(Команда)
	
	ОбщегоНазначенияУТКлиент.Провести(ЭтаФорма);
	
КонецПроцедуры

// ИнтеграцияС1СДокументооборотом
&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуИнтеграции(Команда)
	
	ИнтеграцияС1СДокументооборотБазоваяФункциональностьКлиент.ВыполнитьПодключаемуюКомандуИнтеграции(Команда, ЭтотОбъект, Объект);
	
КонецПроцедуры
// Конец ИнтеграцияС1СДокументооборотом

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

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

#Область ОбработкаИзмененияРеквизитов

&НаСервере
Процедура КорректировкаРегистровНДСПриИзмененииСервер()
	
	СписокРегистровДляОтражения = ВернутьСписокРегистровДляОтражения(Регистры, КорректировкаРегистровНДС);
	ПрименитьНастройкуСоставаРегистров(СписокРегистровДляОтражения);
	Модифицированность = Истина;
	
КонецПроцедуры

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

&НаКлиенте
Процедура ОбработатьНачалоВыбораСубконто(ДтКт, Элемент, СтандартнаяОбработка)

	ТекущиеДанные      = Элементы.Хозрасчетный.ТекущиеДанные;
	ПараметрыДокумента = НастройкаСчетовУчетаКлиентСервер.ПараметрыВыбораСубконто(ЭтотОбъект.Объект.Организация, ТекущиеДанные, "Субконто" + ДтКт + "%Индекс%", "Счет" + ДтКт);
	ОбщегоНазначенияБПКлиент.НачалоВыбораЗначенияСубконто(ЭтотОбъект, Элемент, СтандартнаяОбработка, ПараметрыДокумента);

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

&НаКлиенте
Процедура ОбработатьИзменениеСчета(ДтКт)

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

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

&НаСервере
Процедура ДатаПриИзмененииНаСервере()
	
	НастроитьОтображениеТаблицыПроводок();
	
КонецПроцедуры

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

#Область РаботаСФормой

&НаСервере
Процедура ОбновлениеОтображения()

	ОтобразитьВводДокументовОснования(ЭтотОбъект);
	
	ПолучитьСостояниеОтраженияДокумента();

	Элементы.ФормаПровестиИЗакрыть.Видимость = Не Элементы.ПодтвердитьАктуальностьПроводок.Видимость;
	Элементы.ФормаПровестиИЗакрыть.КнопкаПоУмолчанию = Не Элементы.ПодтвердитьАктуальностьПроводок.КнопкаПоУмолчанию;
	Элементы.ФормаПровести.Видимость = Не Элементы.ПодтвердитьАктуальностьПроводок.Видимость;
	
КонецПроцедуры

&НаСервере
Процедура СоздатьЭлементыФормы()

	ПоказатьХозрасчетный               = Истина;
	ПорядковыйНомер                    = 0;
	КоличествоВидимых                  = 0;

	Для каждого СтрокаРегистра Из Регистры Цикл

		ПорядковыйНомер = ПорядковыйНомер + 1;
		КоличествоВидимых = КоличествоВидимых + Число(СтрокаРегистра.Отображение);

		Если СтрокаРегистра.Имя = "Хозрасчетный" Тогда
			Продолжить;
		КонецЕсли;

		// Создаем страницу для регистра в "правильном" месте между "предопределенными" закладками.
		ИмяГруппы = "Группа" + СтрокаРегистра.Имя;
		ТекГруппа = Элементы.Найти(ИмяГруппы);
		Если ТекГруппа = Неопределено И КорректировкаРегистровНДС Тогда

			// Найдем группу перед которой будем вставлять новую группу
			Для каждого Строка Из Регистры Цикл
				Если Строка.ТипРегистра >= СтрокаРегистра.ТипРегистра
					И Строка.Синоним > СтрокаРегистра.Синоним
					И Строка.Отрисован Тогда

					ВпередиСледующийЭлемент=Элементы["Группа" + Строка.Имя];
					Прервать;

				КонецЕсли;
			КонецЦикла;

			ТекГруппа = Элементы.Вставить(
				ИмяГруппы,
				Тип("ГруппаФормы"),
				Элементы.ПанельРегистров,
				ВпередиСледующийЭлемент);

			ТекГруппа.Заголовок = СтрокаРегистра.Синоним;
			СтрокаРегистра.Отрисован = Истина;

			Если СтрокаРегистра.ТипРегистра = "РегистрБухгалтерии" Тогда
				ТекГруппа.Картинка = БиблиотекаКартинок.РегистрБухгалтерии;
				КартинкаАктивности = БиблиотекаКартинок.АктивностьПоРБ;
			ИначеЕсли СтрокаРегистра.ТипРегистра = "РегистрНакопления" Тогда
				ТекГруппа.Картинка = БиблиотекаКартинок.РегистрНакопления;
				КартинкаАктивности = БиблиотекаКартинок.АктивностьПоРН;
			ИначеЕсли СтрокаРегистра.ТипРегистра = "РегистрСведений" Тогда
				ТекГруппа.Картинка = БиблиотекаКартинок.РегистрСведений;
				КартинкаАктивности = БиблиотекаКартинок.АктивностьПоРС;
			КонецЕсли;

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

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

			РеквизитыНабораЗаписей = НаборЗаписей.ВыгрузитьКолонки();

			// Некоторые колонки не показываем
			РеквизитыНабораЗаписей.Колонки.Удалить("Регистратор");
			РеквизитыНабораЗаписей.Колонки.Удалить("Активность");

			Если РеквизитыНабораЗаписей.Колонки.Найти("МоментВремени") <> Неопределено Тогда
				РеквизитыНабораЗаписей.Колонки.Удалить("МоментВремени");
			КонецЕсли;

			Если РеквизитыНабораЗаписей.Колонки.Найти("Период") <> Неопределено Тогда
				РеквизитыНабораЗаписей.Колонки.Удалить("Период");
			КонецЕсли;

			Если РеквизитыНабораЗаписей.Колонки.Найти("Организация") <> Неопределено Тогда
				РеквизитыНабораЗаписей.Колонки.Удалить("Организация");
			КонецЕсли;

			// Обновление заголовков колонок таблицы по синонимам полей регистра.
			МассивПолейРегистра = Новый Массив;
			МассивПолейРегистра.Добавить("Реквизиты");
			МассивПолейРегистра.Добавить("Измерения");
			МассивПолейРегистра.Добавить("Ресурсы");

			Для каждого ВидПоля Из МассивПолейРегистра Цикл
				Для каждого Поле Из МетаданныеРегистра[ВидПоля] Цикл
					КолонкаТаблицы = РеквизитыНабораЗаписей.Колонки.Найти(Поле.Имя);
					Если КолонкаТаблицы <> Неопределено Тогда
						КолонкаТаблицы.Заголовок = Поле.Синоним;
					КонецЕсли;
				КонецЦикла;
			КонецЦикла;

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

			УстановитьСвязиПараметровВыбораКолонокСпискаРегистра(СтрокаРегистра.Имя);
			
		КонецЕсли;

		// Делаем страницу регистра невидимой, если она не нужна
		Если ТекГруппа <> Неопределено Тогда
			ТекГруппа.Видимость = КорректировкаРегистровНДС;
		КонецЕсли;

	КонецЦикла;

	Элементы.ГруппаХозрасчетный.Видимость = ПоказатьХозрасчетный;

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

&НаСервере
Процедура ОбновитьФорму()

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

&НаСервере
Процедура ПодготовитьФормуНаСервере()

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

	ТекущаяОрганизация = Объект.Организация;

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

	ОбновлениеОтображения();

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

&НаСервере
Процедура ЗаполнитьТаблицуРегистров(МетаданныеДокумента = Неопределено)

	Если МетаданныеДокумента = Неопределено Тогда
		МетаданныеДокумента = Объект.Ссылка.Метаданные();
	КонецЕсли;

	Регистры.Очистить();
	КорректировкаРегистровНДС = Ложь;

	Для Каждого МетаданныеРегистра Из МетаданныеДокумента.Движения Цикл
		
		Если МетаданныеРегистра.Имя = "ФактическиеДанныеБюджетирования" Тогда
			Продолжить;
		КонецЕсли;
		Регистр     = Регистры.Добавить();
		Регистр.Имя = МетаданныеРегистра.Имя;
		ПолноеИмя   = МетаданныеРегистра.ПолноеИмя();

		ПозицияТочки = Найти(ПолноеИмя, ".");
		ТипРегистра  = Лев(ПолноеИмя, ПозицияТочки - 1);

		Регистр.ТипРегистра = ТипРегистра;
		Регистр.Синоним     = МетаданныеРегистра.Синоним;

		Если Регистр.ТипРегистра = "РегистрНакопления" Тогда
			Регистр.РегистрОстатков = (МетаданныеРегистра.ВидРегистра = Метаданные.СвойстваОбъектов.ВидРегистраНакопления.Остатки);
		КонецЕсли;

		Регистр.ЕстьДвижения = (Объект.Движения[Регистр.Имя].Количество() > 0);
		
		Если Регистр.ЕстьДвижения Тогда
			
			Регистр.Отображение  = Истина;
			
		ИначеЕсли Регистр.Имя = "Хозрасчетный" Тогда
			
			Регистр.Отображение  = Истина; // Этот регистр отображается всегда
			
		Иначе
			
			// Отображаем те регистры, которые пользователь отметил флагами
			Отбор = Новый Структура("Имя", Регистр.Имя);
			Если Объект.ТаблицаРегистровНакопления.НайтиСтроки(Отбор).Количество() > 0 Тогда
				Регистр.Отображение  = Истина;
			ИначеЕсли Объект.ТаблицаРегистровСведений.НайтиСтроки(Отбор).Количество() > 0 Тогда
				Регистр.Отображение  = Истина;
			КонецЕсли;
			
		КонецЕсли;
		
		// Указываем, что должен быть активен флажок корректировки регистро НДС:
		Если Не Регистр.Имя = "Хозрасчетный" И Регистр.Отображение Тогда
			КорректировкаРегистровНДС = Истина;
		КонецЕсли;

	КонецЦикла;

	// Первым показывается регистр бухгалтерии, затем регистры накопления, затем - сведений.
	Регистры.Сортировать("ТипРегистра, Синоним");

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

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

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

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

#Область ОтражениеДокументаВРеглУчете

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

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

#Область Сторнирование

&НаКлиентеНаСервереБезКонтекста
Процедура ОтобразитьВводДокументовОснования(Форма)

	КоличествоДокументов = Форма.Объект.ЗаполнениеДвижений.Количество();
	
	Форма.ЗаголовокДокументовОснования = ?(КоличествоДокументов > 1,	НСтр("ru = 'Связанные документы:'"), НСтр("ru = 'Связанный документ:'"));
		
	Если КоличествоДокументов = 0 Тогда
		ПредставлениеДокументовОснования = НСтр("ru = 'Выбрать документ'");
	ИначеЕсли КоличествоДокументов = 1 Тогда
		ПредставлениеДокументовОснования = Форма.Объект.ЗаполнениеДвижений.Получить(0).Документ;
	Иначе
		ПредставлениеДокументовОснования = СтрШаблон(НСтр("ru = 'Открыть список (%1)'"), КоличествоДокументов);
	КонецЕсли;
	Форма.ПредставлениеДокументовОснования = ПредставлениеДокументовОснования;
		
	Форма.Элементы.ГруппаКомандУправленияСвязаннымиДокументами.Видимость = КоличествоДокументов = 1;
	Форма.Элементы.КнопкаЗаполнить.Видимость = КоличествоДокументов > 0;
	
КонецПроцедуры

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

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

&НаСервере
Процедура СформироватьДвиженияСторноСервер()
	
	Если НЕ ПроверитьЗаполнение() Тогда
		Возврат;
	КонецЕсли;
	
	ОчиститьДвижения();

	// Формирование движений
	ВыполнитьСторнированиеДокументов(Объект.ЗаполнениеДвижений);

	ОбновитьИтогиПоДокументу(ЭтотОбъект);
	
    УстановитьДоступностьСубконто();
	
	ОбновитьФорму();

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

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

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

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

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

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

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

	// вид движения
	Если МетаданныеОбъект.ВидРегистра = Метаданные.СвойстваОбъектов.ВидРегистраНакопления.Остатки Тогда
		Движение.ВидДвижения = Строка.ВидДвижения;
	КонецЕсли;

	// ресурсы
	Для каждого МДОбъект Из МетаданныеОбъект.Ресурсы Цикл
		Движение[МДОбъект.Имя] = - Строка[МДОбъект.Имя];
	КонецЦикла;

КонецПроцедуры // ЗаполнитьДвижениеСторно

// Копирует значения движения по регистру бухгалтерии в строку сторно
// нового движения для измерений и реквизитов. Ресурсы инвертируются.
//
&НаСервере
Процедура ЗаполнитьДвиженияСторноПоРегиструБухгалтерии(Движение, Строка, МетаданныеОбъект)

	ЗаполнитьЗначенияСвойств(Движение, Строка,,"Период,Регистратор");

	// субконто
	Если МетаданныеОбъект.Корреспонденция Тогда
		Для каждого Субконто Из Строка.СубконтоДт Цикл
			Движение.СубконтоДт[Субконто.Ключ] = Субконто.Значение;
		КонецЦикла;
		Для каждого Субконто Из Строка.СубконтоКт Цикл
			Движение.СубконтоКт[Субконто.Ключ] = Субконто.Значение;
		КонецЦикла;
	Иначе
		Для каждого Субконто Из Строка.Субконто Цикл
			Движение.Субконто[Субконто.Ключ] = Субконто.Значение;
		КонецЦикла;
	КонецЕсли;

	// ресурсы
	Для каждого МДОбъект Из МетаданныеОбъект.Ресурсы Цикл
		Если МДОбъект.ПризнакУчета = Неопределено Тогда
			Движение[МДОбъект.Имя] = - Строка[МДОбъект.Имя];
		Иначе
			Если ЗначениеЗаполнено(Строка[МДОбъект.Имя + "Дт"]) Тогда
				Движение[МДОбъект.Имя + "Дт"] = - Строка[МДОбъект.Имя + "Дт"];
			КонецЕсли;
			Если ЗначениеЗаполнено(Строка[МДОбъект.Имя + "Кт"]) Тогда
				Движение[МДОбъект.Имя + "Кт"] = - Строка[МДОбъект.Имя + "Кт"];
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;

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

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

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

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

#Область ЗаполнениеПроводок

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

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

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

&НаСервере
Процедура ЗаполнитьОстаткиПриростаСтоимостиВНАНаСервере()
	
	ОчиститьДвижения();

	Запрос = Новый Запрос;
	Запрос.Текст = ТекстЗапроса_ОстаткиПриростаСтоимостиВНА();
	Запрос.УстановитьПараметр("ДатаОстатков", НачалоДня(Объект.Дата));
	Запрос.УстановитьПараметр("Организация", Объект.Организация);

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

		Проводка.СубконтоДт1 = Выборка.Субконто1;				
		Проводка.СубконтоКт1 = Выборка.Субконто1;				
			
	КонецЦикла;

	ОбновитьИтогиПоДокументу(ЭтотОбъект);
	УстановитьДоступностьСубконто();
	ОбновитьФорму();
	
КонецПроцедуры

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

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

#Область РаботаСПроводками

&НаСервере
Процедура ОчиститьДвижения()

	Для Каждого СтрокаРегистра Из Регистры Цикл
		Если Объект.Движения[СтрокаРегистра.Имя].Количество() = 0 Тогда
			Продолжить;
		КонецЕсли;
		Объект.Движения[СтрокаРегистра.Имя].Очистить();
	КонецЦикла;

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

&НаКлиенте
Функция ПреобразоватьДанныеЭлементаФормыВСтруктуру(ТекущиеДанные)

	СтруктураПроводки = Новый Структура("НомерСтроки,СчетДт,ПодразделениеДт,СубконтоДт1,СубконтоДт2,СубконтоДт3,
		|КоличествоДт,ВалютаДт,ВалютнаяСуммаДт,
		|СчетКт,ПодразделениеКт,СубконтоКт1,СубконтоКт2,СубконтоКт3,
		|КоличествоКт,ВалютаКт,ВалютнаяСуммаКт,
		|Сумма,СуммаУУ,СуммаФО,Содержание,СуммаНУДт,СуммаПРДт,СуммаВРДт,СуммаНУКт,СуммаПРКт,СуммаВРКт");
	ЗаполнитьЗначенияСвойств(СтруктураПроводки, ТекущиеДанные);

	Возврат СтруктураПроводки;

КонецФункции

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

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

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

&НаСервере
Процедура ОтразитьНепринимаемыеДоходыИРасходы(СтруктураПроводки)

	ОтразитьНеПринимаемыеДоходы = ОпределитьНеПринимаемыеДоходы(СтруктураПроводки);
	Если ОтразитьНеПринимаемыеДоходы Тогда
		СтруктураПроводки.СуммаПРКт = СтруктураПроводки.Сумма;
	КонецЕсли;

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

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

&НаСервере
Функция ОпределитьНеПринимаемыеДоходы(СтруктураПроводки)

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

КонецФункции

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

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

&НаСервереБезКонтекста
Функция ПересчетСуммыПоКурсу(Знач Сумма, Знач Валюта, Знач НоваяВалюта, Знач Дата, Знач ВалютаРУ)
	
	Возврат РаботаСКурсамиВалютУТ.ПересчитатьВВалюту(Сумма, ВалютаРУ, Валюта, НоваяВалюта, Дата);
	
КонецФункции

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

#Область НастройкаСоставаРегистров

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

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

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

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

#Область Прочее

&НаСервере
Функция ЕстьДвижения()

	Для каждого Регистр Из Регистры Цикл
		Если Объект.Движения[Регистр.Имя].Количество()=0 Тогда
			Продолжить;
		КонецЕсли;
		Возврат Истина;
	КонецЦикла;

	Возврат Ложь;

КонецФункции

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

&НаСервере
Процедура НастроитьВидимостьКомандыОтобразитьСуммыПРИВР()

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

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

	Если ЭлементПатент <> Неопределено Тогда
		СвязиПараметровПатент = Новый Массив;
		СвязиПараметровПатент.Добавить(Новый СвязьПараметраВыбора("Отбор.Владелец", "Объект.Организация"));
		ЭлементПатент.СвязиПараметровВыбора = Новый ФиксированныйМассив(СвязиПараметровПатент);
	КонецЕсли; 
	
КонецПроцедуры // УстановитьСвязиПараметровВыбораКолонокСпискаРегистра()

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

&НаСервереБезКонтекста
Функция ИмяТипа(ЗаданныйТип)
	
	Возврат Метаданные.НайтиПоТипу(ЗаданныйТип).Имя;
	
КонецФункции

&НаКлиенте
Процедура ОчиститьПараметрыВыбора(Элемент)
	
	Элемент.ПараметрыВыбора = Новый ФиксированныйМассив(Новый Массив);
	
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура УправлениеФормой(Форма)
	
	ЭтоКонецГода = КонецДня(Форма.Объект.Дата) = КонецГода(Форма.Объект.Дата);
	Форма.Элементы.МежотчетныйПериод.Видимость = ЭтоКонецГода;
	
КонецПроцедуры

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

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

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