Имя: Пароль:
1C
1С v8
СКД: две схемы в одном отчете (в N-й раз)
,
0 Cmyk32
 
19.11.14
13:16
Всем привет!
У меня есть отчет, который формирует данные либо по клиенту, либо по менеджеру + запросы несколько отличаются. Подготовила две схемы "СКД_Менеджер" и "СКД_Контрагент". На форме переключатель для выбора нужной схемы.

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

Далее, жму "Сформировать". Ошибка: "Поле "Менеджер" не обнаружено".

Подскажите, где ошибаюсь?
1 DS
 
19.11.14
13:23
Кривая схема?
2 Cmyk32
 
19.11.14
13:29
(1) Может кривая. Как понять?
3 sapphire
 
19.11.14
13:30
(0) В способе решения проблемы
4 Cmyk32
 
19.11.14
13:32
(3) Отлично! Ждала этого ответа) Какая альтернатива?
5 DS
 
19.11.14
13:33
(2) Искать поле "Менеджер" в схеме.
6 Cmyk32
 
19.11.14
13:34
(5) Мой код меняет схему скд, но только в части настроек. Получается запрос остается от старой схемы, где был "Контрагент".
7 sapphire
 
19.11.14
13:36
(4) Источник данных - объединение запроса, туда добавляете по отдельности оба запроса.
в каждый запрос(как набор данных) добавить поле, например "Раздел"
и присваивать ему номер, например 1,2 и т.п.

В вариантах же отчета Вы используете отбор по полю раздел.
8 sapphire
 
19.11.14
13:37
и никакого дополнительного кодинга не нужно
9 Cmyk32
 
19.11.14
13:37
(7) Поняла, сейчас попробую.
10 sapphire
 
19.11.14
13:40
ну и самая распространенная ошибка - это инициализация Компоновщика

ЭтотОбъект=РеквизитФормыВЗначение("Отчет");
    Схема=ЭтотОбъект.ПолучитьМакет("СКД_енеджер");
    АдресСхемы=ПоместитьВоВременноеХранилище(Схема,Новый УникальныйИдентификатор());
    КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы));
    КомпоновщикНастроек.ЗагрузитьНастройки(Схема.ВариантыНастроек[0].Настройки);
11 sapphire
 
19.11.14
13:41
+(0) аще глянул в (10) таки очепятко исчо в модуле понеже
....ПолучитьМакет("СКД_Менеджер");//пропущена буква М
12 antoneus
 
19.11.14
13:45
Я бы добавил реквизит объекта (именно объекта), в котором выбирается способ формирования и в процедуре ПриКомпоновкеРезультата в зависимости от значения реквизита уже бы выводил какой надо отчет.
13 sapphire
 
19.11.14
13:46
(12) хм.. а зачем?
14 Cmyk32
 
19.11.14
13:51
(7) Переделала. Так работает!
Но не лишняя ли выборка? - если нужен отчет по менеджеру, то формируются же оба запроса. А отбор по разделу накладывается после получается результата запроса по всем разделам.
15 antoneus
 
19.11.14
13:53
(13) потому что могу)
16 Cmyk32
 
19.11.14
13:54
(12) Если Вы имеете ввиду это?
Процедура ПриКомпоновкеРезультата(...)

СтандартнаяОбработка = Ложь;
//ПРОГРАММНАЯ КОМПАНОВКА И ВЫВОД

То пробовала. У меня засада с параметрами получилась.

СКД = ЭтотОбъект.ПолучитьМакет("СКД_Менеджер");
Настройки = СКД.НастройкиПоУмолчанию;

И когда пытаюсь присвоить параметрам значение, оказывается, что их нет в настройках.
17 sapphire
 
19.11.14
13:55
(14) В чем проблема?
Добавить параметр какая выборка нужна :)
Например, добавляем параметр - &ПоМенеджеру тип булево.
В запросе по контрагентам в конце добавляем условие
&ПоМенеджеру=ЛОЖЬ
, а запросе по менеджеру, наоборот,&ПоМенеджеру=ИСТИНА
18 sapphire
 
19.11.14
13:56
Да вообще можно изгаляться, как с параметрами, так и с чем угодно :)
19 sapphire
 
19.11.14
13:57
(16) Вы невнимательно читали.
см (10). Неверно инициализируется компоновщик настроек.
20 sapphire
 
19.11.14
13:58
+(17) А в параметрах настройки варианта указать явно необходимое значение :)
21 elCust
 
19.11.14
14:26
(0) Капну чуть глубже.

СКД просто выводит строки?

Если так, то легче пользоваться внешним источником, т.е. ТЗ формировать и в СКД выводить.
22 sapphire
 
19.11.14
14:35
(21) Опять же, зачем?! :)))
23 sapphire
 
20.11.14
11:23
(0) Разобрались?
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший