Загрузка данных


#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

Процедура СформироватьОтчет(ПараметрыОтчета, АдресХранилища) Экспорт
	
	НачалоПериода	= ПараметрыОтчета.НачалоПериода;
	КонецПериода	= ПараметрыОтчета.КонецПериода;
	Куст			= ПараметрыОтчета.Куст;
	Склад			= ПараметрыОтчета.Склад;
	ТаблицаДЛяЗагрузкиВДок	= ПараметрыОтчета.ТаблицаДЛяЗагрузкиВДок;
	
	ТаблицаДЛяЗагрузкиВДок.Очистить();  //ПСВ
	
	ТабличныйДокумент = Новый ТабличныйДокумент;
	
	Макет = Обработки.БС_ЛимитКассыПоМагазину.ПолучитьМакет("Отчет");
	ОбластьЗаголовок   	= Макет.ПолучитьОбласть("Заголовок");	
	ОбластьШапка  		= Макет.ПолучитьОбласть("ШапкаТаблицы");
    ОбластьСклад  		= Макет.ПолучитьОбласть("Склад");
	
	ОбластьЗаголовок.Параметры.Заголовок = "Анализ лимита кассы "+?(ЗначениеЗаполнено(Куст),Строка(Куст)+" куст ","магазина №"+Склад.НомерМагазина)+" с "+Формат(НачалоПериода,"ДФ=dd.MM.yyyy")+" по "+Формат(КонецПериода,"ДФ=dd.MM.yyyy");
	ТабличныйДокумент.Вывести(ОбластьЗаголовок);
    ТабличныйДокумент.Вывести(ОбластьШапка);
    	
	ЛимитИтого			= 0;
	ОстатокКассыИтого	= 0;
	РазницаИтого		= 0;
	ДатаОтбора			= КонецДня(НачалоПериода);

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

		КоличествоВсего = Результат.Количество();

	  	Пока Результат.Следующий() цикл
			//Исправления по лимиту на один день ((
			ЛимитКассы=Результат.Лимит; //Исправления по лимиту на один день
		
			СчетчикДней=60*60*24;
			//ДатаОтбора_=Результат.Период-СчетчикДней;

		
			Если Результат.ЛимитНаОдинДень И Результат.Период<>НачалоДня(ДатаОтбора) тогда
			
				ЛимитНаОдинДень_=Истина;	
				Пока ЛимитНаОдинДень_ цикл		
					ДатаОтбора_=Результат.Период-СчетчикДней;
					
					Запрос = Новый Запрос;
					Запрос.Текст =	
			     	"ВЫБРАТЬ
			     	|	ЛимитКассыСрезПоследних.Лимит КАК Лимит,
			     	|	ЛимитКассыСрезПоследних.ЛимитНаОдинДень как ЛимитНаОдинДень,
			     	|	ЛимитКассыСрезПоследних.ДатаПриказа  как ДатаПриказаЛимитКассы,
			     	|	ЛимитКассыСрезПоследних.НомерПриказа как ПриказЛимитКассы
			     	|ИЗ
			     	|	РегистрСведений.БС_ЛимитКассыНовый.СрезПоследних(&ДатаОтбора, ) КАК ЛимитКассыСрезПоследних
			     	|ГДЕ
			     	|	ЛимитКассыСрезПоследних.Склад = &Склад";
					Запрос.УстановитьПараметр("Склад",		Результат.Склад);
					Запрос.УстановитьПараметр("ДатаОтбора",	ДатаОтбора_);
					ЛимитАктуальный = Запрос.Выполнить().Выбрать();
					Пока ЛимитАктуальный.Следующий() цикл
						ЛимитКассы=ЛимитАктуальный.Лимит;
						ЛимитНаОдинДень_=ЛимитАктуальный.ЛимитНаОдинДень;
					КонецЦикла;
				
					СчетчикДней=СчетчикДней+60*60*24;
				КонецЦикла;
			КонецЕсли;
			//Исправления по лимиту на один день ))
								
			ОбластьСклад.Параметры.Дата 		= Формат(ДатаОтбора,"ДФ=dd.MM.yyyy");
			ОбластьСклад.Параметры.Склад 		= Результат.Склад;
	        ОбластьСклад.Параметры.Лимит 		= ?(ЛимитКассы = 0, "!!Лимит не установлен!!", ЛимитКассы);
			ОбластьСклад.Параметры.ОстатокКассы = Результат.ОстатокКассы;
			ОбластьСклад.Параметры.Разница 		= ЛимитКассы-Результат.ОстатокКассы;
			//ПСВ((
			Если ЛимитКассы-Результат.ОстатокКассы < 0 Тогда
			    Запрос = новый запрос;
				Запрос.Текст = "ВЫБРАТЬ
				               |	ЛимитКассыНовыйСрезПоследних.Лимит как Лимит,
				               |	ЛимитКассыНовыйСрезПоследних.ДатаПриказа как ДатаПриказа,
				               |	ЛимитКассыНовыйСрезПоследних.НомерПриказа как НомерПриказа,
				               |	ЛимитКассыНовыйСрезПоследних.Склад,
				               |	ЛимитКассыНовыйСрезПоследних.ЛимитНаОдинДень как ЛимитНаОдинДень
				               |ИЗ
				               |	РегистрСведений.БС_ЛимитКассыНовый.СрезПоследних(
				               |			&ДатаОтчета,
				               |			Склад = &Склад
				               |				И ЛимитНаОдинДень = ЛОЖЬ) КАК ЛимитКассыНовыйСрезПоследних
				               |
				               |УПОРЯДОЧИТЬ ПО
				               |	ЛимитКассыНовыйСрезПоследних.Период УБЫВ";
				Запрос.УстановитьПараметр("ДатаОтчета",	ДатаОтбора);
				Запрос.УстановитьПараметр("Склад",		Результат.Склад);
				ДатаНомерЛимита = Запрос.Выполнить().Выгрузить();
				
				НоваяСтрокаТаблицы = ТаблицаДЛяЗагрузкиВДок.Добавить();
				НоваяСтрокаТаблицы.НомерСтроки 	= ТаблицаДЛяЗагрузкиВДок.Количество();
				НоваяСтрокаТаблицы.Дата 		= ДатаОтбора;
				НоваяСтрокаТаблицы.Магазин 		= Результат.Склад;
				//НоваяСтрокаТаблицы.НасПункт 	= Результат.Склад.АдресМагазина;
				//Башспирт ПСВ(( 13.11.2018
				XDTOКонтактная = УправлениеКонтактнойИнформациейЛокализация.АдресXMLВXDTO(, Результат.Склад.АдресМагазинаПоКЛАДР, );
				Если  XDTOКонтактная.Состав.Состав.Город = неопределено Тогда
					НоваяСтрокаТаблицы.НасПункт	= XDTOКонтактная.Состав.Состав.НаселПункт;
					Если  XDTOКонтактная.Состав.Состав.НаселПункт = неопределено Тогда
					НоваяСтрокаТаблицы.НасПункт 	= Результат.Склад.Местонахождение;	
					КонецЕсли;
				Иначе
					НоваяСтрокаТаблицы.НасПункт	= XDTOКонтактная.Состав.Состав.Город;
				КонецЕсли;
				//Башспирт ПСВ)) 13.11.2018
				НоваяСтрокаТаблицы.Лимит 		= Цел(Результат.ОстатокКассы+1);
				
				Если ДатаНомерЛимита.Количество()> 0 Тогда
					//НоваяСтрокаТаблицы.ЛимитКассы = ЛимитКассы;
					НоваяСтрокаТаблицы.ЛимитКассы 				= ДатаНомерЛимита[0].Лимит;
	    			НоваяСтрокаТаблицы.ПриказЛимитКассы 		= ДатаНомерЛимита[0].НомерПриказа;
					НоваяСтрокаТаблицы.ДатаПриказаЛимитКассы	= ДатаНомерЛимита[0].ДатаПриказа;
					////Сообщить("1  "+Результат.Склад);
					////Сообщить("1  "+ЛимитКассы);
					////Сообщить("1  "+ДатаНомерЛимита[0].Лимит);
					////Сообщить(?(ЛимитКассы - ДатаНомерЛимита[0].Лимит <> 0 ,"1  "+Строка(ЛимитКассы - ДатаНомерЛимита[0].Лимит) +"  ****************",""));
					////Сообщить("1  "+ДатаНомерЛимита[0].НомерПриказа);
					////Сообщить("1  "+ДатаНомерЛимита[0].ДатаПриказа);
					////Сообщить("-------------------------------");
				Иначе
	    			НоваяСтрокаТаблицы.ПриказЛимитКассы = "нет номера";
				КонецЕсли;	
			КонецЕсли;	
			//ПСВ))
			ТабличныйДокумент.Вывести(ОбластьСклад);  
	     	
		//ЭлементыФормы.Индикатор1.Значение= Инд/КоличествоВсего*100;	
		КонецЦикла;

		ДатаОтбора=КонецДня(ДатаОтбора+ 60 * 60 * 24);
			
		Если КоличествоВсего>0 тогда
			ЛимитИтого=ЛимитИтого+ЛимитКассы;
			
			ОстатокКассыИтого=ОстатокКассыИтого+Результат.ОстатокКассы;
			РазницаИтого=РазницаИтого+(ЛимитКассы-Результат.ОстатокКассы);
				
		КонецЕсли;

	
	КонецЦикла; //Цикл по дата отбора

	ОбщиеИтоги = Макет.ПолучитьОбласть("ОбщиеИтоги");
	ОбщиеИтоги.Параметры.Лимит			= ЛимитИтого;
	ОбщиеИтоги.Параметры.ОстатокКассы	= ОстатокКассыИтого;
	ОбщиеИтоги.Параметры.Разница 		= РазницаИтого;
	ТабличныйДокумент.Вывести(ОбщиеИтоги);
			
	ТабличныйДокумент.ОриентацияСтраницы	= ОриентацияСтраницы.Портрет;
	ТабличныйДокумент.ПолеСлева  			= 5;
	ТабличныйДокумент.ПолеСправа 			= 5;

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

#КонецЕсли