Имя: Пароль:
1C
1С v8
Группировки в отчете
,
0 bonny
 
08.09.11
10:00
Добрый день! Подскажите, пожалуйста, каким образом в отчете на СКД можно программно задавать порядок группировок. Ситуация следующая: есть отчет на СКД и он вызывается из 2х справочников, необходимо, чтобы верхней группировкой был элемент того справочника, из которого вызывается отчет.
Заранее благодарна.
1 Wobland
 
08.09.11
10:08
как это - отчёт вызывается из справочника?
отсортировать тебе результат нужно что-ли? тогда предложу добавить доп. поле и сортировать по нему. ну и что-то типа
ВЫБОР КОГДА Элемент=&НужныйЭлемент ТОГДА 1 ИНАЧЕ 0 КОНЕЦ
2 Wobland
 
08.09.11
10:09
и, кстати, где же оно?
3 bonny
 
08.09.11
10:11
Нет. На форме списка справочника есть кнопка, по которой формирую отчет.
Процедура ПерейтиВрегистр(Команда)
   ФормаРегистра = ПолучитьФорму("РегистрНакопления.Движение.ФормаСписка");
   УсловияОтбора = Новый Структура("Сотрудник", Элементы.Список.ТекущаяСтрока);
   ПараметрыФормы = Новый Структура("Отбор", УсловияОтбора);
   ОткрытьФорму(ФормаРегистра.ИмяФормы,ПараметрыФормы);
КонецПроцедуры

В настройках отчета задан порядок группировки: Сотрудник, номенклатура. Нужно открыть отчет из справочника "Номенклатура" с группировкой Номенклатура, сотрудник. Как это задать программно?

Может я что-то не так объясняю, извините, я просто новичок
4 Wobland
 
08.09.11
10:15
(3) ещё раз ничего не понял. как программно запустить отчёт?
может, как-то я не так понимаю, извините, я не местный
5 bonny
 
08.09.11
10:19
простите, пожалуйста, я закрутилась совсем, сейчас
6 bonny
 
08.09.11
10:21
&НаКлиенте
Процедура СформироватьОтчетПоДвижениям(Команда)
   ФормаОтчета = ПолучитьФорму("Отчет.ОтчетПоДвижению.ФормаОбъекта");
   УсловияОтбора = Новый Структура("Сотрудник", Элементы.Список.ТекущаяСтрока);
   ПараметрыФормы = Новый Структура("Отбор, СформироватьПриОткрытии", УсловияОтбора, Истина);
   
   ОткрытьФорму(ФормаОтчета.ИмяФормы, ПараметрыФормы);
   
КонецПроцедуры
7 bonny
 
08.09.11
10:22
(3) это совсем не та процедура
8 Wobland
 
08.09.11
10:23
(7) ты это... раскрутись обратно, собери всё в один пост и выскажи. и фото не забудь
9 askharlov
 
08.09.11
10:27
Надо программно создавать структуру: КомпоновщикНастроек.Настройки.Структура.Добавить()

В одном случае в верхнюю группировку добавлять одну группировку, во втором - другую
10 bonny
 
08.09.11
10:30
Подскажите, пожалуйста, каким образом в отчете на СКД можно программно задавать порядок группировок. Ситуация следующая: есть отчет на СКД и он вызывается из 2х справочников, необходимо, чтобы верхней группировкой был элемент того справочника, из которого вызывается отчет.
В настройках отчета задан порядок группировки: Сотрудник, номенклатура, при открытии из справочника "Сотрудники" отчет формируется нормально. Нужно открыть отчет из справочника "Номенклатура" с группировкой Номенклатура, сотрудник. Как это задать программно, чтобы группировкой первого уровня была номенклатура, а группировкой второго уровня сотрудник?
&НаКлиенте
Процедура СформироватьОтчетПоДвижениям(Команда)
   ФормаОтчета = ПолучитьФорму("Отчет.ОтчетПоДвижению.ФормаОбъекта");
   УсловияОтбора = Новый Структура("Сотрудник", Элементы.Список.ТекущаяСтрока);
   ПараметрыФормы = Новый Структура("Отбор, СформироватьПриОткрытии", УсловияОтбора, Истина);
   
   ОткрытьФорму(ФормаОтчета.ИмяФормы, ПараметрыФормы);
   
КонецПроцедуры

Можно ли как-нибудь передать параметры группировки в СКД?
11 bonny
 
08.09.11
10:34
Я поробовала вот так:
Настройки = ФормаОтчета.Отчет.КомпоновщикНастроек.Настройки;

   ГруппировкаНоменклатура = Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
   ГруппировкаНоменклатура.Использование = ИСТИНА;

   ПолеНоменклатура = ГруппировкаНоменклатура.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
   ПолеНоменклатура.Использование = ИСТИНА;
   ПолеНоменклатура.ТипГруппировки = ТипГруппировкиКомпоновкиДанных.Иерархия;
   ПолеНоменклатура.Поле = Новый ПолеКомпоновкиДанных("Номенклатура");
ФормаОтчета.Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);

