Поступление товаров на склад / Форма документа / Модуль формы

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

&НаКлиенте
Перем ПредыдущиеРеквизитыСтроки; //используется для отвязки строки поступления от строки заказа

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

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

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

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

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

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

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

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

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

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

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

	// ИнтеграцияС1СДокументооборотом
	ИнтеграцияС1СДокументооборотБазоваяФункциональность.ПриСозданииНаСервере(ЭтаФорма);
	// Конец ИнтеграцияС1СДокументооборотом

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	КонецЕсли;

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

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

	КонецЕсли;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	УказаннаяСтавкаНДС = ТекущаяСтрока.СтавкаНДС;

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

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

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

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

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

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

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

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

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

	КонецЕсли;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ЗагрузитьИзВнешнегоФайлаЗавершение(АдресЗагруженныхДанных, ДополнительныеПараметры) Экспорт
	
	Если ЗначениеЗаполнено(АдресЗагруженныхДанных) Тогда
		ПолучитьЗагруженныеТоварыИзХранилища(АдресЗагруженныхДанных, ДополнительныеПараметры);
	КонецЕсли;
	
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура ЗаполнитьЦеныВыделенныхСтрокПоВидуЦеныПоставщика(Команда)
	
	ЗаполнитьЦеныПоВидуЦеныПоставщика(Истина);
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	//

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

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

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

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

	//

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

	//

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

	//

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

	//

	СкладыСервер.УстановитьУсловноеОформлениеСкладаВШапке(ЭтаФорма);

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

	//

	НоменклатураСервер.УстановитьУсловноеОформлениеСтатусовУказанияСерий(ЭтаФорма, Ложь);

	//

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область Ценообразование

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

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

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

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

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

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

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

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

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

		ПараметрыФормыУказанияСерий = ПараметрыФормыУказанияСерий(ТекущиеДанныеИдентификатор);
		
		ЗначениеВозврата = Неопределено;

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

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

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

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

#Область ШтрихкодыИТорговоеОборудование

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область КонтрольНесогласованныхИзменений

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура ПоказатьПредставлениеРаспоряжения()
	
	МассивСтрок = Новый Массив;
	
	Если ЗначениеЗаполнено(Объект.Распоряжение) Тогда
		РаспоряжениеПредставление = СтроковыеФункции.ФорматированнаяСтрока("<a href='ОткрытьРаспоряжение'>%1</a>  <a href='ВыбратьРаспоряжение'>%2</a>",Строка(Объект.Распоряжение),НСтр("ru = 'Изменить'"));
	Иначе
		РаспоряжениеПредставление = СтроковыеФункции.ФорматированнаяСтрока("‹%1›  <a href='ВыбратьРаспоряжение'>%2</a>",НСтр("ru = 'не выбрано'"),НСтр("ru = 'Выбрать'")); 
	КонецЕсли;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	РассчитатьИтоговыеПоказатели(ЭтотОбъект);

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

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

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

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

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

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

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

&НаСервере
Функция ПолноеИмяДокумента()
	
	Возврат "Документ.ПоступлениеТоваровНаСклад";
	
КонецФункции

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

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

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

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

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

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

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

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

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

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

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

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

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