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

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

&НаКлиенте
Перем ФормаРасшифровкаПоДокументамОткрыта;
&НаКлиенте
Перем ПараметрыОбработчикаОжидания;
&НаСервере
Перем ОрганизацияДоЗагрузкиНастроек;
&НаСервере
Перем ДатаОкончанияПериодаДоЗагрузкиНастроек;

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

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

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

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

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	ФормаРасшифровкаПоДокументамОткрыта = Ложь;
	
	ПодключитьПроверкуВыполненияФоновыхЗаданий();
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область Общие

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

&НаКлиенте
Функция ИнициализироватьПараметрыФормыСпискаДокументов(ИмяЭлемента)

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

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

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

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

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

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

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

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

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

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

#Область АвтоматическоеОтражениеВУчете

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

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

&НаКлиенте
Процедура УстановитьРасписаниеРегламентногоЗадания(Расписание, ДополнительныеПараметры) Экспорт
	
	Если Расписание <> Неопределено Тогда
		РасписаниеРегламентногоЗадания = Расписание;
		СохранитьРеквизитыРегламентногоЗадания();
		ПредставлениеРасписания = ПредставлениеРасписанияРегламентногоЗадания(Расписание);
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура СохранитьРеквизитыРегламентногоЗадания()

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область ФоновыеЗаданияПоОбновлениюДанных

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

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

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

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

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

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

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

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

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

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