Отражение документов в регламентированном учете / Проводки регламентированного учета чтение / Модуль формы

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

&НаКлиенте
Перем ФормаДлительнойОперации;
&НаКлиенте
Перем ПараметрыОжидания;

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура СостояниеОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
	
	Если НавигационнаяСсылкаФорматированнойСтроки = "РасшифровкаСтатуса" Тогда
		СтандартнаяОбработка = Ложь;
		ОткрытьРасшифровкуСтатуса();
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ВыбраннаяОрганизацияПриИзменении(Элемент)
	
	УстановитьОтборПоОрганизации();
	
КонецПроцедуры

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

#Область ОбработчикиСобытийТаблицыФормыНаборЗаписей

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

	Значение = Элемент.ТекущиеДанные[Поле.Имя];
	Если ЗначениеЗаполнено(Значение) 
		И ТипЗнч(Значение) <> Тип("Число") 
		И ТипЗнч(Значение) <> Тип("Дата")
		И ТипЗнч(Значение) <> Тип("Булево") Тогда
		ПоказатьЗначение(, Значение);
		СтандартнаяОбработка = Ложь;
	КонецЕсли;

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

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

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

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

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

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

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

&НаКлиенте
Процедура ВалютаДтПриИзменении(Элемент)
	
	РасчетСуммы("ВалютнаяСуммаДт");
	
КонецПроцедуры

&НаКлиенте
Процедура ВалютаКтПриИзменении(Элемент)
	
	ТекущиеДанные = Элементы.НаборЗаписей.ТекущиеДанные;

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

	РасчетСуммы("ВалютнаяСуммаКт");
	
КонецПроцедуры

&НаКлиенте
Процедура ВалютнаяСуммаДтПриИзменении(Элемент)
	
	РасчетСуммы("ВалютнаяСуммаДт");
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура АктуализацияПроводок(Команда)
	АктуализацияПроводок = Не АктуализацияПроводок;
	Элементы.АктуализацияПроводок.Пометка = АктуализацияПроводок;
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура ЗаполнитьПредставлениеВидовСубконто()

	Для каждого Запись Из НаборЗаписей Цикл
		ЗаполнитьЗначенияСвойств(Запись, ПредставлениеВидовСубконто(Запись.СчетДт, "Дт"));
		ЗаполнитьЗначенияСвойств(Запись, ПредставлениеВидовСубконто(Запись.СчетКт, "Кт"));
	КонецЦикла;

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

&НаСервере
Функция ПредставлениеВидовСубконто(Счет, ВидДвижения)

	ПредставлениеВидовСубконто = Новый Структура;
	МаксКоличествоСубконто = Метаданные.ПланыСчетов.Хозрасчетный.МаксКоличествоСубконто;
	КоличествоВидовСубконто = Счет.ВидыСубконто.Количество();
	Для НомерСубконто = 1 По МаксКоличествоСубконто Цикл
		ПредставлениеВидаСубконто = ?(КоличествоВидовСубконто >= НомерСубконто, "<" + Счет.ВидыСубконто[НомерСубконто - 1].ВидСубконто + ">", Неопределено);
		ПредставлениеВидовСубконто.Вставить("ПредставлениеВидСубконто" + ВидДвижения + НомерСубконто, ПредставлениеВидаСубконто);
	КонецЦикла;

	Возврат ПредставлениеВидовСубконто;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область ОтображениеВидаСубконтоДт3
	Элемент = УсловноеОформление.Элементы.Добавить();
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных("ПредставлениеВидСубконтоДт3");
	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("НаборЗаписей.СчетДт");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("НаборЗаписей.СубконтоДт3");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветТекстаПодсказкиВвода);
	
	Элемент = УсловноеОформление.Элементы.Добавить();
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных("ПредставлениеВидСубконтоДт3");
	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("НаборЗаписей.СубконтоДт3");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
	Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь);
#КонецОбласти
	
#Область ОтображениеВидаСубконтоКт1
	Элемент = УсловноеОформление.Элементы.Добавить();
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных("ПредставлениеВидСубконтоКт1");
	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("НаборЗаписей.СчетКт");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("НаборЗаписей.СубконтоКт1");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветТекстаПодсказкиВвода);
	
	Элемент = УсловноеОформление.Элементы.Добавить();
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных("ПредставлениеВидСубконтоКт1");
	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("НаборЗаписей.СубконтоКт1");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
	Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь);
#КонецОбласти

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

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

#Область ОтображениеСумм_НУ_ПР_ВР

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

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

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

&НаСервере
Процедура ПовторноеОткрытиеСервер()

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

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

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

	Если ИдентификаторСобытия = Неопределено Тогда
		УстановитьДоступностьПриОткрытииФормы();
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура УстановитьДоступностьПриИзмененииРучнаяКорректировкаПроводок()

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

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

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

&НаСервере
Процедура УстановитьДоступностьПриОткрытииФормы()
	
	Элементы.СоздатьНаОсновании.Доступность = ПравоДоступа("ИнтерактивноеДобавление", Метаданные.Документы.ОперацияБух) И (ДокументПроводится ИЛИ ДокументПроведен);
	ТолькоПросмотр = Истина;
	Элементы.ФормаГруппаСтандартныеКоманды.Доступность = (ДокументПроводится ИЛИ ДокументПроведен) И ПравоИзмененияПроводок;
	Элементы.АктуализацияПроводок.Видимость = ПравоИзмененияПроводок;

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

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

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

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

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

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


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

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

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

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

#Область ОтражениеДокументов

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

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

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

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

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

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

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

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

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

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

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

	ПовторноеОткрытиеСервер();

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

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

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

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

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

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

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

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

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

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

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

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

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