Имя: Пароль:
1C
1С v8
СКД. Установка НастройкиПоУмолчанию
0 Гот
 
13.03.12
15:14
Добрый день.
Помогите разобраться.
Есть форма, у формы есть реквизит "КомпоновщикНастроек", Тип - "КомпоновщикНастроекКомпоновкиДанных".

На форме есть элемент управления, тип - ТабличноеПоле, Данные- "КомпоновщикНастроек.Настройки.Отбор".
Теперь по порядку.
1. При открытии формы - Инициализирую СКД. Программно.


   СКД = Новый СхемаКомпоновкиДанных;
   
   //1.1 определяем источник данных для схемы
   //для наших целей - текущая ИБ
   Источник = СКД.ИсточникиДанных.Добавить();
   Источник.Имя = "ЛокальнаяБаза";
   Источник.СтрокаСоединения = "";
   Источник.ТипИсточникаДанных = "Local";
   
   //1.2 определяем набор данных
   НаборДанных = СКД.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
   НаборДанных.Имя = "ХозрасчетныйОборотыДтКт";
   НаборДанных.ИсточникДанных = "ЛокальнаяБаза";
   НаборДанных.Запрос = (
   "ВЫБРАТЬ
   |    ХозрасчетныйОборотыДтКт.СчетДт,
   |    ХозрасчетныйОборотыДтКт.СчетКт,
   |    ХозрасчетныйОборотыДтКт.СубконтоДт1,
   |    ХозрасчетныйОборотыДтКт.СубконтоДт2,
   |    ХозрасчетныйОборотыДтКт.СубконтоДт3,
   |    ХозрасчетныйОборотыДтКт.СубконтоКт1,
   |    ХозрасчетныйОборотыДтКт.СубконтоКт2,
   |    ХозрасчетныйОборотыДтКт.СубконтоКт3,
   |    ХозрасчетныйОборотыДтКт.Организация,
   |    ХозрасчетныйОборотыДтКт.ВалютаДт,
   |    ХозрасчетныйОборотыДтКт.ВалютаКт,
   |    ХозрасчетныйОборотыДтКт.ПодразделениеДт,
   |    ХозрасчетныйОборотыДтКт.ПодразделениеКт,
   |    ХозрасчетныйОборотыДтКт.СуммаОборот,
   |    ХозрасчетныйОборотыДтКт.ВалютнаяСуммаОборотДт,
   |    ХозрасчетныйОборотыДтКт.ВалютнаяСуммаОборотКт,
   |    ХозрасчетныйОборотыДтКт.КоличествоОборотДт,
   |    ХозрасчетныйОборотыДтКт.КоличествоОборотКт,
   |    ХозрасчетныйОборотыДтКт.СуммаНУОборотДт,
   |    ХозрасчетныйОборотыДтКт.СуммаНУОборотКт,
   |    ХозрасчетныйОборотыДтКт.СуммаПРОборотДт,
   |    ХозрасчетныйОборотыДтКт.СуммаПРОборотКт,
   |    ХозрасчетныйОборотыДтКт.СуммаВРОборотДт,
   |    ХозрасчетныйОборотыДтКт.СуммаВРОборотКт
   |{ВЫБРАТЬ
   |    СчетДт.*,
   |    СчетКт.*,
   |    СубконтоДт1.*,
   |    СубконтоДт2.*,
   |    СубконтоДт3.*,
   |    СубконтоКт1.*,
   |    СубконтоКт2.*,
   |    СубконтоКт3.*,
   |    Организация.*,
   |    ВалютаДт.*,
   |    ВалютаКт.*,
   |    ПодразделениеДт.*,
   |    ПодразделениеКт.*,
   |    СуммаОборот,
   |    ВалютнаяСуммаОборотДт,
   |    ВалютнаяСуммаОборотКт,
   |    КоличествоОборотДт,
   |    КоличествоОборотКт,
   |    СуммаНУОборотДт,
   |    СуммаНУОборотКт,
   |    СуммаПРОборотДт,
   |    СуммаПРОборотКт,
   |    СуммаВРОборотДт,
   |    СуммаВРОборотКт}
   |ИЗ
   |    РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(&НачалоПериода, &КонецПериода, Регистратор, , , , , ) КАК ХозрасчетныйОборотыДтКт
   |{ГДЕ
   |    ХозрасчетныйОборотыДтКт.СчетДт.*,
   |    ХозрасчетныйОборотыДтКт.СчетКт.*,
   |    ХозрасчетныйОборотыДтКт.СубконтоДт1.*,
   |    ХозрасчетныйОборотыДтКт.СубконтоДт2.*,
   |    ХозрасчетныйОборотыДтКт.СубконтоДт3.*,
   |    ХозрасчетныйОборотыДтКт.СубконтоКт1.*,
   |    ХозрасчетныйОборотыДтКт.СубконтоКт2.*,
   |    ХозрасчетныйОборотыДтКт.СубконтоКт3.*,
   |    ХозрасчетныйОборотыДтКт.Организация.*,
   |    ХозрасчетныйОборотыДтКт.ВалютаДт.*,
   |    ХозрасчетныйОборотыДтКт.ВалютаКт.*,
   |    ХозрасчетныйОборотыДтКт.ПодразделениеДт.*,
   |    ХозрасчетныйОборотыДтКт.ПодразделениеКт.*,
   |    ХозрасчетныйОборотыДтКт.СуммаОборот,
   |    ХозрасчетныйОборотыДтКт.ВалютнаяСуммаОборотДт,
   |    ХозрасчетныйОборотыДтКт.ВалютнаяСуммаОборотКт,
   |    ХозрасчетныйОборотыДтКт.КоличествоОборотДт,
   |    ХозрасчетныйОборотыДтКт.КоличествоОборотКт,
   |    ХозрасчетныйОборотыДтКт.СуммаНУОборотДт,
   |    ХозрасчетныйОборотыДтКт.СуммаНУОборотКт,
   |    ХозрасчетныйОборотыДтКт.СуммаПРОборотДт,
   |    ХозрасчетныйОборотыДтКт.СуммаПРОборотКт,
   |    ХозрасчетныйОборотыДтКт.СуммаВРОборотДт,
   |    ХозрасчетныйОборотыДтКт.СуммаВРОборотКт}"
   );
   
   ПолеИтога = СКД.ПоляИтога.Добавить();
   ПолеИтога.Выражение = "Сумма(СуммаОборот)";
   ПолеИтога.ПутьКДанным = "СуммаОборот";
   
   ПолеИтога = СКД.ПоляИтога.Добавить();
   ПолеИтога.Выражение = "Сумма(ВалютнаяСуммаОборотДт)";
   ПолеИтога.ПутьКДанным = "ВалютнаяСуммаОборотДт";
   
   ПолеИтога = СКД.ПоляИтога.Добавить();
   ПолеИтога.Выражение = "Сумма(ВалютнаяСуммаОборотКт)";
   ПолеИтога.ПутьКДанным = "ВалютнаяСуммаОборотКт";
   
   ПолеИтога = СКД.ПоляИтога.Добавить();
   ПолеИтога.Выражение = "Сумма(КоличествоОборотДт)";
   ПолеИтога.ПутьКДанным = "КоличествоОборотДт";
   
   ПолеИтога = СКД.ПоляИтога.Добавить();
   ПолеИтога.Выражение = "Сумма(КоличествоОборотКт)";
   ПолеИтога.ПутьКДанным = "КоличествоОборотКт";

