Внутреннее потребление / Форма документа / Модуль формы

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

&НаКлиенте
Перем КэшированныеЗначения;

&НаКлиенте
Перем ТекущиеДанныеИдентификатор;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура СоздатьГрупповоеОС(Команда)
	
	
	Возврат // В УТ пустой обработчик
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура ЗаполнитьФизическоеЛицо(Команда)
	
	
	Возврат // В УТ пустой обработчик
	
КонецПроцедуры

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

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

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

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

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

// ИнтеграцияС1СДокументооборотом
&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуИнтеграции(Команда)

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ЗаполнитьИнвентарныйНомер(Команда)
	

	Возврат; // В УТ пустой обработчик
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура НастроитьЗависимыеЭлементыФормыНаСервере(Знач ИзмененныеРеквизиты = "")

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

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

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

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

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

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

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

&НаСервере
Процедура ПриИзмененииПотреблениеПоНесколькимЗаказам(ЗаказСсылка = Неопределено)

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

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

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

	НастроитьЗависимыеЭлементыФормыНаСервере("Склад");
	
КонецПроцедуры

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

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

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

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

&НаКлиенте
Процедура ПриДобавлениСтрокиТоваровНаКлиенте(Строка)
	
	// Выбор статей и аналитик.
	ДоходыИРасходыКлиентСервер.ПриДобавленииСтрокиВТаблицу(ЭтотОбъект, Строка, "Объект.Товары");
	
КонецПроцедуры

&НаСервере
Процедура ПриДобавлениСтрокиТоваровНаСервере(Строка)
	
	// Выбор статей и аналитик.
	ДоходыИРасходыКлиентСервер.ПриДобавленииСтрокиВТаблицу(ЭтотОбъект, Строка, "Объект.Товары");
	
КонецПроцедуры

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

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

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

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

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

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

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

&НаСервере
Процедура ОбработкаВыбораПодборНаСервере(ВыбранноеЗначение)

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

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

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

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

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

	Для Каждого СтрокаТЧ Из ОбрабатываемыеНовыеСтроки Цикл
		ПриДобавлениСтрокиТоваровНаСервере(СтрокаТЧ);
	КонецЦикла;
	
	Для Каждого СтрокаТЧ Из ОбрабатываемыеНайденныеСтроки Цикл
		ПриДобавлениСтрокиТоваровНаСервере(СтрокаТЧ);
	КонецЦикла;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Функция ЕстьЗаполненныеСерииПоFEFO()

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

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

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

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

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

&НаСервере
Функция ЗаполнитьСерииПоFEFOСервер()

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

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

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

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

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

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

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

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

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

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

#Область ЗаполнениеПоЗаказуПоОрдеру

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

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

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

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

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

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

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

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

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

#Область Товары

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

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

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

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

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

&НаКлиенте
Процедура ТоварыРаспоряжениеНачалоВыбораФрагмент()
	
	ОбновитьИнформациюПоЗаказам();
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	СтруктураДействий.Вставить("ПересчитатьКоличествоЕдиниц");

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

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

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

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

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

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

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

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

	// Цвет текста в поле Распоряжение
	#Область ТоварыРаспоряжениеЦветТекста
	Элемент = УсловноеОформление.Элементы.Добавить();

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура ОтвязатьСтрокуОтЗаказа(ИдентификаторСтроки, КэшированныеЗначения)

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

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

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

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

&НаСервере
Процедура УстановитьПараметрыВыбора()
	
	#Область ТоварыСтатьяРасходов
	НовыеСвязиПараметровВыбора = Новый Массив;

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

	Элементы.ТоварыСтатьяРасходов.СвязиПараметровВыбора = Новый ФиксированныйМассив(НовыеСвязиПараметровВыбора);
	#КонецОбласти
	
	#Область ТоварыАналитикаРасходов
	НовыеСвязиПараметровВыбора = Новый Массив;

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

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

	Элементы.ТоварыАналитикаРасходов.СвязиПараметровВыбора = Новый ФиксированныйМассив(НовыеСвязиПараметровВыбора);
	#КонецОбласти
	
КонецПроцедуры

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

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

&НаСервере
Процедура СтатусПриИзмененииСервер(ЗаполнитьСерииПоОтгрузке)

	ПараметрыУказанияСерий = Новый ФиксированнаяСтруктура(НоменклатураСервер.ПараметрыУказанияСерий(Объект, Документы.ВнутреннееПотребление));

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

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

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

&НаКлиенте
Функция МожноРазбитьСтроку()

	
	Возврат Истина;
	
КонецФункции

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область РасхожденияВДокументахОтгрузки

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

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

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

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

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

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

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

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

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

#Область ТМЦВЭксплуатации

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

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

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


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

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

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

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