Вход | Регистрация
 

Идентификация схемы компоновки данных

Идентификация схемы компоновки данных
Я
   rowvg
 
21.09.21 - 16:10
Подскажите, пожалуйста, как можно идентифицировать схему компоновки данных в обработчике ПриКомпоновкеРезультата(). У меня в отчете их две и мне нужно в коде различать какая текущая?
   acht
 
1 - 21.09.21 - 16:12
(0) Очевидно, что в схамах есть какие-то известные различия, которые можно проверить программно.
   rowvg
 
2 - 21.09.21 - 16:15
(1) имя набора данных можно проверять
Но может ест более изящный способ?
   acht
 
3 - 21.09.21 - 16:26
(2) Что такое "изящество"?
   pechkin
 
4 - 21.09.21 - 16:28
если это уф, то там нельзя никак схему подменить
   rowvg
 
5 - 21.09.21 - 16:29
(4) Я меняю, проблема только с параметрами и отборами. Загружаются по умолчанию пустые.
   rowvg
 
6 - 21.09.21 - 16:30
(3) ИмяСхемы = СхемаКомпоновкиДанных.Имя;
   Pro-tone
 
7 - 21.09.21 - 16:30
(0) в метаданных отчета прописана основная СКД, отладчиком при компоновке понять какая там в свойстве его если подменяется, хотя большой вопрос можно ли ее подменить вообще
   acht
 
8 - 21.09.21 - 16:31
(4) > нельзя никак схему подменить.

ОтчетОбъект = Отчеты.МойОтчет.Создать();
ОтчетОбъект.СхемаКомпоновкиДанных = МояСхемаКомпоновкиДанных;
ОтчетОбъект.КомпоновщикНастроек.ЗагрузитьНастройки(МоиНастройки);
ОтчетОбъект.СкомпоноватьРезультат(Результат, Расшифровка);

Ой =)
   polosov
 
9 - 21.09.21 - 16:31
(4) Это когда стало нельзя?
   pechkin
 
10 - 21.09.21 - 16:31
(5) а как ты меняешь?
   polosov
 
11 - 21.09.21 - 16:32
+(4) А, ты имел в виду в этом событии?
   pechkin
 
12 - 21.09.21 - 16:32
(9) ну кроме как (8), но это немного другое
   acht
 
13 - 21.09.21 - 16:32
Тут кстати ливингстар подобным страдал - пробрасывал информацию в обработчик...
   rowvg
 
14 - 21.09.21 - 16:33
(10)

    СхемаКомпоновкиДанных = ПолучитьМакет("МояСхема");
    
    КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
    НастройкиКомпоновки = КомпоновщикНастроек.ПолучитьНастройки();
    
    КомплновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомплновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиКомпоновки);
    
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);
   acht
 
15 - 21.09.21 - 16:33
(6) У схемы нет ни имени ни иденфтиикатора.
   acht
 
16 - 21.09.21 - 16:34
(14) Это все где происходит - в ПриКомпоновкеРезультата?
   pechkin
 
17 - 21.09.21 - 16:34
можно имя основного варианта использовать
   acht
 
18 - 21.09.21 - 16:35
(17) Чем отличается от (2)?
   polosov
 
19 - 21.09.21 - 16:35
(14) Ну так добавь в отчет реквизит и пиши туда "Схема1" или "Схема2" в момент выбора схемы.
   rowvg
 
20 - 21.09.21 - 16:36
(16) да

(17) его и использую, но это хардкор
   Малыш Джон
 
21 - 21.09.21 - 16:36
(14) >>СхемаКомпоновкиДанных = ПолучитьМакет("МояСхема");

ну вот такой способ идентификации чем не нравится?
   acht
 
22 - 21.09.21 - 16:36
(20) > да
Поздравляю, ты знаешь, что это за схема.
   polosov
 
23 - 21.09.21 - 16:37
(22) Человеку похоже пообедать пора )
   rowvg
 
