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

файл

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

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

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

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

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

	ЗаданВопросПередЗакрытием = Истина;
	Закрыть();
	
КонецПроцедуры

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

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

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

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

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

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

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

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

	СтандартнаяОбработка = Ложь;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	Если ТекущаяСтраница = Элементы.СтраницаОформлениеДокументов Тогда
		Элементы.КнопкиСправа.ТекущаяСтраница   = Элементы.ГруппаКнопкиСправаНаПоследнейСтранице;
		Элементы.КнопкаГотово.КнопкаПоУмолчанию = Истина;
	Иначе
		Элементы.КнопкиСправа.ТекущаяСтраница  = Элементы.ГруппаКнопкиСправаНаПервойСтранице;
		Элементы.КнопкаДалее.КнопкаПоУмолчанию = Истина;
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	Возврат Запрос.Выполнить().Выгрузить();
		
КонецФункции

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

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

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

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

&НаСервереБезКонтекста
Функция ЕстьНеоформленныеПересчетыПоСкладуСервер(Знач Склад)
	
	Возврат Документы.ПересчетТоваров.НеоформленныеПересчетыПоСкладу(Склад).Количество() > 0;
	
КонецФункции

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиентеНаСервереБезКонтекста
Процедура СортироватьТаблицуПоОперацииНоменклатуреХарактеристике(Таблица)

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

&НаКлиентеНаСервереБезКонтекста
Процедура СортироватьТаблицуРаспределенныхТоваров(Таблица)
	
	Таблица.Сортировать("ОперацияТекст, Организация,  НоменклатураСписываемая, ХарактеристикаСписываемая,
				|НоменклатураПриходуемая, ХарактеристикаПриходуемая");
	
КонецПроцедуры

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

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

// Параметры:
// 	КлючЗаписи - ДанныеФормыСтруктура - где:
// 		* Ссылка - ДокументСсылка
// Возвращаемое значение:
// 		ДокументСсылка
&НаСервереБезКонтекста
Функция СсылкаНаДокументПоКлючуЗаписи(КлючЗаписи)
	
	Возврат КлючЗаписи.Ссылка;
	
КонецФункции 

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

&НаСервере
Процедура НастроитьФормуЛокализация()
	
	//++ Локализация
	Элементы.ДекорацияИнвентаризационныйПериод.Заголовок = НСтр("ru = 'Этот период будет подставлен в документ ""Инвентаризационная опись"", из которого осуществляется печать форм ИНВ-3 и ИНВ-19. Список товаров при печати будет взят из пересчетов товаров, оформленных за этот период, а данные о количестве будут рассчитаны по остаткам организаций на конец периода и данным складских актов.'");
	//-- Локализация
	Возврат;
	
КонецПроцедуры

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

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