Панель администрирования КА / Регламентированный учет / Модуль формы

файл

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

&НаКлиенте
Перем ОбновитьИнтерфейс;

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура НастройкаКолонтитулов(Команда)

	ОткрытьФорму("ОбщаяФорма.НастройкаКолонтитулов", , ЭтотОбъект);

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

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

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

&НаКлиенте
Процедура ИспользоватьРучнуюКорректировкуПроводокПоРеглУчетуПриИзменении(Элемент)
	Подключаемый_ПриИзмененииРеквизита(Элемент);
КонецПроцедуры

&НаКлиенте
Процедура ИспользоватьРегламентированныйУчетПриИзменении(Элемент)
	Подключаемый_ПриИзмененииРеквизита(Элемент);
КонецПроцедуры

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

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

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

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

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

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

&НаКлиенте
Процедура ВестиУчетНаПланеСчетовХозрасчетныйВВалютеФинОтчетностиПриИзменении(Элемент)
	
	Подключаемый_ПриИзмененииРеквизита(Элемент);
	
КонецПроцедуры

&НаКлиенте
Процедура ВалютаФинОтчетностиПриИзменении(Элемент)
	
	Подключаемый_ПриИзмененииРеквизита(Элемент);
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура НастройкаСчетовУчетаПроизводстваПоГруппамПродукцииПриИзменении(Элемент)
	Подключаемый_ПриИзмененииРеквизита(Элемент);
КонецПроцедуры

&НаКлиенте
Процедура ИспользоватьНастраиваемуюГруппировкуАктивовОбязательствПриИзменении(Элемент)
	Подключаемый_ПриИзмененииРеквизита(Элемент);
КонецПроцедуры

&НаКлиенте
Процедура ИспользоватьУчетПоНДДПриИзменении(Элемент)
	Подключаемый_ПриИзмененииРеквизита(Элемент);
КонецПроцедуры

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

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

&НаКлиенте
Процедура ДатаНачалаУчетаПоНДДПриИзменении(Элемент)
	Подключаемый_ПриИзмененииРеквизита(Элемент, Ложь);
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

#Область Клиент

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

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

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

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

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

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

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

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

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

#Область ВызовСервера

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Функция ДоступенУУНаПланеСчетовХозрасчетный()
	
	ИспользоватьВнеоборотныеАктивы2_4 = Константы.ИспользоватьВнеоборотныеАктивы2_4.Получить();
	ИспользоватьВнеоборотныеАктивы2_2 = Константы.ИспользоватьВнеоборотныеАктивы2_2.Получить();
	ИспользуетсяУчетВнеоборотныхАктивов = ИспользоватьВнеоборотныеАктивы2_4 ИЛИ ИспользоватьВнеоборотныеАктивы2_2;
	
	ИспользоватьРеглУчет = НаборКонстант.ИспользоватьРеглУчет;
	
	ИспользоватьУправленческийУчетОрганизаций = РасчетСебестоимостиПовтИсп.УправленческийУчетОрганизаций();
	
	ДоступностьИспользования = ИспользоватьРеглУчет 
	                           И ИспользоватьУправленческийУчетОрганизаций
	                           И (ИспользоватьВнеоборотныеАктивы2_4 
	                               ИЛИ НЕ ИспользуетсяУчетВнеоборотныхАктивов);
	  
	Комментарий = "";  
	Если НЕ ДоступностьИспользования Тогда
		
		МассивПодстрок = Новый Массив;
		МассивПодстрок.Добавить(НСтр("ru = 'Для включения управленческого учета на едином плане счетов необходимо'"));
		
		Если НЕ ИспользоватьУправленческийУчетОрганизаций Тогда
			МассивПодстрок.Добавить(НСтр("ru = 'использовать управленческий учет по правилам международного финансового учета (см раздел. ""НСИ и администрирование"" - ""Финансовый результат и контроллинг"")'"));
		КонецЕсли;
		
		Если ИспользуетсяУчетВнеоборотныхАктивов И НЕ ИспользоватьВнеоборотныеАктивы2_4 Тогда
			МассивПодстрок.Добавить(НСтр("ru = 'не использовать учет внеоборотных активов или использовать учет версии 2.4 (см. раздел ""НСИ и администрирование"" - ""Внеоборотные активы"")'"));
		КонецЕсли;
		
		Если МассивПодстрок.Количество() > 2 Тогда
			Разделитель = "
			| - ";
		Иначе
			Разделитель = " ";
		КонецЕсли;
		
		Комментарий = СтрСоединить(МассивПодстрок, Разделитель);
		
	КонецЕсли;  
	
	Результат = Новый Структура;
	Результат.Вставить("Доступность", ДоступностьИспользования);
	Результат.Вставить("Комментарий", Комментарий);
	
	Возврат Результат;
	
КонецФункции

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

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

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

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

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

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

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

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


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

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

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