Разбираемся с настройками компоновки данных

Программирование - Практика программирования

Краткая шпаргалка по программной работе с настройками СКД

Заметил, что все чаще приходится программно работать с настройками компоновки. Чтобы лучше понять, из чего они состоят, собрал основные элементы в виде таблицы. Заодно сделал пару картинок, которые показывают соответствие коллекций в конструкторе СКД и объектной модели, так как иногда имя коллекции отличается от заголовка вкладки, на которой располагаются ее элементы.

Соответствие коллекций и вкладок

  

 

 

Состав вложенных коллекций


В таблицах приведены только часто используемые элементы. Остальные можно увидеть в синтаксис помощнике или отладчике. Другими словами, отброшены незначительные детали, чтобы проще было сосредоточить внимание на главных. 

Это позволяет охватить все коллекции одним взглядом, чтобы увидеть основные различия и закономерности. Что помогает лучше понять и запомнить взаимосвязи внутренних объектов.

Опишу один из вариантов как пользоваться таблицами. Пусть нужно программно добавить отбор в корень настроек. В первой колонке находим "Настройки", видим, что они имеют поле "Отбор". Далее находим поле "Отбор" в левой колонке, видим, что оно содержит вложенную коллекцию "Элементы". Также из таблицы видно, что у добавляемого элемента будет тип ЭлементОтбораКомпоновкиДанных и состав полей, которые нужно будет заполнить. Получится, например, такой код:

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

 

Некоторые особенности и закономерности


- Если вложенная коллекция может содержать элементы нескольких типов, то при программном добавлении элемента необходимо указывать тип. 

ВыбранноеПоле = Настройки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));

- Если все элементы в коллекции имеют одинаковый тип, то при добавлении элемента в коллекцию тип указывать не нужно

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

- При добавлении группировки обязательно заполнять две коллекции: ПоляГруппировки и Выбор. В первую коллекцию нужно добавлять поля, по которым нужно группировать, а во вторую - поля, которые нужно выводить в отчет. При этом в Выбор могут попадать не только группировки, но и ресурсы. И еще, не все поля, которые есть в группировке обязательно добавлять в выбранные поля. Например, можно добавить в группировку поле для сортировки, но отключить его в выбранных полях, чтобы оно не отображалось в отчете. Но в большинстве случаев достаточно добавить группировку, как это делает конструктор, например, так:

Группировка = Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));

ПолеГруппировки = Группировка.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
ПолеГруппировки.Использование = Истина;
ПолеГруппировки.Поле = Новый ПолеКомпоновкиДанных("Склад");

ВыбранноеПоле = Группировка.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
ВыбранноеПоле.Использование = Истина;

 

- Тип ЗначениеПараметраНастроекКомпоновкиДанных имеет несколько нелогичную структуру: внутри значения параметра располагается параметр. Хотя логичнее было бы, чтобы в параметре располагалось значение

- Значения параметров компоновки данных добавлять нельзя, их можно только найти и установить

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

 - Некоторые значения параметров могут содержать вложенную коллекцию параметров

 - В коллекции ПараметрыВывода (вкладка "Другие настройки") имена параметорв иногда отличаются от синонимов в конструкторе СКД, что может доставлять неудобства при разработке


Примеры программного создания элементов я повторять не буду, их можно посмотреть тут
 

ps. Насколько я понял, редактор данного ресурса не позволяет объединять ячейки в таблицах, поэтому я выложил таблицы в виде картинок.

См. также

