Счет-фактура полученный (налоговый агент) / Форма документа / Модуль формы

файл

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

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

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

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

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

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

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

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

	// СтандартныеПодсистемы.РаботаСФайлами
	ПараметрыГиперссылки = РаботаСФайлами.ГиперссылкаФайлов();
	ПараметрыГиперссылки.Размещение = "КоманднаяПанель";
	РаботаСФайлами.ПриСозданииНаСервере(ЭтотОбъект, ПараметрыГиперссылки);
	// Конец СтандартныеПодсистемы.РаботаСФайлами

	ВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтотОбъект);
	
КонецПроцедуры

&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)

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

	МодификацияКонфигурацииКлиентПереопределяемый.ПослеЗаписи(ЭтаФорма, ПараметрыЗаписи);

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ДокументыОснованияПредставлениеОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка)
	
	Если НавигационнаяСсылка = "ИзменитьДокументыОснования" Тогда
		СтандартнаяОбработка = Ложь;
		ИзменитьСоставДокументовОснований();
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПоСчетуФактуреПриИзменении(Элемент)
		
	Если Не ПоСчетуФактуре Тогда

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

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

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

&НаКлиенте
Процедура КодВидаОперацииПриИзменении(Элемент)
	
	ОбновитьПредставлениеВидаОперации(ЭтаФорма);
	
КонецПроцедуры

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

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

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

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

&НаКлиенте
Процедура КодВидаОперацииНаУменьшениеПриИзменении(Элемент)
	
	ОбновитьПредставлениеВидаОперацииНаУменьшение(ЭтаФорма);
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура ВалютаПриИзменении(Элемент)
	
	ПересчитатьНалоговуюБазу();
	НастроитьОтображениеИтогов(ЭтотОбъект);
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ПереключательРасшифровкиПриИзменении(Элемент)
	
	НастроитьОтображениеИтогов(ЭтотОбъект);
	
КонецПроцедуры

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

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

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

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

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

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

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

&НаКлиенте
Процедура РасшифровкаСуммыСуммаПриИзменении(Элемент)
	
	ПересчитатьНалоговуюБазу(Элементы.ДокументыОснования.ТекущиеДанные.ПолучитьИдентификатор());
	НастроитьОтображениеИтогов(ЭтотОбъект);
	
КонецПроцедуры

&НаКлиенте
Процедура РасшифровкаСуммыНалоговаяБазаПриИзменении(Элемент)
	
	ТекущаяСтрока = Элементы.ДокументыОснования.ТекущиеДанные;
	СтавкаНДСПроцентом = УчетНДСУПКлиентСервер.ЗначениеСтавкиНДС(ТекущаяСтрока.СтавкаНДС);
	ТекущаяСтрока.СуммаНДС = ТекущаяСтрока.НалоговаяБаза * СтавкаНДСПроцентом / (100 + СтавкаНДСПроцентом);
	ТекущаяСтрока.Сумма = ТекущаяСтрока.НалоговаяБаза - ТекущаяСтрока.СуммаНДС;
	
	НастроитьОтображениеИтогов(ЭтотОбъект);
	
КонецПроцедуры

&НаКлиенте
Процедура РасшифровкаСуммыСтавкаНДСПриИзменении(Элемент)
	
	ТекущаяСтрока = Элементы.ДокументыОснования.ТекущиеДанные;
	СтавкаНДСПроцентом = УчетНДСУПКлиентСервер.ЗначениеСтавкиНДС(ТекущаяСтрока.СтавкаНДС);
	ТекущаяСтрока.СуммаНДС = ТекущаяСтрока.Сумма * СтавкаНДСПроцентом / 100;   
	ТекущаяСтрока.НалоговаяБаза = ТекущаяСтрока.Сумма + ТекущаяСтрока.СуммаНДС;
	
	НастроитьОтображениеИтогов(ЭтотОбъект);
	
КонецПроцедуры