24 - 21.09.21 - 16:38
(22) да, но это некрасиво потому что хардкор
   rowvg
 
25 - 21.09.21 - 16:39
(23) << Человеку похоже пообедать пора )

Еще раз, это не красиво
   polosov
 
26 - 21.09.21 - 16:40
У человека передоз "Чистого кода", он хардкор с хардкодом путает. Срочно за чтение ЖКК!
   Малыш Джон
 
27 - 21.09.21 - 16:40
(25) какой ты эстет...
   1Сергей
 
28 - 21.09.21 - 16:40
Эстетам не место в индустрии)
   acht
 
29 - 21.09.21 - 16:40
(24) Расскажи, пожадуйста - что ты хочешь. Дай определение "идентифицировать схему компоновки данных в обработчике ПриКомпоновкеРезультата()", исходное положение какое-нибудь.

К накрашенным ресничкам потом аппелировать будешь.
   rowvg
 
30 - 21.09.21 - 16:41
(26) Объясни по-человечески как узнать имя текущей схемы. нет времени читать ЖКК.
 
 
   acht
 
31 - 21.09.21 - 16:42
(30) > нет времени
Нет времени объяснять, извини.
   ДенисЧ
 
32 - 21.09.21 - 16:42
(30) Некогда мотор заводить, ехать надо!
   polosov
 
33 - 21.09.21 - 16:42
Специально проверил, не пятница ли сегодня.
   acht
 
34 - 21.09.21 - 16:44
А вообще любопытное сочетаение - "это не красиво" и "нет времени" =)
   polosov
 
35 - 21.09.21 - 16:46
(30) У тебя схемы будут часто меняться? Почему не оставить хардкодом?
   Малыш Джон
 
36 - 21.09.21 - 16:48
(35) ну видимо два отчета в одном, и нужно по условию либо один, либо другой компоновать
   pechkin
 
37 - 21.09.21 - 16:49
лучше передать нужные параметры в свойства настроек. к схеме не привязываться
   polosov
 
38 - 21.09.21 - 16:51
(36) Так это я понимаю. Просто человек в эстетике боль испытывает, когда встречает в коде
ПолучитьМакет("МояСхема");

Хочет "ПолучитьМакет(МояСхемаВПараметре)", наверное
   rowvg
 
39 - 21.09.21 - 16:51
У меня схемы в отчете меняются, причем первый раз меняется только схема, а Процессор вывода не работает, чтобы пользователь мог сделать настройки отчета с новой схемой. При повторном нажатии нельзя допустить установку той же схемы, иначе загрузятся настройки по умолчанию.
В общем сделал вот так:

Если СхемаКомпоновкиДанных.ИсточникиДанных[0].Имя = "ИсточникДанных2" Тогда
        
КонецЕсли;
   polosov
 
40 - 21.09.21 - 16:53
(39) "Сюжет за-эээ-кручивается"(с)
   rowvg
 
41 - 21.09.21 - 16:55
(38) ПолучитьМакет("МояСхема"); возвращает схему компоновки данных, а мне как раз перед ПолучитьМакет("МояСхема"); нужно понять какая сейчас схема текущая, и в зависимости от этого уже устанавливать новую схему или нет.
   acht
 
42 - 21.09.21 - 16:55
(39) > иначе загрузятся настройки по умолчанию.
Почему ты их берешь из схемы, а не из компоновщика?
   rowvg
 
43 - 21.09.21 - 16:57
Я делаю вот так

    КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
    НастройкиКомпоновки = КомпоновщикНастроек.ПолучитьНастройки();

 А как можно еще?
   acht
 
44 - 21.09.21 - 17:00
(43) Ну, то есть то, что пользователь там на клиенте в настроках компоновки - в отборах, в параметрах, в там структуре накликал, просто берешь и выбрасываешь. Зачем ты с ним так?
   acht
 
