Авансовый отчет / Форма документа / Модуль формы

файл

#Область ОписаниеПеременных

//используется механизмом обработки изменения реквизитов ТЧ
&НаКлиенте
Перем КэшированныеЗначения;

//++ Локализация
&НаКлиенте
Перем ПроверкаКонтрагентовПараметрыОбработчикаОжидания Экспорт;

&НаКлиенте
Перем ФормаДлительнойОперации Экспорт;
//-- Локализация

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

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

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

&НаКлиенте
Процедура ОбработкаВыбора(РезультатВыбора, ИсточникВыбора)

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

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

&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)

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

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

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

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

	// СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов	
	УчетОригиналовПервичныхДокументовКлиент.ОбработчикОповещенияФормаДокумента(ИмяСобытия,ЭтотОбъект);
	// Конец СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов
	
КонецПроцедуры

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

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

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

	// СтандартныеПодсистемы.РаботаСФайлами
	РаботаСФайламиКлиент.ПриОткрытии(ЭтотОбъект, Отказ);
	// Конец СтандартныеПодсистемы.РаботаСФайлами
	
КонецПроцедуры

&НаКлиенте
Процедура ПриЗакрытии(ЗавершениеРаботы)
	
	Если ЗначениеЗаполнено(РедактируемыйДокументЗакупки) И ЗначениеЗаполнено(Объект.Ссылка) Тогда
		ОповеститьОВыборе(Объект.Ссылка);
	КонецЕсли;
	
КонецПроцедуры

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

#Область ОбработчикиСобытийЭлементовШапкиФормы

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

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

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

&НаКлиенте
Процедура ДатаУтвержденияПриИзменении(Элемент)
	
	Если Объект.ДатаУтверждения < Объект.Дата Тогда
		Объект.ДатаУтверждения = Объект.Дата;
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ОрганизацияПриИзменении(Элемент)
	
	ОрганизацияПриИзмененииСервер();
	РассчитатьСуммуДокумента(ЭтаФорма);
	
КонецПроцедуры

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

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

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

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

&НаСервере
Процедура ВалютаПриИзмененииСервер()
	
	ЗаполнитьСуммуПолучено();
	ОбновитьДокументыЗакупки();
	
КонецПроцедуры

&НаКлиенте
Процедура ПодотчетноеЛицоПриИзменении(Элемент)
	
	ПодотчетноеЛицоПриИзмененииСервер();
	РассчитатьСуммуДокумента(ЭтаФорма);
	
КонецПроцедуры

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

&НаКлиенте
Процедура СтатусПриИзменении(Элемент)
	
	СтатусПриИзмененииНаСервере();
	
КонецПроцедуры

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

&НаКлиенте
Процедура НесколькоВалютПриИзменении(Элемент)
	
	Модифицированность = Истина;
	
	НесколькоВалютПриИзмененииНаСервере();
	РассчитатьСуммуДокумента(ЭтаФорма);
	
КонецПроцедуры

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

&НаКлиенте
Процедура ЗакупкаПодДеятельностьОчистка(Элемент, СтандартнаяОбработка)
	СтандартнаяОбработка = Ложь;
КонецПроцедуры

&НаКлиенте
Процедура СтрокаИсправлениеОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
	
	ИсправлениеДокументовКлиент.СтрокаИсправлениеОбработкаНавигационныйСсылки(
		ЭтотОбъект, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка);
	
КонецПроцедуры

&НаКлиенте
Процедура ДекорацияЭДОНажатие(Элемент, СтандартнаяОбработка)
	
	ОчиститьСообщения();
	
	// ЭлектронноеВзаимодействие.ОбменСКонтрагентами
	ОбменСКонтрагентамиКлиент.СостояниеЭДОНажатие_ФормаДокумента(ЭтотОбъект, СтандартнаяОбработка);
	// Конец ЭлектронноеВзаимодействие.ОбменСКонтрагентами
	
	Возврат;
	
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ДекорацияСостояниеОригиналаНажатие()

	// СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов
	УчетОригиналовПервичныхДокументовКлиент.ОткрытьМенюВыбораСостояния(ЭтотОбъект,Элементы.ДекорацияСостояниеОригинала);
	//Конец СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов

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

