Торговые точки / Форма элемента / Модуль формы

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

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

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	ОбщегоНазначенияБПКлиент.ПроверитьНаличиеОрганизаций();
	
КонецПроцедуры

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

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

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

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

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

&НаСервере
Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
	
	ЗаписатьПараметрыТорговойТочки();
	
КонецПроцедуры

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

	// СтандартныеПодсистемы.УправлениеДоступом
	УправлениеДоступом.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
	// Конец СтандартныеПодсистемы.УправлениеДоступом

	УправлениеФормой(ЭтотОбъект);
	УправлениеЗаголовкамиФормы();

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура НалоговаяЛьготаПриИзменении(Элемент)
	
	НалоговаяЛьготаПриИзмененииНаСервере();
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервереБезКонтекста
Функция ДатаНовойЗаписи()
	
	Возврат ТекущаяДатаСеанса();
	
КонецФункции

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

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

#Область АвтозаполнениеУведомлений

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

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

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

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

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


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


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

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


&НаСервере
Процедура РассчитатьСуммуСбора()
	
	ПроверитьУстановитьДатуСтавки();

	РегистрыСведений.ПараметрыТорговыхТочек.РассчитатьСуммуСбора(
		ПараметрыТорговыхТочек,
		СтавкиСбора,
		ТерриторииОсуществленияТорговойДеятельности);
	
КонецПроцедуры

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

&НаСервере
Процедура ЗагрузитьТаблицуЛьгот()
	
	ТаблицаЛьгот = ТорговыйСбор.ПрочитатьТаблицуЛьгот();
	Льготы.Загрузить(ТаблицаЛьгот);
	
КонецПроцедуры

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


#Область НалоговыеЛьготы

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

&НаСервере
Процедура УстановитьКодНалоговойЛьготы()
	
	ТипТорговойТочки = ПараметрыТорговыхТочек.ТипТорговойТочки;
	ПараметрыТорговыхТочек.КодНалоговойЛьготы =
		РегистрыСведений.ПараметрыТорговыхТочек.КодЛьготыПоНаименованию(Льготы, НалоговаяЛьгота, ТипТорговойТочки);
	
КонецПроцедуры

&НаСервере
Процедура УстановитьПредставлениеНалоговойЛьготы()
	
	КодЛьготы        = ПараметрыТорговыхТочек.КодНалоговойЛьготы;
	ТипТорговойТочки = ПараметрыТорговыхТочек.ТипТорговойТочки;
	НалоговаяЛьгота =
		РегистрыСведений.ПараметрыТорговыхТочек.НаименованиеПоКодуЛьготы(Льготы, КодЛьготы, ТипТорговойТочки);
	
КонецПроцедуры

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


#Область РедактированиеПериодическихПараметров

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура УстановитьТекстСостоянияТорговойТочки()
	
	ДатыИзмененияТорговойТочки = ДатыИзмененияТорговойТочки();
	
	Результат = Новый Массив;
	
	Если ДатыИзмененияТорговойТочки.ДатаСнятияСУчета <> NULL Тогда
		Результат.Добавить(НСтр("ru='Снята с учета'"));
		Результат.Добавить(Формат(ДатыИзмененияТорговойТочки.ДатаСнятияСУчета, "ДЛФ=D"));
	Иначе
		Результат.Добавить(НСтр("ru='Поставлена на учет'"));
		Результат.Добавить(Формат(ДатыИзмененияТорговойТочки.ДатаПостановкиНаУчет, "ДЛФ=D"));
		Если ДатыИзмененияТорговойТочки.ДатаИзмененияПараметров <> NULL Тогда
			Результат.Добавить(",");
			Результат.Добавить(НСтр("ru='параметры изменены'"));
			Результат.Добавить(Формат(ДатыИзмененияТорговойТочки.ДатаИзмененияПараметров, "ДЛФ=D"));
		КонецЕсли;
	КонецЕсли;
	
	СостояниеТорговойТочки = СтрСоединить(Результат, " ");
	
КонецПроцедуры

&НаСервере
Процедура УстановитьПредставлениеУведомления()
	
	Уведомление = РегистрыСведений.ПараметрыТорговыхТочек.ПредставлениеУведомления(ПараметрыТорговыхТочек.Уведомление);
	
КонецПроцедуры

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

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

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


#Область КонтактнаяИнформация

&НаСервере
Процедура ПослеИзмененияКонтактнойИнформацииНаСервере()
	
	СохранитьОКТМО();
	
	УстановитьЦветГиперссылкиАдрес();
	
КонецПроцедуры

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

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

&НаСервере
Функция АдресЗаполнен()
	
	Возврат НЕ КонтактнаяИнформацияПолеАдресТорговойТочки = УправлениеКонтактнойИнформациейКлиентСервер.ТекстПустогоАдресаВВидеГиперссылки();
	
КонецФункции

// СтандартныеПодсистемы.КонтактнаяИнформация

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

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

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

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

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

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

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

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

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

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

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

// Конец СтандартныеПодсистемы.КонтактнаяИнформация

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

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

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