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


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

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

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

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

	КонецЦикла; 

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

#КонецЕсли