&НаКлиенте
Процедура ЦенаВключаетНДСПриИзменении(Элемент)
	
	ЦенаВключаетНДСПриИзмененииСервер(КэшированныеЗначения);	
	
КонецПроцедуры

&НаКлиенте
Процедура ПодразделениеПриИзменении(Элемент)
	ЗаполнитьСуммуПолучено();
КонецПроцедуры

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

#Область ОбработчикиСобытийЭлементовТаблицыФормыДокументыЗакупки

&НаКлиенте
Процедура ДокументыЗакупкиВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	
	Если Элемент.ТекущиеДанные <> Неопределено Тогда
		ПоказатьЗначение(, Элемент.ТекущиеДанные.ДокументЗакупки);
	КонецЕсли;
	
КонецПроцедуры

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

#Область ОбработчикиСобытийЭлементовТаблицыФормыОплатаПоставщикам

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

&НаКлиенте
Процедура ОплатаПоставщикамПослеУдаления(Элемент)
	
	РассчитатьСуммуДокумента(ЭтаФорма);
	
КонецПроцедуры

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

&НаКлиенте
Процедура ОплатаПоставщикамСуммаПриИзменении(Элемент)
	
	Элементы.ОплатаПоставщикам.ТекущиеДанные.СуммаВзаиморасчетов = 0;
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура ОплатаПоставщикамВалютаВзаиморасчетовПриИзменении(Элемент)
	
	Элементы.ОплатаПоставщикам.ТекущиеДанные.СуммаВзаиморасчетов = 0;
	Элементы.ОплатаПоставщикам.ТекущиеДанные.ОбъектРасчетов = ПредопределенноеЗначение("Справочник.ОбъектыРасчетов.ПустаяСсылка");
	
КонецПроцедуры

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

#Область ОбработчикиСобытийЭлементовТаблицыФормыПрочиеРасходы

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

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

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

&НаКлиенте
Процедура ПрочиеРасходыПослеУдаления(Элемент)
	
	РассчитатьСуммуДокумента(ЭтаФорма);
	
КонецПроцедуры

&НаСервере
Процедура ПрочиеРасходыСтатьяРасходовПриИзмененииСервер(ИмяЭлемента);
	
	ДоходыИРасходыКлиентСервер.СтатьяПриИзменении(ЭтотОбъект, Элементы[ИмяЭлемента]);
	
КонецПроцедуры

&НаКлиенте
Процедура ПрочиеРасходыСтатьяРасходовПриИзменении(Элемент)
	
	ПрочиеРасходыСтатьяРасходовПриИзмененииСервер(Элемент.Имя);
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура ПрочиеРасходыАналитикаРасходовАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
	ДоходыИРасходыКлиент.АвтоПодборАналитикиРасходов(ЭтотОбъект, Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка);
КонецПроцедуры

&НаКлиенте
Процедура ПрочиеРасходыАналитикаРасходовОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка)
	ДоходыИРасходыКлиент.ОкончаниеВводаТекстаАналитикиРасходов(ЭтотОбъект, Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка);
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура ПрочиеРасходыСпособУчетаНДСПриИзменении(Элемент)
	
	ТекущаяСтрока = Элементы.ПрочиеРасходы.ТекущиеДанные;
	ТекущаяСтрока.ПредъявленСФ = (ТекущаяСтрока.СпособУчетаНДС = 1);
	
КонецПроцедуры

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

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

#Область ОбработчикиСобытийЭлементовТаблицыФормыКонвертацияВалюты

&НаКлиенте
Процедура КонвертацияВалютыВалютаПриИзменении(Элемент)
	
	ПересчитатьКурсКонвертации();
	
КонецПроцедуры

&НаКлиенте
Процедура КонвертацияВалютыСуммаПриИзменении(Элемент)
	
	КурсКонвертацииПриИзмененииСервер();
	
КонецПроцедуры

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

&НаКлиенте
Процедура КонвертацияВалютыВалютаКонвертацииПриИзменении(Элемент)
	
	ПересчитатьКурсКонвертации();
	
КонецПроцедуры

&НаКлиенте
Процедура КонвертацияВалютыСуммаКонвертацииПриИзменении(Элемент)
	
	СуммаКонвертацииПриИзмененииНаСервере();
	
КонецПроцедуры

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

