Приходный ордер на товары / Форма выбора даты поступления / Модуль формы

файл

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

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

	ДатаПоступления = НачалоДня(ТекущаяДатаСеанса());
	ТекущаяДатаНачалоДня = ДатаПоступления;

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

		Пока ВыборкаПоХарактеристикам.Следующий() Цикл
			
			ВыборкаПоДатам = ВыборкаПоХарактеристикам.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
			
			ПерваяДатаПоступления = Неопределено;
			
			Пока ВыборкаПоДатам.Следующий() Цикл
				
				Если ВыборкаПоДатам.Ожидается <= 0 Тогда
					Прервать;
				КонецЕсли;
				
				ПерваяДатаПоступления = НачалоДня(ВыборкаПоДатам.Период);
				
				Если ДатыПоступлений.Получить(ПерваяДатаПоступления) = Неопределено Тогда
					ДатыПоступлений.Вставить(ПерваяДатаПоступления,0);
				КонецЕсли;
				
			КонецЦикла;
			
			Если ПерваяДатаПоступления <> Неопределено Тогда 
				ДатыПоступлений[ПерваяДатаПоступления] = ДатыПоступлений[ПерваяДатаПоступления] + 1;
			КонецЕсли;
						
		КонецЦикла;
				
	КонецЦикла;
	
	Для Каждого КлючЗначение Из ДатыПоступлений Цикл
		
		Элементы.ДатаПоступления.СписокВыбора.Добавить(КлючЗначение.Ключ,Формат(КлючЗначение.Значение,"ЧН=0; ЧГ="));
		
	КонецЦикла;
	
	Элементы.ДатаПоступления.СписокВыбора.СортироватьПоЗначению(НаправлениеСортировки.Возр);
	
	НарастающийИтог = 0;
	
	МассивУдаляемыхЗначений   = Новый Массив;
	НужноДобавитьТекущуюДату  = Ложь;
	ЧислоПозицийНаТекущуюДату = 0;
	
	Для Каждого СтрСп Из Элементы.ДатаПоступления.СписокВыбора Цикл
		
		НарастающийИтог = НарастающийИтог + Число(СтрСп.Представление);
		
		Если СтрСп.Значение <= ДатаПоступления Тогда
			МассивУдаляемыхЗначений.Добавить(СтрСп);
			НужноДобавитьТекущуюДату = Истина;
		Иначе
			
			Если НужноДобавитьТекущуюДату Тогда
				ЧислоПозицийНаТекущуюДату = НарастающийИтог;
				НужноДобавитьТекущуюДату  = Ложь;
			КонецЕсли;
			
			ПредставлениеДатыПоступления = НСтр("ru = '%Дата% (%Количество% поз.)'");	
			
			ПредставлениеДатыПоступления = СтрЗаменить(ПредставлениеДатыПоступления,"%Дата%",Формат(СтрСп.Значение,"ДЛФ=D"));
			ПредставлениеДатыПоступления = СтрЗаменить(ПредставлениеДатыПоступления,"%Количество%",НарастающийИтог);
			
			СтрСп.Представление = ПредставлениеДатыПоступления;
		КонецЕсли;
		
	КонецЦикла;
	
	Если НужноДобавитьТекущуюДату Тогда
		ЧислоПозицийНаТекущуюДату = НарастающийИтог;
	КонецЕсли;
	
	Если ЧислоПозицийНаТекущуюДату <> 0 Тогда
		ПредставлениеДатыПоступления = НСтр("ru = '%Дата% (%Количество% поз.)'");	
		
		ПредставлениеДатыПоступления = СтрЗаменить(ПредставлениеДатыПоступления,"%Дата%",Формат(ДатаПоступления,"ДЛФ=D"));
		ПредставлениеДатыПоступления = СтрЗаменить(ПредставлениеДатыПоступления,"%Количество%",ЧислоПозицийНаТекущуюДату);
		
		Элементы.ДатаПоступления.СписокВыбора.Вставить(0,  НачалоДня(ДатаПоступления), ПредставлениеДатыПоступления);
		
	КонецЕсли;
	
	Для Каждого СтрМас Из МассивУдаляемыхЗначений Цикл
		Элементы.ДатаПоступления.СписокВыбора.Удалить(СтрМас);		
	КонецЦикла;

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

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

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

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

&НаКлиенте
Процедура ОК(Команда)
		
	Если ДатаПоступления < ТекущаяДатаНачалоДня Тогда
		ТекстПредупреждения = НСтр("ru = 'Укажите дату, не меньше текущей даты (%Дата%).'");
		
		ТекстПредупреждения = СтрЗаменить(ТекстПредупреждения, "%Дата%", Формат(ТекущаяДатаНачалоДня,"ДЛФ=D"));
		
		ПоказатьПредупреждение(Неопределено, ТекстПредупреждения);
		
		Возврат;	
	КонецЕсли;
		
	Закрыть(ДатаПоступления);
КонецПроцедуры

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

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

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

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