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