Корректировка назначения товаров / Указание назначений в табличной части / Модуль формы

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

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

&НаСервере
Процедура УстановитьЗаголовкиПриСозданииФормы()
	
	Элементы.ТаблицаВНаличии.Заголовок = СтрШаблон(Элементы.ТаблицаВНаличии.Заголовок, Упаковка);
	Элементы.ТаблицаГруппаПодобрано.Заголовок = СтрШаблон(Элементы.ТаблицаГруппаПодобрано.Заголовок, Упаковка);
	
	Если ЗначениеЗаполнено(Параметры.Характеристика) Тогда
		Заголовок = НСтр("ru = 'Указание назначений для товара: %1,%3 на складе: %2'");
		Заголовок = СтрШаблон(Заголовок, Параметры.Номенклатура, Параметры.Склад, Параметры.Характеристика);
	Иначе
		Заголовок = НСтр("ru = 'Указание назначений для товара: %1 на складе: %2'");
		Заголовок = СтрШаблон(Заголовок, Параметры.Номенклатура, Параметры.Склад);
	КонецЕсли;
	
	Элементы.ДекорацияПодобрать.Заголовок = СтрШаблон(Элементы.ДекорацияПодобрать.Заголовок,
		Формат(Параметры.Подобрать, "ЧДЦ=3; ЧН=0,000;"), Упаковка);
	Подобрано = ТаблицаНазначений.Итог("Подобрано");
	Элементы.ДекорацияПодобрано.Заголовок = СтрШаблон(НСтр("ru = 'Подобрано: %1 %2'"),
		Формат(Подобрано, "ЧДЦ=3; ЧН=0,000;"), Упаковка);
	
КонецПроцедуры

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

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

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