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

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

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

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

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

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

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

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

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

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

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

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

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

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

	МодификацияКонфигурацииКлиентПереопределяемый.ПослеЗаписи(ЭтаФорма, ПараметрыЗаписи);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	//

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

	//

	НоменклатураСервер.УстановитьУсловноеОформлениеХарактеристикНоменклатуры(ЭтаФорма, 
																			 "ТоварыХарактеристикаОприходование",
																		     "Объект.Товары.ХарактеристикиИспользуютсяОприходование");

	//

	НоменклатураСервер.УстановитьУсловноеОформлениеСерийНоменклатуры(ЭтаФорма, "СерииВсегдаВТЧТовары");

	//

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

	//

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

	//

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

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

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

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

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

	//

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

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

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

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

	//

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

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

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

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

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

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

	//

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

	//

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

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

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

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

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

	// Видимость колонки "Под назначение"

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Функция ЕстьТоварДругогоКачества(ТоварИсходногоКачества, ТоварДругогоКачества)
	
	Возврат РегистрыСведений.ТоварыДругогоКачества.ПроверитьНаличиеГрадации(ТоварИсходногоКачества, ТоварДругогоКачества);
	
КонецФункции

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

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

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

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

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

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

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

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

	ПересчитатьКоличествоОприходование(ТекущаяСтрока);

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

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

	ПересчитатьКоличествоОприходование(ТекущаяСтрока);

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

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


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

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

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