Списание затрат на выпуск / Подбор по материалам в производстве / Модуль формы

файл

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

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

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

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

&НаКлиенте
Процедура ПодразделениеПриИзменении(Элемент)
	ЗаполнитьТаблицуТоваров();
КонецПроцедуры

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

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

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

	ПоместитьТоварыВХранилище();
	
	ОповеститьОВыборе(АдресВХранилище);
	
КонецПроцедуры

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

&НаКлиенте
Процедура ИсключитьСтрокиВыполнить()
	
	ОтметитьСтроки(Ложь);
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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