Имя: Пароль:
1C
1С v8
Получить программный код СКД из хмл файла настроек СКД
,
0 trialex3
 
27.11.22
21:11
Всем привет. Есть файл хмл с простейшей настройкой СКД. Нужно узнать как программа формирует отборы в группировке кодом. Есть какой нибудь способ преобразовать такой файл в код 1С?

Собственно содержимое файла:

<?xml version="1.0" encoding="UTF-8"?>
<Settings xmlns="http://v8.1c.ru/8.1/data-composition-system/settings" xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <selection>
        <item xsi:type="SelectedItemField">
            <field>Наименование</field>
        </item>
        <item xsi:type="SelectedItemField">
            <field>Ссылка</field>
        </item>
        <item xsi:type="SelectedItemField">
            <field>ФИО</field>
        </item>
    </selection>
    <outputParameters/>
    <item xsi:type="StructureItemGroup">
        <filter>
            <item xsi:type="FilterItemComparison">
                <left xsi:type="dcscor:Field">ФИО</left>
                <comparisonType>Contains</comparisonType>
                <right xsi:type="xs:string">Иванов</right>
            </item>
        </filter>
        <order>
            <item xsi:type="OrderItemAuto"/>
        </order>
        <selection>
            <item xsi:type="SelectedItemAuto"/>
        </selection>
        <outputParameters/>
    </item>
    <item xsi:type="StructureItemGroup">
        <filter>
            <item xsi:type="FilterItemComparison">
                <left xsi:type="dcscor:Field">ФИО</left>
                <comparisonType>Contains</comparisonType>
                <right xsi:type="xs:string">Петров</right>
            </item>
        </filter>
        <order>
            <item xsi:type="OrderItemAuto"/>
        </order>
        <selection>
            <item xsi:type="SelectedItemAuto"/>
        </selection>
        <outputParameters/>
    </item>
</Settings>
1 kittystark
 
27.11.22
21:25
(0) 3 поля, 2 группировки с отборами ФИО содержит Иванов / Петров
не пойму суть вопроса - зачем ?

если просто подглядеть - загрузи схему по кнопке снизу слева на самой первой вкладке СКД, там где наборы данных
если что-то другое - поясни
2 trialex3
 
27.11.22
21:28
(1) Да у меня такая задача. Нужно вывести 2 таблицы (2 группировки) из одной ТЗ через программное СКД. То есть сначала таблица с отбором  = петров, а после нее таблица с отбором  = иванов. То есть общие отборы здесь не помогут. Вот я и хотел посмотреть как система формирует отборы к каждой группировке, что бы в коде это повторить. Если я пишу :

//Поля группировки
    Группировки = НастройкиКомпоновки.Структура;
    Группировки.Очистить();
    
    //ДОБАВЛЯЕМ АВТОМАТИЧЕСКОЕ ТЕСТИРОВАНИЕ
    Таблица = НастройкиКомпоновки.Структура.Добавить(Тип("ТаблицаКомпоновкиДанных"));
    
    //Добавляем отбор в первую группировку
    ЭлементОтбора = Таблица.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));        
    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("РежимТестирования");
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
    
    
    ЭлементОтбора.ПравоеЗначение = "AUTOMATIC";    
    
    ЭлементОтбора.Использование = Истина;

То система ругается на синтаксис.
3 trialex3
 
27.11.22
21:40
Ребят если бы тут можно было награду установить за ответ - с удовольствием бы подкинул на пиво, но тут нельзя а этот треклятый вопрос меня мучает уже несколько дней(
4 kittystark
 
27.11.22
22:13
(2) почти...
копни чуть глубже - тот код у тебя стучится до "Структура.Таблица", но даже руками в конструкторе именно на таблицу не получится сделать отбор
отбор сможешь добавить на подчиненные "строки", см. что-то типа

КомпоновщикНастроек.Настройки.Структура[0].Строки[0]
КомпоновщикНастроек.Настройки.Структура[0].Строки[1]
возможно еще далее вложенные Структура[0].Строки[1].Структура.Строки
5 trialex3
 
27.11.22
22:48
(4) Но руками у меня получается добавить отбор. То есть я выводу группировку детальные записи и еще раз детальные записи. В каждую прописываю отбор и все спокойно работает.

Спасибо по поводу подсказки. Буду экспериментировать.
6 trialex3
 
27.11.22
22:51
(4) Вот так например https://yadi.sk/d/vDwWzLuZzkORCg
7 kittystark
 
27.11.22
23:31
не-е-е-е
Таблица = НастройкиКомпоновки.Структура.Добавить(Тип("ТаблицаКомпоновкиДанных"));
тебе добавляет не детальные записи а именно таблицу, у которой в конструкторе есть два подчиненных подпункта "строки" и чуть ниже "колонки",
в которые потом можно добавить группировки или детальные записи

поэтому ковыряй
КомпоновщикНастроек.Настройки.Структура[0]
КомпоновщикНастроек.Настройки.Структура[1]
8 trialex3
 
28.11.22
00:27
(7) Да вы правы по пути НастройкиКомпоновки.Структура[0].Строки[0].Отбор.Элементы можно добавить отбор. И вроде бы он даже работает хоть и странно пока.

Он мне в первой строке отчета создал описание отбора, цифры которые я хотел убрать исчезли, но столбцы все-равно остались. Но это уже прогресс. Спасибо вам. Буду копать дальше)
9 trialex3
 
