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

файл

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

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

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

&НаКлиенте
Перем ТекущиеДанныеИдентификатор; //используется для передачи текущей строки в обработчик ожидания

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	ТоварыПослеУдаленияСервер(НеобходимоОбновитьСтатусыСерий, КэшированныеЗначения);

	Если НеобходимоОбновитьСтатусыСерий Тогда

		НоменклатураКлиент.ОбновитьКешированныеЗначенияДляУчетаСерий(Элемент, КэшированныеЗначения, ПараметрыУказанияСерий);

	КонецЕсли;

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ТоварыМежценоваяРазницаПриИзменении(Элемент)

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

	КонецЕсли;

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

&НаКлиенте
Процедура ТоварыМежценоваяРазницаУвеличениеПриИзменении(Элемент)

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

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

&НаКлиенте
Процедура ТоварыМежценоваяРазницаУменьшениеПриИзменении(Элемент)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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


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

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

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

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

// Конец МенюОтчеты

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

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

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

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

	Оповещение = Новый ОписаниеОповещения("ЗаполнитьГоловногоКонтрагентаЗавершение", ЭтотОбъект);
	ПартнерыИКонтрагентыКлиент.ЗаполнитьГоловногоКонтрагента(ЭтотОбъект, ПараметрыЗаполнения, Истина, Оповещение);
	
КонецПроцедуры

&НаКлиенте
Процедура ОбновитьТаблицуТоваров(Команда)
	
	ЗаполнитьТаблицуТоваровНаКлиенте();
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

#Область Серии

&НаСервере
Процедура УстановитьВидимостьЭлементовСерий()
	
	Элементы.ТоварыСтатусУказанияСерий.Видимость  = ПараметрыУказанияСерий.ИспользоватьСерииНоменклатуры;
	Элементы.ТоварыУказатьСерии.Видимость         = ПараметрыУказанияСерий.ИспользоватьСерииНоменклатуры;
	Элементы.ТоварыСерия.Видимость                = ПараметрыУказанияСерий.ИспользоватьСерииНоменклатуры;
	
КонецПроцедуры

&НаСервере
Процедура ОбработатьУказаниеСерийСервер(ПараметрыФормыУказанияСерий)
	
	НоменклатураСервер.ОбработатьУказаниеСерий(Объект, ПараметрыУказанияСерий, ПараметрыФормыУказанияСерий);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область ПриИзмененииРеквизитов

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

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

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

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

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

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

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

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

#Область РаботаСБуферомОбмена

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

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

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

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

&НаКлиенте
Процедура ВставитьСтроки(Команда)
	
	КоличествоТоваровДоВставки = Объект.Товары.Количество();
	
	ПолучитьСтрокиИзБуфераОбмена();
		
	КоличествоВставленных = Объект.Товары.Количество()-КоличествоТоваровДоВставки;
	РаботаСТабличнымиЧастямиКлиент.ОповеститьПользователяОВставкеСтрок(КоличествоВставленных);
	
КонецПроцедуры

&НаСервере
Процедура ПолучитьСтрокиИзБуфераОбмена()
	
	ПараметрыОтбора = Неопределено;
	
	Колонки = "Номенклатура,Характеристика,Содержание,Количество,Сумма,СуммаНДС,СтавкаНДС,НоменклатураНабора,ХарактеристикаНабора";

	ТаблицаТоваров = РаботаСТабличнымиЧастями.СтрокиИзБуфераОбмена(ПараметрыОтбора, Колонки);

	Если Не ЗначениеЗаполнено(ТаблицаТоваров) Тогда
		Возврат;
	КонецЕсли;

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

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

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

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

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

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

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

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

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

	Элементы.КППКонтрагента.ТолькоПросмотр = Выставлен
	                                         Или Не КонтрагентЗаполнен
	                                         Или НЕ ТипКонтрагентаКонтрагент
	                                         Или Не КонтрагентЮрЛицо;
	
	Элементы.ИННКонтрагента.ТолькоПросмотр = Выставлен
	                                         Или Не КонтрагентЗаполнен
	                                         Или НЕ ТипКонтрагентаКонтрагент;

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ЗаполнитьГоловногоКонтрагентаЗавершение(ВыбранноеЗначение, ДополнительныеПараметры) Экспорт
	
	Если ВыбранноеЗначение <> Неопределено Тогда
		НеобходимоЗаполнитьГоловногоКонтрагента = Ложь;
		УправлениеЭлементамиФормы();
	КонецЕсли;
	
КонецПроцедуры

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

&НаСервере
Функция ОснованияДляОповещения()
	
	МассивОснованийДляОповещения = СписокОснований.ВыгрузитьЗначения();

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

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

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

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

&НаСервере
Процедура ТоварыПослеУдаленияСервер(НеобходимоОбновитьСтатусыСерий, КэшированныеЗначения)

	Если НеобходимоОбновитьСтатусыСерий Тогда

		ЗаполнитьСтатусыУказанияСерийПриОкончанииРедактированияСтрокиТЧ(Неопределено, КэшированныеЗначения);

	КонецЕсли;

	СобытияФорм.ПриИзмененииЭлемента(ЭтотОбъект, "Товары");
	
КонецПроцедуры

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

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

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

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

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

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

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

&НаКлиенте
Процедура ПлатежноРасчетныеДокументыСтрокойНажатиеЗавершение(Результат, ДополнительныеПараметры) Экспорт

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

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

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

&НаСервере
Функция СуммаДокументаСНДС()

	Если Объект.Корректировочный Тогда 
		Возврат Объект.Товары.Итог("СуммаБезНДСВалУвеличение") - Объект.Товары.Итог("СуммаБезНДСВалУменьшение");
	Иначе
		Возврат Объект.Товары.Итог("СуммаБезНДСВал");
	КонецЕсли;
	
КонецФункции

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

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

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

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

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