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

файл

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа.
		Возврат;
	КонецЕсли;
	
	Склад = Параметры.Склад;
	Помещение = Параметры.Помещение;
	
	// заполнение реквизитов по регламентному заданию
	ДействиеНадРегламентнымЗаданием = "";
	Параметры.Свойство("ДействиеНадРегламентнымЗаданием", ДействиеНадРегламентнымЗаданием);
	Если ЗначениеЗаполнено(ДействиеНадРегламентнымЗаданием) Тогда
		
		ЗаполнитьЗначенияСвойств(ЭтотОбъект, Параметры, "НаименованиеРегламентногоЗадания,РасписаниеРегламентногоЗадания,
			|ПриОшибкахПовторятьРегламентноеЗадание,ПриОшибкахПовторятьЧерезРегламентноеЗадание");
			
		ЗаполнитьЗначенияСвойств(ЭтотОбъект, Параметры.НастройкиСозданияПересчетов, 
			"ПересчетПоНаполненности,ПересчетПоОсобымУсловиям, ПересчетСомнительныхЯчеек,
			|ПересчетПоНастройкамПериодичности,ПересчетПоЯчейкамСОтрицательнымиОстатками,
			|РазбиватьПоРабочимУчасткам, РазбиватьПоКоличествуЯчеек, КоличествоЯчеекВЗадании");

		НастройкиОтбора = Неопределено;
		Параметры.НастройкиСозданияПересчетов.Свойство("НастройкиОтбора", НастройкиОтбора);
		ИнициализироватьКомпоновкуДанных(Истина, НастройкиОтбора);
	Иначе
		ИнициализироватьКомпоновкуДанных(Ложь);
	КонецЕсли;
	//
	
	Если НЕ ЗначениеЗаполнено(ПересчетПоНаполненности) Тогда
		ПересчетПоНаполненности = "ТолькоЯчейкиСОстатками";
	КонецЕсли;
	
	Если НЕ ЗначениеЗаполнено(ПересчетПоОсобымУсловиям) Тогда
		ПересчетПоОсобымУсловиям = "Все";
	КонецЕсли;
	
	Если РазбиватьПоКоличествуЯчеек Тогда
		Элементы.ГруппаКоличествоЯчеекСтраницы.ТекущаяСтраница = Элементы.ГруппаКоличествоЯчеекДоступно;
	Иначе
		Элементы.ГруппаКоличествоЯчеекСтраницы.ТекущаяСтраница = Элементы.ГруппаКоличествоЯчеекНедоступно;
	КонецЕсли;
	
	Элементы.ГруппаОсобыеУсловияОтступ.Доступность = (ПересчетПоОсобымУсловиям = "ПоУсловию");
	
	РежимРедактированиеРегламентногоЗадания = ЗначениеЗаполнено(ДействиеНадРегламентнымЗаданием);
	Элементы.ГруппаПараметрыРегламентногоЗадания.Видимость = РежимРедактированиеРегламентногоЗадания;
	Элементы.СоздатьЗадания.Заголовок = ?(РежимРедактированиеРегламентногоЗадания,
		НСтр("ru = 'Закрыть и сохранить регламентное задание'"),
		НСтр("ru = 'Создать задания'"));
	Элементы.НастройкаАвтоматическогоСозданияПересчетов.Видимость = НЕ РежимРедактированиеРегламентногоЗадания;

	СобытияФорм.ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка);

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

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

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

&НаКлиенте
Процедура РазбиватьПоКоличествуЯчеекПриИзменении(Элемент)
	
	Если РазбиватьПоКоличествуЯчеек Тогда
		Элементы.ГруппаКоличествоЯчеекСтраницы.ТекущаяСтраница = Элементы.ГруппаКоличествоЯчеекДоступно;
	Иначе
		КоличествоЯчеекВЗадании = 0;
		Элементы.ГруппаКоличествоЯчеекСтраницы.ТекущаяСтраница = Элементы.ГруппаКоличествоЯчеекНедоступно;
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПересчетПоОсобымУсловиямПриИзменении(Элемент)
	Элементы.ГруппаОсобыеУсловияОтступ.Доступность = (ПересчетПоОсобымУсловиям = "ПоУсловию");
	Если ПересчетПоОсобымУсловиям = "Все" Тогда
		ПересчетСомнительныхЯчеек				  = Ложь;
		ПересчетПоНастройкамПериодичности 		  = Ложь;
		ПересчетПоЯчейкамСОтрицательнымиОстатками = Ложь;
	КонецЕсли;	
КонецПроцедуры

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

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

&НаКлиенте
Процедура СоздатьЗадания(Команда)
	ОчиститьСообщения();
	Если Не ПроверитьЗаполнение() Тогда 
		Возврат
	КонецЕсли;
	
	Если ЗначениеЗаполнено(ДействиеНадРегламентнымЗаданием) Тогда
		
		Результат = Новый Структура("ДействиеНадРегламентнымЗаданием,НаименованиеРегламентногоЗадания,ПриОшибкахПовторятьРегламентноеЗадание,
						|ПриОшибкахПовторятьЧерезРегламентноеЗадание,РасписаниеРегламентногоЗадания");
		ЗаполнитьЗначенияСвойств(Результат,ЭтотОбъект);
		Результат.Вставить("Действие","ЗакрытьИСохранитьРегламентноеЗадание");
		
		ПараметрыГенерации = Новый Структура;
		ПараметрыГенерации.Вставить("КоличествоЯчеекВЗадании",				КоличествоЯчеекВЗадании);
		ПараметрыГенерации.Вставить("НастройкиОтбора",						ОтборПересчета.Настройки);
		ПараметрыГенерации.Вставить("ПересчетПоНаполненности",				ПересчетПоНаполненности);
		ПараметрыГенерации.Вставить("ПересчетПоНастройкамПериодичности",	ПересчетПоНастройкамПериодичности);
		ПараметрыГенерации.Вставить("ПересчетПоЯчейкамСОтрицательнымиОстатками",ПересчетПоЯчейкамСОтрицательнымиОстатками);
		ПараметрыГенерации.Вставить("ПересчетСомнительныхЯчеек",			ПересчетСомнительныхЯчеек);
		ПараметрыГенерации.Вставить("РазбиватьПоКоличествуЯчеек",			РазбиватьПоКоличествуЯчеек);
		ПараметрыГенерации.Вставить("РазбиватьПоРабочимУчасткам",			РазбиватьПоРабочимУчасткам);
		ПараметрыГенерации.Вставить("ПересчетПоОсобымУсловиям",				ПересчетПоОсобымУсловиям);
		
		Результат.Вставить("НастройкиСозданияПересчетов", ПараметрыГенерации);
		Закрыть(Результат);
	Иначе
		ПараметрыГенерации = Новый Структура;
		ПараметрыГенерации.Вставить("КоличествоЯчеекВЗадании",				КоличествоЯчеекВЗадании);
		ПараметрыГенерации.Вставить("НастройкиОтбора",						ОтборПересчета.Настройки);
		ПараметрыГенерации.Вставить("ПересчетПоНаполненности",				ПересчетПоНаполненности);
		ПараметрыГенерации.Вставить("ПересчетПоНастройкамПериодичности",	ПересчетПоНастройкамПериодичности);
		ПараметрыГенерации.Вставить("ПересчетПоЯчейкамСОтрицательнымиОстатками",ПересчетПоЯчейкамСОтрицательнымиОстатками);
		ПараметрыГенерации.Вставить("ПересчетСомнительныхЯчеек",			ПересчетСомнительныхЯчеек);
		ПараметрыГенерации.Вставить("РазбиватьПоКоличествуЯчеек",			РазбиватьПоКоличествуЯчеек);
		ПараметрыГенерации.Вставить("РазбиватьПоРабочимУчасткам",			РазбиватьПоРабочимУчасткам);
		ПараметрыГенерации.Вставить("Помещение",	Помещение);
		ПараметрыГенерации.Вставить("Склад",		Склад);
		ПараметрыГенерации.Вставить("ПересчетПоОсобымУсловиям",				ПересчетПоОсобымУсловиям);			
		
		Результат = СоздатьЗаданияНаСервере(ПараметрыГенерации);
		ПоказатьОповещениеПользователя(НСтр("ru = 'Задания на пересчет'"),, Результат.СтрокаСообщения);
			
		Если Результат.КоличествоСозданныхЗаданий > 0 Тогда
			Оповестить("Запись_ПересчетТоваров",,ЭтаФорма);
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура Отмена(Команда)
	Закрыть(Новый Структура("Действие","Отмена"));
КонецПроцедуры

&НаКлиенте
Процедура НастройкаАвтоматическогоСозданияПересчетов(Команда)
	ПараметрыФормы = Новый Структура("Ключ,ПриОткрытииПерейтиНаВкладку",
		КлючЗаписиНастроекАвтоматическогоСозданияПересчетов(),"НастройкиСозданияПересчетовТоваров");
	ОткрытьФорму("РегистрСведений.НастройкиАдресныхСкладов.ФормаЗаписи", ПараметрыФормы, ЭтаФорма,,);
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ВыполнитьПереопределяемуюКоманду(Команда)
	
	СобытияФормКлиент.ВыполнитьПереопределяемуюКоманду(ЭтаФорма, Команда);
	
КонецПроцедуры

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

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

&НаСервереБезКонтекста
Функция СоздатьЗаданияНаСервере(ПараметрыГенерации)
	
	Результат = Новый Структура;
	Результат.Вставить("КоличествоСозданныхЗаданий", Документы.ПересчетТоваров.СоздатьЗадания(ПараметрыГенерации));
	
	СтрокаСкладовСКоличеством = СтроковыеФункцииКлиентСервер.ЧислоЦифрамиПредметИсчисленияПрописью(
		Результат.КоличествоСозданныхЗаданий, 
		"задание,задания,заданий");
	Результат.Вставить("СтрокаСообщения", НСтр("ru = 'Создано %СтрокаСкладовСКоличеством% на пересчет.'"));
	Результат.СтрокаСообщения = СтрЗаменить(Результат.СтрокаСообщения, "%СтрокаСкладовСКоличеством%", СтрокаСкладовСКоличеством);
		
	Возврат Результат;
	
КонецФункции

#Область НастройкиКомпоновкиДанных

&НаСервере
Процедура ИнициализироватьКомпоновкуДанных(Знач ИспользоватьНастройкиПоУмолчанию, Знач Настройки = Неопределено)
	
	СхемаКомпоновкиДанных = Документы.ПересчетТоваров.ПолучитьМакет("ОтборПересчетаГрупповоеСоздание");

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

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

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

#Область Прочее

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

&НаКлиенте
Процедура РасписаниеРегламентногоЗаданияНажатие(Элемент, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	ДиалогРасписания = Новый ДиалогРасписанияРегламентногоЗадания(РасписаниеРегламентногоЗадания);
	Оповещение = Новый ОписаниеОповещения("РасписаниеРегламентногоЗаданияНажатиеЗавершение", ЭтаФорма);
	ДиалогРасписания.Показать(Оповещение);
	
КонецПроцедуры

&НаКлиенте
Процедура РасписаниеРегламентногоЗаданияНажатиеЗавершение(Расписание, ДополнительныеПараметры) Экспорт
	
	Если Расписание = Неопределено ИЛИ НЕ ТипЗнч(Расписание) = Тип("РасписаниеРегламентногоЗадания") Тогда
		Возврат;
	КонецЕсли;
	
	РасписаниеРегламентногоЗадания = Расписание;
	Модифицированность = Истина;
	
КонецПроцедуры

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

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

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

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