Но в итоге ничего не получилось:(
12 askharlov
 
08.09.11
10:57
У тебя не добавлены поля выбора.
Необходимо в конце дописать еще:
ТиповыеОтчеты.ДобавитьАвтоВыбранноеПоле(ГруппировкаНоменклатура);
13 askharlov
 
08.09.11
10:58
Вот рабочий код:
   // Добавляем первую группировку
   НоваяГруппировка = КомпоновщикНастроек.Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
   ПолеГруппировки = НоваяГруппировка.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
   ПолеГруппировки.Поле = Новый ПолеКомпоновкиДанных ("Цех");
   
   ТиповыеОтчеты.ДобавитьАвтоВыбранноеПоле(НоваяГруппировка);
   ТиповыеОтчеты.ДобавитьАвтоЭлементПорядка(НоваяГруппировка);
   
   // Добавляем вторую группировку
   НоваяГруппировка = НоваяГруппировка.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
   ПолеГруппировки = НоваяГруппировка.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
   ПолеГруппировки.Поле = Новый ПолеКомпоновкиДанных ("Склад");
   
   ТиповыеОтчеты.ДобавитьАвтоВыбранноеПоле(НоваяГруппировка);
   ТиповыеОтчеты.ДобавитьАвтоЭлементПорядка(НоваяГруппировка);
   
   // Добавляем детальные записи
   НоваяГруппировка = НоваяГруппировка.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
   
   ТиповыеОтчеты.ДобавитьАвтоВыбранноеПоле(НоваяГруппировка);
   ТиповыеОтчеты.ДобавитьАвтоЭлементПорядка(НоваяГруппировка);
14 askharlov
 
08.09.11
10:58
Детальные записи и автоэлемент порядка не обязательны, а вот автовыбранное поле обязательно должно быть
15 bonny
 
08.09.11
14:22
Что такое "ТиповыеОтчеты"?
16 bonny
 
08.09.11
15:21
Люди, ну подскажите, что не так?
&НаКлиенте
Процедура СформироватьОтчетПоДвижениям(Команда)
   ФормаОтчета = ПолучитьФорму("Отчет.ОтчетПоДвижению.ФормаОбъекта");
       
   Настройки = ФормаОтчета.Отчет.КомпоновщикНастроек.Настройки;
   Настройки.Структура.Очистить();

   //добавить группировку
   //
   ГруппировкаПоНоменклатуре = Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
   ГруппировкаПоНоменклатуре.Имя = "Номенклатура";
   ГруппировкаПоНоменклатуре.Использование = Истина;

   ////созданная группировка по полю "Номенклатура"
   //
   ПолеГруппировкиНоменклатура = ГруппировкаПоНоменклатуре.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));      
   ПолеГруппировкиНоменклатура.Использование      = Истина;
   ПолеГруппировкиНоменклатура.Поле               = Новый ПолеКомпоновкиДанных("Номенклатура");
   ПолеГруппировкиНоменклатура.ТипГруппировки = ТипГруппировкиКомпоновкиДанных.Иерархия;
   ПолеГруппировкиНоменклатура.ТипДополнения      = ТипДополненияПериодаКомпоновкиДанных.БезДополнения;

   ////добавить выводимые поля в группировке: Номенклатура и количество остаток для данной группировки
   //
   ВыбранноеПоле = ГруппировкаПоНоменклатуре.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));    
   ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("Номенклатура");
   ВыбранноеПоле = ГруппировкаПоНоменклатуре.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));    
   ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("КоличествоОстаток");

   ////добавим детальные записи как подгруппу в "Номенклатура". Все отличие только в том, что нет группировки
   //
   ДетальныеЗаписи = ГруппировкаПоНоменклатуре.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
   ДетальныеЗаписи.Имя = "Детальные";
   ДетальныеЗаписи.Использование = Истина;
   ////добавить выводимые поля в детальных записях: Рабочее место и количество остаток
   //
   ВыбранноеПоле = ДетальныеЗаписи.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));  
   ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("РабочееМесто");
   ВыбранноеПоле = ДетальныеЗаписи.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));  
   ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("КоличествоОстаток");

   ФормаОтчета.Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);
   
   ПараметрыФормы = Новый Структура("СформироватьПриОткрытии", Истина);
   
   ОткрытьФорму(ФормаОтчета.ИмяФормы, ПараметрыФормы);
       
КонецПроцедуры
17 askharlov
 
08.09.11
17:40
ТиповыеОтчеты это Общий модуль. Если в твоей конфигурации этого модуля нет, то вот код соответствующих функций:
Функция ДобавитьАвтоВыбранноеПоле(Структура) Экспорт
   
   ВыбранноеПоле = Структура.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
   Возврат ВыбранноеПоле;
   
КонецФункции

Процедура ДобавитьАвтоЭлементПорядка(Строка) Экспорт
   
   ПолеПолеПорядок = Строка.Порядок.Элементы.Добавить(Тип("АвтоЭлементПорядкаКомпоновкиДанных"));
   
КонецПроцедуры
18 bonny
 
09.09.11
15:36
(17) спасибо, большое, только все равно у меня ничего не формируется:(
что-то все же не так я делаю:(
19 bonny
 
09.09.11
15:38
В (16) неправильный код?
20 Челмедведосвин
 
09.09.11
15:39
А если тебе 2 СКД или 2 варианта сделать и выбирать правильный  в зависимости от справочника?
21 bonny
 
09.09.11
15:45
(20) а как передать при формировании не основную схему, а вторую?
22 NorthWoman
 
09.09.11
15:49
Аналогичную проблему решила через создание 2х схем настроек и в зависимости откуда вызывается отчет, выбирала нужную схему.
23 bonny
 
09.09.11
16:00
(22) подскажите, как выбрать схему нужную?