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