2. Инициализирую КомпоновщикНастроек (тот, который реквизит формы)

КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СКД));

3. Соответственно, у элемента управления, который "КомпоновщикНастроек.Настройки.Отбор", становятся доступными поля отбора. Все хорошо. Я в форме добавляю отбор, нажимаю выполнить. Чего я хочу добиться - что бы тот отбор, который я указал на форме, "записался" в реквизит "СКД.НастройкиПоУмолчанию".
Наваял вот что (скопипастил).

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

Открывается конструктор. В настройках "Вариант "Основной" нет отборов.
Вопрос - Как сделать, что бы были отборы?
1 Defender aka LINN
 
13.03.12
15:25
(0) Настройки по умолчанию задаются в схеме компоновки. Схема <> компоновщик, ферштейн?
2 Гот
 
13.03.12
15:30
(1) Немного. Но я туп, как валенок.

СхемаКомпоновкиДанных (DataCompositionSchema)
НастройкиПоУмолчанию (DefaultSettings)
Использование:

Только чтение.

Вот как-то сюда мне надо вставить то, что у меня сделано при помощи "КомпоновщикНастроекКомпоновкиДанных"

А я не догоняю :(
3 Defender aka LINN
 
13.03.12
15:33
(2) Для зачем?
4 Мигрень
 
13.03.12
15:34
(0) Солько на прошлой неделе с этим разбирался. Там се мудрено и не очевидно - целых два дня убил. Зато сейчас есть классый шаблон для собственных поделок.

Давай мыло - сброшу на почту.
5 Defender aka LINN
 
13.03.12
15:35
(4) Пожалей человека - пусть хоть он научится что-то правильно делать.
6 Гот
 
13.03.12
15:36
(5) Ты в каждой теме по поводу СКД ответить толком не хочешь.
(4) beiner (пес) me (dot) com
Спасибо заранее :)
7 Defender aka LINN
 
13.03.12
15:37
(6) Был бы вопрос - ответил бы.
8 Мигрень
 
13.03.12
15:39
(6) Ушло
9 Гот
 
13.03.12
15:41
(8) Спасибо, получил.
10 Defender aka LINN
 
13.03.12
15:42
(9) Ну удачи, удачи...
11 Гот
 
13.03.12
15:47
(8)

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


Не вопрос - так - работает. Все ОК.

(10) Секптик. Вот тебе вопрос - Как сохранить настройку по умолчанию для СКД (отборы, выбранные поля, и прочее, прочее) в объект "СхемаКомпоновкиДанных" из компонвищика?
12 Defender aka LINN
 
13.03.12
15:51
(11) Доктор, меня все игнорируют... :'(
1. Что будем делать с группами в отборе?
2. ЗАЧЕМ, Б@#$ть?
13 Гот
 
