Реализация услуг и прочих активов / Модуль объекта

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

#Область ПрограммныйИнтерфейс

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

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

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

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

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

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

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

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

	ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(ЭтотОбъект);
	
	ИсправлениеДокументов.ПередЗаписью(ЭтотОбъект, Отказ, РежимЗаписи, РежимПроведения);
	
	ПроведениеДокументов.ПередЗаписьюДокумента(ЭтотОбъект, РежимЗаписи, РежимПроведения);

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

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

	//++ Локализация


	//-- Локализация
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

Процедура ДозаполнитьДанныеДоходов()
	Для Каждого Строка Из Доходы Цикл
		Если НалогообложениеНДС = Перечисления.ТипыНалогообложенияНДС.ПродажаНеОблагаетсяНДС И Не ЗначениеЗаполнено(Строка.СтавкаНДС) Тогда
			Строка.СтавкаНДС = Справочники.СтавкиНДС.БезНДС;
		КонецЕсли;
	КонецЦикла;
КонецПроцедуры


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

Процедура СформироватьЗаданияКЗакрытиюМесяца()
	
	Если ПланыОбмена.ГлавныйУзел() <> Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	
КонецПроцедуры

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

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

#КонецЕсли

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