Комментарии
1. albert po (akmelek) 29.10.17 23:45 Сейчас в теме
Спасибо, хорошая статья, пригодится!
almas; Bessondo; +2 1 Ответить
2. Антон Грачев (Fragster) 786 30.10.17 10:46 Сейчас в теме
Тема пользовательских настроек не раскрыта. А с ней - и куча всяких граблей, терпеливо разложенных создателями платформы.
VladC#; IvanovAV; +2 Ответить
3. Monkey Coder (yurii_host) 1567 30.10.17 11:11 Сейчас в теме
Судя по заголовку статьи, в ней рассматривается объект НастройкиКомпоновкиДанных. С пользовательскими еще досконально не разбирался, пока хватало поверхностных знаний для решения своих задач.
4. Александр Васильев (user633533_encantado) 2 30.10.17 11:24 Сейчас в теме
Для кого эта статья ? Пользователю эти знания нафиг не нужны, программист такое и так знает, если он профи.
5. vitkhv vitkhv (vitkhv) 30.10.17 12:12 Сейчас в теме
(4) Может для тех программистов которые еще не профи, но хотят ими стать?
Gang031; sasha777666; Numme; МСН; rmarkovych; Dmitri93; fishca; +7 Ответить
7. Monkey Coder (yurii_host) 1567 30.10.17 23:18 Сейчас в теме
Данная статья будет полезна программистам, которые довольно хорошо ориентируются в конструкторе СКД и хотят получше запомнить, как устроены внутренние коллекции настроек. Вообще, если нужно решить простую задачу, например, установить параметр настроек или добавить отбор, то особых знаний не требуется. Можно погуглить, обойти несколько форумов, найти подходящий пример и исправить под себя. Но мне некоторое время назад попалась задача, для которой необходимо было программно копировать разные элементы СКД. Хорошего решения на форумах я не нашел, пришлось разбираться самостоятельно, сцеплять разношерстные кусочки кода. Чтобы лучше понять все настройки в целом, я все основные элементы и их состав вывел в таблицу. Кроме того, я обратил внимание, что некоторые различия между программными объектами и объектами в конструкторе неочевидны и запутывают понимание. Я предположил, что не я один сталкиваюсь с такими трудностями и решил выложить результат, который у меня получился на данном ресурсе. Возможно он пригодится мне в будущем, возможно он будет полезен кому-нибудь еще.

Ценность данной публикации на мой взгляд именно в краткости. Вот возьмем, к примеру, некий курс по СКД или книгу. Сколько времени нужно, чтобы их просмотреть/прочитать? И при этом мы будем получать очень большое количество повторов: сначала разжевывается то, что мы и так знаем и отсилы 5% новой информации мы почерпнем. И какой результат? Большинство просто сливаются или заранее понимают, что выгода, которые они получат от полного курса меньше, чем затраты на прослушивание/прочтение. Слишком много лишней информации. Похожая ситуация возникает, когда мы открываем в отладчике в точке останова настройки компоновки и пытаемся понять куда смотреть, чтобы найти нужный нам элемент. Но там не все коллекции называются так как мы ожидаем, а также много лишнего и глубокая вложенность. В итоге наше внимание засоряется ненужными полями типа ДоступныеПоляЧегоТоТам
В данной статье, собрано все основное и отброшено все мало востребованное при программной работе с СКД. И все это на одной странице. Вы можете сравнивать их, анализировать просто перемещая глаза по экрану. При этом также подключается и зрительная память. В итоге при программной работе с настройками можно не просто бездумно копипастить код с форумов, а лучше представлять что где лежит и как это нужно заполнять.

И да воды тоже нет, только мои выводы, которые я посчитал полезными. Много времени на ее прочтение вы не потратите, даже если не найдете ничего нового для себя.

Кроме того слуайно нашел ссылку на ИТС, на которой все расписано. Эта страница не попадается, когда она нужна в поиске, например так. Но в ней многое грамотно описано. Поэтому я упомянул ее здесь

В общем, коллеги, если кому данная статья покажется интересной - хорошо, если нет - никто не заставляет читать.
IvanovAV; user774630; Gang031; Климов Сергей; torch; brr; +6 Ответить
9. Тартаковский Геннадий (torch) 13 09.01.18 11:09 Сейчас в теме
Системно и полезно. спс. Именно как шпаргалка - супер. Уверен, что нужна не только начинающим.
10. Валерий М (VmvLer) 09.01.18 11:29 Сейчас в теме
в отладчике более очевидны указанные в статье "данные"

а общих модулях типовых тема более раскрыта.

бесполезная компиляция
11. Дамир Закиров (Dzenn) 92 09.01.18 16:33 Сейчас в теме
Пока не вчитывался, но на первый взгляд хорошая, годная статья
Оставьте свое сообщение