&НаКлиенте
Процедура КонвертацияВалютыКурсПриИзменении(Элемент)
	
	КурсКонвертацииПриИзмененииСервер();
	
КонецПроцедуры

&НаКлиенте
Процедура КонвертацияВалютыПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
	
	РассчитатьСуммуДокумента(ЭтаФорма);
	
КонецПроцедуры

&НаКлиенте
Процедура КонвертацияВалютыПослеУдаления(Элемент)
	
	РассчитатьСуммуДокумента(ЭтаФорма);
	
КонецПроцедуры

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

#Область ОбработчикиКомандФормы

// СтандартныеПодсистемы.ПодключаемыеКоманды
&НаСервере
Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения)
	ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Объект);
КонецПроцедуры
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды


// СтандартныеПодсистемы.ПодключаемыеКоманды
&НаКлиенте
Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт
	ВыполнитьКомандуНаСервере(ПараметрыВыполнения);
КонецПроцедуры
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды


// СтандартныеПодсистемы.ПодключаемыеКоманды
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
	ПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Объект);
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
	ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецПроцедуры
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды

// ЭлектронноеВзаимодействие.ОбменСКонтрагентами

&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуЭДО(Команда)
	
	ЭлектронноеВзаимодействиеКлиент.ВыполнитьПодключаемуюКомандуЭДО(Команда, ЭтотОбъект, Объект);
	
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ОбработчикОжиданияЭДО()
	
	ОбменСКонтрагентамиКлиент.ОбработчикОжиданияЭДО(ЭтотОбъект);
	
КонецПроцедуры

// Конец ЭлектронноеВзаимодействие.ОбменСКонтрагентами

// СтандартныеПодсистемы.РаботаСФайлами
&НаКлиенте
Процедура Подключаемый_КомандаПанелиПрисоединенныхФайлов(Команда)
	 РаботаСФайламиКлиент.КомандаУправленияПрисоединеннымиФайлами(ЭтотОбъект, Команда);
КонецПроцедуры
// Конец СтандартныеПодсистемы.РаботаСФайлами

// СтандартныеПодсистемы.РаботаСФайлами
&НаКлиенте
Процедура Подключаемый_ПолеПредпросмотраПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)
	 РаботаСФайламиКлиент.ПолеПредпросмотраПроверкаПеретаскивания(ЭтотОбъект, Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка);
КонецПроцедуры
// Конец СтандартныеПодсистемы.РаботаСФайлами

// СтандартныеПодсистемы.РаботаСФайлами
&НаКлиенте
Процедура Подключаемый_ПолеПредпросмотраПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)
	 РаботаСФайламиКлиент.ПолеПредпросмотраПеретаскивание(ЭтотОбъект, Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка);
КонецПроцедуры
// Конец СтандартныеПодсистемы.РаботаСФайлами

// СтандартныеПодсистемы.РаботаСФайлами
&НаКлиенте
Процедура Подключаемый_ПолеПредпросмотраНажатие(Элемент, СтандартнаяОбработка)
	 РаботаСФайламиКлиент.ПолеПредпросмотраНажатие(ЭтотОбъект, Элемент, СтандартнаяОбработка);
КонецПроцедуры
// Конец СтандартныеПодсистемы.РаботаСФайлами

&НаКлиенте
Процедура ПроверитьКонтрагентов(Команда)
	
	//++ Локализация
	ПроверитьКонтрагентовЛокализация(Команда);
	//-- Локализация
	
	Возврат;
	
КонецПроцедуры

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

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

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

// ИнтеграцияС1СДокументооборотом
&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуИнтеграции(Команда)
	
	ИнтеграцияС1СДокументооборотБазоваяФункциональностьКлиент.ВыполнитьПодключаемуюКомандуИнтеграции(Команда, ЭтаФорма, Объект);
	
КонецПроцедуры
// Конец ИнтеграцияС1СДокументооборотом

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

&НаКлиенте
Процедура ОбработкаВыбораБилета(Результат, ДополнительныеПараметры) Экспорт
	
	Если Результат <> Неопределено Тогда
		ДобавитьСтрокуПоДаннымБилета(Результат);
	КонецЕсли;
	
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура ЗаписатьДокумент(Команда)
	
	ОбщегоНазначенияУТКлиент.Записать(ЭтаФорма);
	
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ВыполнитьПереопределяемуюКоманду(Команда)
	
	СобытияФормКлиент.ВыполнитьПереопределяемуюКоманду(ЭтаФорма, Команда);
	
