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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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