Бронирование / Модуль объекта

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

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

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

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

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

	Если СпособСписанияНапрямую Тогда
		НепроверяемыеРеквизиты.Добавить("Сотрудник");
	Иначе
		НепроверяемыеРеквизиты.Добавить("СтатьяРасходов");НепроверяемыеРеквизиты.Добавить("ЗакупкаПодДеятельность");
		НепроверяемыеРеквизиты.Добавить("ЗакупкаПодДеятельность");
	КонецЕсли;
	
	Если Не ПринятьНДСКВычету Тогда
		НепроверяемыеРеквизиты.Добавить("КодВидаОперации");
	КонецЕсли;
	
	ПараметрыВыбораСтатейИАналитик = Документы.Бронирование.ПараметрыВыбораСтатейИАналитикДляСписанияПрямымМетодом();
	ДоходыИРасходыСервер.ОбработкаПроверкиЗаполнения(ЭтотОбъект, Отказ, ПроверяемыеРеквизиты, ПараметрыВыбораСтатейИАналитик);
	
	МассивРеквизитовРучнойПроверки = Новый Массив;
	
	Если Операции.Количество() = 1 Тогда
		МассивРеквизитовРучнойПроверки.Добавить("Операции.Сумма");
		МассивРеквизитовРучнойПроверки.Добавить("Операции.Дата");
	КонецЕсли;
	
	МассивРеквизитовРучнойПроверки.Добавить("Операции.СтатьяРасходов");
	МассивРеквизитовРучнойПроверки.Добавить("Операции.АналитикаРасходов");
	МассивРеквизитовРучнойПроверки.Добавить("Операции.АналитикаАктивовПассивов");
	
	Для каждого Реквизит Из МассивРеквизитовРучнойПроверки Цикл
		НепроверяемыеРеквизиты.Добавить(Реквизит);
	КонецЦикла;
	
	КлючДанных = ОбщегоНазначенияУТ.КлючДанныхДляСообщенияПользователю(ЭтотОбъект);
	ТабличнаяЧасть = Метаданные().ТабличныеЧасти.Найти("Операции");
	Реквизит = ТабличнаяЧасть.Реквизиты.Найти("СтатьяРасходов");
	
	СтавкиНДС        = Новый Соответствие;
	ОперацияВозврата = Перечисления.ТипыОперацийСБилетами.Возврат;
	Возвраты         = Новый Соответствие;
	ВозвратыУпорядоченные = Новый Соответствие;
	
	Для каждого СтрокаТЧ Из Операции Цикл
		
		СуммаСтроки = ?(СтрокаТЧ.ТипОперации = ОперацияВозврата, -СтрокаТЧ.Сумма, СтрокаТЧ.Сумма);
		ОстатокПоСтавке = СтавкиНДС.Получить(СтрокаТЧ.СтавкаНДС);
		Если ОстатокПоСтавке = Неопределено Тогда
			СтавкиНДС.Вставить(СтрокаТЧ.СтавкаНДС, СуммаСтроки);
			ОстатокПоСтавке = СуммаСтроки;
		Иначе
			ОстатокПоСтавке = ОстатокПоСтавке + СуммаСтроки;
			СтавкиНДС.Вставить(СтрокаТЧ.СтавкаНДС, ОстатокПоСтавке);
		КонецЕсли;
		
		Если СтрокаТЧ.ТипОперации = ОперацияВозврата Тогда
			
			Если СтрокаТЧ.СуммаШтрафа <> 0 И Не ЗначениеЗаполнено(СтрокаТЧ["СтатьяРасходов"]) Тогда
		
				Поле = ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("Операции", СтрокаТЧ.НомерСтроки, "СтатьяРасходов");
				ОбщегоНазначения.СообщитьПользователю(
					СтрШаблон(НСтр("ru = 'Не заполнено поле ""%1"" в строке %2 списка ""%3""'"),
						Реквизит.Синоним, СтрокаТЧ.НомерСтроки, ТабличнаяЧасть.Синоним),
					КлючДанных,
					Поле,
					"Объект",
					Отказ);
					
			КонецЕсли;
			
			Если ОстатокПоСтавке < 0 Тогда
				Возвраты.Вставить(СтрокаТЧ, ОстатокПоСтавке);
			КонецЕсли;
			
		КонецЕсли;
		
	КонецЦикла;
	
	Для Каждого ОписаниеВозврата Из Возвраты Цикл
		ВозвратыУпорядоченные.Вставить(ОписаниеВозврата.Ключ, ОписаниеВозврата.Значение);
	КонецЦикла;
			
	Для Каждого ОписаниеВозврата Из ВозвратыУпорядоченные Цикл
		
		Поле = ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("Операции", ОписаниеВозврата.Ключ.НомерСтроки, "Сумма");
			
			ТекстСообщения = СтрШаблон(НСтр("ru = 'Сумма возврата от %1 по ставке НДС ""%2""
					                   |превышает сумму ранее совершенных покупок на %3 %4'"),
					                   Формат(ОписаниеВозврата.Ключ.Дата, "ДЛФ=D"),
					                   ОписаниеВозврата.Ключ.СтавкаНДС,
					                   -ОписаниеВозврата.Значение,
					                   Валюта);
					      
			ОбщегоНазначения.СообщитьПользователю(ТекстСообщения,
				                                  КлючДанных,
				                                  Поле,
				                                  "Объект",
				                                  Отказ);
				
	КонецЦикла;
	
	Для Каждого ОписаниеСтавкиНДС Из СтавкиНДС Цикл
		Если ОписаниеСтавкиНДС.Значение < 0 Тогда
			
			Отбор = Новый Структура;
			Отбор.Вставить("СтавкаНДС",   ОписаниеСтавкиНДС.Ключ);
			Отбор.Вставить("ТипОперации", ОперацияВозврата);
			СтрокиВозвратов = Операции.НайтиСтроки(Отбор);
			СтрокаПоСтавке  = СтрокиВозвратов[СтрокиВозвратов.Количество() - 1];
			
			Поле = ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("Операции", СтрокаПоСтавке.НомерСтроки, "Сумма");
			ОбщегоНазначения.СообщитьПользователю(
				СтрШаблон(НСтр("ru = 'Сумма возвратов по ставке НДС ""%1"" превышает сумму покупок на %2 %3'"),
					ОписаниеСтавкиНДС.Ключ, -ОписаниеСтавкиНДС.Значение, Валюта),
				КлючДанных,
				Поле,
				"Объект",
				Отказ);
				
		КонецЕсли;
	КонецЦикла;
	
	Реквизиты = Новый Структура("Операции", "СтатьяРасходов,АналитикаРасходов");
	ПланыВидовХарактеристик.СтатьиРасходов.ПроверитьЗаполнениеАналитик(ЭтотОбъект, Реквизиты, НепроверяемыеРеквизиты, Отказ);

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

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

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

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

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

Процедура ПередУдалением(Отказ)

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

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

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

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

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

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

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

Процедура ПроверитьДатыПоездки(Отказ)

	Если ДатаПрибытия < ДатаОтправления
		И ДатаОтправления - ДатаПрибытия >= 90000 Тогда
		
		ЗаголовокДатаОтправления = ?(ТипБронирования = Перечисления.ТипыБронирования.ЭлектронныйБилет,
									НСтр("ru = 'Дата отправления'"),
									НСтр("ru = 'Дата начала'"));
		ЗаголовокДатаПрибытия = ?(ТипБронирования = Перечисления.ТипыБронирования.ЭлектронныйБилет,
								НСтр("ru = 'Дата прибытия'"),
								НСтр("ru = 'Дата окончания'"));
		
		ТекстСообщения = СтрШаблон(Нстр("ru = 'Значение в поле ""%1"" не может быть меньше значения ""%2"" более, чем на 25 часов'"),
							ЗаголовокДатаПрибытия,
							ЗаголовокДатаОтправления);
		ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, Ссылка, "ДатаПрибытия", "Объект", Отказ);
	
	КонецЕсли;
	
КонецПроцедуры

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

#КонецЕсли

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