КонецПроцедуры

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

&НаКлиенте
Процедура ПровестиДокумент(Команда)
	
	ОбщегоНазначенияУТКлиент.Провести(ЭтаФорма);
	
КонецПроцедуры

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

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

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

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

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

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

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

&НаСервере
Процедура ОбработкаПодбораДокументовЗакупки(АдресВХранилище)
	
	СписокДокументовЗакупки.ЗагрузитьЗначения(ПолучитьИзВременногоХранилища(АдресВХранилище));
	ОбновитьДокументыЗакупки();
	
КонецПроцедуры

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

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

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

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

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

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

&НаКлиенте
Процедура ЗакупкиСоздатьПДД(Команда)
	
	//++ Локализация
	ЗакупкиСоздатьПДДЛокализация(Команда);
	//-- Локализация
	
	Возврат;
	
КонецПроцедуры

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

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

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

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

// СтандартныеПодсистемы.Свойства
&НаКлиенте
Процедура ОбновитьЗависимостиДополнительныхРеквизитов()
	УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры

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

&НаСервере
Процедура УстановитьУсловноеОформление()
	
	УсловноеОформление.Элементы.Очистить();
	
	//

	ЦеныПредприятияЗаполнениеСервер.УстановитьУсловноеОформлениеЦенаВключаетНДС(ЭтаФорма, "ПрочиеРасходыСуммаСНДС");
	
	//
	
	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ПрочиеРасходыКонтрагент.Имя);

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

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Черный);
	
	//

	Элемент = УсловноеОформление.Элементы.Добавить();

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

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

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

&НаСервере
Процедура ЗаполнитьСписокВыбораСпособУчетаНДС()
	
	СписокВыбораСпособУчетаНДС = Элементы.ПрочиеРасходыСпособУчетаНДС.СписокВыбора;
	СписокВыбораСпособУчетаНДС.Очистить();
	СписокВыбораСпособУчетаНДС.Добавить(0, НСтр("ru = 'Списать в расходы'"));
	СписокВыбораСпособУчетаНДС.Добавить(1, НСтр("ru = 'Принять к вычету'"));
	
КонецПроцедуры

&НаСервере
Процедура НастроитьЗависимыеЭлементыФормыНаСервере(ИзмененныйРеквизит = "")
	
	ДенежныеСредстваКлиентСервер.НастроитьЭлементыФормы(ЭтаФорма, ИзмененныйРеквизит, РеквизитыФормы(ЭтаФорма));
	
КонецПроцедуры

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

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

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

&НаСервереБезКонтекста
Функция ПолучитьКонтрагентаПартнераПоУмолчанию(Партнер)
	
	Возврат ПартнерыИКонтрагенты.ПолучитьКонтрагентаПартнераПоУмолчанию(Партнер);
	
КонецФункции

&НаКлиентеНаСервереБезКонтекста
Функция ПараметрыПересчетаСуммыНДСВСтрокеТЧ(Форма)
	
	СтруктураПересчетаСуммы = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(Форма.Объект);
	
	Возврат СтруктураПересчетаСуммы;
	
КонецФункции

&НаСервере
Процедура ЗаполнитьПодчиненныеСвойстваПоСтатистике(ИмяРеквизитаРодителя)
	ЗаполнениеОбъектовПоСтатистике.ЗаполнитьПодчиненныеРеквизитыОбъекта(Объект, ИмяРеквизитаРодителя);
КонецПроцедуры

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

