Отгрузка товаров с хранения / Форма документа / Модуль формы

файл

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

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

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

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

// ИнтернетПоддержкаПользователей.РаботаСКонтрагентами
&НаКлиенте
Перем ПроверкаКонтрагентовПараметрыОбработчикаОжидания Экспорт;

&НаКлиенте
Перем ФормаДлительнойОперации Экспорт;
// Конец ИнтернетПоддержкаПользователей.РаботаСКонтрагентами

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

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

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

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

	//++ Локализация
	Элементы.ГруппаСостояниеЭПД.Видимость = ОбменСГИСЭПДПереопределяемый.РазрешенаРаботаЭПД();
	ОбновитьТекстЭПД();
	//-- Локализация
	
КонецПроцедуры

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

	УстановитьЗаголовкиПолейПоХозяйственнойОперации();
	ПодключитьОбработчикОжиданияПолучениеПеревозчиков();
	
КонецПроцедуры

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

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

		КонецЕсли;
		
	КонецЕсли;
	
	Если Окно <> Неопределено Тогда
		Окно.Активизировать();
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура РеквизитыПечати(Элемент)
	
	ОткрытьРеквизитыПечатиРеализации();
	
КонецПроцедуры

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ПроверитьКоличествоВДокументе(Команда)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

#КонецОбласти
// ИнтернетПоддержкаПользователей.РаботаСКонтрагентами
#Область РаботаСКонтрагентами

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

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

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

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

#КонецОбласти
// Конец ИнтернетПоддержкаПользователей.РаботаСКонтрагентами
#Область ВидыЗапасов

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

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

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

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

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

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

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

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

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

	СтруктураДействий.Вставить("ПроверитьХарактеристикуПоВладельцу");
	СтруктураДействий.Вставить("ПроверитьЗаполнитьУпаковкуПоВладельцу");

	ОбрабатываемыеСтроки = Новый Массив();
	
	Для Каждого СтрокаТовара Из ТаблицаТоваров Цикл
		
		ТекущаяСтрока = Объект.Товары.Добавить();

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

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

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

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

#Область ХозяйственныеОперации

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область Доставка

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ОбновитьВидимостьСоглашений()

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервереБезКонтекста
Функция ЭтоГруппаСкладовИСкладыИспользуютсяВТЧДокументовПродажи(Склад)
	
	Возврат Справочники.Склады.ЭтоГруппаИСкладыИспользуютсяВТЧДокументовПродажи(Склад);
	
КонецФункции

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область Локализация

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

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

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

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

	Возврат;
	
КонецПроцедуры

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

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