28.11.22
00:31
(7) Да без отбора цифры появляются а с отбором нет, но столбцы пустые остаются. Странненько.
10 kittystark
 
28.11.22
11:23
нужно ручками сделать вариант настройки отчета, с цифрами как надо,
а потом в отладчике в ПриКомпоновкеРезультата лазишь по всем вложенным веткам КомпоновщикНастроек.Настройки.Структура
и ищешь всякие Отбор.Элементы смотришь на них

повторять до просветления, пока не познаешь дзен
11 trialex3
 
28.11.22
16:53
(10) Если я не ошибаюсь то ПриКомпоновкеРезультата доступно лишь в отчете. А у меня обычная форма. Или я ошибаюсь?
12 kittystark
 
28.11.22
17:29
(11) трудно сказать, что там у тебя...

но что мешает "для посмотреть" создать новый файл внешнего отчета, в нем подгрузить схему, выставить отборы как надо,
подсмотреть как в (10) и забыть про него ?
13 trialex3
 
28.11.22
18:54
(12) Трудно перевести язык из хмл в код 1С. Завтра куплю с инфостарта генератор года скд по хмл и все сделаю
14 kittystark
 
28.11.22
19:40
(13) в первом посте про кнопку
15 Pprog151713
 
29.11.22
08:05
Вот так настройки сбросить в файл можно.
//ЗаписьXML = Новый ЗаписьXML;
//ЗаписьXML.ОткрытьФайл("d:\123.xml");
//СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Настройки);
//ЗаписьXML.Закрыть();
16 trialex3
 
29.11.22
14:07
(12) Короче разобрался в Условном оформлении. Код такой

//Условное оформление для всего отчета

    ЭлементУсловногоОформления = НастройкиКомпоновки.УсловноеОформление.Элементы.Добавить();

    ЭлементОтбора = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.Использование = Истина;
    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Количество");
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;

    ЗначениеПараметра = 0.1;
    ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("МаксимальнаяШирина", ЗначениеПараметра);

    ОформляемоеПоле = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
    ОформляемоеПоле.Поле  = Новый ПолеКомпоновкиДанных("Показатель");
    ОформляемоеПоле.Использование = Истина;

    ОформляемоеПоле = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
    ОформляемоеПоле.Поле  = Новый ПолеКомпоновкиДанных("Количество");

Теперь проблема - если хоть в одном поле есть 0, то колонка исчезает. А там на колонку только в одной строке есть число. А в остальных строках 0. Можно наложить условие что бы условие накладывалось только если по всей колонке 0?

Получается таблица:

фрукт  Кол   ОбщийИтог
Яблоко 1     1
Банан  0     0

Она исчезает полностью , так как в банане 0
17 trialex3
 
29.11.22
14:10
(16) А  так как столбиков КОЛ много и среди них есть такие, где везде 0 - только их и надо убрать)
18 kittystark
 
29.11.22
14:22
условное оформление - это покрасить в основном, трюк с шириной столбца 0.1 хорош, но не всегда
и на сколько я понимаю, в твоем случае надо ковырять не отборы условного оформления, а "чистые" отборы или на отчете / или на группировке

я вот еще раз упомяну: сначала руками сделай нужный тебе вариант настроек, так чтоб отчет формировался руками и показывал то что нужно,
а уже потом пытайся кодом повторить настройки
19 trialex3
 
29.11.22
14:29
(18) Так я все сделал - вариант настроек у меня есть. Я даже его уже в код перевел обработкой. НО. СКД автоматически скрывает пустые ресурсы, когда я делаю это через консоль. А когда я все тоже самое делаю в коде - пустые ресурсы присутствуют. То есть СКД сама как то это делает. Значит надо чтото придумать)
20 trialex3
 
29.11.22
14:30
А отборы у меня на группировке стоят. Они убирают все цифры. Там пусто. Вопрос в визуальном отображении.
21 kittystark
 
29.11.22
14:36
(20) "Вопрос в визуальном отображении"
ну нет
22 trialex3
 
29.11.22
14:36
Вот до оформления - https://yadi.sk/d/0QpA9mQjQqo2VQ
После - https://yadi.sk/d/Y967VyqLZK6YXw
23 kittystark
 
29.11.22
14:37
для начала отдельно поковыряй ТОЛЬКО детальные записи и руками и кодом
24 kittystark
 
29.11.22
14:47
в программном условном оформлении ты говоришь "ЛЮБОЕ (!!!) ноль" -> ширину в 0.1
создай вычисляемое поле и в нем пропиши выражение ресурса ВСЕ(твое поле = 0),
и далее отбор по этому новому полю
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший