Имя: Пароль:
1C
 
СКД: СКД: Программные настройки
0 Demasiado
 
29.10.09
13:29
Пишу отчет и делаю программную настройку схемы компоновки. Отчет простенький и есть у него три доступных поля которые нужно добавить программно - Склад, Номенклатура, Количество(Остатки).
Добавляю вот так:

   Настройки = ЭтотОбъект.СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
////////////////    
   ГруппировкаСклад = Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
   ГруппировкаСклад.Использование = Истина;    //Добавление полей наборов данных
   
   ПолеСклад = ГруппировкаСклад.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
   ПолеСклад.Использование = Истина;
   ПолеСклад.Поле = Новый ПолеКомпоновкиДанных("Склад");
   
   ВыбранныеПоляДляСклада = ГруппировкаСклад.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
   ВыбранныеПоляДляСклада.Использование = Истина;    //ДобавитьПоляНабораДанных();
   
////////
////////////////    
   ГруппировкаНоменклатура = Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
   ГруппировкаНоменклатура.Использование = Истина;    //Добавление полей наборов данных
   
   ПолеНоменклатура = ГруппировкаНоменклатура.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
   ПолеНоменклатура.Использование = Истина;
   ПолеНоменклатура.Поле = Новый ПолеКомпоновкиДанных("Номенклатура");
   
   ВыбранныеПоляДляНоменклатуры = ГруппировкаНоменклатура.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
   ВыбранныеПоляДляНоменклатуры.Использование = Истина;    //ДобавитьПоляНабораДанных();
   
////////    
////////////////    
   ГруппировкаКоличество = Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
   ГруппировкаКоличество.Использование = Истина;    //Добавление полей наборов данных
   
   ПолеКоличество = ГруппировкаКоличество.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
   ПолеКоличество.Использование = Истина;
   ПолеКоличество.Поле = Новый ПолеКомпоновкиДанных("Количество");
   
   ВыбранныеПоляДляКоличество = ГруппировкаКоличество.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
   ВыбранныеПоляДляКоличество.Использование = Истина;    //ДобавитьПоляНабораДанных();
   
////////
Теперь сами вопросы:
1) Как мне указать что количество - это ресурс? (соответственно варианты функций к этому ресурсу - Сумма, Максимум, Минимум)
2) Сейчас порядок группировки в настройках выглядит вот так
http://i028.radikal.ru/0910/b2/ebc8969135d3.jpg
а хочется по правильному, вот так:
http://i056.radikal.ru/0910/d7/9e08272b953f.jpg
Что нужно исправить в коде?
1 Mort
 
29.10.09
13:33
2) ГруппировкаНоменклатура = ГруппировкаСклад.Структура.Добавить()...
2 Mort
 
29.10.09
13:42
1) Кури ПоляИтога
3 Demasiado
 
29.10.09
13:43
модеры, перекиньте ветку в 8ку, в СКД. Почему то не в ту секцию попало
(2) сенку, сейчас попробую
4 Demasiado
 
29.10.09
13:48
(2) нашел в примере решение своего вопроса 2) у хрусталевой, после твоего наведения.
5 Demasiado
 
29.10.09
13:48
вернее вопроса 1)
6 Mort
 
29.10.09
13:51
В руководстве разработчика 8.2 (не знаю как в 8.1) все гораздо яснее написано чем у Хрусталевой и сама глава по СКД меньше раз в 10, кури лучше его.
7 Demasiado
 
29.10.09
13:57
Да мне сейчас с этим отчетом разобраться, как с нуля без скд построить отчет полностью програмно, если объект данных - запрос. Я тогда смогу тут новичкам статью написать и сам разберусь гораздо лучше:)
8 Mort
 
29.10.09
14:02
Только вчера писал вывод результат запроса в ТЗ с помощью СКД. Вот, вдруг кому пригодится:

   СКД = Новый СхемаКомпоновкиДанных;

   //1. Установить источник данных
   ИсточникДанных = СКД.ИсточникиДанных.Добавить();
   ИсточникДанных.Имя = "Local";
   ИсточникДанных.ТипИсточникаДанных = "Local";

   //2. Определить набор данных - запрос
   Иерархический = Элемент.Метаданные().Иерархический;
   ИмеетВладельца = Элемент.Метаданные().Владельцы.Количество()  > 0;
   СтрокаУсловий = "";
   Если Иерархический Тогда
       СтрокаУсловий = " И Родитель = &Родитель";
   КонецЕсли;
   Если ИмеетВладельца Тогда
       СтрокаУсловий = "И Владелец = &Владелец ";
   КонецЕсли;        

   НаборДанных = СКД.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
   НаборДанных.Элементы.
   Если Вверх Тогда
       НаборДанных.Запрос = "ВЫБРАТЬ ПЕРВЫЕ 1
       |    Ссылка
       |ИЗ
       |    Справочник.ВариантыИспользования
       |ГДЕ
       |    РучнойПорядок < &ЗначениеПорядка " + СтрокаУсловий + "
       |УПОРЯДОЧИТЬ ПО
       |    РучнойПорядок УБЫВ";
   Иначе
       НаборДанных.Запрос = "ВЫБРАТЬ ПЕРВЫЕ 1
       |    Ссылка
       |ИЗ
       |    Справочник.ВариантыИспользования
       |ГДЕ
       |    РучнойПорядок > &ЗначениеПорядка " + СтрокаУсловий + "
       |УПОРЯДОЧИТЬ ПО
       |    РучнойПорядок ВОЗР";
   КонецЕсли;
   
   
   НаборДанных.Имя = "НаборДанных";
   НаборДанных.ИсточникДанных = "Local";
   Поле = НаборДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
   Поле.ПутьКДанным = "Ссылка";  
   Поле.Поле = "Ссылка";
   
   //3. Установить настройки
   КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных;
   КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СКД));
   
   Настройки = КомпоновщикНастроек.ПолучитьНастройки();
   ВыбранноеПоле = Настройки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
   ВыбранноеПоле.Использование=Истина;
   ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("Ссылка");
   Группировка = Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
   Группировка.Использование = Истина;
   ВыбранноеПоле = Группировка.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
   ВыбранноеПоле.Использование = Истина;
   
   Если Иерархический Тогда
       Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("Родитель", Элемент.Родитель);
   КонецЕсли;
   Если ИмеетВладельца Тогда
       Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("Владелец", Элемент.Владелец);
   КонецЕсли;

Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("ЗначениеПорядка", Элемент.РучнойПорядок);
   //4. Получаем макет компоновки
   Компоновщик = Новый КомпоновщикМакетаКомпоновкиДанных;
   МакетКомпоновки = Компоновщик.Выполнить(СКД, Настройки,,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
   //5. Выводим
   ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
   ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);
   Процессор = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
   ТЗ = Процессор.Вывести(ПроцессорКомпоновки);
9 Demasiado
 
29.10.09
15:04
а если я Параметр запроса прописываю не в Компоновщик настроек как у тебя, а в Схему компоновки? Могу ли я там сразу задать значение Параметра? Нужно ли мне  включить этот параметр в НастрокаПоУмолчанию?
У меня сейчас только вот этот кусок кода
   Параметры  = СхемаКомпоновкиДанных.Параметры.Добавить();
   Параметры.Имя = "НаДату";
   Параметры.Заголовок = "МойПериод";
   Параметры.ТипЗначения = Новый ОписаниеТипов("Дата");
   Параметры.Значение = ТекущаяДата();//предустановка
И при попытке открытия "собранной" схемы компановки Конструктором схем вываливается вот такое сообщение.
{Форма.ФормаОтчета(129)}: Ошибка при вызове метода контекста (Следующий): Ошибка компоновки данных
      ЭлементРезультата = ПроцессорКомпоновки.Следующий();
по причине:
Ошибка компоновки данных
по причине:
Ошибка получения данных
по причине:
Ошибка создания набора данных "ОсновнойЗапрос"
по причине:
Ошибка при исполнении запроса набора данных
по причине:
{(8, 44)}: Не задано значение параметра "НаДату"
РегистрНакопления.ТоварыНаСкладах.Остатки(<<?>>&НаДату, ) КАК ТоварыНаСкладахОстатки
10 Demasiado
 
29.10.09
15:53
(9) снимается - разобрался
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший