#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
УстановитьУсловноеОформление();
Если Параметры.Свойство("АвтоТест") Тогда
Возврат;
КонецЕсли;
ИспользоватьНесколькоСкладов = ПолучитьФункциональнуюОпцию("ИспользоватьНесколькоСкладов");
МогутБытьНазначенияБезЗаказа = Документы.КорректировкаНазначенияТоваров.ДопустимыНазначенияБезЗаказа();
ВидОперацииРезервировать = Перечисления.ВидыОперацийКорректировкиНазначения.Резервировать;
ВидОперацииРезервироватьИКорректировать = Перечисления.ВидыОперацийКорректировкиНазначения.РезервироватьИКорректировать;
ВидОперацииВстречнаяКорректировка = Перечисления.ВидыОперацийКорректировкиНазначения.ВстречнаяКорректировка;
Если Не Пользователи.РолиДоступны("ДополнительныеОперацииКорректировкиНазначенияТоваров") Тогда
Элементы.ВидОперацииПереключатель.Видимость = Ложь;
КонецЕсли;
ЗаполнитьЗначенияСвойств(ЭтотОбъект, Параметры,
"ВидОперации,Организация,Назначение,НесколькоНазначений,Заказ,КорректировкаНазначения,КоличествоПередатьПодНазначение");
НастроитьЭлементыФормыПоФункциональнымОпциям();
Если НесколькоНазначений Тогда
Назначения.ЗагрузитьЗначения(Параметры.Назначения);
КонецЕсли;
Если ЗначениеЗаполнено(Параметры.Заказ) Тогда
Организация = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Параметры.Заказ, "Организация");
КонецЕсли;
Если ЭтоАдресВременногоХранилища(Параметры.АдресТоваров) Тогда
ТоварыОтбор.Загрузить(ПолучитьИзВременногоХранилища(Параметры.АдресТоваров));
УдалитьИзВременногоХранилища(Параметры.АдресТоваров);
КонецЕсли;
Если Не НесколькоНазначений И Не ЗначениеЗаполнено(Назначение) Тогда
Назначение = Документы.КорректировкаНазначенияТоваров.НазначениеЗаказа(Заказ);
КонецЕсли;
Если Не НесколькоНазначений Тогда
Заказ = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Назначение, "Заказ");
КонецЕсли;
Если Не ЗначениеЗаполнено(ВидОперации) Тогда
ТекстИсключения = НСтр("ru = 'Форма не предназначена для непосредственного открытия.'");
ВызватьИсключение ТекстИсключения;
КонецЕсли;
ЦветОтрицательногоЧисла = ЦветаСтиля.ЦветОтрицательногоЧисла;
ЦветТекстаПоля = ЦветаСтиля.ЦветТекстаПоля;
ТолькоЗаказыОрганизации = ЗначениеЗаполнено(Организация)
И (ВидОперации = Перечисления.ВидыОперацийКорректировкиНазначения.РезервироватьИКорректировать
Или ВидОперации = Перечисления.ВидыОперацийКорректировкиНазначения.СнятьРезервПоМногимНазначениям
И Не НесколькоНазначений);
Элементы.ТолькоЗаказыОрганизации.Заголовок = СтрЗаменить(
НСтр("ru = 'Только заказы организации ""%1""'"), "%1", Организация);
ВидОперацииПереключатель = ВидОперации = Перечисления.ВидыОперацийКорректировкиНазначения.РезервироватьИКорректировать;
Элементы.СтраницыОтображениеКартинкиИзлишка.ТекущаяСтраница = Элементы.СтраницаНеОтображатьКартинкуИзлишек;
Элементы.ИтогиНазначениеИсточникСКартинкой.Заголовок = "";
Элементы.ИтогиНазначениеИсточник.Заголовок = "";
НастроитьЭлементыФормыПоВидуОперации();
Если Параметры.Свойство("УникальныйИдентификаторДляВременногоХранилища") Тогда
УникальныйИдентификаторДляВременногоХранилища = Параметры.УникальныйИдентификаторДляВременногоХранилища;
Иначе
УникальныйИдентификаторДляВременногоХранилища = Новый УникальныйИдентификатор();
КонецЕсли;
ТумблерСнятьРезервы = Не (ВидОперации = Перечисления.ВидыОперацийКорректировкиНазначения.СнятьРезерв
Или ВидОперации = Перечисления.ВидыОперацийКорректировкиНазначения.СнятьРезервПоМногимНазначениям
И НесколькоНазначений);
ЗаполнитьТаблицу();
ИспользуетсяШагВстречнойКорректировки = ВидОперации
= Перечисления.ВидыОперацийКорректировкиНазначения.ВстречнаяКорректировка
И ТаблицаТовары.НайтиСтроки(Новый Структура("ИндексСтраницы", 1)).Количество() > 0;
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ДалееНаКлиенте(Истина);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовФормы
&НаКлиенте
Процедура ТумблерСнятьРезервыПриИзменении(Элемент)
СнятьРезервы(Неопределено);
КонецПроцедуры
&НаКлиенте
Процедура ТолькоЗаказыОрганизацииПриИзменении(Элемент)
ОценкаПроизводительностиКлиент.ЗамерВремени("Обработка.ЗаполнениеКорректировкиНазначения.ФормаОбъекта.Элемент.ТолькоЗаказыОрганизации.ПриИзменении");
ТолькоЗаказыОрганизацииПриИзмененииСервер();
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыТаблицаТовары
&НаКлиенте
Процедура ТаблицаТоварыСтрокаВыбранаПриИзменении(Элемент)
ТекущаяСтрока = Элементы.ТаблицаТовары.ТекущиеДанные;
Если ТекущаяСтрока.ИндексСтраницы = 0 Тогда
ПересчитатьКоличествоДляИндексСтраницы1 = Истина;
КонецЕсли;
ПерезаполнитьКоличествоВТаблицеИтогов();
РассчитатьИтогиПоЗаказу();
ЗаполнитьТребуетсяШагПоПомещениямЯчейкамВСтроке(ТекущаяСтрока);
ДалееНаКлиенте(Истина);
КонецПроцедуры
&НаКлиенте
Процедура ТаблицаТоварыКоличествоПриИзменении(Элемент)
ТекущаяСтрока = Элементы.ТаблицаТовары.ТекущиеДанные;
ТекущаяСтрока.Отметка = ТекущаяСтрока.Количество > 0;
Если ТекущаяСтрока.ИндексСтраницы = 0 Тогда
ПересчитатьКоличествоДляИндексСтраницы1 = Истина;
КонецЕсли;
ПерезаполнитьКоличествоВТаблицеИтогов();
РассчитатьИтогиПоЗаказу();
ЗаполнитьТребуетсяШагПоПомещениямЯчейкамВСтроке(ТекущаяСтрока);
ДалееНаКлиенте(Истина);
КонецПроцедуры
&НаКлиенте
Процедура ТоварыПриАктивизацииСтроки(Элемент)
ОценкаПроизводительностиКлиент.ЗамерВремени("Обработка.ЗаполнениеКорректировкиНазначения.ФормаОбъекта.Элемент.ТаблицаТовары.ПриАктивизацииСтроки");
ПодключитьОбработчикОжидания("Подключаемый_ПриАктивизацииСтроки", 0.1, Истина);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовДереваПомещенияИЯчейки
&НаКлиенте
Процедура ДеревоПомещенияЯчейкиКоличествоВетвьПриИзменении(Элемент)
ТекущаяСтрока = Элементы.ДеревоПомещенияЯчейки.ТекущиеДанные;
СтруктураПересчетаЕдиниц = Новый Структура();
СтруктураПересчетаЕдиниц.Вставить("ПересчитатьКоличествоЕдиниц");
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураПересчетаЕдиниц, Неопределено);
ТекущаяСтрока.Отметка = ТекущаяСтрока.Количество > 0;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура ВидОперацииПереключательПриИзменении(Элемент)
ОценкаПроизводительностиКлиент.ЗамерВремени("Обработка.ЗаполнениеКорректировкиНазначения.ФормаОбъекта.Элемент.ВидОперацииПереключатель.ПриИзменении");
ВидОперацииПереключательПриИзмененииНаСервере();
ДалееНаКлиенте(Истина);
КонецПроцедуры
&НаКлиенте
Процедура РежимПриИзменении(Элемент)
ОценкаПроизводительностиКлиент.ЗамерВремени("Обработка.ЗаполнениеКорректировкиНазначения.ФормаОбъекта.Элемент.ОтборРезервированияПоСкладуОтгрузки.ПриИзменении");
РежимПриИзмененииНаСервере();
ДалееНаКлиенте(Истина);
КонецПроцедуры
&НаКлиенте
Процедура ВыбратьСтроки(Команда)
ОтметитьСтроки(Истина);
РассчитатьИтогиПоЗаказу();
ДалееНаКлиенте(Истина);
КонецПроцедуры
&НаКлиенте
Процедура ИсключитьСтроки(Команда)
ОтметитьСтроки(Ложь);
РассчитатьИтогиПоЗаказу();
ДалееНаКлиенте(Истина);
КонецПроцедуры
&НаКлиенте
Процедура СнятьРезервы(Команда)
ОценкаПроизводительностиКлиент.ЗамерВремени("Обработка.ЗаполнениеКорректировкиНазначения.ФормаОбъекта.Команда.СнятьВсеРезервы");
СнятьРезервыСервер();
РассчитатьИтогиПоЗаказу();
ДалееНаКлиенте(Истина);
КонецПроцедуры
&НаКлиенте
Процедура ФильтрОтметкаПриИзменении(Элемент)
Если ФильтрОтметка Тогда
СтруктураОтбора = Новый Структура("Отметка", ФильтрОтметка);
Иначе
СтруктураОтбора = Новый Структура();
КонецЕсли;
УстановитьОтборСтрокТаблицаТовары(Элементы, СтруктураОтбора);
КонецПроцедуры
&НаКлиенте
Процедура Далее(Команда)
ОценкаПроизводительностиКлиент.ЗамерВремени("Обработка.ЗаполнениеКорректировкиНазначения.ФормаОбъекта.Команда.Далее");
ОчиститьСообщения();
ДалееНаКлиенте(Ложь);
ДалееНаКлиенте(Истина);
КонецПроцедуры
&НаКлиенте
Процедура Отмена(Команда)
ОчиститьСообщения();
Если Элементы.Шаги.ТекущаяСтраница = Элементы.ШагПоСкладам Тогда
Если ИспользуетсяШагВстречнойКорректировки И Элементы.ТаблицаТовары.ОтборСтрок.ИндексСтраницы = 1 Тогда
СтруктураОтбора = Новый Структура(Элементы.ТаблицаТовары.ОтборСтрок);
СтруктураОтбора.ИндексСтраницы = 0;
УстановитьОтборСтрокТаблицаТовары(Элементы, СтруктураОтбора);
НастроитьЭлементыПоШагуВстречнойКорректировки();
ИначеЕсли НесколькоНазначений И Элементы.ТаблицаТовары.ОтборСтрок.ИндексСтраницы = 1 Тогда
СтруктураОтбора = Новый Структура(Элементы.ТаблицаТовары.ОтборСтрок);
СтруктураОтбора.ИндексСтраницы = 0;
УстановитьОтборСтрокТаблицаТовары(Элементы, СтруктураОтбора);
НастроитьЭлементыПоШагуМногихНазначений();
Иначе
Если Модифицированность Тогда
ПоказатьВопрос(
Новый ОписаниеОповещения("ОтменаЗавершение", ЭтотОбъект),
НСтр("ru='Закрыть мастер создания корректировки назначения товаров?'"),
РежимДиалогаВопрос.ДаНет);
Иначе
Закрыть();
КонецЕсли;
КонецЕсли;
ИначеЕсли Элементы.Шаги.ТекущаяСтраница = Элементы.ШагПоПомещениямЯчейкам Тогда
Элементы.Шаги.ТекущаяСтраница = Элементы.ШагПоСкладам;
ДеревоПомещенияЯчейки.ПолучитьЭлементы().Очистить();
ИначеЕсли Элементы.Шаги.ТекущаяСтраница = Элементы.ШагСозданныеДокументы Тогда
КоличествоСсылок = ПометитьНаУдалениеСозданныеДокументы();
Если КоличествоСсылок > 0 Тогда
ПоказатьОповещениеПользователя(НСтр("ru = 'Отмена операции'"), , НСтр("ru = 'Созданные документы помечены на удаление'"));
КонецЕсли;
Если ТаблицаТовары.Итог("ТребуетсяШагПоПомещениямЯчейкам") > 0 Тогда
Элементы.Шаги.ТекущаяСтраница = Элементы.ШагПоПомещениямЯчейкам;
Иначе
Элементы.Шаги.ТекущаяСтраница = Элементы.ШагПоСкладам;
КонецЕсли;
НастроитьЭлементыПоШагуМногихНазначений();
КонецЕсли;
ДалееНаКлиенте(Истина);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
#Область УправлениеВидимостью
&НаСервере
Процедура УстановитьУсловноеОформление()
УсловноеОформление.Элементы.Очистить();
ПараметрыУсловногоОформления = НоменклатураСервер.НовыеПараметрыУсловногоОформленияЕдиницИзмерения();
ПараметрыУсловногоОформления.ИмяПоляЕдиницаИзмерения = "ДеревоПомещенияЯчейкиЕдиницаИзмерения";
ПараметрыУсловногоОформления.ПутьКПолюУпаковка = "ДеревоПомещенияЯчейки.Упаковка";
НоменклатураСервер.УстановитьУсловноеОформлениеЕдиницИзмерения(ЭтаФорма, ПараметрыУсловногоОформления);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ИтогиПоНазначениямЗаказа.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ИтогиПоЗаказу");
ОтборЭлемента.ПравоеЗначение = Новый ПолеКомпоновкиДанных("ИтогиПоНазначениямЗаказа");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветОсобогоТекста);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТаблицаТоварыНовоеНазначениеМатериалыПодЭтап.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТаблицаТовары.НовоеНазначение");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветТекстаПодсказкиВвода);
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<Поступает на склад>'"));
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоПомещенияЯчейкиНоменклатура.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоПомещенияЯчейкиХарактеристика.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоПомещенияЯчейкиЗаказИсточник.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоПомещенияЯчейкиИсходноеНазначение.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоПомещенияЯчейкиСклад.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоПомещенияЯчейкиКоличествоВетвь1.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоПомещенияЯчейки.ЭтоКорень");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Истина);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоПомещенияЯчейкиСерия.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоПомещенияЯчейкиПомещение.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоПомещенияЯчейкиЯчейка.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоПомещенияЯчейкиОтметка.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоПомещенияЯчейкиКоличествоВетвь.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоПомещенияЯчейки.ЭтоКорень");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоПомещенияЯчейкиСерия.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоПомещенияЯчейкиКоличествоВетвь1.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоПомещенияЯчейки.ЭтоСерии");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Истина);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоПомещенияЯчейкиКоличествоВетвь1.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоПомещенияЯчейки.ЭтоСерии");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", "");
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоПомещенияЯчейкиНоменклатура.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоПомещенияЯчейкиХарактеристика.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоПомещенияЯчейкиЗаказИсточник.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоПомещенияЯчейкиИсходноеНазначение.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоПомещенияЯчейкиСклад.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоПомещенияЯчейкиПомещение.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоПомещенияЯчейкиЯчейка.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоПомещенияЯчейкиОтметка.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоПомещенияЯчейкиКоличествоВетвь.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоПомещенияЯчейки.ЭтоСерии");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоПомещенияЯчейкиПомещение.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоПомещенияЯчейкиЯчейка.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоПомещенияЯчейкиОтметка.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоПомещенияЯчейкиКоличествоВетвь.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоПомещенияЯчейки.ЭтоЯчейки");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Истина);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоПомещенияЯчейкиНоменклатура.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоПомещенияЯчейкиХарактеристика.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоПомещенияЯчейкиЗаказИсточник.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоПомещенияЯчейкиИсходноеНазначение.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоПомещенияЯчейкиСклад.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоПомещенияЯчейкиКоличествоВетвь1.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоПомещенияЯчейки.ЭтоЯчейки");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
КонецПроцедуры
&НаСервере
Процедура НастроитьЭлементыФормыПоФункциональнымОпциям()
УстановитьОтборСтрокТаблицаТовары(Элементы, Новый Структура("ИндексСтраницы", 0));
Элементы.ДекорацияВНаличииНаСкладеОтгрузки.Видимость = ИспользоватьНесколькоСкладов;
Элементы.ГруппаВНаличииНаСкладеОтгрузки.Видимость = ИспользоватьНесколькоСкладов;
Если Не ИспользоватьНесколькоСкладов Тогда
Элементы.ДекорацияНаТекущемСкладе.Заголовок = Символы.ПС;
КонецЕсли;
Элементы.ГруппаСтраницаПодвалНесколькоНазначенийНеИспользуетсяСводно.Видимость = ИспользоватьНесколькоСкладов;
Элементы.СтраницыРежимРезервирования.ТекущаяСтраница = ?(ИспользоватьНесколькоСкладов,
Элементы.РежимРезервированияИспользовать, Элементы.РежимРезервированияНеИспользовать);
МассивАналитик = Новый Массив();
МассивАналитик.Добавить(НСтр("ru = 'Номенклатура'"));
Если ПолучитьФункциональнуюОпцию("ИспользоватьХарактеристикиНоменклатуры") Тогда
МассивАналитик.Добавить(НСтр("ru = 'Характеристика'"));
КонецЕсли;
Если ВидОперации <> Перечисления.ВидыОперацийКорректировкиНазначения.Резервировать
И ВидОперации <> Перечисления.ВидыОперацийКорректировкиНазначения.СнятьРезерв Тогда
Если МогутБытьНазначенияБезЗаказа Тогда
МассивАналитик.Добавить(НСтр("ru = 'Назначение'"));
Иначе
МассивАналитик.Добавить(НСтр("ru = 'Заказ'"));
КонецЕсли;
КонецЕсли;
Если ИспользоватьНесколькоСкладов Тогда
МассивАналитик.Добавить(НСтр("ru = 'Склад'"));
КонецЕсли;
НадписьВетви = НСтр("ru = 'Серия, Помещение, Ячейка'");
Элементы.ДеревоПомещенияЯчейкиГруппировки.Заголовок = СтрСоединить(МассивАналитик, ", ") + " / " + НадписьВетви;
Если МогутБытьНазначенияБезЗаказа Тогда
Элементы.ВидОперацииПереключатель.Заголовок = НСтр("ru = 'Использовать резервы других назначений'");
Элементы.СтраницыДекорацияСостояние.ТекущаяСтраница = Элементы.СтраницаДекорацияСостояниеНазначение;
Иначе
Элементы.СтраницыДекорацияСостояние.ТекущаяСтраница = Элементы.СтраницаДекорацияСостояниеЗаказ;
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция НаименованиеШагаУказаниеСерийПомещенийЯчеекПоФункциональнымОпциям()
Текст = "";
Если ПолучитьФункциональнуюОпцию("ИспользоватьСерииНоменклатуры") Тогда
Если ПолучитьФункциональнуюОпцию("ИспользоватьАдресноеХранение") Тогда
Текст = НСтр("ru = 'Указание серий / помещений / ячеек'");
ИначеЕсли ПолучитьФункциональнуюОпцию("ИспользоватьСкладскиеПомещения") Тогда
Текст = НСтр("ru = 'Указание серий / помещений'");
Иначе
Текст = НСтр("ru = 'Указание серий'");
КонецЕсли;
ИначеЕсли ПолучитьФункциональнуюОпцию("ИспользоватьАдресноеХранение") Тогда
Текст = НСтр("ru = 'Указание помещений / ячеек'");
Иначе
Текст = НСтр("ru = 'Указание помещений'");
КонецЕсли;
Возврат Текст;
КонецФункции
&НаСервере
Процедура НастроитьЭлементыФормыПоВидуОперации()
Если НесколькоНазначений И ВидОперации = Перечисления.ВидыОперацийКорректировкиНазначения.СнятьРезервПоМногимНазначениям Тогда
Заголовок = СтрЗаменить(НСтр("ru = 'Снятие резерва по назначениям заказа (%1)'"), "%1", Заказ);
Элементы.ГруппаПереключатели.ТекущаяСтраница = Элементы.ГруппаРежимСнятиеРезервов;
Элементы.ВидОперацииПереключатель.Видимость = Ложь;
Элементы.ТаблицаТоварыНовоеНазначениеМатериалыПодЭтап.Видимость = Ложь;
Элементы.ТаблицаТоварыИсходныйЗаказСнятие.Видимость = Не МогутБытьНазначенияБезЗаказа;
Элементы.ТаблицаТоварыИсходноеНазначениеСнятие.Видимость = МогутБытьНазначенияБезЗаказа;
Элементы.ТаблицаТоварыИсходныйЗаказРезервирование.Видимость = Ложь;
Элементы.ТаблицаТоварыИсходноеНазначениеРезервирование.Видимость = Ложь;
Элементы.ДеревоПомещенияЯчейкиГруппаКоличествоВертикальная.Заголовок = НСтр("ru = 'К корректировке'");
Элементы.ДеревоПомещенияЯчейкиЗаказИсточник.Видимость = Не МогутБытьНазначенияБезЗаказа;
Элементы.ДеревоПомещенияЯчейкиИсходноеНазначение.Видимость = МогутБытьНазначенияБезЗаказа;
Элементы.ДеревоПомещенияЯчейкиРезерв.Заголовок = НСтр("ru = 'Резерв'");
Элементы.ТолькоЗаказыОрганизации.Видимость = Ложь;
Элементы.ТаблицаТоварыНовыйЗаказ.Видимость = Ложь;
Элементы.ТаблицаТоварыНовоеНазначение.Видимость = Ложь;
Элементы.ТаблицаТоварыВНаличииСтрока.Видимость = Ложь;
Элементы.ТаблицаТоварыПотребностьСтрока.Видимость = Ложь;
Элементы.ТаблицаТоварыОбеспеченоСтрока.Видимость = Ложь;
Элементы.ГруппаСтраницыПодвалНесколькоНазначений.ТекущаяСтраница = Элементы.ГруппаСтраницаПодвалНесколькоНазначенийНеИспользуется;
Элементы.ТаблицаТоварыСвободно.Видимость = Истина;
Элементы.ТаблицаТоварыКартинкаИзлишекИсточника.Видимость = Ложь;
Элементы.ТаблицаТоварыПотребность.Видимость = Ложь;
Элементы.ГруппаИнформацияПоИсточникамОбеспечения.Видимость = Ложь;
Элементы.ДекорацияСостояние.Заголовок = НСтр("ru = 'Состояние по назначению:'");
ШаблонЗаголовка = НСтр("ru = 'Шаг 2: %1'");
Элементы.ДекорацияНаименованиеШагаУказаниеСерийПомещенийЯчеек.Заголовок =
СтрШаблон(ШаблонЗаголовка, НаименованиеШагаУказаниеСерийПомещенийЯчеекПоФункциональнымОпциям());
Элементы.ДекорацияНаименованиеШагаСозданныеДокументы.Заголовок = НСтр("ru = 'Шаг 3: Созданные документы'");
ИначеЕсли НесколькоНазначений И ВидОперации = Перечисления.ВидыОперацийКорректировкиНазначения.Резервировать Тогда
Заголовок = СтрЗаменить(НСтр("ru = 'Резервирование (%1)'"), "%1", Заказ);
Элементы.ГруппаПереключатели.ТекущаяСтраница = Элементы.ГруппаРежимРезервирование;
Элементы.ТолькоЗаказыОрганизации.Видимость = Ложь;
Элементы.ТаблицаТоварыНовоеНазначениеМатериалыПодЭтап.Видимость = Ложь;
Элементы.ТаблицаТоварыИсходныйЗаказСнятие.Видимость = Ложь;
Элементы.ТаблицаТоварыИсходноеНазначениеСнятие.Видимость = Ложь;
Элементы.ТаблицаТоварыИсходныйЗаказРезервирование.Видимость = Ложь;
Элементы.ТаблицаТоварыИсходноеНазначениеРезервирование.Видимость = Ложь;
Элементы.ДеревоПомещенияЯчейкиЗаказИсточник.Видимость = Ложь;
Элементы.ДеревоПомещенияЯчейкиИсходноеНазначение.Видимость = Ложь;
Элементы.ДеревоПомещенияЯчейкиГруппаКоличествоВертикальная.Заголовок = НСтр("ru = 'К корректировке'");
Элементы.ДеревоПомещенияЯчейкиРезерв.Заголовок = НСтр("ru = 'Доступно'");
Элементы.ГруппаСтраницыПодвалНесколькоНазначений.ТекущаяСтраница = Элементы.ГруппаСтраницаПодвалНесколькоНазначенийНеИспользуется;
Элементы.ТекстБудетСозданаКорректировка.Видимость = Ложь;
Элементы.ТаблицаТоварыСвободно.Видимость = Ложь;
Элементы.ТаблицаТоварыКартинкаИзлишекИсточника.Видимость = Ложь;
Элементы.ТаблицаТоварыПотребность.Видимость = Ложь;
Элементы.ГруппаИнформацияПоИсточникамОбеспечения.Видимость = Ложь;
Элементы.ДекорацияСостояние.Заголовок = НСтр("ru = 'Состояние по всем назначениям заказа:'");
ШаблонЗаголовка = НСтр("ru = 'Шаг 3: %1'");
Элементы.ДекорацияНаименованиеШагаУказаниеСерийПомещенийЯчеек.Заголовок =
СтрШаблон(ШаблонЗаголовка, НаименованиеШагаУказаниеСерийПомещенийЯчеекПоФункциональнымОпциям());
Элементы.ДекорацияНаименованиеШагаСозданныеДокументы.Заголовок = НСтр("ru = 'Шаг 4: Созданные документы'");
НастроитьЭлементыПоШагуМногихНазначений();
ИначеЕсли НесколькоНазначений И ВидОперации = Перечисления.ВидыОперацийКорректировкиНазначения.РезервироватьИКорректировать Тогда
Заголовок = СтрЗаменить(НСтр("ru = 'Резервирование (%1)'"), "%1", Заказ);
Элементы.ГруппаПереключатели.ТекущаяСтраница = Элементы.ГруппаРежимРезервирование;
Элементы.ТолькоЗаказыОрганизации.Видимость = ЗначениеЗаполнено(Организация);
Элементы.ТаблицаТоварыНовоеНазначениеМатериалыПодЭтап.Видимость = Ложь;
Элементы.ТаблицаТоварыИсходныйЗаказСнятие.Видимость = Ложь;
Элементы.ТаблицаТоварыИсходноеНазначениеСнятие.Видимость = Ложь;
Элементы.ТаблицаТоварыИсходныйЗаказРезервирование.Видимость = Не МогутБытьНазначенияБезЗаказа;
Элементы.ТаблицаТоварыИсходноеНазначениеРезервирование.Видимость = МогутБытьНазначенияБезЗаказа;
Элементы.ДеревоПомещенияЯчейкиЗаказИсточник.Видимость = Не МогутБытьНазначенияБезЗаказа;
Элементы.ДеревоПомещенияЯчейкиИсходноеНазначение.Видимость = МогутБытьНазначенияБезЗаказа;
Элементы.ДеревоПомещенияЯчейкиГруппаКоличествоВертикальная.Заголовок = НСтр("ru = 'К корректировке'");
Элементы.ДеревоПомещенияЯчейкиРезерв.Заголовок = НСтр("ru = 'Доступно'");
Элементы.ГруппаСтраницыПодвалНесколькоНазначений.ТекущаяСтраница = Элементы.ГруппаСтраницаПодвалНесколькоНазначенийНеИспользуется;
Элементы.ТекстБудетСозданаКорректировка.Видимость = Ложь;
Элементы.ТаблицаТоварыСвободно.Видимость = Ложь;
Элементы.ТаблицаТоварыКартинкаИзлишекИсточника.Видимость = Ложь;
Элементы.ТаблицаТоварыПотребность.Видимость = Ложь;
Элементы.ГруппаИнформацияПоИсточникамОбеспечения.Видимость = Ложь;
Элементы.ДекорацияСостояние.Заголовок = НСтр("ru = 'Состояние по всем назначениям заказа:'");
ШаблонЗаголовка = НСтр("ru = 'Шаг 3: %1'");
Элементы.ДекорацияНаименованиеШагаУказаниеСерийПомещенийЯчеек.Заголовок =
СтрШаблон(ШаблонЗаголовка, НаименованиеШагаУказаниеСерийПомещенийЯчеекПоФункциональнымОпциям());
Элементы.ДекорацияНаименованиеШагаСозданныеДокументы.Заголовок = НСтр("ru = 'Шаг 4: Созданные документы'");
НастроитьЭлементыПоШагуМногихНазначений();
ИначеЕсли ВидОперации = Перечисления.ВидыОперацийКорректировкиНазначения.СнятьРезерв Тогда
Заголовок = СтрЗаменить(НСтр("ru = 'Снятие резерва (%1)'"), "%1", Заказ);
Если МогутБытьНазначенияБезЗаказа Тогда
Заголовок = СтрЗаменить(НСтр("ru = 'Снятие резерва (Назначение: %1)'"), "%1", Назначение);
КонецЕсли;
Элементы.ГруппаПереключатели.ТекущаяСтраница = Элементы.ГруппаРежимСнятиеРезервов;
Элементы.ТолькоЗаказыОрганизации.Видимость = Ложь;
Элементы.ВидОперацииПереключатель.Видимость = Ложь;
Элементы.ТаблицаТоварыНовоеНазначениеМатериалыПодЭтап.Видимость =
ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Назначение, "ТипНазначения") = Перечисления.ТипыНазначений.ДавальческоеМатериалыПодЭтап22;
Элементы.ТаблицаТоварыИсходныйЗаказСнятие.Видимость = Ложь;
Элементы.ТаблицаТоварыИсходноеНазначениеСнятие.Видимость = Ложь;
Элементы.ТаблицаТоварыИсходныйЗаказРезервирование.Видимость = Ложь;
Элементы.ТаблицаТоварыИсходноеНазначениеРезервирование.Видимость = Ложь;
Элементы.ДеревоПомещенияЯчейкиЗаказИсточник.Видимость = Ложь;
Элементы.ДеревоПомещенияЯчейкиИсходноеНазначение.Видимость = Ложь;
Элементы.ДеревоПомещенияЯчейкиГруппаКоличествоВертикальная.Заголовок = НСтр("ru = 'К корректировке'");
Элементы.ДеревоПомещенияЯчейкиРезерв.Заголовок = НСтр("ru = 'Резерв'");
Элементы.ТаблицаТоварыНовыйЗаказ.Видимость = Ложь;
Элементы.ТаблицаТоварыНовоеНазначение.Видимость = Ложь;
Элементы.ТаблицаТоварыВНаличииСтрока.Видимость = Ложь;
Элементы.ТаблицаТоварыПотребностьСтрока.Видимость = Ложь;
Элементы.ТаблицаТоварыОбеспеченоСтрока.Видимость = Ложь;
Элементы.ГруппаСтраницыПодвалНесколькоНазначений.ТекущаяСтраница = Элементы.ГруппаСтраницаПодвалНесколькоНазначенийНеИспользуется;
Элементы.ТаблицаТоварыСвободно.Видимость = Истина;
Элементы.ТаблицаТоварыКартинкаИзлишекИсточника.Видимость = Ложь;
Элементы.ТаблицаТоварыПотребность.Видимость = Ложь;
Элементы.ГруппаИнформацияПоИсточникамОбеспечения.Видимость = Ложь;
Элементы.ДекорацияСостояние.Заголовок = НСтр("ru = 'Состояние по назначению:'");
ШаблонЗаголовка = НСтр("ru = 'Шаг 2: %1'");
Элементы.ДекорацияНаименованиеШагаУказаниеСерийПомещенийЯчеек.Заголовок =
СтрШаблон(ШаблонЗаголовка, НаименованиеШагаУказаниеСерийПомещенийЯчеекПоФункциональнымОпциям());
Элементы.ДекорацияНаименованиеШагаСозданныеДокументы.Заголовок = НСтр("ru = 'Шаг 3: Созданные документы'");
ИначеЕсли ВидОперации = Перечисления.ВидыОперацийКорректировкиНазначения.СнятьРезервПоМногимНазначениям Тогда
Заголовок = НСтр("ru = 'Снятие резерва по многим назначениям'");
Элементы.ГруппаПереключатели.ТекущаяСтраница = Элементы.ГруппаРежимСнятиеРезервов;
Элементы.ВидОперацииПереключатель.Видимость = Ложь;
Элементы.ТаблицаТоварыНовоеНазначениеМатериалыПодЭтап.Видимость = Ложь;
Элементы.ТаблицаТоварыИсходныйЗаказСнятие.Видимость = Не МогутБытьНазначенияБезЗаказа;
Элементы.ТаблицаТоварыИсходноеНазначениеСнятие.Видимость = МогутБытьНазначенияБезЗаказа;
Элементы.ТаблицаТоварыИсходныйЗаказРезервирование.Видимость = Ложь;
Элементы.ТаблицаТоварыИсходноеНазначениеРезервирование.Видимость = Ложь;
Элементы.ДеревоПомещенияЯчейкиГруппаКоличествоВертикальная.Заголовок = НСтр("ru = 'К корректировке'");
Элементы.ДеревоПомещенияЯчейкиЗаказИсточник.Видимость = Не МогутБытьНазначенияБезЗаказа;
Элементы.ДеревоПомещенияЯчейкиИсходноеНазначение.Видимость = МогутБытьНазначенияБезЗаказа;
Элементы.ДеревоПомещенияЯчейкиРезерв.Заголовок = НСтр("ru = 'Резерв'");
Элементы.ТаблицаТоварыНовыйЗаказ.Видимость = Ложь;
Элементы.ТаблицаТоварыНовоеНазначение.Видимость = Ложь;
Элементы.ТаблицаТоварыВНаличииСтрока.Видимость = Ложь;
Элементы.ТаблицаТоварыПотребностьСтрока.Видимость = Ложь;
Элементы.ТаблицаТоварыОбеспеченоСтрока.Видимость = Ложь;
Элементы.ГруппаСтраницыПодвалНесколькоНазначений.ТекущаяСтраница = Элементы.ГруппаСтраницаПодвалНесколькоНазначенийНеИспользуется;
Элементы.ТаблицаТоварыСвободно.Видимость = Истина;
Элементы.ТаблицаТоварыКартинкаИзлишекИсточника.Видимость = Ложь;
Элементы.ТаблицаТоварыПотребность.Видимость = Ложь;
Элементы.ГруппаИнформацияПоИсточникамОбеспечения.Видимость = Ложь;
Элементы.ДекорацияСостояние.Заголовок = НСтр("ru = 'Состояние по назначению:'");
ШаблонЗаголовка = НСтр("ru = 'Шаг 2: %1'");
Элементы.ДекорацияНаименованиеШагаУказаниеСерийПомещенийЯчеек.Заголовок =
СтрШаблон(ШаблонЗаголовка, НаименованиеШагаУказаниеСерийПомещенийЯчеекПоФункциональнымОпциям());
Элементы.ДекорацияНаименованиеШагаСозданныеДокументы.Заголовок = НСтр("ru = 'Шаг 3: Созданные документы'");
ИначеЕсли ВидОперации = Перечисления.ВидыОперацийКорректировкиНазначения.Резервировать Тогда
Заголовок = СтрЗаменить(НСтр("ru = 'Резервирование (%1)'"), "%1", Заказ);
Если МогутБытьНазначенияБезЗаказа Тогда
Заголовок = СтрЗаменить(НСтр("ru = 'Резервирование (Назначение: %1)'"), "%1", Назначение);
КонецЕсли;
Элементы.ГруппаПереключатели.ТекущаяСтраница = Элементы.ГруппаРежимРезервирование;
Элементы.ТолькоЗаказыОрганизации.Видимость = Ложь;
Элементы.ТаблицаТоварыНовоеНазначениеМатериалыПодЭтап.Видимость = Ложь;
Элементы.ТаблицаТоварыИсходныйЗаказСнятие.Видимость = Ложь;
Элементы.ТаблицаТоварыИсходноеНазначениеСнятие.Видимость = Ложь;
Элементы.ТаблицаТоварыИсходныйЗаказРезервирование.Видимость = Ложь;
Элементы.ТаблицаТоварыИсходноеНазначениеРезервирование.Видимость = Ложь;
Элементы.ДеревоПомещенияЯчейкиЗаказИсточник.Видимость = Ложь;
Элементы.ДеревоПомещенияЯчейкиИсходноеНазначение.Видимость = Ложь;
Элементы.ДеревоПомещенияЯчейкиГруппаКоличествоВертикальная.Заголовок = НСтр("ru = 'К корректировке'");
Элементы.ДеревоПомещенияЯчейкиРезерв.Заголовок = НСтр("ru = 'Доступно'");
Элементы.ТаблицаТоварыНовыйЗаказ.Видимость = Ложь;
Элементы.ТаблицаТоварыНовоеНазначение.Видимость = Ложь;
Элементы.ТаблицаТоварыВНаличииСтрока.Видимость = Ложь;
Элементы.ТаблицаТоварыПотребностьСтрока.Видимость = Ложь;
Элементы.ТаблицаТоварыОбеспеченоСтрока.Видимость = Ложь;
Элементы.ГруппаСтраницыПодвалНесколькоНазначений.ТекущаяСтраница = Элементы.ГруппаСтраницаПодвалНесколькоНазначенийНеИспользуется;
Элементы.ТаблицаТоварыСвободно.Видимость = Ложь;
Элементы.ТаблицаТоварыКартинкаИзлишекИсточника.Видимость = Истина;
Элементы.ТаблицаТоварыПотребность.Видимость = Истина;
Элементы.ГруппаИнформацияПоИсточникамОбеспечения.Видимость = ИспользоватьНесколькоСкладов;
Элементы.ДекорацияСостояние.Заголовок = НСтр("ru = 'Состояние по назначению-получателю:'");
ШаблонЗаголовка = НСтр("ru = 'Шаг 2: %1'");
Элементы.ДекорацияНаименованиеШагаУказаниеСерийПомещенийЯчеек.Заголовок =
СтрШаблон(ШаблонЗаголовка, НаименованиеШагаУказаниеСерийПомещенийЯчеекПоФункциональнымОпциям());
Элементы.ДекорацияНаименованиеШагаСозданныеДокументы.Заголовок = НСтр("ru = 'Шаг 3: Созданные документы'");
ИначеЕсли ВидОперации = Перечисления.ВидыОперацийКорректировкиНазначения.РезервироватьИКорректировать Тогда
Заголовок = СтрЗаменить(НСтр("ru = 'Резервирование (%1)'"), "%1", Заказ);
Если МогутБытьНазначенияБезЗаказа Тогда
Заголовок = СтрЗаменить(НСтр("ru = 'Резервирование (Назначение: %1)'"), "%1", Назначение);
КонецЕсли;
Элементы.ГруппаПереключатели.ТекущаяСтраница = Элементы.ГруппаРежимРезервирование;
Элементы.ТолькоЗаказыОрганизации.Видимость = ЗначениеЗаполнено(Организация);
Элементы.ТаблицаТоварыНовоеНазначениеМатериалыПодЭтап.Видимость = Ложь;
Элементы.ТаблицаТоварыИсходныйЗаказСнятие.Видимость = Ложь;
Элементы.ТаблицаТоварыИсходноеНазначениеСнятие.Видимость = Ложь;
Элементы.ТаблицаТоварыИсходныйЗаказРезервирование.Видимость = Не МогутБытьНазначенияБезЗаказа;
Элементы.ТаблицаТоварыИсходноеНазначениеРезервирование.Видимость = МогутБытьНазначенияБезЗаказа;
Элементы.ДеревоПомещенияЯчейкиЗаказИсточник.Видимость = Не МогутБытьНазначенияБезЗаказа;
Элементы.ДеревоПомещенияЯчейкиИсходноеНазначение.Видимость = МогутБытьНазначенияБезЗаказа;
Элементы.ДеревоПомещенияЯчейкиГруппаКоличествоВертикальная.Заголовок = НСтр("ru = 'К корректировке'");
Элементы.ТаблицаТоварыСвободно.Заголовок = НСтр("ru = 'Доступно'");
Элементы.ДеревоПомещенияЯчейкиРезерв.Заголовок = НСтр("ru = 'Доступно'");
Элементы.ТаблицаТоварыНовыйЗаказ.Видимость = Ложь;
Элементы.ТаблицаТоварыНовоеНазначение.Видимость = Ложь;
Элементы.ТаблицаТоварыВНаличииСтрока.Видимость = Ложь;
Элементы.ТаблицаТоварыПотребностьСтрока.Видимость = Ложь;
Элементы.ТаблицаТоварыОбеспеченоСтрока.Видимость = Ложь;
Элементы.ГруппаСтраницыПодвалНесколькоНазначений.ТекущаяСтраница = Элементы.ГруппаСтраницаПодвалНесколькоНазначенийНеИспользуется;
Элементы.ТаблицаТоварыСвободно.Видимость = Ложь;
Элементы.ТаблицаТоварыКартинкаИзлишекИсточника.Видимость = Истина;
Элементы.ТаблицаТоварыПотребность.Видимость = Истина;
Элементы.ГруппаИнформацияПоИсточникамОбеспечения.Видимость = ИспользоватьНесколькоСкладов;
Элементы.ДекорацияСостояние.Заголовок = НСтр("ru = 'Состояние по назначению-получателю:'");
ШаблонЗаголовка = НСтр("ru = 'Шаг 2: %1'");
Элементы.ДекорацияНаименованиеШагаУказаниеСерийПомещенийЯчеек.Заголовок =
СтрШаблон(ШаблонЗаголовка, НаименованиеШагаУказаниеСерийПомещенийЯчеекПоФункциональнымОпциям());
Элементы.ДекорацияНаименованиеШагаСозданныеДокументы.Заголовок = НСтр("ru = 'Шаг 3: Созданные документы'");
ИначеЕсли ВидОперации = Перечисления.ВидыОперацийКорректировкиНазначения.ВстречнаяКорректировка Тогда
Заголовок = СтрЗаменить(НСтр("ru = 'Встречная корректировка назначения (%1)'"), "%1", Заказ);
Элементы.ГруппаПереключатели.ТекущаяСтраница = Элементы.ГруппаРежимРезервирование;
Элементы.ВидОперацииПереключатель.Видимость = Ложь;
Элементы.ТаблицаТоварыНовоеНазначениеМатериалыПодЭтап.Видимость = Ложь;
Элементы.ТаблицаТоварыИсходныйЗаказСнятие.Видимость = Ложь;
Элементы.ТаблицаТоварыИсходноеНазначениеСнятие.Видимость = Ложь;
Элементы.ТаблицаТоварыСвободно.Видимость = Ложь;
Элементы.ТаблицаТоварыКоличество.Заголовок = НСтр("ru = 'Передать'");
Элементы.ДеревоПомещенияЯчейкиЗаказИсточник.Видимость = Не МогутБытьНазначенияБезЗаказа;
Элементы.ДеревоПомещенияЯчейкиИсходноеНазначение.Видимость = МогутБытьНазначенияБезЗаказа;
Элементы.ДеревоПомещенияЯчейкиГруппаКоличествоВертикальная.Заголовок = НСтр("ru = 'Передать'");
Элементы.ТаблицаТоварыКоличество.КартинкаШапки = БиблиотекаКартинок.Изменить;
Элементы.ДеревоПомещенияЯчейкиГруппаКоличествоВертикальная.КартинкаШапки = БиблиотекаКартинок.Изменить;
Элементы.ДеревоПомещенияЯчейкиРезерв.Заголовок = НСтр("ru = 'Остаток'");
Элементы.ТаблицаТоварыНовыйЗаказ.Видимость = Ложь;
Элементы.ТаблицаТоварыНовоеНазначение.Видимость = Ложь;
Элементы.ТаблицаТоварыВНаличииСтрока.Видимость = Ложь;
Элементы.ТаблицаТоварыПотребностьСтрока.Видимость = Ложь;
Элементы.ТаблицаТоварыОбеспеченоСтрока.Видимость = Ложь;
Элементы.ГруппаСтраницыПодвалНесколькоНазначений.ТекущаяСтраница = Элементы.ГруппаСтраницаПодвалНесколькоНазначенийНеИспользуется;
Элементы.ТаблицаТоварыКартинкаИзлишекИсточника.Видимость = Ложь;
Элементы.ТаблицаТоварыПотребность.Видимость = Ложь;
Элементы.ГруппаИнформацияПоИсточникамОбеспечения.Видимость = Ложь;
ШаблонЗаголовка = НСтр("ru = 'Шаг 1. Передача требуемых запасов под назначение: %1'");
Элементы.ДекорацияНаименованиеШагаПередатьПоВстречнойКорректировке.Заголовок = СтрШаблон(ШаблонЗаголовка, Назначение);
ШаблонЗаголовка = НСтр("ru = 'Шаг 2. Распределение запасов высвобождающихся из под назначения: %1'");
Элементы.ДекорацияНаименованиеШагаРаспределитьИзПодНазначенияПоВстречнойКорректировке.Заголовок =
СтрШаблон(ШаблонЗаголовка, Назначение);
ШаблонЗаголовка = НСтр("ru = 'Шаг 3: %1'");
Элементы.ДекорацияНаименованиеШагаУказаниеСерийПомещенийЯчеек.Заголовок =
СтрШаблон(ШаблонЗаголовка, НаименованиеШагаУказаниеСерийПомещенийЯчеекПоФункциональнымОпциям());
Элементы.ДекорацияНаименованиеШагаСозданныеДокументы.Заголовок = НСтр("ru = 'Шаг 4: Созданные документы'");
НастроитьЭлементыПоШагуВстречнойКорректировки();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура НастроитьЭлементыПоШагуВстречнойКорректировки()
Если Элементы.ТаблицаТовары.ОтборСтрок.ИндексСтраницы = 0 Тогда
Элементы.ТаблицаТоварыИсходныйЗаказРезервирование.Видимость = Не МогутБытьНазначенияБезЗаказа;
Элементы.ТаблицаТоварыИсходноеНазначениеРезервирование.Видимость = МогутБытьНазначенияБезЗаказа;
Иначе
Элементы.ТаблицаТоварыИсходныйЗаказРезервирование.Видимость = Ложь;
Элементы.ТаблицаТоварыИсходноеНазначениеРезервирование.Видимость = Ложь;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура НастроитьЭлементыПоШагуМногихНазначений()
Если НесколькоНазначений Тогда
Если Элементы.ТаблицаТовары.ОтборСтрок.ИндексСтраницы = 0 Тогда
Видимость = ВидОперации = Перечисления.ВидыОперацийКорректировкиНазначения.РезервироватьИКорректировать;
Элементы.ТаблицаТоварыИсходныйЗаказРезервирование.Видимость = Видимость И Не МогутБытьНазначенияБезЗаказа;
Элементы.ТаблицаТоварыИсходноеНазначениеРезервирование.Видимость = Видимость И МогутБытьНазначенияБезЗаказа;
Элементы.ТаблицаТоварыНовыйЗаказ.Видимость = Ложь;
Элементы.ТаблицаТоварыНовоеНазначение.Видимость = Ложь;
Элементы.ТаблицаТоварыВНаличииСтрока.Видимость = Ложь;
Элементы.ТаблицаТоварыПотребностьСтрока.Видимость = Ложь;
Элементы.ТаблицаТоварыОбеспеченоСтрока.Видимость = Ложь;
Элементы.ГруппаЗаказ.Видимость = Истина;
Элементы.ГруппаШапкаНесколькоНазначений.Видимость = Истина;
Элементы.ГруппаПереключателиНесколькоНазначений.Видимость = Истина;
Элементы.ГруппаСтраницыПодвалНесколькоНазначений.ТекущаяСтраница =
Элементы.ГруппаСтраницаПодвалНесколькоНазначенийНеИспользуется;
Элементы.ТаблицаТоварыСклад.Видимость = Истина;
Элементы.ТаблицаТоварыВНаличии.Видимость = Истина;
Элементы.ТаблицаТоварыВРезерве.Видимость = Истина;
Элементы.ТаблицаТоварыКартинкаИзлишекИсточника.Видимость = Истина;
Элементы.ТаблицаТоварыПотребность.Видимость = Истина;
Элементы.ГруппаИнформацияПоИсточникамОбеспечения.Видимость = ИспользоватьНесколькоСкладов;
Иначе
Элементы.ТаблицаТоварыИсходныйЗаказРезервирование.Видимость = Ложь;
Элементы.ТаблицаТоварыИсходноеНазначениеРезервирование.Видимость = Ложь;
Элементы.ТаблицаТоварыНовыйЗаказ.Видимость = Не МогутБытьНазначенияБезЗаказа;
Элементы.ТаблицаТоварыНовоеНазначение.Видимость = МогутБытьНазначенияБезЗаказа;
Элементы.ТаблицаТоварыВНаличииСтрока.Видимость = Истина;
Элементы.ТаблицаТоварыПотребностьСтрока.Видимость = Истина;
Элементы.ТаблицаТоварыОбеспеченоСтрока.Видимость = Истина;
Элементы.ГруппаЗаказ.Видимость = Ложь;
Элементы.ГруппаШапкаНесколькоНазначений.Видимость = Ложь;
Элементы.ГруппаПереключателиНесколькоНазначений.Видимость = Ложь;
Элементы.ГруппаСтраницыПодвалНесколькоНазначений.ТекущаяСтраница =
Элементы.ГруппаСтраницаПодвалНесколькоНазначений;
Элементы.ТаблицаТоварыСклад.Видимость = Ложь;
Элементы.ТаблицаТоварыВНаличии.Видимость = Ложь;
Элементы.ТаблицаТоварыВРезерве.Видимость = Ложь;
Элементы.ТаблицаТоварыКартинкаИзлишекИсточника.Видимость = Ложь;
Элементы.ТаблицаТоварыПотребность.Видимость = Ложь;
Элементы.ГруппаИнформацияПоИсточникамОбеспечения.Видимость = Ложь;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область КомандыФормыНаСервере
&НаСервере
Процедура ТолькоЗаказыОрганизацииПриИзмененииСервер()
НастроитьЭлементыФормыПоВидуОперации();
ЗаполнитьТаблицу();
КонецПроцедуры
&НаСервере
Процедура ВидОперацииПереключательПриИзмененииНаСервере()
ВидОперации = ?(ВидОперацииПереключатель, ПредопределенноеЗначение("Перечисление.ВидыОперацийКорректировкиНазначения.РезервироватьИКорректировать"),
ПредопределенноеЗначение("Перечисление.ВидыОперацийКорректировкиНазначения.Резервировать"));
ЗаполнитьТаблицу();
НастроитьЭлементыФормыПоВидуОперации();
КонецПроцедуры
&НаСервере
Процедура РежимПриИзмененииНаСервере()
ЗаполнитьТаблицу();
КонецПроцедуры
&НаСервере
Процедура ОтметитьСтроки(Значение)
ПараметрыОтбора = Элементы.ТаблицаТовары.ОтборСтрок;
СтруктураОтбора = Новый Структура;
СтруктураОтбора.Вставить("ИндексСтраницы", ПараметрыОтбора.ИндексСтраницы);
СтруктураОтбора.Вставить("Отметка", Не Значение);
МассивСтрок = ТаблицаТовары.НайтиСтроки(СтруктураОтбора);
Для Каждого СтрокаТоваров Из МассивСтрок Цикл
СтрокаТоваров.Отметка = Значение;
КонецЦикла;
Если ПараметрыОтбора.ИндексСтраницы = 0 Тогда
ПересчитатьКоличествоДляИндексСтраницы1 = Истина;
КонецЕсли;
ПерезаполнитьКоличествоВТаблицеИтогов();
ЗаполнитьТребуетсяШагПоПомещениямЯчейкам();
КонецПроцедуры
&НаСервере
Процедура СнятьРезервыСервер()
Документы.КорректировкаНазначенияТоваров.СнятьРезервы(ТаблицаТовары, Не ТумблерСнятьРезервы, ИтогиПоТоварам);
ПерезаполнитьКоличествоВТаблицеИтогов();
ЗаполнитьТребуетсяШагПоПомещениямЯчейкам();
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьОтборСтрокТаблицаТовары(Элементы, Знач СтруктураОтбора)
Если Не СтруктураОтбора.Свойство("ИндексСтраницы") Тогда
СтруктураОтбора.Вставить("ИндексСтраницы", Элементы.ТаблицаТовары.ОтборСтрок.ИндексСтраницы);
КонецЕсли;
СтруктураОтбора.Вставить("УдовлетворяетОтбору", Истина);
Элементы.ТаблицаТовары.ОтборСтрок = Новый ФиксированнаяСтруктура(СтруктураОтбора);
КонецПроцедуры
#КонецОбласти
#Область ПереходМеждуШагами
&НаКлиенте
Процедура ДалееНаКлиенте(ТолькоНастройкаКнопок)
НесколькоДокументов = НесколькоНазначений
И (ВидОперации = ПредопределенноеЗначение("Перечисление.ВидыОперацийКорректировкиНазначения.Резервировать")
Или ВидОперации = ПредопределенноеЗначение("Перечисление.ВидыОперацийКорректировкиНазначения.РезервироватьИКорректировать"));
Если Не ТолькоНастройкаКнопок Тогда
ОчиститьСообщения();
КонецЕсли;
Если ИспользуетсяШагВстречнойКорректировки Тогда
Если Элементы.Шаги.ТекущаяСтраница = Элементы.ШагПоСкладам
И Элементы.ТаблицаТовары.ОтборСтрок.ИндексСтраницы = 0 Тогда
Если ТолькоНастройкаКнопок Тогда
Элементы.СтраницыНаименованиеШага.ТекущаяСтраница = Элементы.СтраницаНаименованиеШагаПередатьПоВстречнойКорректировке;
НастроитьКнопкиШагов("Отмена", "Далее");
Возврат;
КонецЕсли;
ДалееКВстречнойКорректировке();
ИначеЕсли Элементы.Шаги.ТекущаяСтраница = Элементы.ШагПоСкладам
И Элементы.ТаблицаТовары.ОтборСтрок.ИндексСтраницы = 1 Тогда
Если ТолькоНастройкаКнопок Тогда
Элементы.СтраницыНаименованиеШага.ТекущаяСтраница = Элементы.СтраницаНаименованиеШагаРаспределитьИзПодНазначенияПоВстречнойКорректировке;
КонецЕсли;
Если ТаблицаТовары.Итог("ТребуетсяШагПоПомещениямЯчейкам") > 0 Тогда
Если ТолькоНастройкаКнопок Тогда
НастроитьКнопкиШагов("Назад", "Далее");
Возврат;
КонецЕсли;
ДалееКПомещениямИЯчейкам();
Иначе
Если ТолькоНастройкаКнопок Тогда
НастроитьКнопкиШагов("Назад", "Создать");
Возврат;
КонецЕсли;
ДалееКСозданиюДокумента();
КонецЕсли;
ИначеЕсли Элементы.Шаги.ТекущаяСтраница = Элементы.ШагПоПомещениямЯчейкам Тогда
Если ТолькоНастройкаКнопок Тогда
Элементы.СтраницыНаименованиеШага.ТекущаяСтраница = Элементы.СтраницаНаименованиеШагаУказаниеСерийПомещенийЯчеек;
НастроитьКнопкиШагов("Назад", "Создать");
Возврат;
КонецЕсли;
ДалееКСозданиюДокументаИзПомещенийИЯчеек();
ИначеЕсли Элементы.Шаги.ТекущаяСтраница = Элементы.ШагСозданныеДокументы Тогда
Если ТолькоНастройкаКнопок Тогда
Элементы.СтраницыНаименованиеШага.ТекущаяСтраница = Элементы.СтраницаНаименованиеШагаСозданныеДокументы;
НастроитьКнопкиШагов("Назад", "Закрыть");
Возврат;
КонецЕсли;
Закрыть();
КонецЕсли;
ИначеЕсли НесколькоДокументов Тогда
Если Элементы.Шаги.ТекущаяСтраница = Элементы.ШагПоСкладам
И Элементы.ТаблицаТовары.ОтборСтрок.ИндексСтраницы = 0 Тогда
Если ТолькоНастройкаКнопок Тогда
Элементы.СтраницыНаименованиеШага.ТекущаяСтраница = Элементы.СтраницаНаименованиеШагаКРезервированиюПоЗаказуВсего;
НастроитьКнопкиШагов("Отмена", "Далее");
Возврат;
КонецЕсли;
ДалееКМногимНазначениям();
ИначеЕсли Элементы.Шаги.ТекущаяСтраница = Элементы.ШагПоСкладам
И Элементы.ТаблицаТовары.ОтборСтрок.ИндексСтраницы = 1 Тогда
Если ТолькоНастройкаКнопок Тогда
Элементы.СтраницыНаименованиеШага.ТекущаяСтраница = Элементы.СтраницаРезервыПоНазначениямЗаказаУточнение;
КонецЕсли;
Если ТаблицаТовары.Итог("ТребуетсяШагПоПомещениямЯчейкам") > 0 Тогда
Если ТолькоНастройкаКнопок Тогда
НастроитьКнопкиШагов("Назад", "Далее");
Возврат;
КонецЕсли;
ДалееКПомещениямИЯчейкам();
Иначе
Если ТолькоНастройкаКнопок Тогда
НастроитьКнопкиШагов("Назад", "СоздатьНесколько");
Возврат;
КонецЕсли;
ДалееКСозданиюДокументов();
КонецЕсли;
ИначеЕсли Элементы.Шаги.ТекущаяСтраница = Элементы.ШагПоПомещениямЯчейкам Тогда
Если ТолькоНастройкаКнопок Тогда
Элементы.СтраницыНаименованиеШага.ТекущаяСтраница = Элементы.СтраницаНаименованиеШагаУказаниеСерийПомещенийЯчеек;
НастроитьКнопкиШагов("Назад", "СоздатьНесколько");
Возврат;
КонецЕсли;
ДалееКСозданиюДокументовИзПомещенийИЯчеек();
ИначеЕсли Элементы.Шаги.ТекущаяСтраница = Элементы.ШагСозданныеДокументы Тогда
Если ТолькоНастройкаКнопок Тогда
Элементы.СтраницыНаименованиеШага.ТекущаяСтраница = Элементы.СтраницаНаименованиеШагаСозданныеДокументы;
НастроитьКнопкиШагов("Назад", "Закрыть");
Возврат;
КонецЕсли;
Закрыть();
КонецЕсли;
ИначеЕсли Параметры.Мастер Тогда
Если Элементы.Шаги.ТекущаяСтраница = Элементы.ШагПоСкладам Тогда
Если ТолькоНастройкаКнопок Тогда
Если ВидОперации = ВидОперацииВстречнаяКорректировка Тогда
Элементы.СтраницыНаименованиеШага.ТекущаяСтраница = Элементы.СтраницаНаименованиеШагаПередатьПоВстречнойКорректировке;
ИначеЕсли ВидОперации = ВидОперацииРезервировать Или ВидОперации = ВидОперацииРезервироватьИКорректировать Тогда
Элементы.СтраницыНаименованиеШага.ТекущаяСтраница = Элементы.СтраницаНаименованиеШагаКРезервированию;
Иначе
Элементы.СтраницыНаименованиеШага.ТекущаяСтраница = Элементы.СтраницаНаименованиеШагаКСнятиюРезерва;
КонецЕсли;
КонецЕсли;
Если ТаблицаТовары.Итог("ТребуетсяШагПоПомещениямЯчейкам") > 0 Тогда
Если ТолькоНастройкаКнопок Тогда
НастроитьКнопкиШагов("Отмена", "Далее");
Возврат;
КонецЕсли;
ДалееКПомещениямИЯчейкам();
Иначе
Если ТолькоНастройкаКнопок Тогда
НастроитьКнопкиШагов("Отмена", "Создать");
Возврат;
КонецЕсли;
ДалееКСозданиюДокумента();
КонецЕсли;
ИначеЕсли Элементы.Шаги.ТекущаяСтраница = Элементы.ШагПоПомещениямЯчейкам Тогда
Если ТолькоНастройкаКнопок Тогда
Элементы.СтраницыНаименованиеШага.ТекущаяСтраница = Элементы.СтраницаНаименованиеШагаУказаниеСерийПомещенийЯчеек;
НастроитьКнопкиШагов("Назад", "Создать");
Возврат;
КонецЕсли;
ДалееКСозданиюДокументаИзПомещенийИЯчеек();
ИначеЕсли Элементы.Шаги.ТекущаяСтраница = Элементы.ШагСозданныеДокументы Тогда
Если ТолькоНастройкаКнопок Тогда
Элементы.СтраницыНаименованиеШага.ТекущаяСтраница = Элементы.СтраницаНаименованиеШагаСозданныеДокументы;
НастроитьКнопкиШагов("Назад", "Закрыть");
Возврат;
КонецЕсли;
Закрыть();
КонецЕсли;
Иначе
Если Элементы.Шаги.ТекущаяСтраница = Элементы.ШагПоСкладам Тогда
Если ТолькоНастройкаКнопок Тогда
Если ВидОперации = ВидОперацииРезервировать Или ВидОперации = ВидОперацииРезервироватьИКорректировать Тогда
Элементы.СтраницыНаименованиеШага.ТекущаяСтраница = Элементы.СтраницаНаименованиеШагаКРезервированию;
Иначе
Элементы.СтраницыНаименованиеШага.ТекущаяСтраница = Элементы.СтраницаНаименованиеШагаКСнятиюРезерва;
КонецЕсли;
КонецЕсли;
Если ТаблицаТовары.Итог("ТребуетсяШагПоПомещениямЯчейкам") > 0 Тогда
Если ТолькоНастройкаКнопок Тогда
НастроитьКнопкиШагов("Отмена", "Далее");
Возврат;
КонецЕсли;
ДалееКПомещениямИЯчейкам();
Иначе
Если ТолькоНастройкаКнопок Тогда
НастроитьКнопкиШагов("Отмена", "Перенести");
Возврат;
КонецЕсли;
ДалееКПереносуВДокумент();
КонецЕсли;
ИначеЕсли Элементы.Шаги.ТекущаяСтраница = Элементы.ШагПоПомещениямЯчейкам Тогда
Если ТолькоНастройкаКнопок Тогда
Элементы.СтраницыНаименованиеШага.ТекущаяСтраница = Элементы.СтраницаНаименованиеШагаУказаниеСерийПомещенийЯчеек;
НастроитьКнопкиШагов("Назад", "Перенести");
Возврат;
КонецЕсли;
ДалееКПереносуВДокументИзПомещенийИЯчеек();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура НастроитьКнопкиШагов(КодНазад, КодДалее)
КомандаОтмена = Элементы.Отмена;
КомандаДалее = Элементы.Далее;
Если КодНазад = "Отмена" Тогда
КомандаОтмена.Заголовок = НСтр("ru = 'Отмена'");
ИначеЕсли КодНазад = "Назад" Тогда
КомандаОтмена.Заголовок = НСтр("ru = '< Назад'");
КонецЕсли;
Если КодДалее = "Далее" Тогда
КомандаДалее.Заголовок = НСтр("ru = 'Далее >'");
Элементы.ТекстБудетСозданаКорректировка.Видимость = Ложь;
ИначеЕсли КодДалее = "Создать" Тогда
КомандаДалее.Заголовок = НСтр("ru = 'Создать документ'");
Элементы.ТекстБудетСозданаКорректировка.Видимость = Истина;
ИначеЕсли КодДалее = "СоздатьНесколько" Тогда
КомандаДалее.Заголовок = НСтр("ru = 'Создать документы'");
ИначеЕсли КодДалее = "Перенести" Тогда
КомандаДалее.Заголовок = НСтр("ru = 'Перенести в документ'");
Элементы.ТекстБудетСозданаКорректировка.Видимость = Ложь;
ИначеЕсли КодДалее = "Закрыть" Тогда
КомандаДалее.Заголовок = НСтр("ru = 'Закрыть'");
Элементы.ТекстБудетСозданаКорректировка.Видимость = Ложь;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДалееКВстречнойКорректировке()
Ошибка = Неопределено;
Если Не ДалееКВстречнойКорректировкеСервер(Ошибка) Тогда
СообщитьОшибкиПользователю(Ошибка);
Иначе
ПерезаполнитьКоличествоВТаблицеИтогов();
РассчитатьИтогиПоЗаказу();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДалееКМногимНазначениям()
Ошибка = Неопределено;
Если Не ДалееКМногимНазначениямСервер(Ошибка) Тогда
СообщитьОшибкиПользователю(Ошибка);
Иначе
ПерезаполнитьКоличествоВТаблицеИтогов();
РассчитатьИтогиПоЗаказу();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДалееКПомещениямИЯчейкам()
Ошибка = Неопределено;
Если Не ДалееКПомещениямИЯчейкамСервер(Ошибка) Тогда
СообщитьОшибкиПользователю(Ошибка);
Иначе
Для Каждого Строка Из ДеревоПомещенияЯчейки.ПолучитьЭлементы() Цикл
Элементы.ДеревоПомещенияЯчейки.Развернуть(Строка.ПолучитьИдентификатор(), Истина);
КонецЦикла;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДалееКСозданиюДокумента()
Ошибка = Неопределено;
Результат = ДалееКСозданиюДокументаСервер(Ошибка, Неопределено);
Если Результат = Ложь Тогда
СообщитьОшибкиПользователю(Ошибка);
ДалееНаКлиенте(Истина);
ИначеЕсли ТипЗнч(Результат) = Тип("Структура") Тогда
ПоказатьОповещениеПользователя(НСтр("ru = 'Создана корректировка назначения товаров'"),
ПолучитьНавигационнуюСсылку(Результат.Ссылка),
Результат.Ссылка);
Закрыть();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДалееКСозданиюДокументов()
ОчиститьСообщения();
Ошибка = Неопределено;
Результат = ДалееКСозданиюДокументовСервер(Ошибка);
Если Результат = Ложь Тогда
СообщитьОшибкиПользователю(Ошибка);
Иначе
ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
ДлительныеОперацииКлиент.ОжидатьЗавершение(Результат,
Новый ОписаниеОповещения("ДалееКСозданиюДокументовЗавершение", ЭтотОбъект, Неопределено),
ПараметрыОжидания);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДалееКПереносуВДокумент()
Ошибка = Неопределено;
Результат = ДалееКПереносуВДокументСервер(Ошибка, Неопределено);
Если Результат = Ложь Тогда
СообщитьОшибкиПользователю(Ошибка);
Иначе
ОповеститьОВыборе(Новый Структура("ТаблицаТовары, ВидОперации", Результат.АдресВХранилище, ВидОперации));
Если Результат.ЕстьПредупреждение Тогда
ПоказатьОповещениеПользователя(,,Ошибка,БиблиотекаКартинок.Информация32);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДалееКСозданиюДокументаИзПомещенийИЯчеек()
Ошибка = Неопределено;
Результат = ДалееКСозданиюДокументаИзПомещенийИЯчеекСервер(Ошибка);
Если Результат = Ложь Тогда
СообщитьОшибкиПользователю(Ошибка);
ИначеЕсли ТипЗнч(Результат) = Тип("Структура") Тогда
ПоказатьОповещениеПользователя(НСтр("ru = 'Создана корректировка назначения товаров'"),
ПолучитьНавигационнуюСсылку(Результат.Ссылка),
Результат.Ссылка);
Закрыть();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДалееКСозданиюДокументовИзПомещенийИЯчеек()
Ошибка = Неопределено;
Результат = ДалееКСозданиюДокументовИзПомещенийИЯчеекСервер(Ошибка);
Если Результат = Ложь Тогда
СообщитьОшибкиПользователю(Ошибка);
Иначе
ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
ДлительныеОперацииКлиент.ОжидатьЗавершение(Результат,
Новый ОписаниеОповещения("ДалееКСозданиюДокументовЗавершение", ЭтотОбъект, Неопределено),
ПараметрыОжидания);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДалееКПереносуВДокументИзПомещенийИЯчеек()
Ошибка = Неопределено;
Результат = ДалееКПереносуВДокументИзПомещенийИЯчеекСервер(Ошибка);
Если Результат = Ложь Тогда
СообщитьОшибкиПользователю(Ошибка);
Иначе
ОповеститьОВыборе(Новый Структура("ТаблицаТовары, ВидОперации", Результат.АдресВХранилище, ВидОперации));
Если Результат.ЕстьПредупреждение Тогда
ПоказатьОповещениеПользователя(,,Ошибка,БиблиотекаКартинок.Информация32);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СообщитьОшибкиПользователю(Ошибка)
Если ТипЗнч(Ошибка) = Тип("Массив") Тогда
Для Каждого ТекОшибка Из Ошибка Цикл
ОбщегоНазначенияКлиент.СообщитьПользователю(ТекОшибка);
КонецЦикла;
Иначе
ПоказатьПредупреждение(, Ошибка);
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ДалееКВстречнойКорректировкеСервер(Ошибка)
Если Не ЕстьВыбранныеСтрокиТовары() Тогда
Ошибка = НСтр("ru = 'Ни одна строка, с заполненным количеством, не выбрана.'");
Возврат Ложь;
КонецЕсли;
Если ПересчитатьКоличествоДляИндексСтраницы1 Тогда
ЗаполнитьКоличествоВстречнойКорректировки();
ПересчитатьКоличествоДляИндексСтраницы1 = Ложь;
КонецЕсли;
СтруктураОтбора = Новый Структура(Элементы.ТаблицаТовары.ОтборСтрок);
СтруктураОтбора.ИндексСтраницы = 1;
УстановитьОтборСтрокТаблицаТовары(Элементы, СтруктураОтбора);
НастроитьЭлементыПоШагуВстречнойКорректировки();
Возврат Истина;
КонецФункции
&НаСервере
Функция ДалееКМногимНазначениямСервер(Ошибка)
Если Не ЕстьВыбранныеСтрокиТовары() Тогда
Ошибка = НСтр("ru = 'Ни одна строка, с заполненным количеством, не выбрана.'");
Возврат Ложь;
КонецЕсли;
Если ПересчитатьКоличествоДляИндексСтраницы1 Тогда
ЗаполнитьКоличествоДляМногихНазначений();
ПересчитатьКоличествоДляИндексСтраницы1 = Ложь;
КонецЕсли;
СтруктураОтбора = Новый Структура(Элементы.ТаблицаТовары.ОтборСтрок);
СтруктураОтбора.ИндексСтраницы = 1;
УстановитьОтборСтрокТаблицаТовары(Элементы, СтруктураОтбора);
НастроитьЭлементыПоШагуМногихНазначений();
Возврат Истина;
КонецФункции
&НаСервере
Функция ДалееКПомещениямИЯчейкамСервер(Ошибка)
Если Не ЕстьВыбранныеСтрокиТовары() Тогда
Ошибка = НСтр("ru = 'Ни одна строка, с заполненным количеством, не выбрана.'");
Возврат Ложь;
КонецЕсли;
ЗаполнитьДерево();
Элементы.Шаги.ТекущаяСтраница = Элементы.ШагПоПомещениямЯчейкам;
Возврат Истина;
КонецФункции
&НаСервере
Функция ДалееКСозданиюДокументаСервер(Ошибка, ТаблицаКПереносу)
Если ТаблицаКПереносу = Неопределено Тогда
ТаблицаКПереносу = ТаблицаТовары;
КонецЕсли;
Если Не ЕстьВыбранныеСтрокиТовары() Тогда
Ошибка = НСтр("ru = 'Ни одна строка, с заполненным количеством, не выбрана.'");
Возврат Ложь;
КонецЕсли;
МассивСтрок = Новый Массив();
Для Каждого Строка Из ТаблицаКПереносу Цикл
Если Строка.Количество > 0 И Строка.Отметка И Строка.ИндексСтраницы = 0 Тогда
МассивСтрок.Добавить(Строка);
КонецЕсли;
КонецЦикла;
Если ТипЗнч(ТаблицаКПереносу) = Тип("ДанныеФормыКоллекция") Тогда
ТоварыКПереносу = ТаблицаКПереносу.Выгрузить(МассивСтрок);
Иначе
ТоварыКПереносу = ТаблицаКПереносу.Скопировать(МассивСтрок);
КонецЕсли;
Если ВидОперации = Перечисления.ВидыОперацийКорректировкиНазначения.ВстречнаяКорректировка Тогда
ТаблицаРаспределения = ТаблицаТовары.Выгрузить(Новый Структура("Отметка, ИндексСтраницы", Истина, 1));
ТоварыКПереносу = Документы.КорректировкаНазначенияТоваров.РаспределитьТоварыВстречнойКорректировки(
ТоварыКПереносу, ТаблицаРаспределения);
КонецЕсли;
РеквизитыШапки = Новый Структура("ВидОперации,Организация,Назначение");
ЗаполнитьЗначенияСвойств(РеквизитыШапки, ЭтотОбъект);
РезультатСозданияДокумента = Документы.КорректировкаНазначенияТоваров.СоздатьЗаполнитьИПровестиДокумент(
РеквизитыШапки,
ТоварыКПереносу);
Если РезультатСозданияДокумента.Проведен Тогда
Результат = Новый Структура("Ссылка", РезультатСозданияДокумента.Документ);
Возврат Результат;
Иначе
Для Каждого ОшибкаДокумента Из РезультатСозданияДокумента.Ошибки Цикл
ОбщегоНазначения.СообщитьПользователю(ОшибкаДокумента.Текст, РезультатСозданияДокумента.Документ);
КонецЦикла;
ЗагружаемыеДокументы = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(РезультатСозданияДокумента.Документ);
СписокДокументов.ЗагрузитьЗначения(ЗагружаемыеДокументы);
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(
СозданныеДокументы,
"Ссылка",
СписокДокументов.ВыгрузитьЗначения(),
ВидСравненияКомпоновкиДанных.ВСписке,
,
Истина,
РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный);
Элементы.Шаги.ТекущаяСтраница = Элементы.ШагСозданныеДокументы;
КонецЕсли;
Возврат Истина;
КонецФункции
&НаСервере
Функция РаспределитьИсточникиНаПриемники(ТаблицаКПереносу = Неопределено)
Если ТипЗнч(ТаблицаКПереносу) = Тип("ДанныеФормыКоллекция") Тогда
Источники = ТаблицаКПереносу.Выгрузить(Новый Структура("ИндексСтраницы,Отметка", 0, Истина));
Приемники = ТаблицаКПереносу.Выгрузить(Новый Структура("ИндексСтраницы,Отметка", 1, Истина));
Иначе
Источники = ТаблицаКПереносу.Скопировать(Новый Структура("ИндексСтраницы,Отметка", 0, Истина));
Приемники = ТаблицаКПереносу.Скопировать(Новый Структура("ИндексСтраницы,Отметка", 1, Истина));
КонецЕсли;
ПереченьНоменклатуры = Приемники.ВыгрузитьКолонку("Номенклатура");
ТоварныеМеста = Документы.КорректировкаНазначенияТоваров.ТоварныеМестаПоПеречнюНоменклатуры(ПереченьНоменклатуры);
Источники.Колонки.Добавить("КлючТоварныеМеста", Новый ОписаниеТипов("УникальныйИдентификатор"));
Источники.Колонки.Добавить("Пропустить", Новый ОписаниеТипов("Булево"));
ТаблицаТоварныеМеста = Источники.СкопироватьКолонки();
Если ТоварныеМеста.Количество() > 0 Тогда
Источники.Сортировать("Номенклатура,Характеристика,ИсходноеНазначение,Склад,Серия,Помещение,Ячейка");
КлючГруппировки = Новый Структура("ИсходноеНазначение,Номенклатура,Характеристика,Склад,Серия,Помещение");
КлючТоварныеМеста = Неопределено;
Для Индекс = 0 По Источники.Количество() - 1 Цикл
СтрокаТаблицы = Источники[Индекс];
СтрокаТаблицы.Пропустить = Ложь;
Упаковки = ТоварныеМеста[СтрокаТаблицы.Номенклатура];
Если Упаковки <> Неопределено И Упаковки[СтрокаТаблицы.Упаковка] <> Неопределено Тогда
Если КлючГруппировки.ИсходноеНазначение <> СтрокаТаблицы.ИсходноеНазначение
Или КлючГруппировки.Номенклатура <> СтрокаТаблицы.Номенклатура
Или КлючГруппировки.Характеристика <> СтрокаТаблицы.Характеристика
Или КлючГруппировки.Склад <> СтрокаТаблицы.Склад
Или КлючГруппировки.Серия <> СтрокаТаблицы.Серия
Или КлючГруппировки.Помещение <> СтрокаТаблицы.Помещение Тогда
ЗаполнитьЗначенияСвойств(КлючГруппировки, СтрокаТаблицы);
КлючТоварныеМеста = Новый УникальныйИдентификатор();
Иначе
СтрокаТаблицы.Пропустить = Истина;
КонецЕсли;
СтрокаТаблицы.КлючТоварныеМеста = КлючТоварныеМеста;
НоваяСтрока = ТаблицаТоварныеМеста.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТаблицы);
КонецЕсли;
КонецЦикла;
Источники = Источники.Скопировать(Новый Структура("Пропустить", Ложь));
ТаблицаТоварныеМеста.Индексы.Добавить("КлючТоварныеМеста");
КонецЕсли;
ТоварыКПереносу = Источники.СкопироватьКолонки();
Приемники.Сортировать("НовоеНазначение");
ПоляКлюча = "Номенклатура,Характеристика";
Источники.Индексы.Добавить(ПоляКлюча);
Источники.Колонки.Добавить("ТекущийИндекс", Новый ОписаниеТипов("Число"));
Ключ = Новый Структура(ПоляКлюча);
Для Каждого СтрокаТаблицы Из Приемники Цикл
ЗаполнитьЗначенияСвойств(Ключ, СтрокаТаблицы);
ИсточникиТовара = Источники.НайтиСтроки(Ключ);
Если ИсточникиТовара.Количество() = 0 Тогда
Продолжить;
КонецЕсли;
Индекс = ИсточникиТовара[0].ТекущийИндекс;
Пока СтрокаТаблицы.Количество > 0 Цикл
Если ИсточникиТовара[Индекс].Количество = 0 И Индекс = ИсточникиТовара.Количество() - 1 Тогда
Прервать;
КонецЕсли;
Пока ИсточникиТовара[Индекс].Количество = 0 Цикл
Индекс = Индекс + 1;
КонецЦикла;
Количество = Мин(ИсточникиТовара[Индекс].Количество, СтрокаТаблицы.Количество);
ИсточникиТовара[Индекс].Количество = ИсточникиТовара[Индекс].Количество - Количество;
СтрокаТаблицы.Количество = СтрокаТаблицы.Количество - Количество;
Упаковки = ТоварныеМеста[ИсточникиТовара[Индекс].Номенклатура];
Если Упаковки <> Неопределено И Упаковки[ИсточникиТовара[Индекс].Упаковка] <> Неопределено Тогда
НайденныеСтрокиТоварныеМеста = ТаблицаТоварныеМеста.НайтиСтроки(
Новый Структура("КлючТоварныеМеста", ИсточникиТовара[Индекс].КлючТоварныеМеста));
Для Каждого СтрокаТоварныеМеста Из НайденныеСтрокиТоварныеМеста Цикл
НоваяСтрока = ТоварыКПереносу.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТоварныеМеста);
НоваяСтрока.Количество = Количество;
НоваяСтрока.НовоеНазначение = СтрокаТаблицы.НовоеНазначение;
КонецЦикла;
Иначе
НоваяСтрока = ТоварыКПереносу.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, ИсточникиТовара[Индекс]);
НоваяСтрока.Количество = Количество;
НоваяСтрока.НовоеНазначение = СтрокаТаблицы.НовоеНазначение;
КонецЕсли;
КонецЦикла;
ИсточникиТовара[0].ТекущийИндекс = Индекс;
КонецЦикла;
Возврат ТоварыКПереносу;
КонецФункции
&НаСервере
Функция ДалееКСозданиюДокументовСервер(Ошибка)
Если Не ЕстьВыбранныеСтрокиТовары() Тогда
Ошибка = НСтр("ru = 'Ни одна строка, с заполненным количеством, не выбрана.'");
Возврат Ложь;
КонецЕсли;
ТоварыКПереносу = РаспределитьИсточникиНаПриемники(ТаблицаТовары);
СписокДокументов.Очистить();
ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Создание документов ""Корректировка назначения товаров""'");
ПараметрыПроцедуры = Новый Структура("ВидОперации,Организация");
ЗаполнитьЗначенияСвойств(ПараметрыПроцедуры, ЭтотОбъект);
ПараметрыПроцедуры.Вставить("ТоварыКПереносу", ТоварыКПереносу);
Возврат ДлительныеОперации.ВыполнитьФункцию(
ПараметрыВыполнения,
"Обработки.ЗаполнениеКорректировкиНазначения.СоздатьДокументыВФоне",
ПараметрыПроцедуры);
КонецФункции
&НаКлиенте
Процедура ДалееКСозданиюДокументовЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Результат = Неопределено Тогда
Возврат;
ИначеЕсли Результат.Статус = "Ошибка" Тогда
ПоказатьПредупреждение(, Результат.КраткоеПредставлениеОшибки);
Иначе
ДалееКСозданиюДокументовЗавершениеСервер(Результат.АдресРезультата);
КонецЕсли;
ДалееНаКлиенте(Истина);
КонецПроцедуры
&НаСервере
Процедура ДалееКСозданиюДокументовЗавершениеСервер(АдресРезультата)
РезультатСозданияДокументов = ПолучитьИзВременногоХранилища(АдресРезультата);
Для Каждого ОшибкиДокумента Из РезультатСозданияДокументов.Ошибки Цикл
Для Каждого ОшибкаДокумента Из ОшибкиДокумента.Ошибки Цикл
ОбщегоНазначения.СообщитьПользователю(ОшибкаДокумента.Текст, ОшибкиДокумента.Документ);
КонецЦикла;
КонецЦикла;
СписокДокументов.ЗагрузитьЗначения(РезультатСозданияДокументов.Документы);
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(
СозданныеДокументы,
"Ссылка",
СписокДокументов.ВыгрузитьЗначения(),
ВидСравненияКомпоновкиДанных.ВСписке,
,
Истина,
РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный);
Элементы.Шаги.ТекущаяСтраница = Элементы.ШагСозданныеДокументы;
КонецПроцедуры
&НаСервере
Функция ДалееКСозданиюДокументаИзПомещенийИЯчеекСервер(Ошибка)
Если Не МожноПеренестиДанныеДереваВТаблицу(Ошибка) Тогда
Возврат Ложь;
КонецЕсли;
ТаблицаКПереносу = ПеренестиДанныеДереваВТаблицу();
Возврат ДалееКСозданиюДокументаСервер(Ошибка, ТаблицаКПереносу);
КонецФункции
&НаСервере
Функция ДалееКСозданиюДокументовИзПомещенийИЯчеекСервер(Ошибка)
Если Не ЕстьВыбранныеСтрокиТовары() Тогда
Ошибка = НСтр("ru = 'Ни одна строка, с заполненным количеством, не выбрана.'");
Возврат Ложь;
КонецЕсли;
Если Не МожноПеренестиДанныеДереваВТаблицу(Ошибка) Тогда
Возврат Ложь;
КонецЕсли;
ТаблицаКПереносу = ПеренестиДанныеДереваВТаблицу();
ТоварыКПереносу = РаспределитьИсточникиНаПриемники(ТаблицаКПереносу);
СписокДокументов.Очистить();
ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Создание документов ""Корректировка назначения товаров""'");
ПараметрыПроцедуры = Новый Структура("ВидОперации,Организация");
ЗаполнитьЗначенияСвойств(ПараметрыПроцедуры, ЭтотОбъект);
ПараметрыПроцедуры.Вставить("ТоварыКПереносу", ТоварыКПереносу);
Возврат ДлительныеОперации.ВыполнитьФункцию(
ПараметрыВыполнения,
"Обработки.ЗаполнениеКорректировкиНазначения.СоздатьДокументыВФоне",
ПараметрыПроцедуры);
КонецФункции
&НаСервере
Функция ДалееКПереносуВДокументСервер(Ошибка, ТаблицаКПереносу)
Если Не ЕстьВыбранныеСтрокиТовары() Тогда
Ошибка = НСтр("ru = 'Ни одна строка, с заполненным количеством, не выбрана.'");
Возврат Ложь;
КонецЕсли;
Если ТаблицаКПереносу = Неопределено Тогда
ТаблицаКПереносу = ТаблицаТовары;
КонецЕсли;
АдресВХранилище = ПоместитьТоварыВХранилище(Ошибка, ТаблицаКПереносу);
Если АдресВХранилище = Неопределено Тогда
Возврат Ложь;
КонецЕсли;
ЕстьПредупреждение = ЗначениеЗаполнено(Ошибка);
Результат = Новый Структура("ЕстьПредупреждение,АдресВХранилище", ЕстьПредупреждение, АдресВХранилище);
Возврат Результат;
КонецФункции
&НаСервере
Функция ДалееКПереносуВДокументИзПомещенийИЯчеекСервер(Ошибка)
Если Не МожноПеренестиДанныеДереваВТаблицу(Ошибка) Тогда
Возврат Ложь;
КонецЕсли;
ТаблицаКПереносу = ПеренестиДанныеДереваВТаблицу();
Возврат ДалееКПереносуВДокументСервер(Ошибка, ТаблицаКПереносу);
КонецФункции
&НаСервере
Процедура ЗаполнитьТребуетсяШагПоПомещениямЯчейкам()
Для Каждого Строка Из ТаблицаТовары Цикл
ЗаполнитьТребуетсяШагПоПомещениямЯчейкамВСтроке(Строка);
КонецЦикла;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ЗаполнитьТребуетсяШагПоПомещениямЯчейкамВСтроке(Строка)
Строка.ТребуетсяШагПоПомещениямЯчейкам = ?(
(Строка.ИспользованиеПомещенийЯчеек Или Строка.ИспользованиеСерий)
И Строка.Отметка И Строка.Количество > 0, 1, 0);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьИспользованиеПомещенийЯчеекСерий()
ТабЧастьТоваров = ТаблицаТовары.Выгрузить(, "Номенклатура,ИсходноеНазначение,НовоеНазначение,Склад");
Выборка = Документы.КорректировкаНазначенияТоваров.УказаниеПомещенийЯчеекСерийДляСтроки(ТабЧастьТоваров);
Пока Выборка.Следующий() Цикл
Строка = ТаблицаТовары[Выборка.НомерСтроки - 1];
Строка.ИспользованиеСерий = Выборка.ИспользоватьСерии;
Строка.ИспользованиеПомещенийЯчеек = Выборка.ИспользоватьСкладскиеПомещения
Или Выборка.ИспользоватьАдресноеХранение;
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция ЕстьВыбранныеСтрокиТовары()
Результат = Ложь;
Для Каждого Строка Из ТаблицаТовары Цикл
Если Строка.ИндексСтраницы = 0 И Строка.Отметка И Строка.Количество > 0 Тогда
Результат = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
&НаКлиенте
Процедура ОтменаЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
ОтветНаВопрос = РезультатВопроса;
Если ОтветНаВопрос = КодВозвратаДиалога.Нет Тогда
Возврат;
КонецЕсли;
Закрыть();
КонецПроцедуры
&НаСервере
Функция ПеренестиДанныеДереваВТаблицу()
ТаблицаПриемник = ТаблицаТовары.Выгрузить();
СтруктураПоиска = Новый Структура("ИсходноеНазначение,Номенклатура,Характеристика,Склад");
Для Каждого Корень Из ДеревоПомещенияЯчейки.ПолучитьЭлементы() Цикл
ЗаполнитьЗначенияСвойств(СтруктураПоиска, Корень);
СтруктураПоиска.ИсходноеНазначение = Корень.Назначение;
Ветви = Корень.ПолучитьЭлементы();
Если Ветви.Количество() > 0 Тогда
НайденныеСтроки = ТаблицаПриемник.НайтиСтроки(СтруктураПоиска);
Если НайденныеСтроки.Количество() > 0 Тогда
Для Каждого Ветвь Из Ветви Цикл
Если Ветвь.Отметка И Ветвь.Количество > 0 Тогда
НоваяСтрока = ТаблицаПриемник.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, НайденныеСтроки[0]);
ЗаполнитьЗначенияСвойств(НоваяСтрока, Ветвь, "Помещение, Ячейка, Серия, Упаковка, Количество, Отметка");
КонецЕсли;
Для Каждого ВетвьЯчейки Из Ветвь.ПолучитьЭлементы() Цикл
Если ВетвьЯчейки.Отметка И ВетвьЯчейки.Количество > 0 Тогда
НоваяСтрока = ТаблицаПриемник.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, НайденныеСтроки[0]);
ЗаполнитьЗначенияСвойств(НоваяСтрока, ВетвьЯчейки, "Помещение, Ячейка, Упаковка, Количество, Отметка");
НоваяСтрока.Серия = Ветвь.Серия;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл
ТаблицаПриемник.Удалить(НайденнаяСтрока);
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат ТаблицаПриемник;
КонецФункции
#КонецОбласти
#Область ЗаполнениеТаблиц
&НаСервере
Процедура ЗаполнитьТаблицу()
ОтборПоОрганизации = ?(ТолькоЗаказыОрганизации, Организация, Неопределено);
Таблица = Неопределено;
ТаблицаИтогов = Неопределено;
ТаблицаИтоговИсточниковОбеспечения = Новый ТаблицаЗначений();
Если НесколькоНазначений И ВидОперации = Перечисления.ВидыОперацийКорректировкиНазначения.Резервировать Тогда
Источники = Новый Структура("ОстатокНаСкладе,РезервыПодНазначения", Истина , Ложь);
Таблицы = Документы.КорректировкаНазначенияТоваров.ТаблицаРезервирования(
Назначения.ВыгрузитьЗначения(),
Источники,
ОтборРезервированияПоСкладуОтгрузки,
Неопределено,
ТоварыОтбор.Выгрузить(),
КорректировкаНазначения);
Таблица = Таблицы.ТаблицаТоваров;
Элементы.ДекорацияНетОстатков.Видимость = Таблица.Количество() = 0;
ТаблицаИтогов = Таблицы.ТаблицаИтогов;
ТаблицаИтоговСводно = Таблицы.ТаблицаИтоговСводно;
ТаблицаИтоговИсточниковОбеспечения = Таблицы.ТаблицаИтоговИсточниковОбеспечения;
ТаблицаПоМногимНазначениям = Документы.КорректировкаНазначенияТоваров.ТаблицаПоМногимНазначениям(
Назначения.ВыгрузитьЗначения(),
ОтборРезервированияПоСкладуОтгрузки,
ТоварыОтбор.Выгрузить(),
КорректировкаНазначения);
Таблица.Колонки.Добавить("ИндексСтраницы");
Таблица.Колонки.Добавить("Обеспечено");
Для Счетчик = 1 По ТаблицаПоМногимНазначениям.Количество() Цикл
НоваяСтрока = Таблица.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, ТаблицаПоМногимНазначениям[Счетчик - 1]);
НоваяСтрока.ИндексСтраницы = 1;
КонецЦикла;
ОбщегоНазначенияУТ.ДобавитьСтрокиВТаблицу(ТаблицаИтогов, ТаблицаПоМногимНазначениям);
ИначеЕсли НесколькоНазначений И ВидОперации = Перечисления.ВидыОперацийКорректировкиНазначения.РезервироватьИКорректировать Тогда
Источники = Новый Структура("ОстатокНаСкладе,РезервыПодНазначения", Не ТолькоЗаказыОрганизации, Истина);
Таблицы = Документы.КорректировкаНазначенияТоваров.ТаблицаРезервирования(
Назначения.ВыгрузитьЗначения(),
Источники,
ОтборРезервированияПоСкладуОтгрузки,
ОтборПоОрганизации,
ТоварыОтбор.Выгрузить(),
КорректировкаНазначения);
Таблица = Таблицы.ТаблицаТоваров;
Элементы.ДекорацияНетОстатков.Видимость = Таблица.Количество() = 0;
ТаблицаИтогов = Таблицы.ТаблицаИтогов;
ТаблицаИтоговСводно = Таблицы.ТаблицаИтоговСводно;
ТаблицаИтоговИсточниковОбеспечения = Таблицы.ТаблицаИтоговИсточниковОбеспечения;
ТаблицаПоМногимНазначениям = Документы.КорректировкаНазначенияТоваров.ТаблицаПоМногимНазначениям(
Назначения.ВыгрузитьЗначения(),
ОтборРезервированияПоСкладуОтгрузки,
ТоварыОтбор.Выгрузить(),
КорректировкаНазначения);
Таблица.Колонки.Добавить("ИндексСтраницы");
Таблица.Колонки.Добавить("Обеспечено");
Для Счетчик = 1 По ТаблицаПоМногимНазначениям.Количество() Цикл
НоваяСтрока = Таблица.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, ТаблицаПоМногимНазначениям[Счетчик - 1]);
НоваяСтрока.ИндексСтраницы = 1;
КонецЦикла;
ОбщегоНазначенияУТ.ДобавитьСтрокиВТаблицу(ТаблицаИтогов, ТаблицаПоМногимНазначениям);
ИначеЕсли ВидОперации = Перечисления.ВидыОперацийКорректировкиНазначения.СнятьРезерв Тогда
Таблицы = Документы.КорректировкаНазначенияТоваров.ТаблицаСнятияРезерва(
Назначение,
ТоварыОтбор.Выгрузить(),
КорректировкаНазначения);
Таблица = Таблицы.ТаблицаТоваров;
ТаблицаИтогов = Таблицы.ТаблицаИтогов;
ТаблицаИтоговСводно = Таблицы.ТаблицаИтоговСводно;
ИначеЕсли ВидОперации = Перечисления.ВидыОперацийКорректировкиНазначения.СнятьРезервПоМногимНазначениям Тогда
Таблицы = Документы.КорректировкаНазначенияТоваров.ТаблицаСнятияРезерваПоМногимНазначениям(
ОтборПоОрганизации,
ТоварыОтбор.Выгрузить(),
КорректировкаНазначения,
Назначения.ВыгрузитьЗначения());
Таблица = Таблицы.ТаблицаТоваров;
ТаблицаИтогов = Таблицы.ТаблицаИтогов;
ТаблицаИтоговСводно = Таблицы.ТаблицаИтоговСводно;
ИначеЕсли ВидОперации = Перечисления.ВидыОперацийКорректировкиНазначения.Резервировать Тогда
Источники = Новый Структура("ОстатокНаСкладе,РезервыПодНазначения", Истина, Ложь);
Таблицы = Документы.КорректировкаНазначенияТоваров.ТаблицаРезервирования(
Назначение,
Источники,
ОтборРезервированияПоСкладуОтгрузки,
Неопределено,
ТоварыОтбор.Выгрузить(),
КорректировкаНазначения);
Таблица = Таблицы.ТаблицаТоваров;
Элементы.ДекорацияНетОстатков.Видимость = Таблица.Количество() = 0;
ТаблицаИтогов = Таблицы.ТаблицаИтогов;
ТаблицаИтоговСводно = Таблицы.ТаблицаИтоговСводно;
ТаблицаИтоговИсточниковОбеспечения = Таблицы.ТаблицаИтоговИсточниковОбеспечения;
ИначеЕсли ВидОперации = Перечисления.ВидыОперацийКорректировкиНазначения.РезервироватьИКорректировать Тогда
Источники = Новый Структура("ОстатокНаСкладе,РезервыПодНазначения", Не ТолькоЗаказыОрганизации, Истина);
Таблицы = Документы.КорректировкаНазначенияТоваров.ТаблицаРезервирования(
Назначение,
Источники,
ОтборРезервированияПоСкладуОтгрузки,
ОтборПоОрганизации,
ТоварыОтбор.Выгрузить(),
КорректировкаНазначения);
Таблица = Таблицы.ТаблицаТоваров;
Элементы.ДекорацияНетОстатков.Видимость = Таблица.Количество() = 0;
ТаблицаИтогов = Таблицы.ТаблицаИтогов;
ТаблицаИтоговСводно = Таблицы.ТаблицаИтоговСводно;
ТаблицаИтоговИсточниковОбеспечения = Таблицы.ТаблицаИтоговИсточниковОбеспечения;
ИначеЕсли ВидОперации = Перечисления.ВидыОперацийКорректировкиНазначения.ВстречнаяКорректировка Тогда
Источники = Новый Структура("ОстатокНаСкладе,РезервыПодНазначения", Истина, Истина);
Таблицы = Документы.КорректировкаНазначенияТоваров.ТаблицаРезервирования(
Назначение,
Источники,
ОтборРезервированияПоСкладуОтгрузки,
ОтборПоОрганизации,
ТоварыОтбор.Выгрузить(Новый Структура("ПоНазначению", 2)),
КорректировкаНазначения);
Таблица = Таблицы.ТаблицаТоваров;
ТаблицаИтогов = Таблицы.ТаблицаИтогов;
ТаблицаИтоговСводно = Таблицы.ТаблицаИтоговСводно;
ТаблицаИтоговИсточниковОбеспечения = Таблицы.ТаблицаИтоговИсточниковОбеспечения;
Таблицы = Документы.КорректировкаНазначенияТоваров.ТаблицаСнятияРезерва(
Назначение,
ТоварыОтбор.Выгрузить(Новый Структура("ПоНазначению", 1)),
КорректировкаНазначения);
Таблица.Колонки.Добавить("ИндексСтраницы");
Для Счетчик = 1 По Таблицы.ТаблицаТоваров.Количество() Цикл
НоваяСтрока = Таблица.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Таблицы.ТаблицаТоваров[Счетчик - 1]);
НоваяСтрока.ИндексСтраницы = 1;
КонецЦикла;
ОбщегоНазначенияУТКлиентСервер.ДополнитьТаблицу(Таблицы.ТаблицаИтогов, ТаблицаИтогов);
ОбщегоНазначенияУТКлиентСервер.ДополнитьТаблицу(Таблицы.ТаблицаИтоговСводно, ТаблицаИтоговСводно);
КонецЕсли;
ИмяПоляДляСвязи = "ИдентификаторСтрокиИтоговИсточника";
ГруппировкаСтрок = "ИсходноеНазначение,Номенклатура,Характеристика";
ИтогиИсточниковОбеспечения.Загрузить(ТаблицаИтоговИсточниковОбеспечения);
Таблица.Колонки.Добавить(ИмяПоляДляСвязи);
Таблица.Индексы.Добавить(ГруппировкаСтрок);
ПривязатьСтрокиТаблицыКТаблицеИтогов(Таблица, ИтогиИсточниковОбеспечения, ГруппировкаСтрок, ИмяПоляДляСвязи);
ИмяПоляДляСвязи = "ИдентификаторСтрокиИтогов";
ГруппировкаСтрок = "НазначениеДляИтогов";
ТаблицаИтоговПоНазначениям = ТаблицаИтогов.Скопировать(, ГруппировкаСтрок);
ТаблицаИтоговПоНазначениям.Свернуть(ГруппировкаСтрок);
ИтогиПоНазначениям.Загрузить(ТаблицаИтоговПоНазначениям);
ТаблицаИтогов.Колонки.Добавить(ИмяПоляДляСвязи);
ТаблицаИтогов.Индексы.Добавить(ГруппировкаСтрок);
ПривязатьСтрокиТаблицыКТаблицеИтогов(ТаблицаИтогов, ИтогиПоНазначениям, ГруппировкаСтрок, ИмяПоляДляСвязи);
ТаблицаИтоговСводно.Колонки.Добавить(ИмяПоляДляСвязи);
ТаблицаИтоговСводно.Индексы.Добавить(ГруппировкаСтрок);
ПривязатьСтрокиТаблицыКТаблицеИтогов(ТаблицаИтоговСводно, ИтогиПоНазначениям, ГруппировкаСтрок, ИмяПоляДляСвязи);
ИмяПоляДляСвязи = "ИдентификаторСтрокиИтоговСводно";
ГруппировкаСтрок = "Номенклатура,Характеристика,НазначениеДляИтогов";
ИтогиПоТоварамСводно.Загрузить(ТаблицаИтоговСводно);
ТаблицаИтогов.Колонки.Добавить(ИмяПоляДляСвязи);
ТаблицаИтогов.Индексы.Добавить(ГруппировкаСтрок);
ПривязатьСтрокиТаблицыКТаблицеИтогов(ТаблицаИтогов, ИтогиПоТоварамСводно, ГруппировкаСтрок, ИмяПоляДляСвязи);
ИтогиПоТоварам.Загрузить(ТаблицаИтогов);
ИмяПоляДляСвязи = "ИдентификаторСтрокиИтогов";
ГруппировкаСтрок = "Номенклатура,Характеристика,Склад,НазначениеДляИтогов";
Таблица.Колонки.Добавить(ИмяПоляДляСвязи);
Таблица.Индексы.Добавить(ГруппировкаСтрок);
ПривязатьСтрокиТаблицыКТаблицеИтогов(Таблица, ИтогиПоТоварам, ГруппировкаСтрок, ИмяПоляДляСвязи);
ИмяПоляДляСвязи = "ИдентификаторСтрокиИтоговПоМногимНазначениям";
ГруппировкаСтрок = "Номенклатура,Характеристика,НазначениеДляИтогов";
Таблица.Колонки.Добавить(ИмяПоляДляСвязи);
Таблица.ЗаполнитьЗначения(-1, ИмяПоляДляСвязи);
Таблица.Индексы.Добавить(ГруппировкаСтрок);
ИтогиТоваровПоМногимНазначениям = ИтогиПоТоварам.НайтиСтроки(Новый Структура("Склад", Справочники.Склады.ПустаяСсылка()));
ПривязатьСтрокиТаблицыКТаблицеИтогов(Таблица, ИтогиТоваровПоМногимНазначениям, ГруппировкаСтрок, ИмяПоляДляСвязи);
Таблица.Колонки.Добавить("УдовлетворяетОтбору");
Таблица.ЗаполнитьЗначения(Истина, "УдовлетворяетОтбору");
ТаблицаТовары.Загрузить(Таблица);
Если ВидОперации = Перечисления.ВидыОперацийКорректировкиНазначения.СнятьРезерв
Или ВидОперации = Перечисления.ВидыОперацийКорректировкиНазначения.СнятьРезервПоМногимНазначениям Тогда
Документы.КорректировкаНазначенияТоваров.СнятьРезервы(ТаблицаТовары, Не ТумблерСнятьРезервы, ТаблицаИтогов);
ИначеЕсли ВидОперации = Перечисления.ВидыОперацийКорректировкиНазначения.Резервировать
Или ВидОперации = Перечисления.ВидыОперацийКорректировкиНазначения.РезервироватьиКорректировать Тогда
Документы.КорректировкаНазначенияТоваров.УстановитьРезервы(
ТаблицаТовары, ТаблицаИтогов, Не ОтборРезервированияПоСкладуОтгрузки);
КонецЕсли;
ПересчитатьКоличествоДляИндексСтраницы1 = Истина;
ЗаполнитьКартинкуИзлишекИсточника();
ПерезаполнитьКоличествоВТаблицеИтогов();
ЗаполнитьИспользованиеПомещенийЯчеекСерий();
ЗаполнитьТребуетсяШагПоПомещениямЯчейкам();
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьДерево()
ЭлементыДерева = ДеревоПомещенияЯчейки.ПолучитьЭлементы();
ЭлементыДерева.Очистить();
ОтмеченныеТовары = ТаблицаТовары.Выгрузить(Новый Структура("Отметка", Истина));
ТаблицаПомещенияЯчейки = Документы.КорректировкаНазначенияТоваров.ТаблицаПомещенияЯчейкиПоТоварам(ОтмеченныеТовары, КорректировкаНазначения);
ОтмеченныеТовары.Свернуть("Номенклатура");
ПереченьНоменклатуры = ОтмеченныеТовары.ВыгрузитьКолонку("Номенклатура");
ТоварныеМеста = Документы.КорректировкаНазначенияТоваров.ТоварныеМестаПоПеречнюНоменклатуры(ПереченьНоменклатуры);
СтруктураЗаполнения = Новый Структура("Назначение,Номенклатура,Характеристика,Склад");
ТекущаяСерия = Неопределено;
ВетвиСерийДляРасчетаОбеспечено = Новый Массив();
Для Каждого Строка Из ТаблицаПомещенияЯчейки Цикл
Если Не ЗначениеЗаполнено(Строка.Серия) И Не ЗначениеЗаполнено(Строка.Помещение) И Не ЗначениеЗаполнено(Строка.Ячейка) Тогда
Продолжить;
КонецЕсли;
Если СтруктураЗаполнения.Назначение <> Строка.Назначение
Или СтруктураЗаполнения.Номенклатура <> Строка.Номенклатура
Или СтруктураЗаполнения.Характеристика <> Строка.Характеристика
Или СтруктураЗаполнения.Склад <> Строка.Склад Тогда
ЗаполнитьЗначенияСвойств(СтруктураЗаполнения, Строка);
ТекущаяСерия = Неопределено;
НовыйКорень = ЭлементыДерева.Добавить();
ЗаполнитьЗначенияСвойств(НовыйКорень, Строка, , "Серия,Помещение,Ячейка");
НовыйКорень.Обеспечено = Строка.СвободныйОстаток;
НовыйКорень.КоличествоУпаковок = Строка.Количество;
НовыйКорень.Упаковка = Строка.НоменклатураЕдиницаИзмерения;
НовыйКорень.ЭтоКорень = Истина;
СтрокиКорня = НовыйКорень.ПолучитьЭлементы();
КонецЕсли;
Если Строка.ЕстьЯчейки Тогда
Если Строка.ЕстьСерии Тогда
Если ТекущаяСерия <> Строка.Серия Тогда
ТекущаяСерия = Строка.Серия;
НоваяВетвьСерии = СтрокиКорня.Добавить();
НоваяВетвьСерии.Серия = Строка.Серия;
НоваяВетвьСерии.Упаковка = Строка.НоменклатураЕдиницаИзмерения;
НоваяВетвьСерии.Обеспечено = - Строка.СерииКОтгрузке;
НоваяВетвьСерии.ЭтоСерии = Истина;
НоваяВетвьСерии.Номенклатура = Строка.Номенклатура;
ВетвиСерийДляРасчетаОбеспечено.Добавить(НоваяВетвьСерии);
КонецЕсли;
Иначе
НоваяВетвьСерии = НовыйКорень;
КонецЕсли;
НоваяВетвь = НоваяВетвьСерии.ПолучитьЭлементы().Добавить();
НоваяВетвь.ЭтоЯчейки = Истина;
ЗаполнитьЗначенияСвойств(НоваяВетвь, Строка, "Номенклатура,Помещение,Ячейка,Упаковка,Обеспечено,ОбеспеченоЕдиниц");
Иначе
НоваяВетвьСерии = СтрокиКорня.Добавить();
НоваяВетвьСерии.Серия = Строка.Серия;
НоваяВетвьСерии.Упаковка = Строка.НоменклатураЕдиницаИзмерения;
НоваяВетвьСерии.Обеспечено = Строка.ОбеспеченоЕдиниц - Строка.СерииКОтгрузке;
НоваяВетвьСерии.ОбеспеченоЕдиниц = НоваяВетвьСерии.Обеспечено;
НоваяВетвьСерии.ЭтоЯчейки = Истина;
КонецЕсли;
КонецЦикла;
Для Каждого НоваяВетвьСерии Из ВетвиСерийДляРасчетаОбеспечено Цикл
УпаковкиНоменклатуры = ТоварныеМеста.Получить(НоваяВетвьСерии.Номенклатура);
РассчитатьОбеспеченоПоЯчейкамСерии(НоваяВетвьСерии, УпаковкиНоменклатуры);
КонецЦикла;
КоличествоТоваров = ЭлементыДерева.Количество();
Для СчетчикТоваров = 1 По КоличествоТоваров Цикл
СтрокаТовара = ЭлементыДерева[КоличествоТоваров - СчетчикТоваров];
Серии = СтрокаТовара.ПолучитьЭлементы();
КоличествоСерий = Серии.Количество();
Для СчетчикСерий = 1 По КоличествоСерий Цикл
СтрокаСерии = Серии[КоличествоСерий - СчетчикСерий];
Ячейки = СтрокаСерии.ПолучитьЭлементы();
КоличествоЯчеек = Ячейки.Количество();
Для СчетчикЯчеек = 1 По КоличествоЯчеек Цикл
СтрокаЯчейки = Ячейки[КоличествоЯчеек - СчетчикЯчеек];
Если СтрокаЯчейки.ОбеспеченоЕдиниц = 0 Тогда
Ячейки.Удалить(СтрокаЯчейки);
КонецЕсли;
КонецЦикла;
Если СтрокаСерии.Обеспечено <= 0 Тогда
Серии.Удалить(СтрокаСерии);
КонецЕсли;
КонецЦикла;
Если Серии.Количество() = 0 Тогда
ЭлементыДерева.Удалить(СтрокаТовара);
КонецЕсли;
КонецЦикла;
ТаблицаДляРасчетаКоличестваУпаковок = Новый ТаблицаЗначений();
ТаблицаДляРасчетаКоличестваУпаковок.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
ТаблицаДляРасчетаКоличестваУпаковок.Колонки.Добавить("Упаковка", Новый ОписаниеТипов("СправочникСсылка.УпаковкиЕдиницыИзмерения"));
ТаблицаДляРасчетаКоличестваУпаковок.Колонки.Добавить("Количество", ОбщегоНазначения.ОписаниеТипаЧисло(15, 3));
ТаблицаДляРасчетаКоличестваУпаковок.Колонки.Добавить("КоличествоУпаковок", ОбщегоНазначения.ОписаниеТипаЧисло(15, 3));
ТаблицаДляРасчетаКоличестваУпаковок.Колонки.Добавить("НомерСтроки", ОбщегоНазначения.ОписаниеТипаЧисло(10, 0));
ТаблицаДляРасчетаКоличестваУпаковок.Колонки.Добавить("СтрокаДерева");
КоличествоТоваров = ЭлементыДерева.Количество();
Для СчетчикТоваров = 0 По КоличествоТоваров - 1 Цикл
СтрокаТовара = ЭлементыДерева[СчетчикТоваров];
УпаковкиНоменклатуры = ТоварныеМеста.Получить(СтрокаТовара.Номенклатура);
РаспределитьПоТовару = СтрокаТовара.Количество;
Серии = СтрокаТовара.ПолучитьЭлементы();
КоличествоСерий = Серии.Количество();
РаспределеноНаТоварныеМеста = РаспределитьНаТоварныеМеста(Макс(0, РаспределитьПоТовару), Серии, УпаковкиНоменклатуры);
РаспределитьПоТовару = РаспределитьПоТовару - РаспределеноНаТоварныеМеста;
Для СчетчикСерий = 0 По КоличествоСерий - 1 Цикл
СтрокаСерии = Серии[СчетчикСерий];
РаспределитьПоСерии = СтрокаСерии.ОбеспеченоЕдиниц;
Ячейки = СтрокаСерии.ПолучитьЭлементы();
КоличествоЯчеек = Ячейки.Количество();
РаспределеноНаТоварныеМеста = РаспределитьНаТоварныеМеста(
Макс(0, Мин(РаспределитьПоТовару, РаспределитьПоСерии)), Ячейки, УпаковкиНоменклатуры);
РаспределитьПоТовару = РаспределитьПоТовару - РаспределеноНаТоварныеМеста;
РаспределитьПоСерии = РаспределитьПоСерии - РаспределеноНаТоварныеМеста;
Для СчетчикЯчеек = 0 По КоличествоЯчеек - 1 Цикл
СтрокаЯчейки = Ячейки[СчетчикЯчеек];
Если РаспределитьПоСерии > 0
И (УпаковкиНоменклатуры = Неопределено Или УпаковкиНоменклатуры.Получить(СтрокаЯчейки.Упаковка) = Неопределено) Тогда
РаспределитьПоЯчейке = СтрокаЯчейки.ОбеспеченоЕдиниц;
Распределить = Мин(РаспределитьПоТовару, РаспределитьПоСерии, РаспределитьПоЯчейке);
СтрокаЯчейки.Количество = Распределить;
РаспределитьПоТовару = РаспределитьПоТовару - Распределить;
РаспределитьПоСерии = РаспределитьПоСерии - Распределить;
КонецЕсли;
Если СтрокаЯчейки.Количество > 0 Тогда
СтрокаЯчейки.Отметка = Истина;
СтрокаДляРасчета = ТаблицаДляРасчетаКоличестваУпаковок.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаДляРасчета, СтрокаЯчейки);
СтрокаДляРасчета.СтрокаДерева = СтрокаЯчейки;
СтрокаДляРасчета.НомерСтроки = ТаблицаДляРасчетаКоличестваУпаковок.Количество();
КонецЕсли;
КонецЦикла;
Если РаспределитьПоСерии > 0 И КоличествоЯчеек = 0 Тогда
Распределить = Мин(РаспределитьПоТовару, РаспределитьПоСерии);
СтрокаСерии.Количество = Распределить;
РаспределитьПоТовару = РаспределитьПоТовару - Распределить;
Если Распределить > 0 Тогда
СтрокаСерии.Отметка = Истина;
СтрокаДляРасчета = ТаблицаДляРасчетаКоличестваУпаковок.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаДляРасчета, СтрокаСерии);
СтрокаДляРасчета.СтрокаДерева = СтрокаСерии;
СтрокаДляРасчета.НомерСтроки = ТаблицаДляРасчетаКоличестваУпаковок.Количество();
КонецЕсли;
КонецЕсли;
Если РаспределитьПоТовару = 0 Тогда
Прервать;
КонецЕсли;
КонецЦикла;
КонецЦикла;
СтруктураДействий = Новый Структура();
СтруктураДействий.Вставить("ПересчитатьКоличествоУпаковок");
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьТЧ(ТаблицаДляРасчетаКоличестваУпаковок, СтруктураДействий);
Для Каждого Строка Из ТаблицаДляРасчетаКоличестваУпаковок Цикл
Строка.СтрокаДерева.КоличествоУпаковок = Строка.КоличествоУпаковок;
КонецЦикла;
КонецПроцедуры
Функция Комплекты(Ячейки, УпаковкиНоменклатуры)
ТаблицаУпаковок = Новый ТаблицаЗначений();
ТаблицаУпаковок.Колонки.Добавить("Упаковка");
ТаблицаУпаковок.Колонки.Добавить("ОбеспеченоЕдиниц");
КоличествоЯчеек = Ячейки.Количество();
Для СчетчикЯчеек = 0 По КоличествоЯчеек - 1 Цикл
СтрокаЯчейки = Ячейки[СчетчикЯчеек];
Если УпаковкиНоменклатуры.Получить(СтрокаЯчейки.Упаковка) <> Неопределено Тогда
ЗаполнитьЗначенияСвойств(ТаблицаУпаковок.Добавить(), СтрокаЯчейки);
КонецЕсли;
КонецЦикла;
ТаблицаУпаковок.Свернуть("Упаковка", "ОбеспеченоЕдиниц");
ТаблицаУпаковок.Индексы.Добавить("Упаковка");
КоличествоЦелыхКомплектов = 0;
Если ТаблицаУпаковок.Количество() > 0 Тогда
КоличествоЦелыхКомплектов = ТаблицаУпаковок[0].ОбеспеченоЕдиниц;
Для Каждого Строка Из ТаблицаУпаковок Цикл
КоличествоЦелыхКомплектов = Мин(КоличествоЦелыхКомплектов, Строка.ОбеспеченоЕдиниц);
КонецЦикла;
КонецЕсли;
Возврат Новый Структура("ТаблицаУпаковок,КоличествоЦелыхКомплектов", ТаблицаУпаковок, КоличествоЦелыхКомплектов);
КонецФункции
&НаСервере
Функция РаспределитьНаТоварныеМеста(РаспределитьВсего, Ячейки, УпаковкиНоменклатуры)
Если РаспределитьВсего = 0 Или УпаковкиНоменклатуры = Неопределено Тогда
Возврат 0;
КонецЕсли;
Комплекты = Комплекты(Ячейки, УпаковкиНоменклатуры);
ТаблицаУпаковок = Комплекты.ТаблицаУпаковок;
КоличествоЦелыхКомплектов = Комплекты.КоличествоЦелыхКомплектов;
КоличествоЦелыхКомплектов = Мин(КоличествоЦелыхКомплектов, РаспределитьВсего);
Для Каждого Строка Из ТаблицаУпаковок Цикл
Строка.ОбеспеченоЕдиниц = КоличествоЦелыхКомплектов;
КонецЦикла;
КоличествоЯчеек = Ячейки.Количество();
Для СчетчикЯчеек = 0 По КоличествоЯчеек - 1 Цикл
СтрокаЯчейки = Ячейки[СчетчикЯчеек];
СтрокаУпаковки = ТаблицаУпаковок.Найти(СтрокаЯчейки.Упаковка, "Упаковка");
Если СтрокаУпаковки <> Неопределено Тогда
Распределить = Макс(0, Мин(СтрокаУпаковки.ОбеспеченоЕдиниц, СтрокаЯчейки.ОбеспеченоЕдиниц));
СтрокаУпаковки.ОбеспеченоЕдиниц = СтрокаУпаковки.ОбеспеченоЕдиниц - Распределить;
СтрокаЯчейки.Количество = Распределить;
КонецЕсли;
КонецЦикла;
Возврат КоличествоЦелыхКомплектов;
КонецФункции
&НаСервере
Процедура РассчитатьОбеспеченоПоЯчейкамСерии(НоваяВетвьСерии, УпаковкиНоменклатуры)
Если НоваяВетвьСерии = Неопределено Тогда
Возврат;
КонецЕсли;
Ячейки = НоваяВетвьСерии.ПолучитьЭлементы();
ОбеспеченоЕдиниц = 0;
Если УпаковкиНоменклатуры <> Неопределено Тогда
Комплекты = Комплекты(Ячейки, УпаковкиНоменклатуры);
ТаблицаУпаковок = Комплекты.ТаблицаУпаковок;
ОбеспеченоЕдиниц = Комплекты.КоличествоЦелыхКомплектов;
КонецЕсли;
КоличествоЯчеек = Ячейки.Количество();
Для СчетчикЯчеек = 0 По КоличествоЯчеек - 1 Цикл
СтрокаЯчейки = Ячейки[СчетчикЯчеек];
Если УпаковкиНоменклатуры = Неопределено Или ТаблицаУпаковок.Найти(СтрокаЯчейки.Упаковка, "Упаковка") = Неопределено Тогда
ОбеспеченоЕдиниц = ОбеспеченоЕдиниц + СтрокаЯчейки.ОбеспеченоЕдиниц;
КонецЕсли;
КонецЦикла;
НоваяВетвьСерии.ОбеспеченоЕдиниц = ОбеспеченоЕдиниц;
НоваяВетвьСерии.Обеспечено = ОбеспеченоЕдиниц;
КонецПроцедуры
Функция МожноПеренестиДанныеДереваВТаблицу(Ошибка)
Для Каждого Корень Из ДеревоПомещенияЯчейки.ПолучитьЭлементы() Цикл
Ветви = Корень.ПолучитьЭлементы();
Для Каждого Ветвь Из Ветви Цикл
Если Ветвь.Отметка Тогда
НоваяСтрока = ТоварыДляПроверкиКомплектностиТоварныхМест.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Корень, "Номенклатура,Характеристика,Назначение,Склад");
ЗаполнитьЗначенияСвойств(НоваяСтрока, Ветвь, "Упаковка,Помещение,Количество,КоличествоУпаковок");
НоваяСтрока.Серия = Ветвь.Серия;
КонецЕсли;
Для Каждого ВетвьЯчейки Из Ветвь.ПолучитьЭлементы() Цикл
Если ВетвьЯчейки.Отметка Тогда
НоваяСтрока = ТоварыДляПроверкиКомплектностиТоварныхМест.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Корень, "Номенклатура,Характеристика,Назначение,Склад");
ЗаполнитьЗначенияСвойств(НоваяСтрока, ВетвьЯчейки, "Упаковка,Помещение,Количество,КоличествоУпаковок");
НоваяСтрока.Серия = Ветвь.Серия;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЦикла;
ПараметрыПроверки = НоменклатураСервер.ПараметрыПроверкиЗаполненияКоличества();
ПараметрыПроверки.ПроверитьКомплектностьТоварныхМест = Истина;
ПараметрыПроверки.ПоляГруппировкиПроверкиКомплектности = "Склад,Помещение";
Отказ = Ложь;
НоменклатураСервер.ПроверитьКомплектностьТоварныхМест(ТоварыДляПроверкиКомплектностиТоварныхМест, Отказ, ПараметрыПроверки);
ТоварыДляПроверкиКомплектностиТоварныхМест.Очистить();
Если Отказ Тогда
Ошибка = Новый Массив();
Возврат Ложь;
КонецЕсли;
ОтмеченныеТовары = ТаблицаТовары.Выгрузить(Новый Структура("Отметка", Истина));
ОтмеченныеТовары.Свернуть("Номенклатура");
ПереченьНоменклатуры = ОтмеченныеТовары.ВыгрузитьКолонку("Номенклатура");
ТоварныеМеста = Документы.КорректировкаНазначенияТоваров.ТоварныеМестаПоПеречнюНоменклатуры(ПереченьНоменклатуры);
Ошибки = Новый Массив();
Для Каждого Корень Из ДеревоПомещенияЯчейки.ПолучитьЭлементы() Цикл
Упаковки = ТоварныеМеста.Получить(Корень.Номенклатура);
ПерваяУпаковкаТоварногоМеста = Неопределено;
Если Упаковки <> Неопределено Тогда
Для Каждого Элемент Из Упаковки Цикл
ПерваяУпаковкаТоварногоМеста = Элемент.Ключ;
Прервать;
КонецЦикла;
КонецЕсли;
Количество = 0;
Ветви = Корень.ПолучитьЭлементы();
Для Каждого Ветвь Из Ветви Цикл
Если Ветвь.Отметка Тогда
ЭтоТоварноеМесто = Упаковки <> Неопределено И Упаковки.Получить(Ветвь.Упаковка) <> Неопределено;
Если Не ЭтоТоварноеМесто Или Ветвь.Упаковка = ПерваяУпаковкаТоварногоМеста Тогда
Количество = Количество + Ветвь.Количество;
КонецЕсли;
КонецЕсли;
Для Каждого ВетвьЯчейки Из Ветвь.ПолучитьЭлементы() Цикл
Если ВетвьЯчейки.Отметка Тогда
ЭтоТоварноеМесто = Упаковки <> Неопределено И Упаковки.Получить(ВетвьЯчейки.Упаковка) <> Неопределено;
Если Не ЭтоТоварноеМесто Или ВетвьЯчейки.Упаковка = ПерваяУпаковкаТоварногоМеста Тогда
Количество = Количество + ВетвьЯчейки.Количество;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Если Количество <> Корень.Количество Тогда
НоваяОшибка = НСтр("ru = 'По товару %1 на складе %2 требуется указать %3 %4 а указано %5 %4'");
Если ЗначениеЗаполнено(Корень.Характеристика) Тогда
СтрокаТовар = СтрШаблон(НСтр("ru = '%1, %2'"), Корень.Номенклатура, Корень.Характеристика);
Иначе
СтрокаТовар = Строка(Корень.Номенклатура);
КонецЕсли;
НоваяОшибка = СтрШаблон(НоваяОшибка, СтрокаТовар, Корень.Склад, Корень.Количество, Корень.Упаковка, Количество);
Ошибки.Добавить(НоваяОшибка);
КонецЕсли;
КонецЦикла;
Если Ошибки.Количество() > 0 Тогда
Ошибка = Ошибки;
Возврат Ложь;
КонецЕсли;
Возврат Истина;
КонецФункции
&НаСервере
Функция ПоместитьТоварыВХранилище(Ошибка, ТаблицаКПереносу)
МассивСтрок = Новый Массив();
Для Каждого Строка Из ТаблицаКПереносу Цикл
Если Строка.Количество > 0 И Строка.Отметка Тогда
МассивСтрок.Добавить(Строка);
КонецЕсли;
КонецЦикла;
Если ТипЗнч(ТаблицаКПереносу) = Тип("ДанныеФормыКоллекция") Тогда
ТоварыКПереносу = ТаблицаКПереносу.Выгрузить(МассивСтрок);
Иначе
ТоварыКПереносу = ТаблицаКПереносу.Скопировать(МассивСтрок);
КонецЕсли;
Результат = Новый Структура("Товары", ТоварыКПереносу);
АдресВХранилище = ПоместитьВоВременноеХранилище(
Результат,
УникальныйИдентификаторДляВременногоХранилища);
Возврат АдресВХранилище;
КонецФункции
#КонецОбласти
#Область ИтогиПоТаблицеТовары
&НаКлиенте
Процедура Подключаемый_ПриАктивизацииСтроки()
РассчитатьИтогиПоЗаказу();
КонецПроцедуры
&НаКлиенте
Процедура РассчитатьИтогиПоЗаказу()
ТекущаяСтрока = Элементы.ТаблицаТовары.ТекущаяСтрока;
Элементы.СтраницыИтогиВПодвалеШагаПоСкладам.ТекущаяСтраница = Элементы.СтраницаОтображатьИтогиВПодвалеПоСкладам;
Если ТекущаяСтрока = Неопределено Тогда
Элементы.СтраницыИтогиВПодвалеШагаПоСкладам.ТекущаяСтраница = Элементы.СтраницаНеОтображатьИтогиВПодвалеПоСкладам;
Элементы.ИтогиНазначениеИсточник.Заголовок = "";
Элементы.СтраницыОтображениеКартинкиИзлишка.ТекущаяСтраница = Элементы.СтраницаНеОтображатьКартинкуИзлишек;
Возврат;
КонецЕсли;
Строка = ТаблицаТовары.НайтиПоИдентификатору(ТекущаяСтрока);
ИтогиУпаковка = Строка.ЕдиницаИзмерения;
СтрокаИтогов = ИтогиПоТоварам.НайтиПоИдентификатору(Строка.ИдентификаторСтрокиИтогов);
ИтогиПоЗаказу = СтрокаИтогов.Количество;
ИтогиПоНазначениямЗаказа = СтрокаИтогов.КоличествоПоНазначениямЗаказа;
ИтогиПотребность = СтрокаИтогов.Потребность;
ИтогиОбеспечено = СтрокаИтогов.Обеспечено + СтрокаИтогов.Количество;
ИтогиНаСкладе = СтрокаИтогов.ВНаличии + СтрокаИтогов.Количество;
СтрокаИтоговСводно = ИтогиПоТоварамСводно.НайтиПоИдентификатору(СтрокаИтогов.ИдентификаторСтрокиИтоговСводно);
Если СтрокаИтоговСводно <> Неопределено Тогда
ИтогиПотребностьСводно = СтрокаИтоговСводно.Потребность;
ИтогиОбеспеченоСводно = СтрокаИтоговСводно.Обеспечено + СтрокаИтоговСводно.Количество;
ИтогиНаСкладеСводно = СтрокаИтоговСводно.ВНаличии + СтрокаИтоговСводно.Количество;
КонецЕсли;
Если ИтогиОбеспечено < 0 Или ИтогиОбеспечено > ИтогиПотребность Тогда
Элементы.ИтогиОбеспечено.ЦветТекста = ЦветОтрицательногоЧисла;
Иначе
Элементы.ИтогиОбеспечено.ЦветТекста = ЦветТекстаПоля;
КонецЕсли;
Если ИтогиНаСкладе < 0 Или ИтогиНаСкладе > ИтогиПотребность Тогда
Элементы.ИтогиНаСкладе.ЦветТекста = ЦветОтрицательногоЧисла;
Иначе
Элементы.ИтогиНаСкладе.ЦветТекста = ЦветТекстаПоля;
КонецЕсли;
Если ИтогиОбеспеченоСводно < 0 Или ИтогиОбеспеченоСводно > ИтогиПотребностьСводно Тогда
Элементы.ИтогиОбеспеченоСводно.ЦветТекста = ЦветОтрицательногоЧисла;
Иначе
Элементы.ИтогиОбеспеченоСводно.ЦветТекста = ЦветТекстаПоля;
КонецЕсли;
Если ИтогиНаСкладеСводно < 0 Или ИтогиНаСкладеСводно > ИтогиПотребностьСводно Тогда
Элементы.ИтогиНаСкладеСводно.ЦветТекста = ЦветОтрицательногоЧисла;
Иначе
Элементы.ИтогиНаСкладеСводно.ЦветТекста = ЦветТекстаПоля;
КонецЕсли;
СтрокаИтогов = ИтогиПоНазначениям.НайтиПоИдентификатору(СтрокаИтогов.ИдентификаторСтрокиИтогов);
Если СтрокаИтогов.НеОбеспечен Тогда
Элементы.ГруппаСостояние.ТекущаяСтраница = Элементы.ГруппаНеОбеспечено;
ИначеЕсли СтрокаИтогов.ОбеспеченСверхПотребности Тогда
Элементы.ГруппаСостояние.ТекущаяСтраница = Элементы.ГруппаОбеспеченСверхПотребности;
ИначеЕсли СтрокаИтогов.ПолностьюОбеспечен Тогда
Элементы.ГруппаСостояние.ТекущаяСтраница = Элементы.ГруппаПолностьюОбеспечен;
Иначе
Элементы.ГруппаСостояние.ТекущаяСтраница = Элементы.ГруппаОбеспеченЧастично;
КонецЕсли;
Если СтрокаИтогов.НетВНаличииНаСкладеОтгрузки Тогда
Элементы.ГруппаВНаличииНаСкладеОтгрузки.ТекущаяСтраница = Элементы.ГруппаНетПозицийНаСкладеОтгрузки;
ИначеЕсли СтрокаИтогов.СверхПотребностиВНаличииНаСкладеОтгрузки Тогда
Элементы.ГруппаВНаличииНаСкладеОтгрузки.ТекущаяСтраница = Элементы.ГруппаСверхПотребностиНаСкладеОтгрузки;
ИначеЕсли СтрокаИтогов.ПолностьюВНаличииНаСкладеОтгрузки Тогда
Элементы.ГруппаВНаличииНаСкладеОтгрузки.ТекущаяСтраница = Элементы.ГруппаПолностьюНаСкладеОтгрузки;
Иначе
Элементы.ГруппаВНаличииНаСкладеОтгрузки.ТекущаяСтраница = Элементы.ГруппаЧастичноНаСкладеОтгрузки;
КонецЕсли;
Если Строка.ВидОперации = ПредопределенноеЗначение("Перечисление.ВидыОперацийКорректировкиНазначения.Резервировать") Тогда
СтрокаИтоговИсточника = ИтогиИсточниковОбеспечения.НайтиПоИдентификатору(Строка.ИдентификаторСтрокиИтоговИсточника);
Если ЗначениеЗаполнено(СтрокаИтоговИсточника.ИсходноеНазначение) Тогда
Текст = НСтр("ru = 'По назначению-источнику %1 на всех складах потребность: %2 %4, в наличии: %3 %4'");
Элементы.ИтогиНазначениеИсточник.Заголовок = СтрШаблон(Текст,
СтрокаИтоговИсточника.ИсходноеНазначение, СтрокаИтоговИсточника.Потребность, СтрокаИтоговИсточника.Запас, ИтогиУпаковка)
Иначе
Текст = НСтр("ru = 'На всех складах необособленная потребность: %2 %4, в наличии: %3 %4'");
Элементы.ИтогиНазначениеИсточник.Заголовок = СтрШаблон(Текст,
СтрокаИтоговИсточника.ИсходноеНазначение, СтрокаИтоговИсточника.Потребность, СтрокаИтоговИсточника.Запас, ИтогиУпаковка)
КонецЕсли;
Элементы.ИтогиНазначениеИсточникСКартинкой.Заголовок = Элементы.ИтогиНазначениеИсточник.Заголовок;
Если Строка.КартинкаИзлишекИсточника = 0 Тогда
Элементы.СтраницыОтображениеКартинкиИзлишка.ТекущаяСтраница = Элементы.СтраницаОтображатьКартинкуИзлишек;
Иначе
Элементы.СтраницыОтображениеКартинкиИзлишка.ТекущаяСтраница = Элементы.СтраницаНеОтображатьКартинкуИзлишек;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПривязатьСтрокиТаблицыКТаблицеИтогов(Таблица, Итоги, ГруппировкаСтрок, ИмяКолонки)
ПараметрыОтбораТоваров = Новый Структура(ГруппировкаСтрок);
Для Каждого Строка Из Итоги Цикл
ЗаполнитьЗначенияСвойств(ПараметрыОтбораТоваров, Строка);
НайденныеСтрокиТоваров = Таблица.НайтиСтроки(ПараметрыОтбораТоваров);
ИдентификаторСтрокиИтогов = Строка.ПолучитьИдентификатор();
Для Каждого СтрокаТоваров Из НайденныеСтрокиТоваров Цикл
СтрокаТоваров[ИмяКолонки] = ИдентификаторСтрокиИтогов;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ПерезаполнитьКоличествоВТаблицеИтогов()
Для Каждого СтрокаИтогов Из ИтогиПоТоварам Цикл
СтрокаИтогов.Количество = 0;
СтрокаИтогов.КоличествоПоНазначениямЗаказа = 0;
КонецЦикла;
Для Каждого СтрокаИтоговСводно Из ИтогиПоТоварамСводно Цикл
СтрокаИтоговСводно.Количество = 0;
КонецЦикла;
Для Каждого Строка Из ТаблицаТовары Цикл
СтрокаИтогов = ИтогиПоТоварам.НайтиПоИдентификатору(Строка.ИдентификаторСтрокиИтогов);
ДобавитьВычестьКоличество = 0;
Если Строка.Отметка Тогда
Если Строка.ВидОперации = Перечисления.ВидыОперацийКорректировкиНазначения.Резервировать Тогда
ДобавитьВычестьКоличество = Строка.Количество;
ИначеЕсли Строка.ВидОперации = Перечисления.ВидыОперацийКорректировкиНазначения.СнятьРезерв Тогда
ДобавитьВычестьКоличество = - Строка.Количество;
КонецЕсли;
СтрокаИтогов.Количество = СтрокаИтогов.Количество + ДобавитьВычестьКоличество;
СтрокаСводно = ИтогиПоТоварамСводно.НайтиПоИдентификатору(СтрокаИтогов.ИдентификаторСтрокиИтоговСводно);
Если СтрокаСводно <> Неопределено Тогда
СтрокаСводно.Количество = СтрокаСводно.Количество + ДобавитьВычестьКоличество;
КонецЕсли;
Если Строка.ВидОперации = Перечисления.ВидыОперацийКорректировкиНазначения.ПустаяСсылка() Тогда
СтрокаИтогов.КоличествоПоНазначениямЗаказа = СтрокаИтогов.КоличествоПоНазначениямЗаказа + Строка.Количество;
КонецЕсли;
КонецЕсли;
СтрокаИтогов = ИтогиПоТоварам.НайтиПоИдентификатору(Строка.ИдентификаторСтрокиИтоговПоМногимНазначениям);
Если СтрокаИтогов <> Неопределено Тогда
Если Строка.Отметка И Строка.ВидОперации = Перечисления.ВидыОперацийКорректировкиНазначения.Резервировать Тогда
СтрокаИтогов.Количество = СтрокаИтогов.Количество + Строка.Количество;
КонецЕсли;
КонецЕсли;
КонецЦикла;
ТаблицаПоТоварамСводно = ИтогиПоТоварамСводно.Выгрузить();
ТаблицаПоТоварамСводно.Свернуть("ИдентификаторСтрокиИтогов,Номенклатура,Характеристика",
"Обеспечено,Потребность,ВНаличии,Количество");
ТаблицаПоТоварамСводно.Колонки.Добавить("НеОбеспечен");
ТаблицаПоТоварамСводно.Колонки.Добавить("ЧастичноОбеспечен");
ТаблицаПоТоварамСводно.Колонки.Добавить("ПолностьюОбеспечен");
ТаблицаПоТоварамСводно.Колонки.Добавить("ОбеспеченСверхПотребности");
Для Каждого Строка Из ТаблицаПоТоварамСводно Цикл
Количество = Строка.Обеспечено + Строка.Количество;
Строка.НеОбеспечен = ?(Количество = 0 И Строка.Потребность > 0, 1, 0);
Строка.ЧастичноОбеспечен = ?(Количество > 0 И Количество < Строка.Потребность, 1, 0);
Строка.ПолностьюОбеспечен = ?(Количество > 0 И Количество >= Строка.Потребность, 1, 0);
Строка.ОбеспеченСверхПотребности = ?(Количество > Строка.Потребность, 1, 0);;
КонецЦикла;
ТаблицаПоТоварамСводно.Свернуть("ИдентификаторСтрокиИтогов",
"НеОбеспечен,ЧастичноОбеспечен,ПолностьюОбеспечен,ОбеспеченСверхПотребности");
Для Каждого Строка Из ТаблицаПоТоварамСводно Цикл
СтрокаИтогов = ИтогиПоНазначениям.НайтиПоИдентификатору(Строка.ИдентификаторСтрокиИтогов);
СтрокаИтогов.НеОбеспечен = Строка.НеОбеспечен > 0 И Строка.ЧастичноОбеспечен = 0 И Строка.ПолностьюОбеспечен = 0;
СтрокаИтогов.ПолностьюОбеспечен = Строка.НеОбеспечен = 0 И Строка.ЧастичноОбеспечен = 0;
СтрокаИтогов.ЧастичноОбеспечен = Не СтрокаИтогов.НеОбеспечен И Не СтрокаИтогов.ПолностьюОбеспечен;
СтрокаИтогов.ОбеспеченСверхПотребности = СтрокаИтогов.ПолностьюОбеспечен И Строка.ОбеспеченСверхПотребности > 0;
КонецЦикла;
ТаблицаПоТоварам = ИтогиПоТоварам.Выгрузить(Новый Структура("ЭтоСкладОтгрузки", Истина));
ТаблицаПоТоварам.Свернуть("ИдентификаторСтрокиИтогов,Номенклатура,Характеристика",
"ВНаличии,Потребность,Количество");
ТаблицаПоТоварам.Колонки.Добавить("НеОбеспечен");
ТаблицаПоТоварам.Колонки.Добавить("ЧастичноОбеспечен");
ТаблицаПоТоварам.Колонки.Добавить("ПолностьюОбеспечен");
ТаблицаПоТоварам.Колонки.Добавить("ОбеспеченСверхПотребности");
Для Каждого Строка Из ТаблицаПоТоварам Цикл
Количество = Строка.ВНаличии + Строка.Количество;
Строка.НеОбеспечен = ?(Количество = 0 И Строка.Потребность > 0, 1, 0);
Строка.ЧастичноОбеспечен = ?(Количество > 0 И Количество < Строка.Потребность, 1, 0);
Строка.ПолностьюОбеспечен = ?(Количество > 0 И Количество >= Строка.Потребность, 1, 0);
Строка.ОбеспеченСверхПотребности = ?(Количество > Строка.Потребность, 1, 0);;
КонецЦикла;
ТаблицаПоТоварам.Свернуть("ИдентификаторСтрокиИтогов",
"НеОбеспечен,ЧастичноОбеспечен,ПолностьюОбеспечен,ОбеспеченСверхПотребности");
Для Каждого СтрокаИтогов Из ИтогиПоНазначениям Цикл
СтрокаИтогов.НетВНаличииНаСкладеОтгрузки = Истина;
СтрокаИтогов.ПолностьюВНаличииНаСкладеОтгрузки = Ложь;
СтрокаИтогов.ЧастичноВНаличииНаСкладеОтгрузки = Ложь;
СтрокаИтогов.СверхПотребностиВНаличииНаСкладеОтгрузки = Ложь;
КонецЦикла;
Для Каждого Строка Из ТаблицаПоТоварам Цикл
СтрокаИтогов = ИтогиПоНазначениям.НайтиПоИдентификатору(Строка.ИдентификаторСтрокиИтогов);
СтрокаИтогов.НетВНаличииНаСкладеОтгрузки = Строка.НеОбеспечен > 0 И Строка.ЧастичноОбеспечен = 0 И Строка.ПолностьюОбеспечен = 0;
СтрокаИтогов.ПолностьюВНаличииНаСкладеОтгрузки = Строка.НеОбеспечен = 0 И Строка.ЧастичноОбеспечен = 0;
СтрокаИтогов.ЧастичноВНаличииНаСкладеОтгрузки = Не СтрокаИтогов.НетВНаличииНаСкладеОтгрузки И Не СтрокаИтогов.ПолностьюВНаличииНаСкладеОтгрузки;
СтрокаИтогов.СверхПотребностиВНаличииНаСкладеОтгрузки = СтрокаИтогов.ПолностьюВНаличииНаСкладеОтгрузки И Строка.ОбеспеченСверхПотребности > 0;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьКартинкуИзлишекИсточника()
Для Каждого Строка Из ТаблицаТовары Цикл
Если Строка.ВидОперации = Перечисления.ВидыОперацийКорректировкиНазначения.Резервировать Тогда
СтрокаИтоговИсточника = ИтогиИсточниковОбеспечения.НайтиПоИдентификатору(Строка.ИдентификаторСтрокиИтоговИсточника);
Строка.КартинкаИзлишекИсточника = ?(СтрокаИтоговИсточника.Запас > СтрокаИтоговИсточника.Потребность, 0, 1);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьКоличествоВстречнойКорректировки()
МассивСтрок = ТаблицаТовары.НайтиСтроки(Новый Структура("ИндексСтраницы", 1));
Для каждого СтрокаТаблицы Из МассивСтрок Цикл
СтрокаТаблицы.Отметка = Ложь;
СтрокаТаблицы.Количество = 0;
КонецЦикла;
КоличествоБаза = 0;
ОтборПоСтрокам = Новый Структура();
ОтборПоСтрокам.Вставить("Отметка", Истина);
ОтборПоСтрокам.Вставить("ИндексСтраницы", 0);
МассивСтрок = ТаблицаТовары.НайтиСтроки(ОтборПоСтрокам);
Для Каждого СтрокаТаблицы Из МассивСтрок Цикл
Если СтрокаТаблицы.Количество > 0 Тогда
КоличествоБаза = КоличествоБаза + СтрокаТаблицы.Количество;
КонецЕсли;
КонецЦикла;
Если КоличествоБаза > 0 Тогда
РаспределитьКоличество(КоличествоБаза, КоличествоПередатьПодНазначение);
ОтборПоСтрокам.ИндексСтраницы = 1;
МассивСтрок = ТаблицаТовары.НайтиСтроки(ОтборПоСтрокам);
Для Каждого СтрокаТаблицы Из МассивСтрок Цикл
ТипИзмеряемойВеличины = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(
СтрокаТаблицы.Номенклатура, "ЕдиницаИзмерения.ТипИзмеряемойВеличины");
Если ТипИзмеряемойВеличины = Перечисления.ТипыИзмеряемыхВеличин.КоличествоШтук
И СтрокаТаблицы.Количество <> Цел(СтрокаТаблицы.Количество) Тогда
КоличествоКорректировки = Окр(СтрокаТаблицы.Количество);
КоличествоКорректировки = ?(КоличествоКорректировки = 0, 1, КоличествоКорректировки);
СтрокаТаблицы.Количество = Мин(КоличествоКорректировки, СтрокаТаблицы.ВНаличии);
СтрокаТаблицы.Отметка = СтрокаТаблицы.Количество > 0;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура РаспределитьКоличество(ТребуемоеКоличество, Расход, Распределено = 0, КлючСтрокиРодитель = Неопределено)
ОтборПоРодителю = Новый Структура;
ОтборПоРодителю.Вставить("ПоНазначению", 1);
Если КлючСтрокиРодитель = Неопределено Тогда
ОтборПоРодителю.Вставить(
"КлючСтрокиРодитель", Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"));
Иначе
ОтборПоРодителю.Вставить("КлючСтрокиРодитель", КлючСтрокиРодитель);
КонецЕсли;
МассивСтрок = ТоварыОтбор.НайтиСтроки(ОтборПоРодителю);
Для Каждого СтрокаТовары Из МассивСтрок Цикл
КоэффициентРаспределенияНаЕдиницу = СтрокаТовары.Расход / (Расход - Распределено);
КоличествоКРаспределению = ТребуемоеКоличество * КоэффициентРаспределенияНаЕдиницу;
КоличествоРаспределено = Мин(КоличествоКРаспределению, СтрокаТовары.Распределено);
КоличествоКРаспределению = КоличествоКРаспределению - КоличествоРаспределено;
Если КоличествоРаспределено > 0 Тогда
ОтборПоНоменклатуре = Новый Структура;
ОтборПоНоменклатуре.Вставить("Номенклатура" , СтрокаТовары.Номенклатура);
ОтборПоНоменклатуре.Вставить("Характеристика", СтрокаТовары.Характеристика);
ОтборПоНоменклатуре.Вставить("Склад", СтрокаТовары.Склад);
ОтборПоНоменклатуре.Вставить("ИндексСтраницы", 1);
МассивСтрокТаблицыТоваров = ТаблицаТовары.НайтиСтроки(ОтборПоНоменклатуре);
Если МассивСтрокТаблицыТоваров.Количество() > 0 Тогда
СтрокаТаблицыТоваров = МассивСтрокТаблицыТоваров[0];
СтрокаТаблицыТоваров.Количество =
Мин(КоличествоРаспределено + СтрокаТаблицыТоваров.Количество, СтрокаТаблицыТоваров.Запас - СтрокаТаблицыТоваров.Резерв);
СтрокаТаблицыТоваров.Отметка = СтрокаТаблицыТоваров.Количество > 0;
КонецЕсли;
Если КоличествоКРаспределению > 0 Тогда
РаспределитьКоличество(
КоличествоКРаспределению, СтрокаТовары.Расход, СтрокаТовары.Распределено, СтрокаТовары.КлючСтроки);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьКоличествоДляМногихНазначений()
ТаблицаМногихНазначений = ТаблицаТовары.Выгрузить(Новый Структура("ИндексСтраницы", 1));
ТаблицаМногихНазначений.ЗаполнитьЗначения(0, "Количество");
ТаблицаМногихНазначений.ЗаполнитьЗначения(Ложь, "Отметка");
МассивСтрок = ТаблицаТовары.НайтиСтроки(Новый Структура("ИндексСтраницы", 1));
Для Каждого СтрокаТаблицы Из МассивСтрок Цикл
ТаблицаТовары.Удалить(СтрокаТаблицы);
КонецЦикла;
ПоляКлюча = "Номенклатура,Характеристика";
ТаблицаИсточников = ТаблицаТовары.Выгрузить(Новый Структура("Отметка", Истина));
ТаблицаИсточников.Свернуть(ПоляКлюча, "Количество");
ТаблицаМногихНазначений.ЗаполнитьЗначения(Ложь, "УдовлетворяетОтбору");
ТаблицаМногихНазначений.Индексы.Добавить(ПоляКлюча);
Ключ = Новый Структура(ПоляКлюча);
Для Каждого СтрокаТаблицы Из ТаблицаИсточников Цикл
ЗаполнитьЗначенияСвойств(Ключ, СтрокаТаблицы);
Приемники = ТаблицаМногихНазначений.НайтиСтроки(Ключ);
Для Каждого Приемник Из Приемники Цикл
Приемник.УдовлетворяетОтбору = Истина;
Если СтрокаТаблицы.Количество = 0 Тогда
Продолжить;
КонецЕсли;
Количество = Мин(СтрокаТаблицы.Количество, Приемник.Потребность - Приемник.Обеспечено);
СтрокаТаблицы.Количество = СтрокаТаблицы.Количество - Количество;
Приемник.Количество = Количество;
Приемник.Отметка = Приемник.Количество > 0;
КонецЦикла;
Приемник.Количество = Приемник.Количество + СтрокаТаблицы.Количество;
Приемник.Отметка = Приемник.Количество > 0;
КонецЦикла;
ОбщегоНазначенияУТКлиентСервер.ДополнитьТаблицу(ТаблицаМногихНазначений, ТаблицаТовары);
КонецПроцедуры
&НаСервере
Функция ПометитьНаУдалениеСозданныеДокументы()
МассивСсылокНаУдаление = СписокДокументов.ВыгрузитьЗначения();
Запрос = Новый Запрос(
"ВЫБРАТЬ
|КОЛИЧЕСТВО(*) КАК Количество
|ИЗ
| Документ.КорректировкаНазначенияТоваров КАК Таблица
|ГДЕ
| Таблица.Ссылка В(&Ссылки)
| И Таблица.ПометкаУдаления");
Запрос.УстановитьПараметр("Ссылки", МассивСсылокНаУдаление);
КоличествоСсылок = 0;
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
КоличествоСсылок = Выборка.Количество;
КонецЕсли;
СписокОшибок = ОбщегоНазначенияУТ.УстановитьПометкуУдаленияДокументов(МассивСсылокНаУдаление);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
КоличествоСсылок = Выборка.Количество - КоличествоСсылок;
Иначе
КоличествоСсылок = 0;
КонецЕсли;
ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(СписокОшибок);
Возврат КоличествоСсылок;
КонецФункции
#КонецОбласти
#КонецОбласти