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

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	Для Каждого Строка Из Параметры.Строки Цикл
		
		НоваяСтрока = Запасы.Добавить();
		ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка);
		НоваяСтрока.СуммаВалютаСоглашения = НоваяСтрока.ЦенаВВалютеСоглашения * НоваяСтрока.КЗаказу;
		
	КонецЦикла;
	
	РазницаОкругления = Параметры.Количество - Запасы.Итог("КЗаказу");
	Если РазницаОкругления > 0 Тогда
		
		ОтборСтрок = Новый Структура("ЭтоЗапас", Истина);
		МассивСтрок = Запасы.НайтиСтроки(ОтборСтрок);
		
		Если МассивСтрок.Количество() > 0 Тогда
			СтрокаТаблицы = МассивСтрок[0];
			СтрокаТаблицы.КЗаказу = СтрокаТаблицы.КЗаказу + РазницаОкругления;
		Иначе
			СтрокаТаблицы = Запасы.Добавить();
			ЗаполнитьЗначенияСвойств(СтрокаТаблицы, Запасы[0],,"Потребность");
			СтрокаТаблицы.НомерСтроки = 0;
			СтрокаТаблицы.Назначение = Неопределено;
			СтрокаТаблицы.КЗаказу = РазницаОкругления;
		КонецЕсли;
		
		СтрокаТаблицы.СуммаВалютаСоглашения = СтрокаТаблицы.ЦенаВВалютеСоглашения * СтрокаТаблицы.КЗаказу;
		
	КонецЕсли;
	
	НомерСтрокиДерева         = Параметры.ВыбраннаяСтрока;
	ТипОбеспечения            = Параметры.ТипОбеспечения;
	МинимальнаяПартияПоставки = Параметры.МинимальнаяПартияПоставки;
	
	ЗаполнитьСлужебныеРеквизитыПоНоменклатуре();
	УстановитьУсловноеОформление();
	
	Если Запасы.Количество() > 0 Тогда
		УпаковкаЗаказа = Запасы[0].УпаковкаЗаказа;
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
	Для Каждого Строка Из Запасы Цикл
		
		Строка.УпаковкаЗаказа = ВыбранноеЗначение;
		
	КонецЦикла;
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	РассчитатьИтоги();
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура ЗапасыПередУдалением(Элемент, Отказ)
	Отказ = Истина;
КонецПроцедуры

&НаКлиенте
Процедура ЗапасыПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, ЭтоГруппа, Параметр)
	Отказ = Истина;
КонецПроцедуры

&НаКлиенте
Процедура ЗапасыКЗаказуПриИзменении(Элемент)
	ТекущаяСтрока = Элементы.Запасы.ТекущиеДанные;
	ТекущаяСтрока.СуммаВалютаСоглашения = ТекущаяСтрока.КЗаказу * ТекущаяСтрока.ЦенаВВалютеСоглашения;
	
	РассчитатьИтоги();
КонецПроцедуры

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

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

&НаКлиенте
Процедура Принять(Команда)
	
	Ответ = СформироватьСтруктуруОтвета(Истина);
	Закрыть(Ответ);
	
КонецПроцедуры

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

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

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

&НаСервере
Процедура УстановитьУсловноеОформление()
	
	Если ТипОбеспечения = Перечисления.ТипыОбеспечения.Покупка Тогда
		Заголовок = Заголовок + НСтр("ru='Заказ поставщику'");
	ИначеЕсли ТипОбеспечения = Перечисления.ТипыОбеспечения.Перемещение Тогда
		Заголовок = Заголовок + НСтр("ru='Заказ на перемещение'");
	ИначеЕсли ТипОбеспечения = Перечисления.ТипыОбеспечения.Производство Тогда
		Заголовок = Заголовок + НСтр("ru='Заказ на производство'");
	ИначеЕсли ТипОбеспечения = Перечисления.ТипыОбеспечения.СборкаРазборка Тогда
		Заголовок = Заголовок + НСтр("ru='Заказ на сборку/разборку'");
	ИначеЕсли ТипОбеспечения = Перечисления.ТипыОбеспечения.ПроизводствоНаСтороне Тогда
		Заголовок = Заголовок + НСтр("ru='Заказ переработчику'");
	КонецЕсли;

	НоменклатураСервер.УстановитьУсловноеОформлениеХарактеристикНоменклатуры(ЭтаФорма, "ЗапасыХарактеристика", "Запасы.ХарактеристикиИспользуются");
	
	УстановитьВидимостьУпаковкиЗаказа();

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

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

&НаСервере
Процедура УстановитьВидимостьУпаковкиЗаказа()
	
	ИспользоватьУпаковки = ПолучитьФункциональнуюОпцию("ИспользоватьУпаковкиНоменклатуры");
	
	Элементы.ЗапасыУпаковкаЗаказа.Видимость = ИспользоватьУпаковки;
	Элементы.УпаковкаЗаказа.Видимость = ИспользоватьУпаковки;
	
	Если НЕ ИспользоватьУпаковки Тогда
		Возврат;
	КонецЕсли;
	
	ПоказыватьУпаковку = Ложь;
	
	Если Запасы.Количество() > 0 Тогда
		ТипОбеспечения = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Запасы[0].СпособОбеспечения, "ТипОбеспечения");
		
		Если ТипОбеспечения = Перечисления.ТипыОбеспечения.Покупка Тогда
			ПоказыватьУпаковку = Истина;
		КонецЕсли;
		
	КонецЕсли;
	
	Элементы.ЗапасыУпаковкаЗаказа.Видимость = ПоказыватьУпаковку;
	Элементы.УпаковкаЗаказа.Видимость = ПоказыватьУпаковку;
	
КонецПроцедуры

&НаКлиенте
Функция ПодготовитьСтруктуруСтроки()
	
	СтруктураСтроки = Новый Структура("Номенклатура, Характеристика, КЗаказу, УпаковкаЗаказа, ЧислительУпаковки, ЗнаменательУпаковки, НомерСтроки, ЭтоЗапас");
	
	Возврат СтруктураСтроки;
	
КонецФункции

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

&НаКлиенте
Процедура РассчитатьИтоги()
	
	ИтогоКЗаказу     = Запасы.Итог("КЗаказу");
	ИтогоПотребность = Запасы.Итог("Потребность");
	ИтогоСумма       = Запасы.Итог("СуммаВалютаСоглашения");
	
КонецПроцедуры

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

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