45 - 21.09.21 - 17:02
Чой-то это начинает перерастать за рамки консультации на форуме...
Давай-ка с https://uc1.1c.ru/course/1s-predpriyatie-8-3-mehanizm-sistemy-komponovki-dannyh-dlya-nachinayuschih-i-professionalov/#toc начнем?
   rowvg
 
46 - 21.09.21 - 17:04
(44) Потому что меня поставили в такие условия. Пользователь не хочет перед построением отчета знать что у него получится, а я не могу два разных набора данных с разными группировками разместить в одной схеме.
   rowvg
 
47 - 21.09.21 - 17:08
46+ Понимаю и осознаю что вся схема лажа, но мне нужно в одном отчете отображать различные данные с разной структурой, а пользователь не хочет задумываться о том какие отборы он делает. Поэтому если получили противоречивый набор данных то обнуляю их настройки и прошу заполнить заново.
   pechkin
 
48 - 21.09.21 - 17:11
Настройки можно отвязать от схемы. Вернее привязать к 3 схеме. А применять потом. Главное чтобы имена полей совпадали
   hhhh
 
49 - 21.09.21 - 17:12
(47) делай через варианты отчета. Каждому пользователю свой вариант. Даже можешь регистр сведений забацать: пользователь - вариант отчета
   rowvg
 
50 - 21.09.21 - 17:14
Спасибо, попробую
   rowvg
 
51 - 21.09.21 - 17:16
Думал про варианты. Но никто не хочет ничего менять, все хотят чтобы осталось все как есть и к ним никто не подходил.
   rowvg
 
52 - 21.09.21 - 17:17
Вот мой код и он работает

    СтандартнаяОбработка = Ложь;
    
    ВыводимОтчет = Ложь;
    Если СхемаКомпоновкиДанных.ИсточникиДанных[0].Имя = "ИсточникДанных2" Тогда
        ВыводимОтчет = Истина;
    КонецЕсли;

    Если СхемаКомпоновкиДанных.ИсточникиДанных[0].Имя = "ИсточникДанных1" Тогда
        СхемаКомпоновкиДанных = ПолучитьМакет("МояСхема");
        КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
    КонецЕсли;
    НастройкиКомпоновки = КомпоновщикНастроек.ПолучитьНастройки();

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

    Если ВыводимОтчет Тогда
        ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
        ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
        ПроцессорВывода.Вывести(ПроцессорКомпоновки);
    КонецЕсли;
   ДенисЧ
 
53 - 21.09.21 - 17:28
(52) Not hired. Next please
   acht
 
54 - 21.09.21 - 17:33
(52) Эээээ.. там в начале кто-то что-то про красоту и изящество говорил?
   hhhh
 
55 - 21.09.21 - 17:35
(51) так и сделайте, у каждого свой вариант, и запретить им там менять. Жестко для пользователя устанавливать имя варианта.
   ДенисЧ
 
56 - 21.09.21 - 17:39
(54) А разве это не красиво и не изящно? Не... Ты не ценитель Малевича...
   rowvg
 
57 - 22.09.21 - 08:21
(55) С вариантом, наверное, не получится. И вот почему. Варианты определяются в настройках схемы компоновки данных, то есть они задают различные группировки для уже определенных наборов данных, полей, ресурсов. параметров. А в моем случае я имею дело, по сути, с двумя различными отчетами. Во втором отчете ресурсы только название имеют такое же, а заполняются совершенно по - другому, плюс есть ресурсы и поля из других наборов данных, которых нет в первом отчете.

То есть у меня задача сделать не различные варианты представления одних и тех же данных, а совместить в одном отчете два разных отчета.
   rowvg
 
58 - 22.09.21 - 08:26
(54, 56) Человек можно простить жадность, трусость, даже подлость в какой - то мере. Но тролли достойны только презрения. acht и ДенисЧ, западло быть такими как вы.
   rowvg
 
59 - 22.09.21 - 08:33
57+ Если с вариантами работать, то тогда нужно описывать универсальный набор данных, который включает в себя данные двух отчетов одновременно, причем через ВЫБОР КОГДА...


Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.