Договоры аренды (лизинга) / Модуль объекта

файл
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

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

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

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

Процедура ПриКопировании(ОбъектКопирования)

	Согласован              = Ложь;
	ДатаНачалаДействия      = '00010101';
	ДатаОкончанияДействия   = '00010101';

	ИнициализироватьСправочник();

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

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

Процедура ПриЗаписи(Отказ)
	
	Если ОбменДанными.Загрузка Тогда
		Возврат;
	КонецЕсли;
	
КонецПроцедуры

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

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

#Область ИнициализацияИЗаполнение

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

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

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

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

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

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

#Область ПроверкаЗаполнения

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

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

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

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

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

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

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

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

#КонецЕсли

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