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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура АдресДоставкиПеревозчикаПриИзменении(Элемент)
	
	ОбработатьИзменениеАдреса(Элемент, "АдресДоставкиПеревозчика");
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

	Иначе

		ОбновитьЗависимыеРеквизитыФормыСерверПоЗаказу();

	КонецЕсли;

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

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

	КонецЕсли;

	МногооборотнаяТараКлиент.ОбновитьСостояниеЗаполненияМногооборотнойТары(Объект.СостояниеЗаполненияМногооборотнойТары);
	ПриИзмененииСкладаВТабличнойЧастиСервер();

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	Если Не ТекущаяСтрока.ВедетсяУчетПоГТД Тогда
		ТекущаяСтрока.НомерГТД = Неопределено;
		ТекущаяСтрока.ТипНомераГТД = Неопределено;
		ТекущаяСтрока.СтранаПроисхождения = Неопределено;
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	КонецЕсли;

	ОбновитьИнформациюПоЗаказам();
	ПриИзмененииСкладаВТабличнойЧастиСервер();
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура АвтоТест_ЗаполнитьЦеныПоСоглашению() Экспорт

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ЗаполнитьНомераГТДПоПоступлениям(Команда)
	
	ЗаполнитьНомераГТДПоПоследнимПоступлениям();
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	//

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

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

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

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

	//

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

	//

	СкладыСервер.УстановитьУсловноеОформлениеСкладаВТЧ(ЭтотОбъект);

	//

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

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

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

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

	//

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

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

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

	//

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

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

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

	//

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

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

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

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

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

	Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);

	//

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

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

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

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

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

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

	//

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

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

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

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

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

	//

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

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

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

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

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

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

	//

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

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

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

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

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

	//

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

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

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

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

	//
	
	УчетПрослеживаемыхТоваровЛокализация.УстановитьУсловноеОформлениеКоличестваПоРНПТ(ЭтотОбъект);

	//

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

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

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

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

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

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

	Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);

	//

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

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

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

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

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

	//

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

	//

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

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

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

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

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

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

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

	Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);

	//

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

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

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

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

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

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

	//

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

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

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

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

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

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

	//
	
	ПараметрыУстановки = МногооборотнаяТараСервер.ПараметрыУстановкиУсловногоОформленияДляСтрокСМногооборотнойТарой();
	
	ПараметрыУстановки.Форма                 = ЭтотОбъект;
	ПараметрыУстановки.ЭтоПоступление        = Истина;
	
	//

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

	//

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

	//

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

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

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

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

	Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);

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

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

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

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

	Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
	

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область НомераГТД

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

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

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

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

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

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

#Область Назначения

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиентеНаСервереБезКонтекста
Процедура ОбновитьОтклоненияОтЗаказаВСтроке(ТекущаяСтрока, ПоступлениеПоЗаказам)
	
	Если ТекущаяСтрока.Цена < ТекущаяСтрока.ЦенаЗаказа
		И ТекущаяСтрока.ЦенаЗаказа <> 0
		И ТекущаяСтрока.КодСтроки <> 0 Тогда
		
		ТекущаяСтрока.ИндексКартинки = 3;
		ТекущаяСтрока.ЦенаИзменилась = Истина;
		
		Если ТекущаяСтрока.Цена <> 0 Тогда
			ТекущаяСтрока.ПроцентОтклоненияОтЦеныЗаказа = 100 - (ТекущаяСтрока.ЦенаЗаказа * 100 / ТекущаяСтрока.Цена);
		Иначе
			ТекущаяСтрока.ПроцентОтклоненияОтЦеныЗаказа = 100;
		КонецЕсли;
		
	ИначеЕсли ТекущаяСтрока.Цена > ТекущаяСтрока.ЦенаЗаказа
		И ТекущаяСтрока.ЦенаЗаказа <> 0
		И ТекущаяСтрока.КодСтроки <> 0 Тогда
		
		ТекущаяСтрока.ИндексКартинки = 1;
		ТекущаяСтрока.ЦенаИзменилась = Истина;
		
		Если ТекущаяСтрока.Цена <> 0 Тогда
			ТекущаяСтрока.ПроцентОтклоненияОтЦеныЗаказа = 100 - (ТекущаяСтрока.ЦенаЗаказа * 100 / ТекущаяСтрока.Цена);
		Иначе
			ТекущаяСтрока.ПроцентОтклоненияОтЦеныЗаказа = 100;
		КонецЕсли;
		
	Иначе
		
		ТекущаяСтрока.ИндексКартинки = 8;
		ТекущаяСтрока.ЦенаИзменилась = Ложь;
		ТекущаяСтрока.ПроцентОтклоненияОтЦеныЗаказа = 0;
		
	КонецЕсли;
	
	Если ПоступлениеПоЗаказам Тогда
		Если ТекущаяСтрока.КодСтроки = 0 Тогда
			ТекущаяСтрока.РасхождениеЗаказ = 1;
		Иначе
			ТекущаяСтрока.РасхождениеЗаказ = 0;
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

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

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


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

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

	ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьТЧ(Объект.Товары, СтруктураДействий);
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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


	СтруктураДействийКоличествоСумма = Новый Структура;
	СтруктураДействийКоличествоСумма.Вставить("ПересчитатьКоличествоУпаковок");
	СтруктураДействийКоличествоСумма.Вставить("ПересчитатьСумму");

	ОбрабатываемыеСтрокиКоличествоСумма = Новый Массив;

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

	// Распределим дубли товаров, нераспределенные на первом проходе
	Если ТаблицаНераспределенныхТоваров.Количество() > 0 Тогда

		ТаблицаНераспределенныхТоваров.Сортировать("Порядок Убыв");

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ОповеститьОбОкончанииОтвязкиСтрок(КоличествоОтработанныхСтрок, СтрокиОтвязаны = Истина)

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

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

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

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


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

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

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

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

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

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

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

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

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

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

&НаСервереБезКонтекста
Функция ДанныеВыбораСкладов(Склад)

	Запрос = Новый Запрос(
	"ВЫБРАТЬ РАЗРЕШЕННЫЕ
	|	Склады.Ссылка КАК Ссылка
	|ИЗ
	|	Справочник.Склады КАК Склады
	|ГДЕ
	|	Склады.Ссылка В ИЕРАРХИИ(&ГруппаСкладов)
	|	И Склады.ЭтоГруппа = ЛОЖЬ
	|	И Склады.ВыборГруппы <> ЗНАЧЕНИЕ(Перечисление.ВыборГруппыСкладов.Запретить)");

	Запрос.УстановитьПараметр("ГруппаСкладов", Склад);
	МассивСкладов = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");
	Возврат МассивСкладов;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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