&НаСервере
Процедура ОбновитьДокументыЗакупки()
	
	ДокументыЗакупки.Параметры.УстановитьЗначениеПараметра("СписокДокументовЗакупки", СписокДокументовЗакупки);
	
	//ЧислоДокументовЗакупки
	ТекстЗапроса = "ВЫБРАТЬ КОЛИЧЕСТВО(*) КАК ЧислоДокументовЗакупки ИЗ (" + ДокументыЗакупки.ТекстЗапроса + ") КАК Данные"; //@query-part
	Запрос = Новый Запрос(ТекстЗапроса);
	
	Для каждого ПараметрЗапроса Из ДокументыЗакупки.Параметры.Элементы Цикл
		Запрос.УстановитьПараметр(Строка(ПараметрЗапроса.Параметр), ПараметрЗапроса.Значение);
	КонецЦикла;
	
	Выборка = Запрос.Выполнить().Выбрать();
	Выборка.Следующий();
	ЧислоДокументовЗакупки = Выборка.ЧислоДокументовЗакупки;
	
	//Итоги
	ТекстЗапроса = 
	"ВЫБРАТЬ
	|	СУММА(Данные.Сумма),
	|	Данные.Валюта КАК Валюта,
	|	Данные.СтатьяДвиженияДенежныхСредств КАК ЦельВыдачи
	|ИЗ 
	|	&ДокументыЗакупки КАК Данные
	|СГРУППИРОВАТЬ ПО
	|	Данные.Валюта,
	|	Данные.СтатьяДвиженияДенежныхСредств";
	ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ДокументыЗакупки", СтрШаблон("(%1)", ДокументыЗакупки.ТекстЗапроса));
		
	Запрос = Новый Запрос(ТекстЗапроса);
	
	Для каждого ПараметрЗапроса Из ДокументыЗакупки.Параметры.Элементы Цикл
		Запрос.УстановитьПараметр(Строка(ПараметрЗапроса.Параметр), ПараметрЗапроса.Значение);
	КонецЦикла;
	
	Выборка = Запрос.Выполнить().Выбрать();
	
	Таблица = РеквизитФормыВЗначение("ТаблицаИтоговПоВалютам");
	Таблица.ЗаполнитьЗначения(0, "СуммаЗакупок");
	Пока Выборка.Следующий() Цикл
		СтрокаИтогПоВалюте = Таблица.Добавить();
		СтрокаИтогПоВалюте.Валюта       = Выборка.Валюта;
		СтрокаИтогПоВалюте.ЦельВыдачи   = Выборка.ЦельВыдачи;
		СтрокаИтогПоВалюте.СуммаЗакупок = Выборка.Сумма;
	КонецЦикла;
	Таблица.Свернуть("Валюта, ЦельВыдачи, Курс, Растяжка",
	                 "НачальныйОстаток, НачальныйПерерасход, Получено, Возвращено, Израсходовано, Перерасход, Отклонено, Остаток, Конвертировано, СуммаЗакупок");
	ЗначениеВРеквизитФормы(Таблица, "ТаблицаИтоговПоВалютам");
	
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура ДобавитьСуммуВИтогиПоВалютам(ИтогиПоВалютам, Валюта, ЦельВыдачи, Сумма, Колонка)
	
	ИтогПоВалюте = ИтогиПоВалютам.Получить(Валюта);
	Если ИтогПоВалюте = Неопределено Тогда
		ИтогПовалюте = ИнициализироватьИтогПоВалюте(ЦельВыдачи, Сумма, Колонка);
		ИтогиПоВалютам.Вставить(Валюта, ИтогПовалюте);
	КонецЕсли;

	ИтогПоЦели = ИтогПоВалюте.Получить(ЦельВыдачи);
	Если ИтогПоЦели = Неопределено Тогда
		ИтогПоЦели = ИнициализироватьИтогПоцели();
		ИтогПоВалюте.Вставить(ЦельВыдачи, ИтогПоЦели);
	КонецЕсли;
	
	ИсходнаяСумма = 0;
	ИтогПоЦели.Свойство(Колонка, ИсходнаяСумма);
	ИтогПоЦели.Вставить(Колонка, ИсходнаяСумма + Сумма);
	
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Функция ИнициализироватьИтогПоВалюте(ЦельВыдачи, Сумма, Колонка)
	
	ИтогПоВалюте = Новый Соответствие;
	
	ИтогПоЦели = ИтогПоВалюте.Получить(ЦельВыдачи);
	Если ИтогПоЦели = Неопределено Тогда
		ИтогПоЦели = ИнициализироватьИтогПоцели();
		ИтогПоВалюте.Вставить(ЦельВыдачи, ИтогПоЦели);
	КонецЕсли;
	
	Возврат ИтогПоВалюте;
	
КонецФункции

