Выкуп арендованных ОС / Модуль объекта

файл

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

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

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

		ЗаполнитьНаОснованииИзмененияУсловийДоговораАренды(ДанныеЗаполнения);

	КонецЕсли;
	
	ИнициализироватьДокумент();

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

Процедура ПриКопировании(ОбъектКопирования)
	
	ДатаВходящегоДокумента = '000101010000';
	НомерВходящегоДокумента	= "";
	Комментарий = "";

	ОбщегоНазначенияУТ.ОчиститьИдентификаторыДокумента(ЭтотОбъект, "ОС,ЗачетАвансов");

	ИнициализироватьДокумент();
	
КонецПроцедуры

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

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

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

	ВыкупАрендованныхОСЛокализация.ПриЗаписи(ЭтотОбъект, Отказ);
	
КонецПроцедуры

Процедура ОбработкаПроведения(Отказ, РежимПроведения)
	
	ПроведениеДокументов.ОчиститьДвиженияДокумента(ЭтотОбъект, "ТоварыКОформлениюДокументовИмпорта");
	
	ПроведениеДокументов.ОбработкаПроведенияДокумента(ЭтотОбъект, Отказ);
	
	УчетныеМеханизмыОбработкаПроведения();
	
КонецПроцедуры

Процедура ОбработкаУдаленияПроведения(Отказ)
	
	ПроведениеДокументов.ОбработкаУдаленияПроведенияДокумента(ЭтотОбъект, Отказ);

	УчетныеМеханизмыОбработкаУдаленияПроведения();
	
КонецПроцедуры

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

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

#Область Заполнение

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

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

Процедура ЗаполнитьДокументПоОтбору(ДанныеЗаполнения, СтандартнаяОбработка)

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

Процедура ЗаполнитьНаОснованииДоговораАренды(ДанныеЗаполнения)

	Если НЕ ЗначениеЗаполнено(ДанныеЗаполнения) Тогда
		Возврат;
	КонецЕсли;

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

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

	Если Не ЗначениеЗаполнено(Основание) Тогда
		Возврат;
	КонецЕсли;

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

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

#Область УчетныеМеханизмы

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

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

Процедура УчетныеМеханизмыОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)

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

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

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

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

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

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

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

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

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

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

	Выборка = Результат[Результат.ВГраница()-1].Выбрать();
	Если Выборка.Следующий() Тогда
		ТекстСообщения = СтрШаблон(НСтр("ru = 'По договору ""%1"" не предусмотрен выкуп арендованных ОС'"), Строка(Договор));
		ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, ЭтотОбъект, "Договор",, Отказ);
	КонецЕсли;
	
	ШаблонСообщения = НСтр("ru = 'По основному средству ""%1"" не может быть оформлен выкуп, т.к. оно не было принято к учету в организации %2'");
	Выборка = Результат[Результат.ВГраница()].Выбрать();
	Пока Выборка.Следующий() Цикл
		ТекстСообщения = СтрШаблон(ШаблонСообщения, Выборка.ОсновноеСредствоПредставление, Выборка.ОрганизацияПредставление);
		Поле = ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("ОС", Выборка.НомерСтроки, "ОсновноеСредство");
		ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, ЭтотОбъект, Поле, "", Отказ);
	КонецЦикла;
	
КонецПроцедуры

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

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

#КонецЕсли

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