Настройка отражения документов в регл учете / Форма настройки / Модуль формы

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

&НаКлиенте
Перем ВыполняетсяЗакрытие;

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

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

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

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

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

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

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

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	ОбработатьРезультатВыполненияФоновогоЗадания();
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура ПоказыватьТолькоТребующиеНастройкиПриИзменении(Элемент)
	
	УстановитьТекущуюСтраницу(ЭтотОбъект);
		
КонецПроцедуры

&НаКлиенте
Процедура ПоказыватьОбщуюНастройкуПриИзменении(Элемент)
	
	УстановитьТекущуюСтраницу(ЭтотОбъект);
	ОбновитьПредставлениеСпискаВыбораСтраниц(ЭтотОбъект);
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ТаблицаНастроекПриАктивизацииЯчейки(Элемент)
	
	Если Элемент <> Неопределено И Элемент.ТекущийЭлемент <> Неопределено И Элемент.ТекущиеДанные <> Неопределено Тогда
		ИмяЭлементаНастройки = НастройкаСчетовУчетаКлиентСервер.ИмяЭлементаНастройкиПоИмениЭлементаФормы(Элемент.ТекущийЭлемент.Имя);
		Если КэшДанныхМеханизмов.НастройкаСчетовУчета.СчетаСДинамическимиПараметрамиВыбора.Найти(ИмяЭлементаНастройки) <> Неопределено Тогда
			Элемент.ТекущийЭлемент.ПараметрыВыбора = НастройкаСчетовУчетаКлиентСервер.ПараметрыВыбораСчетаУчета(ИмяЭлементаНастройки, КэшДанныхМеханизмов.НастройкаСчетовУчета, Элемент.ТекущиеДанные.Долгосрочный, Элемент.ТекущиеДанные);
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура ТаблицаНастроек_ОтборАналитикиВключенПриИзменении(Элемент)
	РедактируемаяАналитикаПредставление = ПредставлениеОтбора(ОтборАналитикиВключен, РедактируемаяАналитика);
	УстановитьТекущуюСтраницу(ЭтотОбъект);
КонецПроцедуры

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

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

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

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

&НаКлиенте
Процедура СохранитьНастройкуИЗакрыть(Команда)
	
	СохранитьНастройкиОтраженияВУчете();
	Закрыть();
	
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура ПрименитьНастройкуФрагмент(Знач КоличествоДокументов)
	
	ОповеститьПользователяОПримененииНастройки(КоличествоДокументов);

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

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

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

&НаКлиенте
Процедура СвернутьПанельУправления(Команда)
	
	ПанельУправленияСвернута = НЕ ПанельУправленияСвернута;
	
	УстановитьВидимостьПанелейУправления(ЭтотОбъект);
	
КонецПроцедуры

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

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

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

#Область ПроцедурыОбработчикиКомандОбновленияТаблицНастроек

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

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

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

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

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

#Область ПроцедурыОбработчикиКомандОткрытияФормРасшифровокДанных

&НаКлиенте
Процедура ПоказатьПредупреждениеЕслиНеВыбранаСтрока()
	
	ПоказатьПредупреждение(, НСтр("ru= 'Выберите строку для расшифровки'"), 10);
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

#Область ПроцедурыОбработчикиКомандСозданияНовыхНастроекСчетовУчета

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

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

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

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

#Область ПервоначальноеЗаполнениеФормы

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

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

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

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

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

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

#Область УправлениеФормой

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

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

&НаКлиентеНаСервереБезКонтекста
Процедура УправлениеЭлементамиСохраненияНастроекФормы(Форма)
	
	Форма.Элементы.СохранитьНастройкуИЗакрыть.Доступность = Форма.Модифицированность;
	Форма.Элементы.СохранитьНастройку.Доступность = Форма.Модифицированность;
	Форма.Элементы.ПрименитьНастройку.Доступность = Форма.Модифицированность;
	
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьТекущуюСтраницу(Форма)

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

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

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

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

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

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

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

&НаКлиентеНаСервереБезКонтекста
Функция ЧислоДокументовПрописью(КоличествоДокументов)
	
	КоличествоПрописью = ЧислоПрописью(
		КоличествоДокументов,
		"Л = ru_RU; НП = Истина; НД = Ложь; ДП = Ложь;",
		НСтр("ru = 'документ,документа,документов,м,,,,,0'"));
	Поз = СтрНайти(КоличествоПрописью, "документ");
	Если Поз <> 0 Тогда
		КоличествоПрописью = Сред(КоличествоПрописью, Поз);
	КонецЕсли;
	КоличествоПрописью = Строка(КоличествоДокументов) + " " + НРег(КоличествоПрописью);
	
	Возврат КоличествоПрописью;
	
КонецФункции

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

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

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

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

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

&НаСервере
Процедура ОбновитьИтоговыеДанныеПоКоличествуСтрокТребующихНастройки()

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

&НаКлиенте
Функция ИнициализироватьПараметрыФормыДлительнойОперации(РезультатЗапускаФоновогоЗадания)

	ПараметрыФормы = Новый Структура;
	ПараметрыФормы.Вставить("ИдентификаторЗадания", РезультатЗапускаФоновогоЗадания.ИдентификаторЗадания);
	ПараметрыФормы.Вставить("ВыводитьОкноОжидания", Истина);
	ПараметрыФормы.Вставить("АдресРезультата", РезультатЗапускаФоновогоЗадания.АдресРезультата);
		
	Возврат ПараметрыФормы;

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

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

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

&НаКлиентеНаСервереБезКонтекста
Функция ИмяТаблицыДанныхПоИмениТекущейТаблицы(ИмяТаблицы)
	
	СтрокаВозврата = НастройкаСчетовУчетаКлиентСервер.ОбщийРазделУчетаПоИмениТекущегоРаздела(ИмяТаблицы);
	
	СтрокаВозврата = "ТаблицаНастроек_" + СтрокаВозврата;
	
	Возврат СтрокаВозврата;
	
КонецФункции

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

&НаКлиентеНаСервереБезКонтекста
Функция ПредставлениеОтбора(ОтборВключен, ЗначениеОтбора)
	СтрокаОтбора = ?(ЗначениеЗаполнено(ЗначениеОтбора), Строка(ЗначениеОтбора), НСтр("ru = '<пустое значение>'"));
	Возврат Новый ФорматированнаяСтрока(?(ОтборВключен, СтрокаОтбора, ""));
КонецФункции

&НаКлиентеНаСервереБезКонтекста
Функция ИспользоватьДопИсключения(РазделУчета)
	
	Возврат РазделУчета = "НоменклатураПереданная" Или РазделУчета = "НоменклатураПринятая";
	
КонецФункции

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

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

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

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

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

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

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

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

#Область ОбработчикиОповещений

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

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

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

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

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

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

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

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

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

#Область СохранениеДанных

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

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

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

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

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

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

#Область Инициализация

ВыполняетсяЗакрытие = Ложь;

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

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