&НаКлиентеНаСервереБезКонтекста
Функция ИнициализироватьИтогПоцели()

	ИтогПоЦели = Новый Структура;
	ИтогПоЦели.Вставить("НачальныйОстаток", 0);
	ИтогПоЦели.Вставить("НачальныйПерерасход", 0);
	ИтогПоЦели.Вставить("Получено", 0);
	ИтогПоЦели.Вставить("Возвращено", 0);
	ИтогПоЦели.Вставить("Израсходовано", 0);
	ИтогПоЦели.Вставить("Конвертировано", 0);
	ИтогПоЦели.Вставить("Отклонено", 0);
	ИтогПоЦели.Вставить("Остаток", 0);
	ИтогПоЦели.Вставить("Перерасход", 0);
	ИтогПоЦели.Вставить("СуммаЗакупок", 0);
	
	Возврат ИтогПоЦели;
	
КонецФункции

&НаСервере
Процедура ОбновитьЭлементыДополнительныхРеквизитов()
	
	УправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтаФорма);
	
КонецПроцедуры

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

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

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

&НаСервере
Процедура ПоместитьРасшифровкуПлатежаВоВременноеХранилище()
	ВзаиморасчетыСервер.ПоместитьРасшифровкуПлатежаВоВременноеХранилище(ЭтаФорма, "ПодборПоОстаткам");
КонецПроцедуры

&НаКлиенте
Процедура ПодборПоОстаткамЗавершение(Результат, ДополнительныеПараметры) Экспорт
	Если Результат <> Неопределено Тогда
		ПодборПоОстаткамЗавершениеСервер();
	КонецЕсли;
КонецПроцедуры

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

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

&НаКлиентеНаСервереБезКонтекста
Функция СтрокаМультивалютныеСуммы(ИтогиПоВалютам)
	
	СтрокаОстаток = Новый Массив;
	СтрокаПерерасход = Новый Массив;
	
	Для Каждого КлючИЗначениеВалюты Из ИтогиПоВалютам Цикл
		
		ИтогоОстаток = 0;
		ИтогоПерерасход = 0;
		Валюта = Строка(КлючИЗначениеВалюты.Ключ);
		
		Для Каждого КлючИЗначение Из КлючИЗначениеВалюты.Значение Цикл
			
			СтрокаИтогов = КлючИЗначение.Значение;
			Если СтрокаИтогов.Остаток <> 0 Тогда
	
				Если СтрокаИтогов.Остаток < 0 Тогда
					ИтогоПерерасход = ИтогоПерерасход + -1 * СтрокаИтогов.Остаток;
				Иначе
					ИтогоОстаток = ИтогоОстаток + СтрокаИтогов.Остаток;
				КонецЕсли;
	
			КонецЕсли;
	
			Если СтрокаИтогов.Перерасход <> 0 Тогда
				ИтогоПерерасход = ИтогоПерерасход + СтрокаИтогов.Перерасход;
			КонецЕсли;
			
		КонецЦикла;
	
		Если ИтогоОстаток <> 0 Тогда
			СтрокаОстаток.Добавить(Строка(ИтогоОстаток) + " " + Валюта + " ");
		КонецЕсли;
		Если ИтогоПерерасход <> 0 Тогда
			СтрокаПерерасход.Добавить(Строка(ИтогоПерерасход) + " " + Валюта + " ");
		КонецЕсли;
		
	КонецЦикла;
	
	Если Не СтрокаОстаток.Количество() И Не СтрокаПерерасход.Количество() Тогда
		ИтоговаяСтрока = Новый ФорматированнаяСтрока(НСтр("ru = 'Остаток -'"));
	Иначе
		ИтоговаяСтрокаМассив = Новый Массив;
		
		Если СтрокаОстаток.Количество() Тогда
			ИтоговаяСтрокаМассив.Добавить(НСтр("ru = 'Остаток'") + " ");
			ИтоговаяСтрокаМассив.Добавить(СтрокаОстаток);
		КонецЕсли;
		
		Если СтрокаПерерасход.Количество() Тогда
			ИтоговаяСтрокаМассив.Добавить(НСтр("ru = 'Перерасход'") + " ");
			ИтоговаяСтрокаМассив.Добавить(СтрокаПерерасход);
		КонецЕсли;
		
		ИтоговаяСтрока = Новый ФорматированнаяСтрока(ИтоговаяСтрокаМассив);
	КонецЕсли;
	
	Возврат ИтоговаяСтрока;
	
