Имя: Пароль:
1C
1С v8
Отчет за разные периоды
0 Марина Викторовна
 
06.09.11
09:55
Можно ли реализовать возможность пользователю формировать отчет на СКД за дискретные периоды, т.е. например за январь 2009, январь 2010, январь 2011 в одном отчете для сравнения данных периодов?
1 ZanderZ
 
06.09.11
10:11
ну типа отбор по периоду в группу ИЛИ запихать или....
2 Ненавижу 1С
 
гуру
06.09.11
10:12
можно
3 Ненавижу 1С
 
гуру
06.09.11
10:12
я сделал такое на универсальном отчете, а СКД тем более может
4 Goggy
 
06.09.11
10:12
Можно.
5 Goggy
 
06.09.11
10:13
ёк макарёк, опоздал))
6 Марина Викторовна
 
06.09.11
10:19
Нужно сделать чтобы выбирался месяц (месяцы), а по ним отбирались за несколько лет данные. как это сделать?
7 nicxxx
 
06.09.11
10:20
наверно проще всего будет использовать внешний источник данных, а таблицу значений этого источника заполнять программно
8 Марина Викторовна
 
06.09.11
10:33
(7) можно поподробнее? я с таким еще не сталкивалась...
9 nicxxx
 
06.09.11
10:35
поподробней у Хрусталевой. а пример вывода пожалуйста:
//здесь идет описание текста запроса, он у вас будет свой
//а далее вывод результата в СКД
РезультатЗапроса = Запрос.Выполнить();
   ТаблицаБДР = РезультатЗапроса.Выгрузить();
   //ТаблицаБДР = РезультатЗапроса.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);//так нельзя, 1С падает
   
   ВнешниеНаборыДанных = Новый Структура;
   ВнешниеНаборыДанных.Вставить("ТаблицаБДР", ТаблицаБДР);
   
   КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
   
   Схема = Отчеты.БюджетДоходовИРасходов_ИстДанн_Объект.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
   
   МакетКомпоновки = КомпоновщикМакета.Выполнить(Схема, Отчет.КомпоновщикНастроек.Настройки);
   
   ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
   ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных,,Истина);
   
   ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
   ПроцессорВывода.УстановитьДокумент(Результат);
   
   //убирает надпись "Отчет не сформирован"
   Элементы.Результат.ОтображениеСостояния.ДополнительныйРежимОтображения  = ДополнительныйРежимОтображения.НеИспользовать;
   Элементы.Результат.ОтображениеСостояния.Видимость  = Ложь;
   
   Результат.Очистить();
   
   ПроцессорВывода.Вывести(ПроцессорКомпоновки);
10 Марина Викторовна
 
06.09.11
10:45
получается именно в запросе надо задать периоды? у меня именно с периодами проблема
11 nicxxx
 
06.09.11
10:57
да, в запросе.
можно выбрать данные за все года и свернуть по месяцам, а затем в условии запроса написать что-то вроде "Где Период в &СписокПериодов", но это увеличит время работы запроса.
можно сделать несколько запросов и по очереди слить их в таблицу значений
12 Марина Викторовна
 
06.09.11
11:11
Спасибо, попробую это сделать
13 Марина Викторовна
 
06.09.11
11:52
А если сделать несколько наборов данных с разными периодами? а потом эти периоды выбирать, так не лучше будет?
14 nicxxx
 
06.09.11
12:57
ну если тебе так проще... хотя мне кажется, когда все в одном месте описано, как-то легче разбиратьс
15 Марина Викторовна
 
08.09.11
11:32
Делаю набор данных объект, определяю параметры ДатаНач и ДатаКон, в модуле объекта пытаюсь получить их

ДатаНач = НастройкиКомпоновки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ДатаНач"));
ДатаКон = НастройкиКомпоновки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ДатаКон"));

а у меня значение показывает 01.01.0001, хотя я в форме отчета задаю параметры эти как начало и конец текущего месяца
16 nicxxx
 
09.09.11
10:00
если у тебя эти параметры определены как пользовательские , т.е. доступны из формы, то надо определять именно пользовательские параметры, вот здесь : Отчет.КомпоновщикНастроек.ПользовательскиеНастройки
а у тебя НастройкиКомпоновки откуда берутся?
если же эти параметры пользователю не доступны, то вот так должно работать:
   Эл2 = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("НачалоПериода");
   Эл2.Значение = НачалоГода(Год);
   Эл2.Использование = Истина;
   
   Эл2 = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("КонецПериода");
   Эл2.Значение = КонецГода(Год);
   Эл2.Использование = Истина;
//переменная Год у меня определена ранее
17 chingiz
 
09.09.11
10:42
У меня в форме сделано так:
Процедура НачалоПериодаПриИзменении(Элемент)
   
   ДатаНач = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("НачалоПериода");
   ДатаНач.Значение = Новый СтандартнаяДатаНачала;
   ДатаНач.Значение.Вариант = ВариантСтандартнойДатыНачала.ПроизвольнаяДата;
   ДатаНач.Значение.Дата = НачалоПериода;    
   
КонецПроцедуры

Процедура КонецПериодаПриИзменении(Элемент)
   
   ДатаКон = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("КонецПериода");
   ДатаКон.Значение = Новый СтандартнаяДатаНачала;
   ДатаКон.Значение.Вариант = ВариантСтандартнойДатыНачала.ПроизвольнаяДата;
   ДатаКон.Значение.Дата = КонецПериода;    

КонецПроцедуры

И кнопка выбора периода
 Процедура ВыбПериодНажатие(Элемент)
НастройкаПериода = Новый НастройкаПериода;
   НастройкаПериода.УстановитьПериод(НачалоПериода, ?(КонецПериода='0001-01-01', КонецПериода, КонецДня(КонецПериода)));
   НастройкаПериода.РедактироватьКакИнтервал = Истина;
   НастройкаПериода.РедактироватьКакПериод = Истина;
   НастройкаПериода.ВариантНастройки = ВариантНастройкиПериода.Период;
   Если НастройкаПериода.Редактировать() Тогда
       НачалоПериода = НастройкаПериода.ПолучитьДатуНачала();
       КонецПериода = НастройкаПериода.ПолучитьДатуОкончания();
   КонецЕсли;

   НачалоПериодаПриИзменении(НачалоПериода);
   КонецПериодаПриИзменении(КонецПериода);

КонецПроцедуры
18 Eugeneer
 
09.09.11
10:43
(0) можна
19 Eugeneer
 
09.09.11
10:45
надо делать списко и использовать Период В.
Никаких наборов и кучи запросов. Потому что может быть задача выбирать любое количество периодов. Ты каждый раз будешь писать запрос и переделывать?
20 Марина Викторовна
 
09.09.11
19:24
Сделала 3 набора данных (для 2009, 2010, 2011 годов), параметр Период один - для остальных наборов передаю через добавить к дате =)
(16) я получала просто настройки, наверное ты прав, надо было пользователькие брать. вроде пока клиент удовлетворен, а я с понедельника отправляюсь в отпуск =)
Всем большое спасибо