&НаКлиенте
Процедура РасшифровкаСуммыСуммаНДСПриИзменении(Элемент)
	
	ТекущаяСтрока = Элементы.ДокументыОснования.ТекущиеДанные;
	ТекущаяСтрока.НалоговаяБаза = ТекущаяСтрока.Сумма + ТекущаяСтрока.СуммаНДС;
	
	НастроитьОтображениеИтогов(ЭтотОбъект);
	
КонецПроцедуры
#КонецОбласти

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

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


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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область ДокументыОснования

&НаСервере
Процедура ОчиститьДокументыОснования()
	
	Объект.ДокументыОснования.Очистить();
	Объект.СчетФактураОснование = Неопределено;
	
	ОбновитьИнформациюПоДокументамОснованиям();
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура ОбновитьИнформацию()
	
	ОбновитьИнформациюПоСчетуФактуреОснованию();
	ОбновитьИнформациюПоДокументамОснованиям();
	
КонецПроцедуры

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

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

&НаСервереБезКонтекста
Процедура ЗаполнитьСписокВыборкаДатыЗаписиКнигиПокупок(СписокВыбора, Знач ДатаПолучения, ДатаСоставления = Неопределено)
	
	СписокВыбора.Очистить();
	
	Если Не ЗначениеЗаполнено(ДатаПолучения) Тогда
		ДатаПолучения = ТекущаяДатаСеанса();
	КонецЕсли;
	СтрокаШаблон = НСтр("ru = 'Отнести к %Квартал% кварталу %Год% г.'");
	
	// Текущий квартал по дате получения
	НомерКвартала = Цел(Месяц(КонецКвартала(ДатаПолучения))/3);
	НомерГода     = Год(ДатаПолучения);
	СтрокаТекущийКвартал = СтрЗаменить(СтрокаШаблон, "%Квартал%", НомерКвартала);
	СтрокаТекущийКвартал = СтрЗаменить(СтрокаТекущийКвартал, "%Год%", Формат(НомерГода, "ЧЦ=4; ЧДЦ=; ЧГ=0"));
	СписокВыбора.Добавить(Ложь, СтрокаТекущийКвартал);
	
	Если ДатаСоставления = Неопределено Тогда
		// Предыдущий квартал по отношению к дате получения
		НомерПредыдущегоКвартала = ?(НомерКвартала = 1, 4, НомерКвартала - 1);
		НомерПредыдущегоГода     = ?(НомерКвартала = 1, НомерГода - 1, НомерГода);
		СтрокаПредыдущийКвартал = СтрЗаменить(СтрокаШаблон, "%Квартал%", НомерПредыдущегоКвартала);
		СтрокаПредыдущийКвартал = СтрЗаменить(СтрокаПредыдущийКвартал, "%Год%", Формат(НомерПредыдущегоГода, "ЧЦ=4; ЧДЦ=; ЧГ=0"));
		СписокВыбора.Добавить(Истина, СтрокаПредыдущийКвартал);
	Иначе
		// Квартал даты составления
		НомерКвартала = Цел(Месяц(КонецКвартала(ДатаСоставления))/3);
		НомерГода     = Год(ДатаСоставления);
		СтрокаКварталСоставления = СтрЗаменить(СтрокаШаблон, "%Квартал%", НомерКвартала);
		СтрокаКварталСоставления = СтрЗаменить(СтрокаКварталСоставления, "%Год%", Формат(НомерГода, "ЧЦ=4; ЧДЦ=; ЧГ=0"));
		СписокВыбора.Добавить(Истина, СтрокаКварталСоставления);
	КонецЕсли;
	
КонецПроцедуры

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

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

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

		КонецЕсли;
		
	КонецЕсли;
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

&НаКлиентеНаСервереБезКонтекста
Функция ДатаСведений(Объект)
	
	Возврат ?(Объект.Исправление, Объект.ДатаИсправления, Объект.ДатаСоставления);
	
КонецФункции

&НаСервереБезКонтекста
Процедура ЗаполнитьСписокВыбораКПП(СписокВыбора, Контрагент, ДатаСведений)
	
	УчетНДСРФ.ЗаполнитьСписокВыбораКППСчетФактурыПолученные(СписокВыбора, Контрагент, ДатаСведений);
	
КонецПроцедуры

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

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

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

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

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