КонецФункции

&НаСервере
Процедура ПересчитатьКурсКонвертации()
	
	СтрокаТаблицы = Объект.КонвертацияВалюты.НайтиПоИдентификатору(Элементы.КонвертацияВалюты.ТекущаяСтрока);
	ПересчитатьПараметрыКонвертации(СтрокаТаблицы, "ВалютаКонвертации")
	
КонецПроцедуры

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

&НаСервере
Процедура СформироватьКурсТекстом()
	
	СтрокаТаблицы = Объект.КонвертацияВалюты.НайтиПоИдентификатору(Элементы.КонвертацияВалюты.ТекущаяСтрока);
	
	ШаблонКурса = "%1 %2 = %3 %4";
	
	Если СтрокаТаблицы.КурсКонвертации <> 0 Тогда
		Если СтрокаТаблицы.Валюта = ВалютаРеглУчета Тогда
			СтрокаТаблицы.КурсТекстом = СтрШаблон(
				ШаблонКурса,
				Строка(Формат(СтрокаТаблицы.КурсКонвертации, "ЧДЦ=4")),
				СтрокаТаблицы.Валюта,
				СтрокаТаблицы.КратностьКурсаКонвертации,
				СтрокаТаблицы.ВалютаКонвертации);
		Иначе
			СтрокаТаблицы.КурсТекстом = СтрШаблон(
				ШаблонКурса,
				СтрокаТаблицы.КратностьКурсаКонвертации,
				СтрокаТаблицы.Валюта,
				Строка(Формат(СтрокаТаблицы.КурсКонвертации, "ЧДЦ=4")),
				СтрокаТаблицы.ВалютаКонвертации);
		КонецЕсли;
	Иначе
		СтрокаТаблицы.КурсТекстом = "0";
	КонецЕсли;
	
КонецПроцедуры

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

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

&НаСервереБезКонтекста
Функция НезначащаяСтавкаНДСНаСервере(ПеречислениеСтавкаНДС)
	
	Возврат УчетНДСУП.НезначащаяСтавка(ПеречислениеСтавкаНДС);
	
КонецФункции

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

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

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

//++ Локализация
#Область Локализация

#Область Локализация_ПодключаемыеОбработчикиСобытийФормы

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

	Элементы.ДекорацияСостояниеЭДО.Видимость = ПолучитьФункциональнуюОпцию("ИспользоватьОбменЭД");

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

&НаСервере
Процедура Подключаемый_ПриЧтенииНаСервереЛокализация(ТекущийОбъект)
	
	ПриЧтенииНаСервере(ТекущийОбъект);
	
	ПриЧтенииСозданииНаСервереЛокализация();

	// ЭлектронноеВзаимодействие.ОбменСКонтрагентами
	ПараметрыЭДОПриСоздании = ОбменСКонтрагентами.ПараметрыПриЧтенииНаСервере_ФормаДокумента();
	ПараметрыЭДОПриСоздании.Форма = ЭтотОбъект;
	ПараметрыЭДОПриСоздании.ДокументСсылка = Объект.Ссылка;
	ПараметрыЭДОПриСоздании.МестоРазмещенияКоманд = Элементы.ПодменюЭДО;
	ПараметрыЭДОПриСоздании.КонтроллерСостояниеЭДО = Элементы.ДекорацияСостояниеЭДО;
	ПараметрыЭДОПриСоздании.ГруппаСостояниеЭДО = Элементы.ГруппаСостояниеЭДО;
	ОбменСКонтрагентами.ПриЧтенииНаСервере_ФормаДокумента(ПараметрыЭДОПриСоздании);
	// Конец ЭлектронноеВзаимодействие.ОбменСКонтрагентами
	
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ПриОткрытииЛокализация(Отказ)
	
	ПриОткрытии(Отказ);
	
	// СтандартныеПодсистемы.РаботаСКонтрагентами
	ПроверкаКонтрагентовКлиент.ПриОткрытииДокумент(ЭтотОбъект);
	// Конец СтандартныеПодсистемы.РаботаСКонтрагентами
	
	// ЭлектронноеВзаимодействие.ОбменСКонтрагентами
	ОбменСКонтрагентамиКлиент.ПриОткрытии(ЭтотОбъект);
	// Конец ЭлектронноеВзаимодействие.ОбменСКонтрагентами

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

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

