Норматив распределения планов продаж по категориям / Форма документа / Модуль формы

файл
#Область ОписаниеПеременных

&НаКлиенте
Перем ПараметрыОбработчикаОжидания;

&НаКлиенте
Перем ФормаДлительнойОперации;

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

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

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

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

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

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

&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
	
	МодификацияКонфигурацииПереопределяемый.ПередЗаписьюНаСервере(ЭтаФорма, Отказ, ТекущийОбъект, ПараметрыЗаписи);
	
	// ИнтеграцияС1СДокументооборотом
	ИнтеграцияС1СДокументооборотБазоваяФункциональность.ПередЗаписьюНаСервере(ЭтаФорма, ТекущийОбъект, ПараметрыЗаписи);
	// Конец ИнтеграцияС1СДокументооборотом
	
КонецПроцедуры

&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
	
	МодификацияКонфигурацииПереопределяемый.ПослеЗаписиНаСервере(ЭтаФорма, ТекущийОбъект, ПараметрыЗаписи);
	
КонецПроцедуры

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

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	// СтандартныеПодсистемы.ПодключаемыеКоманды
	ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
	// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

#Область ОбработчикиСобытийЭлементовТаблицыНормативыПоРеквизитам

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

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

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

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


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


&НаКлиенте
Процедура ЗаписатьДокумент(Команда)
	
	ОбщегоНазначенияУТКлиент.Записать(ЭтаФорма);
	
КонецПроцедуры

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

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

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

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

&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
	ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецПроцедуры
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды

// ИнтеграцияС1СДокументооборотом
&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуИнтеграции(Команда)
	
	ИнтеграцияС1СДокументооборотБазоваяФункциональностьКлиент.ВыполнитьПодключаемуюКомандуИнтеграции(Команда, ЭтаФорма, Объект);
	
КонецПроцедуры
// Конец ИнтеграцияС1СДокументооборотом

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

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

&НаКлиенте
Процедура ПровестиДокумент(Команда)
	
	ОбщегоНазначенияУТКлиент.Провести(ЭтаФорма);
	
КонецПроцедуры

&НаКлиенте
Процедура ПровестиИЗакрыть(Команда)
	
	ОбщегоНазначенияУТКлиент.ПровестиИЗакрыть(ЭтаФорма);
	
КонецПроцедуры

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

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

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

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

	//

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

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

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.НормативыПоРеквизитам.Значение");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
	Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<Пустое значение>'"));
	
	//

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

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

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.НормативыПоСвойствам.Значение");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
	Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<Пустое значение>'"));
	
	
КонецПроцедуры

&НаСервере
Процедура ПриЧтенииСозданииНаСервере()

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

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

&НаСервере
Процедура ТоварнаяКатегорияПриИзмененииНаСервере()
	
	ЗаполнитьСписокРеквизитов();
	
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьСписокРеквизитов()

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

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

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

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

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

	КонецЕсли;
	
КонецПроцедуры

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

// Параметры:
//  ПараметрыЗадания - Структура - из:
//   * АдресПользовательскихНастроек - Строка -
//   * Свойство - ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения, Строка -
//   * Реквизит - ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения, Строка -
//   * ТоварнаяКатегория - СправочникСсылка.ТоварныеКатегории -
// 
// Возвращаемое значение:
//  см. Длительныеоперации.ВыполнитьВФоне
//
&НаСервере
Функция ЗаполнитьПоСтатистикеПродажНаСервере(ПараметрыЗадания)
	
	ПараметрыЗадания.Вставить("УникальныйИдентификатор", УникальныйИдентификатор);
	ПараметрыЗадания.Вставить("КлючОбщихНастроек",       "Документ.НормативРаспределенияПлановПродажПоКатегориям");
	
	Настройки = Новый Структура;
	Настройки.Вставить("ПользовательскиеНастройки",  ПолучитьИзВременногоХранилища(ПараметрыЗадания.АдресПользовательскихНастроек));
	ПараметрыЗадания.Удалить("АдресПользовательскихНастроек");
	
	ОбщегоНазначения.ХранилищеОбщихНастроекСохранить(ПараметрыЗадания.КлючОбщихНастроек, "НастройкиФоновогоЗадания_"+ПараметрыЗадания.УникальныйИдентификатор, Настройки);
	
	ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
	ПараметрыВыполнения.ЗапуститьВФоне = Истина;
	ПараметрыВыполнения.ОжидатьЗавершение = 0;
	ПараметрыВыполнения.НаименованиеФоновогоЗадания =
		НСтр("ru = 'Заполнение нормативов распределения по статистике продаж'");
		
	Результат = ДлительныеОперации.ВыполнитьВФоне(
		"Документы.НормативРаспределенияПлановПродажПоКатегориям.РассчитатьНормативыПоСтатистикеПродаж",
		ПараметрыЗадания,
		ПараметрыВыполнения);
	
	Возврат Результат;
	
КонецФункции

&НаСервере
Процедура ПолучитьРезультатЗаполненияНаСервере(АдресХранилища)
	
	ТаблицаНормативов = ПолучитьИзВременногоХранилища(АдресХранилища);
	
	Если Объект.ВариантЗаполнения = 1 ИЛИ Объект.ВариантЗаполнения = 2 Тогда
		Объект.НормативыПоСвойствам.Загрузить(ТаблицаНормативов);
	Иначе
		Объект.НормативыПоРеквизитам.Загрузить(ТаблицаНормативов);
	КонецЕсли; 
	
КонецПроцедуры

&НаСервереБезКонтекста
Функция ВариантЗаполнения(ТоварнаяКатегория, Реквизит)

	Возврат Документы.НормативРаспределенияПлановПродажПоКатегориям.ВариантЗаполнения(ТоварнаяКатегория, Реквизит);

КонецФункции 

&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьВидимостьПоРеквизиту(Форма)

	Если ТипЗнч(Форма.Объект.Реквизит) = Тип("Строка") Тогда
		
		Форма.Элементы.Страницы.ТекущаяСтраница = Форма.Элементы.СтраницаНормативыПоРеквизитам;
		
	Иначе
		
		Форма.Элементы.Страницы.ТекущаяСтраница = Форма.Элементы.СтраницаНормативыПоСвойствам;
	
	КонецЕсли; 
	
	Если Форма.Объект.ВариантЗаполнения = 2 Тогда
	
		Заголовок = НСтр("ru = 'По использованным в Характеристиках'");
	
	Иначе
	
		Заголовок = НСтр("ru = 'По использованным в Номенклатуре'");
	
	КонецЕсли; 
	
	Форма.Элементы.НормативыПоСвойствамЗаполнитьПоИспользованнымВНоменклатуре.Заголовок = Заголовок;
	
КонецПроцедуры 

&НаКлиенте
Функция ПроверкаЗаполненияШапки()

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

КонецФункции 

&НаКлиенте
Процедура ЗагрузитьНормативыИзФайлаЗавершение(АдресЗагруженныхДанных, ДополнительныеПараметры) Экспорт
	
	Если АдресЗагруженныхДанных = Неопределено Тогда 
		Возврат;
	КонецЕсли;
	
	ЗагрузитьНормативыИзФайлаНаСервере(АдресЗагруженныхДанных);
	
КонецПроцедуры

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

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





 

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