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