Загрузка данных
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
Процедура СформироватьОтчет(ПараметрыОтчета, АдресХранилища) Экспорт
НачалоПериода = ПараметрыОтчета.НачалоПериода;
КонецПериода = ПараметрыОтчета.КонецПериода;
Куст = ПараметрыОтчета.Куст;
Склад = ПараметрыОтчета.Склад;
ТаблицаДЛяЗагрузкиВДок = ПараметрыОтчета.ТаблицаДЛяЗагрузкиВДок;
ТаблицаДЛяЗагрузкиВДок.Очистить();
ТабличныйДокумент = Новый ТабличныйДокумент;
Макет = Обработки.БС_ЛимитКассыПоМагазину.ПолучитьМакет("Отчет");
ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
ОбластьШапка = Макет.ПолучитьОбласть("ШапкаТаблицы");
ОбластьСклад = Макет.ПолучитьОбласть("Склад");
ОбластьЗаголовок.Параметры.Заголовок = "Анализ лимита кассы "+?(ЗначениеЗаполнено(Куст),Строка(Куст)+" куст ","магазина №"+?(ЗначениеЗаполнено(Склад),Склад.НомерМагазина,""))+" с "+Формат(НачалоПериода,"ДФ=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;
СтруктураРезультата = Новый Структура;
СтруктураРезультата.Вставить("ТабличныйДокумент", ТабличныйДокумент);
СтруктураРезультата.Вставить("ТаблицаДЛяЗагрузкиВДок", ТаблицаДЛяЗагрузкиВДок);
ПоместитьВоВременноеХранилище(СтруктураРезультата, АдресХранилища);
КонецПроцедуры
#КонецЕсли