13.03.12
15:54
(12)
1. Будем дорабатывать.
2. Затем.

Процедура СформироватьДвиженияПоПроизвольномуПоказателю(ХранилищеСКД, ПериодНачала, ПериодОкончания, ПроизвольныйПоказатель,УдалятьСтарыеДвижения) Экспорт
   
   СхемаКомпоновкиДанных = ХранилищеСКД.Получить();
   //2. создаем настройки для схемы
   НастройкиКомпоновкиДанных = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
   СхемаКомпоновкиДанных.Параметры.НачалоПериода.Значение = ПериодНачала;
   СхемаКомпоновкиДанных.Параметры.КонецПериода.Значение = Новый Граница(ПериодОкончания, ВидГраницы.Включая);
               
   //3. готовим макет
   КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
   МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиКомпоновкиДанных, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
   
   ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
   ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , , Истина);
   
   ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
   ТаблицаДокументов = Новый ТаблицаЗначений;
   ПроцессорВывода.УстановитьОбъект(ТаблицаДокументов);
   
   ДеревоДанных =  Новый ТаблицаЗначений;
   
   ПроцессорВывода.УстановитьОбъект(ДеревоДанных);
   ПроцессорВывода.Вывести(ПроцессорКомпоновки);
   
   Индекс = 0;
   Всего = ДеревоДанных.Количество();
   
   //ДеревоДанных.ВыбратьСтроку();
   
   Для Каждого СтрокаЗначений Из ДеревоДанных Цикл
       Если Не ЗначениеЗаполнено(СтрокаЗначений.Регистратор) Тогда
           Продолжить;
       КонецЕсли;    
       Индекс = Индекс + 1;
       Регистратор = СтрокаЗначений.Регистратор;
       
       НаборЗаписей = РегистрыНакопления.ОборотыУниверсальныхПоказателей.СоздатьНаборЗаписей();
       НаборЗаписей.Отбор.Регистратор.Значение = Регистратор;
       НаборЗаписей.Прочитать();
       ВремДвижения = НаборЗаписей.Выгрузить();
       Если УдалятьСтарыеДвижения Тогда
           МассивСтрок = ВремДвижения.НайтиСтроки(Новый Структура("Показатель",ПроизвольныйПоказатель));
           Для Каждого СтароеДвижение Из МассивСтрок Цикл
               ВремДвижения.Удалить(СтароеДвижение);
           КонецЦикла;    
       КонецЕсли;
   
       Запись = ВремДвижения.Добавить();
       ЗаполнитьЗначенияСвойств(Запись,СтрокаЗначений);
       Запись.Показатель = ПроизвольныйПоказатель;
       Запись.Период = Регистратор.Дата;
       Запись.Активность = Истина;
       НаборЗаписей.Загрузить(ВремДвижения);
       НаборЗаписей.Записать();

   КонецЦикла;    
         
КонецПроцедуры    

!!!!
НастройкиКомпоновкиДанных = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;

Конечно, я могу настойки для МакетКомпоновки конечно хранить отдельно. Но хочу в СКД в настройках по умолчанию.
14 Defender aka LINN
 
13.03.12
15:55
(13) МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));

Все, проблема решена?
15 Гот
 
13.03.12
15:59
(14) Нет! Потому что там, где выполняется

МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));

Нет "КомпоновщикНастроек".

Настройки редактируются в другом месте, итить. Я не хочу хранить отдельно "КомпоновщикНастроек" и "СхемаКомпоновкиДанных".
Я хочу настройки для для МакетКомпоновки редактировать в форме, и СОХРАНЯТЬ в СхемаКомпоновкиДанных.НастройкиПоУмолчанию.
16 Defender aka LINN
 
13.03.12
16:01
(15) Странное желание, если честно. Сильно прямо в размерах сэкономишь, что ли?
З.Ы. Типовая, али нет?
17 PVV65
 
13.03.12
16:01
(15) Не понял. Ты хочешь хранить настройки между сеансами?
18 Гот
 
13.03.12
16:05
(16) Не экономлю. Ну, академический интерес. Если это невозможно - так не вопрос, я сохраню компоновщик настроек в хранилище, и для выполнения макета его получу из хранилища.

Но, итить! Неужели нельзя настройки по умолчанию из компоновщика настроек сразу записать. То, что я могу обойти Настройки.Отбор, Настройки.ВыбранныеПоля - это понятно. А вот что бы Настройки в Настройки - нет?

(17) Я настройки храню в хранилище значений, и по мере надобности они оттуда извлекаются.
19 Defender aka LINN
 
13.03.12
16:10
(18) Какбе, логика системы проста - схема задает настройки по умолчанию в конфигураторе, которые можно потом поменять Компоновщиком в предприятии. Менять из предприятия то, что задается в конфигураторе - нелогично.

В типовых есть готовая процедура СкопироватьЭлементы().
20 Defender aka LINN
 
13.03.12
16:11
+(19) Но если собираешься хранить прямо настройки в целом - храни лучше настройки компоновщика.
21 Гот
 
13.03.12
16:13
(20) Так и сделал - это логичнее, и удобнее. Спасибо.