Отчет комитенту о продажах / Форма документа / Модуль формы

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

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

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

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

&НаКлиенте
Перем ПараметрыДляЗаписи Экспорт;


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

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

	УстановитьУсловноеОформление();

	Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа.
		Возврат;
	КонецЕсли;

	ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Объект, ЭтотОбъект);

	ИсправлениеДокументов.ПриСозданииНаСервере(ЭтаФорма, Элементы.СтрокаИсправление);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура ПередЗаписьюНаКлиентеСервер(НеобходимоРассчитатьВознаграждение)
	
	Если НеобходимоРассчитатьВознаграждение Тогда
		РассчитатьКомиссионноеВознаграждениеСервер();
	КонецЕсли;
	
	ВзаиморасчетыВызовСервера.ФормаПередЗаписьюНаКлиентеСервер(ЭтаФорма);
КонецПроцедуры

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)
	
	ПринудительноЗакрытьФорму = Истина;
	
КонецПроцедуры

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

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

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

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

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

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

	Иначе
		
		ВалютаДокумента = Объект.Валюта;
		
		ЗаполнитьПодчиненныеСвойстваПоСтатистике("Валюта");
		
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

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

&НаСервереБезКонтекста
Функция ПараметрыРегистрацииСчетовФактурВыданныхСервер(Знач Объект)
	
	Возврат Документы.ОтчетКомитенту.ПараметрыРегистрацииСчетовФактурВыданных(Объект);
	
КонецФункции	

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

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

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

&НаКлиенте
Процедура СоглашениеПриИзменении(Элемент)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

		ПроцентВознаграждения = Объект.ПроцентВознаграждения;
		СуммаВознаграждения = Объект.СуммаВознаграждения;

	ИначеЕсли ДополнительныеПараметры.ВосстановитьРеквизиты Тогда

		Объект.ПроцентВознаграждения = ПроцентВознаграждения;
		Объект.СуммаВознаграждения = СуммаВознаграждения;

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

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

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

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

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

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

	УправлениеЭлементамиФормы();

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ТоварыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	
	НоменклатураПартнеровКлиент.ПриВыбореНоменклатурыПартнера(Объект, Поле, "ТоварыНоменклатураПартнера", НСтр("ru = 'Комитент'"));
	
КонецПроцедуры

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

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

	ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;

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

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

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

	ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;

	СтруктураДействий = Новый Структура;
	СтруктураДействий.Вставить("ЗаполнитьЦенуЗакупки", ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияЦеныЗакупкиВСтрокеТЧ(Объект));
	СтруктураДействий.Вставить("ПересчитатьСуммуНДС", ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(Объект));
	СтруктураДействий.Вставить("ПересчитатьСумму");
	СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", Новый Структура("ЦенаВключаетНДС", Объект.ЦенаВключаетНДС));
	СтруктураДействий.Вставить("ЗаполнитьНоменклатуруПартнераПоНоменклатуре", Объект.Партнер);

	СтруктураДействий.Вставить("ХарактеристикаПриИзмененииПереопределяемый", Новый Структура("ИмяФормы, ИмяТабличнойЧасти",
		ЭтаФорма.ИмяФормы, "Товары"));

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

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

	ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;

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

	ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
	
	Если КоличествоЕдиницДоПересчета <> 0 Тогда
		ТекущаяСтрока.ЦенаПродажи = ТекущаяСтрока.ЦенаПродажи / КоличествоЕдиницДоПересчета * ТекущаяСтрока.Количество;
		ПересчитатьСуммуПродажи(ТекущаяСтрока);
	КонецЕсли;
	ТекущаяСтрока.СуммаВознаграждения = 0;
	РассчитыватьВознаграждение = Истина;
	
КонецПроцедуры

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

	ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;

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

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

	ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;

	СтруктураДействий = Новый Структура;
	СтруктураДействий.Вставить("ПересчитатьСуммуНДС", ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(Объект));
	СтруктураДействий.Вставить("ПересчитатьСумму");
	СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", Новый Структура("ЦенаВключаетНДС", Объект.ЦенаВключаетНДС));

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

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

	ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;

	СтруктураДействий = Новый Структура;
	СтруктураДействий.Вставить("ПересчитатьСуммуНДС", ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(Объект));
	СтруктураДействий.Вставить("ПересчитатьСумму");
	СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", Новый Структура("ЦенаВключаетНДС", Объект.ЦенаВключаетНДС));
	СтруктураДействий.Вставить("ПересчитатьСуммуПродажиНДС");

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

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

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

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

&НаКлиенте
Процедура ТоварыЦенаПродажиПриИзменении(Элемент)
	
	ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;

	ПересчитатьСуммуПродажи(ТекущаяСтрока);
	ТекущаяСтрока.СуммаВознаграждения = 0;
	РассчитыватьВознаграждение = Истина;
	
	//++ Локализация
	
	ЗаполнитьПараметрыНДСПродажиПоРеализации(ТекущаяСтрока);
	
	//-- Локализация
	
