Выпуск продукции и выполнение работ / Подбор побочных выходных изделий / Модуль формы

файл
//++ Устарело_Производство21
#Область ОбработчикиСобытийФормы

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

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

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

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

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

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

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

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

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

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

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

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

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

	УсловноеОформление.Элементы.Очистить();

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

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

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

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

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

	// существующие позиции выделяются серым

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

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

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

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

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

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

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

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

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

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

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветТекстаОтмененнойСтрокиДокумента);
	
КонецПроцедуры

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

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

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

#КонецОбласти
//-- Устарело_Производство21

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