&НаСервере
Процедура Подключаемый_ПриЗаписиНаСервереЛокализация(Отказ, ТекущийОбъект, ПараметрыЗаписи)
	
	// СтандартныеПодсистемы.РаботаСКонтрагентами
	ПроверкаКонтрагентов.ПриЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект);
	// Конец СтандартныеПодсистемы.РаботаСКонтрагентами
	
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ПослеЗаписиЛокализация(ПараметрыЗаписи)
	
	ПослеЗаписи(ПараметрыЗаписи);
	
	// ЭлектронноеВзаимодействие.ОбменСКонтрагентами
	ОбменСКонтрагентамиКлиент.ПослеЗаписи_ФормаДокумента(ЭтаФорма, ПараметрыЗаписи);
	// Конец ЭлектронноеВзаимодействие.ОбменСКонтрагентами
	
КонецПроцедуры

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

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

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

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

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

#Область Локализация_ПодключаемыеОбработчикиСобытийЭлементовФормы

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

&НаКлиенте
Процедура Подключаемый_СтатусПриИзмененииЛокализация(Элемент)
	
	СтатусПриИзмененииНаСервереЛокализация();
	
КонецПроцедуры

&НаСервере
Процедура СтатусПриИзмененииНаСервереЛокализация()
	
	СтатусПриИзмененииНаСервере();
	
КонецПроцедуры

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

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

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

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

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

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

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

#Область ЛокализацияКоманды

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

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

#Область ЛокализацияСлужебные

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

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

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

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

&НаСервере
Процедура ЗаполнитьСписокВыбораСпособУчетаНДСЛокализация()
	
	СписокВыбораСпособУчетаНДС = Элементы.ПрочиеРасходыСпособУчетаНДС.СписокВыбора;
	СписокВыбораСпособУчетаНДС.Очистить();
	СписокВыбораСпособУчетаНДС.Добавить(0, НСтр("ru = 'Списать в расходы'"));
	СписокВыбораСпособУчетаНДС.Добавить(1, НСтр("ru = 'Принять к вычету по СФ'"));
	СписокВыбораСпособУчетаНДС.Добавить(2, НСтр("ru = 'Принять к вычету по БСО (или иному документу)'"));
	
КонецПроцедуры

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

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

#Область РаботаСКонтрагентами
// СтандартныеПодсистемы.РаботаСКонтрагентами
&НаКлиенте
Процедура Подключаемый_ПоказатьПредложениеИспользоватьПроверкуКонтрагентов()
	ПроверкаКонтрагентовКлиент.ПредложитьВключитьПроверкуКонтрагентов(ЭтотОбъект);
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ОбработатьРезультатПроверкиКонтрагентов()
	ПроверкаКонтрагентовКлиент.ОбработатьРезультатПроверкиКонтрагентовВДокументе(ЭтотОбъект);
КонецПроцедуры

&НаСервере
Процедура ОтобразитьРезультатПроверкиКонтрагента() Экспорт
	ПроверкаКонтрагентов.ОтобразитьРезультатПроверкиКонтрагентаВДокументе(ЭтотОбъект);
КонецПроцедуры

&НаСервере
Процедура ПроверитьКонтрагентовФоновоеЗадание(ПараметрыФоновогоЗадания) Экспорт	
	ПроверкаКонтрагентов.ПроверитьКонтрагентовВДокументеФоновоеЗадание(ЭтотОбъект, ПараметрыФоновогоЗадания);
КонецПроцедуры

&НаКлиенте
Процедура ПроверитьКонтрагентовЛокализация(Команда)
	
	ПроверкаКонтрагентовКлиент.ПроверитьКонтрагентовВДокументеПоКнопке(ЭтотОбъект);
	
КонецПроцедуры

// Конец СтандартныеПодсистемы.РаботаСКонтрагентами
#КонецОбласти

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

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

#Область Инициализация

#Если НаСервере Тогда

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

#КонецЕсли

#КонецОбласти
//-- Локализация

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