КонецПроцедуры

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

&НаКлиенте
Процедура ТоварыСуммаВознагражденияПриИзменении(Элемент)
	
	Объект.СуммаВознаграждения = Объект.Товары.Итог("СуммаВознаграждения");
	ИтогСуммаПродажи = Объект.Товары.Итог("СуммаПродажи");
	Объект.ПроцентВознаграждения = ?(ИтогСуммаПродажи <> 0, Объект.СуммаВознаграждения / ИтогСуммаПродажи * 100, 0);
	КомиссионнаяТорговляКлиент.РассчитатьКомиссионноеВознаграждениеНДС(Объект, ПроцентНДС);
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ЗаполнитьЦеныПоСоглашению(Команда)

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

// СтандартныеПодсистемы.Свойства

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

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

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

// Конец СтандартныеПодсистемы.Свойства

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

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

	//

	НоменклатураСервер.УстановитьУсловноеОформлениеЕдиницИзмерения(ЭтаФорма);

	//

	НоменклатураСервер.УстановитьУсловноеОформлениеХарактеристикНоменклатуры(ЭтаФорма);

	//

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

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

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

	//

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

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

	ГруппаОтбора1 = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
	ГруппаОтбора1.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;

	ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Соглашение");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;

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

	//

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

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

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Соглашение");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;

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

	//

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

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыДатаСчетаФактуры.Имя);

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.ДатаСчетаФактуры");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.НезаполненноеПолеТаблицы);
	Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<отсутствует счет-фактура>'"));

	НаправленияДеятельностиСервер.УстановитьУсловноеОформлениеНаправленияДеятельности(ЭтаФорма);

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

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

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

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

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

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

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

&НаСервере
Процедура СоглашениеПриИзмененииСервер(ПересчитатьЦены = Истина)

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

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

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

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

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

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

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

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

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

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

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

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

//++ Локализация

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

&НаСервереБезКонтекста
Функция ПредставлениеКодаСпециальныхОбстоятельств(КодСпециальныхОбстоятельств)
	
	Возврат ОбменСКонтрагентамиУТ.ПредставлениеКодаСпециальныхОбстоятельств(КодСпециальныхОбстоятельств);
	
КонецФункции
//-- Локализация

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

#Область ПодборыИОбработкаПроверкиКоличества

&НаСервере
Функция ПоместитьТоварыВХранилище(Знач Товары, УникальныйИдентификатор)

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

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

&НаСервере
Процедура ПолучитьВидыЗапасовИзХранилища(ВыбранноеЗначение)
	
	ЗапасыСервер.ОбработатьВводВидовЗапасовВручную(ВыбранноеЗначение, ЭтаФорма);
	
КонецПроцедуры

&НаСервере
Процедура ПолучитьТоварыИзХранилища(АдресПлатежейВХранилище)

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

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

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

#Область УправлениеЭлементамиФормы

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

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

	УчетНДСУП.УстановитьВидимостьКомандыЗаполнитьСтавкуНДС(ЭтотОбъект);

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

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

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

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

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

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

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

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

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

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

//++ Локализация

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

//-- Локализация

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

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

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

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

&НаСервере
Процедура ПоместитьЭтапыОплатыВоВременноеХранилище(ИмяЭлемента)
       ВзаиморасчетыСервер.ПоместитьЭтапыОплатыВоВременноеХранилище(ЭтаФорма, ИмяЭлемента);
КонецПроцедуры

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

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

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

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

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

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

&НаКлиенте
Процедура Подключаемый_ЗакрытьФорму()
	
	Если Открыта() Тогда
		Закрыть();
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

	Если СтавкаНДС = Неопределено Тогда
		Возврат;
	КонецЕсли;

	ЗаполнитьСтавкуНДСНаСервере(СтавкаНДС, КэшированныеЗначения);
	РассчитыватьВознаграждение = Истина;

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

&НаСервере
Процедура ЗаполнитьСтавкуНДСНаСервере(СтавкаНДС, КэшированныеЗначения)

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

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

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

	РассчитатьИтоговыеПоказателиОтчетаКомитенту(ЭтотОбъект);
	УправлениеЭлементамиФормы();

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

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

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

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

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

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

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

//++ Локализация

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

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

//-- Локализация

&НаКлиенте
Процедура ТоварыСчетФактураВыставленныйПриИзменении(Элемент) 
	
	//++ Локализация
	
	ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
	ЗаполнитьПараметрыНДСПродажиПоРеализации(ТекущаяСтрока);
	
	//-- Локализация
	
КонецПроцедуры

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

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