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