Договоры между организациями / Форма элемента / Модуль формы

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

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

	ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Объект, ЭтотОбъект);

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

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

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

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

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

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

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

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

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

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

	СобытияФорм.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура ПриОкончанииИзмененияРеквизитаЛокализацииНаСервере(ИмяЭлемента, ПараметрыОбработки)
	
	ДоговорыМеждуОрганизациямиЛокализация.ПриОкончанииИзмененияРеквизита(ИмяЭлемента, ЭтотОбъект, ПараметрыОбработки);
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ЧислительКурсаВалютыДоговораПриИзменении(Элемент)
	Модифицированность = Истина;
КонецПроцедуры

&НаКлиенте
Процедура ЗнаменательКурсаВалютыДоговораПриИзменении(Элемент)
	
	Элементы.ГруппаРедактированиеКратностиКурса.Видимость = Ложь;
	Элементы.НадписьЗнаменательКурсаВалютыДоговора.Видимость = Истина;
	Модифицированность = Истина;
	УправлениеЭлементамиВариантКурсаДоговора();
	
КонецПроцедуры

&НаКлиенте
Процедура ПорядокЗачетаДокументовПриИзменении(Элемент)
	УстановитьТекстПодсказкиПорядокЗачетаДокументов();
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура УстановитьУсловноеОформление()

	УсловноеОформление.Элементы.Очистить();
	
КонецПроцедуры

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

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

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

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

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

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

&НаСервере
Процедура ДатаНачалаДействияПриИзмененииНаСервере()
	
	АктуализироватьЗакупкуПодДеятельность();
	ЗаполнитьНалогообложениеНДС();
	НалогообложениеНДСПриИзмененииСервер();
	
КонецПроцедуры

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

&НаСервере
Процедура ПорядокРасчетовПриИзмененииНаСервере()
	
	ВзаиморасчетыСервер.ФормаПриИзмененииРеквизитов(ЭтотОбъект, "ПорядокРасчетов")
	
КонецПроцедуры

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

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

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

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

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

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

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

#Область КонтрольНесогласованныхИзменений

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура УстановитьПараметрыВыбораБанковскихСчетов()

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

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

&НаСервере
Функция БанковскийСчетСоответствуетПорядкуОплаты()

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

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

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

	Если НЕ ЗначениеЗаполнено(Объект.Ссылка) Тогда
		Заголовок = ПредставлениеТипа + " (" + НСтр("ru='создание'") + ")";
	Иначе
		Заголовок = Объект.Наименование + " (" + ПредставлениеТипа + ")";
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

#Область Локализация

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

// Конец ИнтеграцияС1СДокументооборотом

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

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