├── DT-INF
└── PROJECT.PMF
├── .gitignore
├── README.md
├── src
├── Subsystems
│ └── KASL
│ │ ├── KASL.mdo
│ │ └── Subsystems
│ │ └── Модели
│ │ ├── Модели.mdo
│ │ └── Subsystems
│ │ └── МодельОтчета
│ │ └── МодельОтчета.mdo
├── DataProcessors
│ ├── МодельСхемыКомпоновкиДанных
│ │ ├── МодельСхемыКомпоновкиДанных.mdo
│ │ └── ObjectModule.bsl
│ ├── МодельМакетаКомпоновкиДанных
│ │ ├── МодельМакетаКомпоновкиДанных.mdo
│ │ └── ObjectModule.bsl
│ ├── МодельНастройкиКомпоновкиДанных
│ │ ├── МодельНастройкиКомпоновкиДанных.mdo
│ │ └── ObjectModule.bsl
│ └── МодельМакетаОбластиКомпоновкиДанных
│ │ ├── МодельМакетаОбластиКомпоновкиДанных.mdo
│ │ └── ObjectModule.bsl
└── Configuration
│ └── Configuration.mdo
├── .project
└── LICENSE
/DT-INF/PROJECT.PMF:
--------------------------------------------------------------------------------
1 | Manifest-Version: 1.0
2 | Runtime-Version: 8.3.25
3 | Base-Project: KASL-extentions
4 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # IDE
2 | /.metadata/
3 | /.settings/
4 |
5 | # Binary
6 | bin
7 | InfoBases
8 | tools
9 | examples
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Модель отчета на компоновке данных
2 |
3 | Смотрите описание в статье на Инфостарт [Модель СКД](https://infostart.ru/1c/tools/1973473/)
4 |
5 | 
6 |
--------------------------------------------------------------------------------
/src/Subsystems/KASL/KASL.mdo:
--------------------------------------------------------------------------------
1 |
2 |
3 | KASL
4 |
5 | ru
6 | Библиотека подсистем КА
7 |
8 | true
9 | true
10 | Модели
11 |
12 |
--------------------------------------------------------------------------------
/src/Subsystems/KASL/Subsystems/Модели/Модели.mdo:
--------------------------------------------------------------------------------
1 |
2 |
3 | Модели
4 |
5 | ru
6 | Модели
7 |
8 | true
9 | МодельОтчета
10 | Subsystem.KASL
11 |
12 |
--------------------------------------------------------------------------------
/.project:
--------------------------------------------------------------------------------
1 |
2 |
3 | МодельОтчета
4 |
5 |
6 |
7 |
8 |
9 | org.eclipse.xtext.ui.shared.xtextBuilder
10 |
11 |
12 |
13 |
14 |
15 | org.eclipse.xtext.ui.shared.xtextNature
16 | com._1c.g5.v8.dt.core.V8ExtensionNature
17 |
18 |
19 |
--------------------------------------------------------------------------------
/src/DataProcessors/МодельСхемыКомпоновкиДанных/МодельСхемыКомпоновкиДанных.mdo:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | МодельСхемыКомпоновкиДанных
8 |
9 | ru
10 | Модель схемы компоновки данных
11 |
12 | true
13 |
14 |
--------------------------------------------------------------------------------
/src/DataProcessors/МодельМакетаКомпоновкиДанных/МодельМакетаКомпоновкиДанных.mdo:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | МодельМакетаКомпоновкиДанных
8 |
9 | ru
10 | Модель макета компоновки данных
11 |
12 | true
13 |
14 |
--------------------------------------------------------------------------------
/src/DataProcessors/МодельНастройкиКомпоновкиДанных/МодельНастройкиКомпоновкиДанных.mdo:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | МодельНастройкиКомпоновкиДанных
8 |
9 | ru
10 | Модель настройки компоновки данных
11 |
12 | true
13 |
14 |
--------------------------------------------------------------------------------
/src/DataProcessors/МодельМакетаОбластиКомпоновкиДанных/МодельМакетаОбластиКомпоновкиДанных.mdo:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | МодельМакетаОбластиКомпоновкиДанных
8 |
9 | ru
10 | Модель макета области компоновки данных
11 |
12 | true
13 |
14 |
--------------------------------------------------------------------------------
/src/Subsystems/KASL/Subsystems/Модели/Subsystems/МодельОтчета/МодельОтчета.mdo:
--------------------------------------------------------------------------------
1 |
2 |
3 | МодельОтчета
4 |
5 | ru
6 | Модель отчета
7 |
8 | true
9 | DataProcessor.МодельСхемыКомпоновкиДанных
10 | DataProcessor.МодельНастройкиКомпоновкиДанных
11 | DataProcessor.МодельМакетаКомпоновкиДанных
12 | DataProcessor.МодельМакетаОбластиКомпоновкиДанных
13 | Subsystem.KASL.Subsystem.Модели
14 |
15 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2023 Andrey
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/src/Configuration/Configuration.mdo:
--------------------------------------------------------------------------------
1 |
2 |
3 | МодельОтчета
4 |
5 | ru
6 | Модель отчета компоновки данных
7 |
8 | Adopted
9 |
10 | Checked
11 | Checked
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 | KASL
21 | 8.3.25
22 | AddOn
23 | ManagedApplication
24 | Russian
25 | Калякин Андрей
26 | 1.0.0.4
27 |
28 | ru
29 | https://infostart.ru/profile/16301/
30 |
31 |
32 | Русский
33 | Adopted
34 |
35 | Checked
36 |
37 | ru
38 |
39 | Subsystem.KASL
40 | DataProcessor.МодельМакетаКомпоновкиДанных
41 | DataProcessor.МодельМакетаОбластиКомпоновкиДанных
42 | DataProcessor.МодельНастройкиКомпоновкиДанных
43 | DataProcessor.МодельСхемыКомпоновкиДанных
44 |
45 |
--------------------------------------------------------------------------------
/src/DataProcessors/МодельМакетаОбластиКомпоновкиДанных/ObjectModule.bsl:
--------------------------------------------------------------------------------
1 | // Подсистема "Модель отчета"
2 | // Автор: Калякин Андрей Г.
3 | // https://github.com/KalyakinAG/kassl
4 | // https://github.com/KalyakinAG/report-model
5 |
6 | Перем
7 | МакетОбласти Экспорт,
8 | СтрокаТаблицы Экспорт,
9 | ЯчейкаТаблицы Экспорт,
10 | ПолеОбласти Экспорт,
11 | ОформлениеЯчейки Экспорт
12 | ;
13 |
14 | Функция СтрокаТаблицы() Экспорт
15 | СтрокаТаблицы = МакетОбласти.Добавить(Тип("СтрокаТаблицыОбластиКомпоновкиДанных"));
16 | Возврат ЭтотОбъект;
17 | КонецФункции
18 |
19 | Функция ЯчейкаТаблицы() Экспорт
20 | ЯчейкаТаблицы = СтрокаТаблицы.Ячейки.Добавить();
21 | ОформлениеЯчейки = ЯчейкаТаблицы.Оформление;
22 | Возврат ЭтотОбъект;
23 | КонецФункции
24 |
25 | Функция ПолеОбласти(Значение, ФорматЗначения = Неопределено) Экспорт
26 | ПолеОбласти = ЯчейкаТаблицы.Элементы.Добавить(Тип("ПолеОбластиКомпоновкиДанных"));
27 | ПолеОбласти.Значение = Значение;
28 | Если ЗначениеЗаполнено(ФорматЗначения) Тогда
29 | ПолеОбласти.Оформление.УстановитьЗначениеПараметра("Формат", ФорматЗначения);
30 | КонецЕсли;
31 | Возврат ЭтотОбъект;
32 | КонецФункции
33 |
34 | // Для оформления ячейки таблицы используются следующие параметры оформления:
35 | // 1. ЦветФона (BackColor) - тип значения Цвет;
36 | // 2. ЦветТекста (TextColor) - тип значения Цвет;
37 | // 3. ЦветГраницы (BorderColor) - тип значения Цвет;
38 | // 4. СтильГраницы (BorderStyle) - тип значения Линия;
39 | // 5. СтильГраницы.Слева (BorderStyle.Left) - тип значения Линия;
40 | // 6. СтильГраницы.Сверху (BorderStyle.Top) - тип значения Линия;
41 | // 7. СтильГраницы.Справа (BorderStyle.Right) - тип значения Линия;
42 | // 8. СтильГраницы.Снизу (BorderStyle.Bottom) - тип значения Линия;
43 | // 9. Шрифт (Font) - тип значения Шрифт;
44 | // 10. Отступ (Indent) - тип значения Число;
45 | // 11. ГоризонтальноеПоложение (HorizontalAlign) - тип значения ГоризонтальноеПоложение;
46 | // 12. ВертикальноеПоложение (VerticalAlign) - тип значения ВертикальноеПоложение;
47 | // 13. Размещение (Placement) - размещение текста - тип значения ТипРазмещенияТекстаКомпоновкиДанных;
48 | // 14. ОриентацияТекста (TextOrientation) - тип значения Число;
49 | // 15. ВыделятьОтрицательные (MarkNegatives) - тип значения Булево;
50 | // 16. МинимальнаяШирина (MinWidth) - тип значения Число;
51 | // 17. МаксимальнаяШирина (MaxWidth) - тип значения Число;
52 | // 18. МинимальнаяВысота (MinHeight) - тип значения Число;
53 | // 19. МаксимальнаяВысота (MaxHeight) - тип значения Число;
54 | // 20. ОбъединятьПоГоризонтали (HorizontalMerge) - тип значения Булево;
55 | // 21. ОбъединятьПоВертикали (VerticalMerge) - тип значения Булево;
56 | // 22. ГоризонтальныйУровень (HorizontalLevel) - тип значения Число;
57 | // 23. ВертикальныйУровень (VerticalLevel) - тип значения Число;
58 | // 24. Расшифровка (Details) - тип ИдентификаторРасшифровкиКомпоновкиДанных;
59 | // 25. РежимИзмененияРазмераКолонки (ColumnSizeChangeMode) - возможность изменять размер колонки ячейки РежимИзмененияРазмера;
60 | // 26. ОтметкаНезаполненного (MarkIncomplete) - отмечать ячейку как незаполненную - тип значения Булево;
61 | // 27. ФиксироватьСлева (FixLeft) - признак того, что ячейку нужно фиксировать слева Булево;
62 | // 28. ФиксироватьСверху (FixTop) - признак того, что ячейку нужно фиксировать сверху Булево;
63 | // 29. РастягиватьПоГоризонтали (HorizontalStretch) - тип значения Булево. Указывает, что ширина текущей колонки рассчитывается автоматически;
64 | // 30. ВесовойКоэффициентШирины (WidthWeightFactor) - тип значения Число. Весовой коэффициент для автоматического расчета ширины колонки;
65 | // 31. Картинка (Picture) - тип ПараметрКомпоновкиДанных или Картинка. Если содержит параметр, то картинка получается из выражения параметра.
66 | // 32. РазмерКартинки (PictureSize) - тип РазмерКартинки. Способ определения размера картинки;
67 | // 33. ПоложениеТекстаОтносительноКартинки (PictureSizeTextPositionRelativeToPicture) - тип ПоложениеТекстаОтносительноКартинки. Положение текста относительно картинки;
68 | // 34. ГоризонтальноеПоложениеКартинки (PictureHorizontalAlign)- тип ГоризонтальноеПоложение. Размещение картинки по горизонтали;
69 | // 35. ВертикальноеПоложениеКартинки (PictureVerticalAlign) - тип ВертикальноеПоложение. Размещение картинки по вертикали;
70 | // 36. ОтступСлева (LeftMargin) - тип значения {ссылка:Объекты; 154; Число};
71 | // 37. ОтступСправа (RightMargin) - тип значения {ссылка:Объекты; 154; Число};
72 | // 38. ОтступСверху (TopMargin) - тип значения {ссылка:Объекты; 154; Число};
73 | // 39. ОтступСнизу (BottomMargin) - тип значения {ссылка:Объекты; 154; Число}.
74 | Функция Оформление(ИмяПараметра, Значение) Экспорт
75 | ОформлениеЯчейки.УстановитьЗначениеПараметра(ИмяПараметра, Значение);
76 | Возврат ЭтотОбъект;
77 | КонецФункции
78 |
79 | Функция Ширина(Значение) Экспорт
80 | Оформление("МинимальнаяШирина", Значение);
81 | Оформление("МаксимальнаяШирина", Значение);
82 | Возврат ЭтотОбъект;
83 | КонецФункции
84 |
85 | Функция Высота(Значение) Экспорт
86 | Оформление("МинимальнаяВысота", Значение);
87 | Оформление("МаксимальнаяВысота", Значение);
88 | Возврат ЭтотОбъект;
89 | КонецФункции
90 |
91 | Функция Объединять(НомерСтроки1, НомерКолонки1, НомерСтроки2, НомерКолонки2) Экспорт
92 | Для Строка = НомерСтроки1 По НомерСтроки2 Цикл
93 | СтрокаТаблицы = МакетОбласти[Строка - 1];
94 | Для Колонка = НомерКолонки1 По НомерКолонки2 Цикл
95 | ЯчейкаТаблицы = СтрокаТаблицы.Ячейки[Колонка - 1];
96 | ОформлениеЯчейки = ЯчейкаТаблицы.Оформление;
97 | Если Колонка > НомерКолонки1 Тогда
98 | Оформление("ОбъединятьПоГоризонтали", Истина);
99 | КонецЕсли;
100 | Если Строка > НомерСтроки1 Тогда
101 | Оформление("ОбъединятьПоВертикали", Истина);
102 | КонецЕсли;
103 | КонецЦикла;
104 | КонецЦикла;
105 | Возврат ЭтотОбъект;
106 | КонецФункции
107 |
108 | МакетОбласти = Новый МакетОбластиКомпоновкиДанных;
109 |
--------------------------------------------------------------------------------
/src/DataProcessors/МодельНастройкиКомпоновкиДанных/ObjectModule.bsl:
--------------------------------------------------------------------------------
1 | // Подсистема "Модель отчета"
2 | // Автор: Калякин Андрей Г.
3 | // https://github.com/KalyakinAG/kassl
4 | // https://github.com/KalyakinAG/report-model
5 |
6 | Перем Настройки Экспорт;
7 | Перем ВыбранноеПоле;
8 | Перем ГруппаВыбранныхПолей;
9 | Перем ГруппаОтбора;
10 | Перем ЭлементОтбора;
11 | Перем Группировка;
12 | Перем ПолеГруппировки;
13 | Перем Таблица;
14 | Перем ЭлементУсловногоОформления;
15 | Перем ОформляемоеПоле;
16 |
17 | Перем Раздел;
18 | Перем Разделы;
19 |
20 | Функция ЭлементОформления() Экспорт
21 | ЭлементУсловногоОформления = Настройки.УсловноеОформление.Элементы.Добавить();
22 | Возврат ЭтотОбъект;
23 | КонецФункции
24 |
25 | Функция Оформление(ИмяПараметра, ЗначениеПараметра) Экспорт
26 | ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра(ИмяПараметра, ЗначениеПараметра);
27 | Возврат ЭтотОбъект;
28 | КонецФункции
29 |
30 | Функция ОформляемоеПоле(ИмяПоля)
31 | ОформляемоеПоле = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
32 | ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных(ИмяПоля);
33 | ОформляемоеПоле.Использование = Истина;
34 | Возврат ЭтотОбъект;
35 | КонецФункции
36 |
37 | Функция Выбор() Экспорт
38 | Возврат ЭтотОбъект;
39 | КонецФункции
40 |
41 | Функция Поле(ИмяПоля, Заголовок = "") Экспорт
42 | Если Раздел = Разделы.УсловноеОформление Тогда
43 | Возврат ОформляемоеПоле(ИмяПоля);
44 | КонецЕсли;
45 | ЭтоАвтоПоле = ПустаяСтрока(ИмяПоля) ИЛИ ИмяПоля = "*";
46 | Если ЭтоАвтоПоле Тогда
47 | ТипПоля = Тип("АвтоВыбранноеПолеКомпоновкиДанных");
48 | Иначе
49 | ТипПоля = Тип("ВыбранноеПолеКомпоновкиДанных");
50 | КонецЕсли;
51 | Если ГруппаВыбранныхПолей = Неопределено Тогда
52 | Если Группировка = Неопределено Тогда
53 | ВыбранноеПоле = Настройки.Выбор.Элементы.Добавить(ТипПоля);
54 | Иначе
55 | ВыбранноеПоле = Группировка.Выбор.Элементы.Добавить(ТипПоля);
56 | КонецЕсли;
57 | Иначе
58 | ВыбранноеПоле = ГруппаВыбранныхПолей.Элементы.Добавить(ТипПоля);
59 | КонецЕсли;
60 | ВыбранноеПоле.Использование = Истина;
61 | Если ЭтоАвтоПоле Тогда
62 | Возврат ЭтотОбъект;
63 | КонецЕсли;
64 | ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных(ИмяПоля);
65 | Если ЗначениеЗаполнено(Заголовок) Тогда
66 | ВыбранноеПоле.Заголовок = Заголовок;
67 | КонецЕсли;
68 | Возврат ЭтотОбъект;
69 | КонецФункции
70 |
71 | Функция Поля(Поля) Экспорт
72 | Для Каждого ЭлементПоля Из ОбщийКлиентСервер.Массив(Поля) Цикл
73 | Если ТипЗнч(ЭлементПоля) = Тип("Строка") Тогда
74 | Поле(ЭлементПоля);
75 | Продолжить;
76 | КонецЕсли;
77 | Поле(ЭлементПоля.Имя, ЭлементПоля.Заголовок);
78 | КонецЦикла;
79 | Возврат ЭтотОбъект;
80 | КонецФункции
81 |
82 | Функция ГруппаНачать(Заголовок, Расположение = Неопределено) Экспорт
83 | Если ГруппаВыбранныхПолей = Неопределено Тогда
84 | Если Группировка = Неопределено Тогда
85 | ГруппаВыбранныхПолей = Настройки.Выбор.Элементы.Добавить(Тип("ГруппаВыбранныхПолейКомпоновкиДанных"));
86 | Иначе
87 | ГруппаВыбранныхПолей = Группировка.Выбор.Элементы.Добавить(Тип("ГруппаВыбранныхПолейКомпоновкиДанных"));
88 | КонецЕсли;
89 | Иначе
90 | ГруппаВыбранныхПолей = ГруппаВыбранныхПолей.Элементы.Добавить(Тип("ГруппаВыбранныхПолейКомпоновкиДанных"));
91 | КонецЕсли;
92 | ГруппаВыбранныхПолей.Использование = Истина;
93 | ГруппаВыбранныхПолей.Расположение = ?(Расположение = Неопределено, РасположениеПоляКомпоновкиДанных.Авто, Расположение);
94 | ГруппаВыбранныхПолей.Заголовок = Заголовок;
95 | Возврат ЭтотОбъект;
96 | КонецФункции
97 |
98 | Функция ГруппаЗавершить() Экспорт
99 | ГруппаВыбранныхПолей = ГруппаВыбранныхПолей.Родитель;
100 | Возврат ЭтотОбъект;
101 | КонецФункции
102 |
103 | Функция ОтборГруппаНачать(ТипГруппы) Экспорт
104 | Если ГруппаОтбора = Неопределено Тогда
105 | ГруппаОтбора = Настройки.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
106 | Иначе
107 | ГруппаОтбора = ГруппаОтбора.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
108 | КонецЕсли;
109 | ГруппаОтбора.Использование = Истина;
110 | ГруппаОтбора.ТипГруппы = ТипГруппы;
111 | Возврат ЭтотОбъект;
112 | КонецФункции
113 |
114 | Функция ОтборГруппаИНачать() Экспорт
115 | ОтборГруппаНачать(ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ);
116 | Возврат ЭтотОбъект;
117 | КонецФункции
118 |
119 | Функция ОтборГруппаИЛИНачать() Экспорт
120 | ОтборГруппаНачать(ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли);
121 | Возврат ЭтотОбъект;
122 | КонецФункции
123 |
124 | Функция ОтборГруппаНЕНачать() Экспорт
125 | ОтборГруппаНачать(ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаНе);
126 | Возврат ЭтотОбъект;
127 | КонецФункции
128 |
129 | Функция ОтборГруппаЗавершить() Экспорт
130 | ГруппаОтбора = ГруппаОтбора.Родитель;
131 | Возврат ЭтотОбъект;
132 | КонецФункции
133 |
134 | Функция Отбор(ИмяПоля, ВидСравнения = Неопределено, Значение) Экспорт
135 | Если ГруппаОтбора = Неопределено Тогда
136 | ЭлементОтбора = Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
137 | Иначе
138 | ЭлементОтбора = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
139 | КонецЕсли;
140 | ЭлементОтбора.Использование = Истина;
141 | ЭлементОтбора.ЛевоеЗначение = ?(ТипЗнч(ИмяПоля) = Тип("Строка"), Новый ПолеКомпоновкиДанных(ИмяПоля), ИмяПоля);
142 | ЭлементОтбора.ПравоеЗначение = Значение;
143 | ЭлементОтбора.ВидСравнения = ?(ВидСравнения = Неопределено, ВидСравненияКомпоновкиДанных.Равно, ВидСравнения);
144 | Возврат ЭтотОбъект;
145 | КонецФункции
146 |
147 | Функция Порядок(ИмяПоля, ТипУпорядочивания = Неопределено) Экспорт
148 | ЭлементПорядка = Настройки.Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных"));
149 | ЭлементПорядка.Поле = Новый ПолеКомпоновкиДанных(ИмяПоля);
150 | Если ТипЗнч(ТипУпорядочивания) = Тип("Строка") Тогда
151 | Если ТипУпорядочивания = "-" Тогда
152 | ЭлементПорядка.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Убыв;
153 | Иначе
154 | ЭлементПорядка.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр;
155 | КонецЕсли;
156 | Иначе
157 | ЭлементПорядка.ТипУпорядочивания = ?(ТипУпорядочивания = Неопределено, НаправлениеСортировкиКомпоновкиДанных.Возр, ТипУпорядочивания);
158 | КонецЕсли;
159 | ЭлементПорядка.Использование = Истина;
160 | Возврат ЭтотОбъект;
161 | КонецФункции
162 |
163 | Функция ГруппировкаНачать(ИмяГруппировки = Неопределено) Экспорт
164 | Если Группировка = Неопределено Тогда
165 | Группировка = Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
166 | ИначеЕсли ТипЗнч(Группировка) = Тип("ГруппировкаТаблицыКомпоновкиДанных") Тогда
167 | Группировка = Группировка.Структура.Добавить();
168 | Иначе
169 | Группировка = Группировка.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
170 | КонецЕсли;
171 | Группировка.Использование = Истина;
172 | Если ИмяГруппировки <> Неопределено Тогда
173 | Группировка.Имя = ИмяГруппировки;
174 | КонецЕсли;
175 | // ВыбранноеПоле = Группировка.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
176 | // ВыбранноеПоле.Использование = Истина;
177 | Возврат ЭтотОбъект;
178 | КонецФункции
179 |
180 | Функция ПолеГруппировки(ПутьКДанным) Экспорт
181 | Если ПутьКДанным = "*" Тогда
182 | ПолеГруппировки = Группировка.ПоляГруппировки.Элементы.Добавить(Тип("АвтоПолеГруппировкиКомпоновкиДанных"));
183 | Возврат ЭтотОбъект;
184 | КонецЕсли;
185 | ПолеГруппировки = Группировка.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
186 | ПолеГруппировки.Использование = Истина;
187 | ПолеГруппировки.Поле = ?(ТипЗнч(ПутьКДанным) = Тип("Строка"), Новый ПолеКомпоновкиДанных(ПутьКДанным), ПутьКДанным);
188 | Возврат ЭтотОбъект;
189 | КонецФункции
190 |
191 | Функция ГруппировкаЗавершить() Экспорт
192 | Группировка = Группировка.Родитель;
193 | Возврат ЭтотОбъект;
194 | КонецФункции
195 |
196 | Функция ТаблицаНачать() Экспорт
197 | Если Группировка = Неопределено Тогда
198 | Таблица = Настройки.Структура.Добавить(Тип("ТаблицаКомпоновкиДанных"));
199 | Иначе
200 | Таблица = Группировка.Структура.Добавить(Тип("ТаблицаКомпоновкиДанных"));
201 | КонецЕсли;
202 | Возврат ЭтотОбъект;
203 | КонецФункции
204 |
205 | Функция ТаблицаЗавершить() Экспорт
206 | Группировка = Таблица.Родитель;
207 | Таблица = Неопределено;
208 | Возврат ЭтотОбъект;
209 | КонецФункции
210 |
211 | Функция Строки() Экспорт
212 | Группировка = Таблица.Строки.Добавить();
213 | Группировка.Использование = Истина;
214 | ВыбранноеПоле = Группировка.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
215 | ВыбранноеПоле.Использование = Истина;
216 | Возврат ЭтотОбъект;
217 | КонецФункции
218 |
219 | Функция Колонки() Экспорт
220 | Группировка = Таблица.Колонки.Добавить();
221 | Группировка.Использование = Истина;
222 | ВыбранноеПоле = Группировка.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
223 | ВыбранноеПоле.Использование = Истина;
224 | Возврат ЭтотОбъект;
225 | КонецФункции
226 |
227 | Функция Параметр(ИмяПараметра, Значение) Экспорт
228 | Если Раздел = Разделы.ПараметрыВывода Тогда
229 | Если Группировка = Неопределено Тогда
230 | Параметр = Настройки.ПараметрыВывода.Элементы.Найти(ИмяПараметра);
231 | Иначе
232 | Параметр = Группировка.ПараметрыВывода.Элементы.Найти(ИмяПараметра);
233 | КонецЕсли;
234 | Если Параметр = Неопределено Тогда
235 | ВызватьИсключение "Неизвестный параметр вывода " + ИмяПараметра;
236 | КонецЕсли;
237 | Параметр.Значение = Значение;
238 | Параметр.Использование = Истина;
239 | ИначеЕсли Раздел = Разделы.ПараметрыДанных Тогда
240 | Параметр = Настройки.ПараметрыДанных.Элементы.Добавить();
241 | Параметр.Параметр = Новый ПараметрКомпоновкиДанных(ИмяПараметра);
242 | Параметр.Значение = Значение;
243 | Параметр.Использование = Истина;
244 | Иначе
245 | ВызватьИсключение "Не задан контекст для параметра настройки СКД!";
246 | КонецЕсли;
247 | Возврат ЭтотОбъект;
248 | КонецФункции
249 |
250 | Функция Измерения() Экспорт
251 | Раздел = Разделы.Измерения;
252 | НомерПериода = 0;
253 | Возврат ЭтотОбъект;
254 | КонецФункции
255 |
256 | Функция Реквизиты() Экспорт
257 | Раздел = Разделы.Реквизиты;
258 | Возврат ЭтотОбъект;
259 | КонецФункции
260 |
261 | Функция Ресурсы() Экспорт
262 | Раздел = Разделы.Ресурсы;
263 | Возврат ЭтотОбъект;
264 | КонецФункции
265 |
266 | Функция Условия() Экспорт
267 | Раздел = Разделы.Условия;
268 | Возврат ЭтотОбъект;
269 | КонецФункции
270 |
271 | Функция УсловноеОформление() Экспорт
272 | Раздел = Разделы.УсловноеОформление;
273 | Возврат ЭтотОбъект;
274 | КонецФункции
275 |
276 | Функция Структура() Экспорт
277 | Раздел = Разделы.Структура;
278 | Возврат ЭтотОбъект;
279 | КонецФункции
280 |
281 | Функция ПараметрыДанных() Экспорт
282 | Раздел = Разделы.ПараметрыДанных;
283 | Возврат ЭтотОбъект;
284 | КонецФункции
285 |
286 | Функция ПараметрыВывода() Экспорт
287 | Раздел = Разделы.ПараметрыВывода;
288 | Возврат ЭтотОбъект;
289 | КонецФункции
290 |
291 | Разделы = Новый Структура("Измерения, Реквизиты, Ресурсы, Условия, УсловноеОформление, Структура, ПараметрыДанных, ПараметрыВывода", 1, 2, 3, 4, 5, 6, 7, 8);
292 |
--------------------------------------------------------------------------------
/src/DataProcessors/МодельМакетаКомпоновкиДанных/ObjectModule.bsl:
--------------------------------------------------------------------------------
1 | // Подсистема "Модель отчета"
2 | // Автор: Калякин Андрей Г.
3 | // https://github.com/KalyakinAG/kassl
4 | // https://github.com/KalyakinAG/report-model
5 |
6 | //@skip-check object-module-export-variable
7 | //@skip-check module-accessibility-at-client
8 |
9 | #Область ОписаниеПеременных
10 |
11 | Перем СхемаКомпоновкиДанных Экспорт;
12 | Перем НастройкиКомпоновкиДанных Экспорт;
13 | Перем ДанныеРасшифровки Экспорт;
14 | Перем КомпоновщикМакета Экспорт;
15 | Перем МакетКомпоновкиДанных Экспорт;
16 | Перем МенеджерВременныхТаблиц Экспорт;
17 | Перем ВнешниеНаборыДанных Экспорт;
18 |
19 | Перем СтруктураМакета Экспорт;
20 | Перем ГруппировкиМакета Экспорт;
21 | Перем ТипГенератора;
22 | Перем ТипыГенераторов;
23 |
24 | #КонецОбласти
25 |
26 | Функция Схема(_Схема) Экспорт
27 | СхемаКомпоновкиДанных = _Схема;
28 | Возврат ЭтотОбъект;
29 | КонецФункции
30 |
31 | Функция Настройки(Настройки) Экспорт
32 | НастройкиКомпоновкиДанных = Настройки;
33 | Возврат ЭтотОбъект;
34 | КонецФункции
35 |
36 | Функция МенеджерВременныхТаблиц(_МенеджерВременныхТаблиц) Экспорт
37 | МенеджерВременныхТаблиц = _МенеджерВременныхТаблиц;
38 | Возврат ЭтотОбъект;
39 | КонецФункции
40 |
41 | Функция ВнешниеНаборыДанных(_ВнешниеНаборыДанных) Экспорт
42 | ВнешниеНаборыДанных = _ВнешниеНаборыДанных;
43 | Возврат ЭтотОбъект;
44 | КонецФункции
45 |
46 | Функция НаборДанных(Данные, Имя = "НаборДанных") Экспорт
47 | Если ТипЗнч(Данные) = Тип("Структура") Тогда
48 | ВнешниеНаборыДанных = Данные;
49 | Возврат ЭтотОбъект;
50 | КонецЕсли;
51 | ВнешниеНаборыДанных.Вставить(Имя, Данные);
52 | Возврат ЭтотОбъект;
53 | КонецФункции
54 |
55 | // ТипГенератора = "ТабличныйДокумент", "ДеревоЗначений", "ТаблицаЗначений"
56 | Функция Скомпоновать(Расшифровка = Неопределено, Генератор = "ТабличныйДокумент") Экспорт
57 | ТипГенератора = ТипыГенераторов[Генератор];
58 | ГруппировкиМакета = Новый Массив;
59 | СтруктураМакета = Новый Массив;
60 | ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных();
61 | КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных();
62 | Если ТипГенератора = ТипыГенераторов.ТабличныйДокумент Тогда
63 | МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиКомпоновкиДанных, ДанныеРасшифровки);
64 | Иначе
65 | МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиКомпоновкиДанных, ДанныеРасшифровки, , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
66 | КонецЕсли;
67 | Расшифровка = ДанныеРасшифровки;
68 | Возврат ЭтотОбъект;
69 | КонецФункции
70 |
71 | Функция СкомпоноватьДеревоЗначений(Расшифровка = Неопределено) Экспорт
72 | Возврат Скомпоновать(Расшифровка, "ДеревоЗначений");
73 | КонецФункции
74 |
75 | Функция СкомпоноватьТаблицуЗначений(Расшифровка = Неопределено) Экспорт
76 | Возврат Скомпоновать(Расшифровка, "ТаблицаЗначений");
77 | КонецФункции
78 |
79 | Функция ВывестиВТабличныйДокумент(Результат = Неопределено) Экспорт
80 | Если Результат = Неопределено Тогда
81 | Результат = Новый ТабличныйДокумент;
82 | КонецЕсли;
83 | ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
84 | ПроцессорКомпоновки.Инициализировать(МакетКомпоновкиДанных, ВнешниеНаборыДанных, ДанныеРасшифровки, , , МенеджерВременныхТаблиц);
85 | // Вывод результата в отчет
86 | ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
87 | ПроцессорВывода.УстановитьДокумент(Результат);
88 | ПроцессорВывода.Вывести(ПроцессорКомпоновки);
89 | Возврат Результат;
90 | КонецФункции
91 |
92 | Функция ВывестиВКоллекциюЗначений(Коллекция) Экспорт
93 | ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
94 | ПроцессорКомпоновки.Инициализировать(МакетКомпоновкиДанных, ВнешниеНаборыДанных, ДанныеРасшифровки, , , МенеджерВременныхТаблиц);
95 | // Вывод результата в дерево значений
96 | ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
97 | ПроцессорВывода.УстановитьОбъект(Коллекция);
98 | ПроцессорВывода.Вывести(ПроцессорКомпоновки);
99 | Возврат Коллекция;
100 | КонецФункции
101 |
102 | Функция Вывести(ТабличныйДокумент = Неопределено) Экспорт
103 | Если ТипГенератора = ТипыГенераторов.ТабличныйДокумент Тогда
104 | Возврат ВывестиВТабличныйДокумент(ТабличныйДокумент);
105 | ИначеЕсли ТипГенератора = ТипыГенераторов.ДеревоЗначений Тогда
106 | Возврат ВывестиВКоллекциюЗначений(Новый ДеревоЗначений);
107 | ИначеЕсли ТипГенератора = ТипыГенераторов.ТаблицаЗначений Тогда
108 | Возврат ВывестиВКоллекциюЗначений(Новый ТаблицаЗначений);
109 | Иначе
110 | ВызватьИсключение "Неизвестный тип генератора компоновки: " + ТипГенератора;
111 | КонецЕсли;
112 | КонецФункции
113 |
114 | Функция ИдентификаторТаблицы(ИдентификаторТаблицы = "") Экспорт
115 | Для Каждого ОписаниеМакета Из МакетКомпоновкиДанных.Макеты Цикл
116 | Макет = ОписаниеМакета.Макет;
117 | Если ТипЗнч(Макет) <> Тип("МакетОбластиКомпоновкиДанных") Тогда
118 | Продолжить;
119 | КонецЕсли;
120 | Для Каждого СтрокаТаблицыОбласти Из Макет Цикл
121 | СтрокаТаблицыОбласти.ИдентификаторТаблицы = ИдентификаторТаблицы;
122 | КонецЦикла;
123 | КонецЦикла;
124 | Возврат ЭтотОбъект;
125 | КонецФункции
126 |
127 | Процедура ЗаполнитьСтруктуруМакета(ЭлементыМакета, ЭлементМакета, МакетКомпоновкиДанных)
128 | ТипЭлемента = ТипЗнч(ЭлементМакета);
129 |
130 | Если ТипЭлемента = Тип("ВложенныйОбъектМакетаКомпоновкиДанных") Тогда
131 | ОписаниеЭлементаМакета = Новый Структура("Тип, Имя, Идентификатор, МакетШапки, МакетПодвала, ПоляГруппировки, Макет, ПодчиненныеЭлементы, Параметры, ПараметрыРасшифровки");
132 | ОписаниеЭлементаМакета.Тип = "ВложенныйОбъектМакетаКомпоновкиДанных";
133 | ЗаполнитьЗначенияСвойств(ОписаниеЭлементаМакета, ЭлементМакета);
134 | ПодчиненныеЭлементы = Новый Массив;
135 | ЗаполнитьСтруктуруМакета(ПодчиненныеЭлементы, ЭлементМакета.КомпоновкаДанных, ЭлементМакета.КомпоновкаДанных);
136 | ОписаниеЭлементаМакета.ПодчиненныеЭлементы = ПодчиненныеЭлементы;
137 | // Для Каждого ОписаниеМакета Из ЭлементМакета.КомпоновкаДанных.Макеты Цикл
138 | // Макет = ОписаниеМакета.Макет;
139 | // Если ТипЗнч(Макет) <> Тип("МакетОбластиКомпоновкиДанных") Тогда
140 | // Продолжить;
141 | // КонецЕсли;
142 | // Макет[0].ИдентификаторТаблицы = ИдентификаторТаблицы;
143 | // КонецЦикла;
144 | Возврат;
145 | КонецЕсли;
146 |
147 | Для Каждого ПодчиненныйЭлементМакета Из ЭлементМакета.Тело Цикл
148 | ТипПодчиненногоЭлемента = ТипЗнч(ПодчиненныйЭлементМакета);
149 | Если ТипПодчиненногоЭлемента = Тип("МакетОбластиМакетаКомпоновкиДанных") Тогда
150 | ОписаниеЭлементаМакета = Новый Структура("Тип, Имя, Идентификатор, МакетШапки, МакетПодвала, ПоляГруппировки, Макет, ПодчиненныеЭлементы, Параметры, ПараметрыРасшифровки");
151 | ОписаниеЭлементаМакета.Тип = "МакетОбластиМакетаКомпоновкиДанных";
152 | ОписаниеЭлементаМакета.Макет = ПодчиненныйЭлементМакета.Макет;
153 | Если ЗначениеЗаполнено(ПодчиненныйЭлементМакета.Макет) Тогда
154 | ОписаниеМакета = МакетКомпоновкиДанных.Макеты.Найти(ПодчиненныйЭлементМакета.Макет);
155 | Параметры = РаботаСМассивом.АТДМассив(ОписаниеМакета.Параметры)
156 | .Отобрать("ТипЗнч(Элемент) = Тип('ПараметрОбластиВыражениеКомпоновкиДанных')")
157 | .Отобразить("Новый Структура('Выражение, Имя', Элемент.Выражение, Элемент.Имя)")
158 | .ВМассив()
159 | ;
160 | ПараметрыРасшифровки = РаботаСМассивом.АТДМассив(ОписаниеМакета.Параметры)
161 | .Отобрать("ТипЗнч(Элемент) = Тип('ПараметрОбластиРасшифровкаКомпоновкиДанных')")
162 | .Отобразить("Новый Структура('ВыраженияПолей, Имя', Элемент.ВыраженияПолей, Элемент.Имя)")
163 | .ВМассив()
164 | ;
165 | Для Каждого Элемент Из ПараметрыРасшифровки ЦИкл
166 | Элемент.ВыраженияПолей = РаботаСМассивом.АТДМассив(Элемент.ВыраженияПолей)
167 | .Отобразить("Новый Структура('Поле, Выражение', Элемент.Поле, Элемент.Выражение)")
168 | .ВМассив()
169 | ;
170 | КонецЦикла;
171 | ОписаниеЭлементаМакета.Параметры = Параметры;
172 | ОписаниеЭлементаМакета.ПараметрыРасшифровки = ПараметрыРасшифровки;
173 | КонецЕсли;
174 | ЭлементыМакета.Добавить(ОписаниеЭлементаМакета);
175 | Продолжить;
176 | КонецЕсли;
177 |
178 | Если ТипПодчиненногоЭлемента = Тип("ГруппировкаМакетаКомпоновкиДанных") Тогда
179 | ПоляГруппировки = РаботаСМассивом.АТДМассив(ПодчиненныйЭлементМакета.Группировка)
180 | .Отобразить("Элемент.ИмяПоля")
181 | .ВМассив()
182 | ;
183 | ОписаниеЭлементаМакета = Новый Структура("Тип, Имя, Идентификатор, МакетШапки, МакетПодвала, ПоляГруппировки, Макет, ПодчиненныеЭлементы, Параметры, ПараметрыРасшифровки");
184 | ОписаниеЭлементаМакета.Тип = Строка(ТипПодчиненногоЭлемента);
185 | ЗаполнитьЗначенияСвойств(ОписаниеЭлементаМакета, ПодчиненныйЭлементМакета);
186 | ОписаниеЭлементаМакета.ПоляГруппировки = ПоляГруппировки;
187 | ГруппировкиМакета.Добавить(Новый Структура("Имя, Макет", ОписаниеЭлементаМакета.Имя, ОписаниеЭлементаМакета));
188 | ПодчиненныеЭлементы = Новый Массив;
189 | ЗаполнитьСтруктуруМакета(ПодчиненныеЭлементы, ПодчиненныйЭлементМакета, МакетКомпоновкиДанных);
190 | ОписаниеЭлементаМакета.ПодчиненныеЭлементы = ПодчиненныеЭлементы;
191 | Если ЗначениеЗаполнено(ПодчиненныйЭлементМакета.МакетПодвала) Тогда
192 | ОписаниеМакета = МакетКомпоновкиДанных.Макеты.Найти(ПодчиненныйЭлементМакета.МакетПодвала);
193 | Параметры = РаботаСМассивом.АТДМассив(ОписаниеМакета.Параметры)
194 | .Отобрать("ТипЗнч(Элемент) = Тип('ПараметрОбластиВыражениеКомпоновкиДанных')")
195 | .Отобразить("Новый Структура('Выражение, Имя', Элемент.Выражение, Элемент.Имя)")
196 | .ВМассив()
197 | ;
198 | ПараметрыРасшифровки = РаботаСМассивом.АТДМассив(ОписаниеМакета.Параметры)
199 | .Отобрать("ТипЗнч(Элемент) = Тип('ПараметрОбластиРасшифровкаКомпоновкиДанных')")
200 | .Отобразить("Новый Структура('ВыраженияПолей, Имя', Элемент.ВыраженияПолей, Элемент.Имя)")
201 | .ВМассив()
202 | ;
203 | Для Каждого Элемент Из ПараметрыРасшифровки ЦИкл
204 | Элемент.ВыраженияПолей = РаботаСМассивом.АТДМассив(Элемент.ВыраженияПолей)
205 | .Отобразить("Новый Структура('Поле, Выражение', Элемент.Поле, Элемент.Выражение)")
206 | .ВМассив()
207 | ;
208 | КонецЦикла;
209 | ОписаниеЭлементаМакета.Параметры = Параметры;
210 | ОписаниеЭлементаМакета.ПараметрыРасшифровки = ПараметрыРасшифровки;
211 | КонецЕсли;
212 | ЭлементыМакета.Добавить(ОписаниеЭлементаМакета);
213 | Продолжить;
214 | КонецЕсли;
215 |
216 | Если ТипПодчиненногоЭлемента = Тип("МакетГруппировкиТаблицыМакетаКомпоновкиДанных") Тогда
217 | ОписаниеЭлементаМакета = Новый Структура("Тип, Имя, Идентификатор, МакетШапки, МакетПодвала, ПоляГруппировки, Макет, ПодчиненныеЭлементы, Параметры, ПараметрыРасшифровки");
218 | ОписаниеЭлементаМакета.Тип = Строка(ТипПодчиненногоЭлемента);
219 | ОписаниеЭлементаМакета.Макет = ПодчиненныйЭлементМакета.Макет;
220 | ЭлементыМакета.Добавить(ОписаниеЭлементаМакета);
221 | Продолжить;
222 | КонецЕсли;
223 |
224 | Если ТипПодчиненногоЭлемента = Тип("ТаблицаМакетаКомпоновкиДанных") Тогда
225 | ОписаниеЭлементаМакета = Новый Структура("Тип, Имя, Идентификатор, МакетШапки, МакетПодвала, ПоляГруппировки, Макет, ПодчиненныеЭлементы, Параметры, ПараметрыРасшифровки");
226 | ОписаниеЭлементаМакета.Тип = Строка(ТипПодчиненногоЭлемента);
227 | ЗаполнитьЗначенияСвойств(ОписаниеЭлементаМакета, ПодчиненныйЭлементМакета);
228 | Колонки = Новый Массив;
229 | Для Каждого ЭлементМакетаКолонки Из ПодчиненныйЭлементМакета.Колонки Цикл
230 | ТипПодчиненногоЭлемента = ТипЗнч(ЭлементМакетаКолонки);
231 |
232 | ПоляГруппировки = РаботаСМассивом.АТДМассив(ЭлементМакетаКолонки.Группировка)
233 | .Отобразить("Элемент.ИмяПоля")
234 | .ВМассив()
235 | ;
236 | ОписаниеПодчиненногоЭлементаМакета = Новый Структура("Тип, Имя, Идентификатор, МакетШапки, МакетПодвала, ПоляГруппировки, Макет, ПодчиненныеЭлементы, Параметры, ПараметрыРасшифровки");
237 | ОписаниеПодчиненногоЭлементаМакета.Тип = Строка(ТипПодчиненногоЭлемента);
238 | ЗаполнитьЗначенияСвойств(ОписаниеПодчиненногоЭлементаМакета, ЭлементМакетаКолонки, "Имя, Идентификатор");
239 | ОписаниеПодчиненногоЭлементаМакета.ПоляГруппировки = ПоляГруппировки;
240 | ОписаниеПодчиненногоЭлементаМакета.МакетШапки = ЭлементМакетаКолонки.МакетШапки.Макет;
241 | ОписаниеПодчиненногоЭлементаМакета.МакетПодвала = ЭлементМакетаКолонки.МакетПодвала.Макет;
242 |
243 | ПодчиненныеЭлементы = Новый Массив;
244 | ЗаполнитьСтруктуруМакета(ПодчиненныеЭлементы, ЭлементМакетаКолонки, МакетКомпоновкиДанных);
245 | ОписаниеПодчиненногоЭлементаМакета.ПодчиненныеЭлементы = ПодчиненныеЭлементы;
246 |
247 | Колонки.Добавить(ОписаниеПодчиненногоЭлементаМакета);
248 | КонецЦикла;
249 |
250 | Строки = Новый Массив;
251 | Для Каждого ЭлементМакетаСтроки Из ПодчиненныйЭлементМакета.Колонки Цикл
252 | ТипПодчиненногоЭлемента = ТипЗнч(ЭлементМакетаСтроки);
253 |
254 | ПоляГруппировки = РаботаСМассивом.АТДМассив(ЭлементМакетаСтроки.Группировка)
255 | .Отобразить("Элемент.ИмяПоля")
256 | .ВМассив()
257 | ;
258 | ОписаниеПодчиненногоЭлементаМакета = Новый Структура("Тип, Имя, Идентификатор, МакетШапки, МакетПодвала, ПоляГруппировки, Макет, ПодчиненныеЭлементы, Параметры, ПараметрыРасшифровки");
259 | ОписаниеПодчиненногоЭлементаМакета.Тип = Строка(ТипПодчиненногоЭлемента);
260 | ЗаполнитьЗначенияСвойств(ОписаниеПодчиненногоЭлементаМакета, ЭлементМакетаСтроки, "Имя, Идентификатор");
261 | ОписаниеПодчиненногоЭлементаМакета.ПоляГруппировки = ПоляГруппировки;
262 | ОписаниеПодчиненногоЭлементаМакета.МакетШапки = ЭлементМакетаСтроки.МакетШапки.Макет;
263 | ОписаниеПодчиненногоЭлементаМакета.МакетПодвала = ЭлементМакетаСтроки.МакетПодвала.Макет;
264 |
265 | ПодчиненныеЭлементы = Новый Массив;
266 | ЗаполнитьСтруктуруМакета(ПодчиненныеЭлементы, ЭлементМакетаСтроки, МакетКомпоновкиДанных);
267 | ОписаниеПодчиненногоЭлементаМакета.ПодчиненныеЭлементы = ПодчиненныеЭлементы;
268 |
269 | Строки.Добавить(ОписаниеПодчиненногоЭлементаМакета);
270 | КонецЦикла;
271 |
272 | ОписаниеЭлементаМакета.Вставить("Колонки", Колонки);
273 | ОписаниеЭлементаМакета.Вставить("Строки", Строки);
274 |
275 | ЭлементыМакета.Добавить(ОписаниеЭлементаМакета);
276 | Возврат;
277 | КонецЕсли;
278 |
279 | ОписаниеЭлементаМакета = Новый Структура("Тип, Имя, Идентификатор, МакетШапки, МакетПодвала, ПоляГруппировки, Макет, ПодчиненныеЭлементы, Параметры, ПараметрыРасшифровки");
280 | ОписаниеЭлементаМакета.Тип = Строка(ТипЭлемента);
281 | ЗаполнитьЗначенияСвойств(ОписаниеЭлементаМакета, ПодчиненныйЭлементМакета);
282 | ПодчиненныеЭлементы = Новый Массив;
283 | ЗаполнитьСтруктуруМакета(ПодчиненныеЭлементы, ПодчиненныйЭлементМакета, МакетКомпоновкиДанных);
284 | ОписаниеЭлементаМакета.ПодчиненныеЭлементы = ПодчиненныеЭлементы;
285 | ЭлементыМакета.Добавить(ОписаниеЭлементаМакета);
286 | КонецЦикла;
287 | КонецПроцедуры
288 |
289 | Функция СтруктураМакета() Экспорт
290 | Если ЗначениеЗаполнено(СтруктураМакета) Тогда
291 | Возврат СтруктураМакета;
292 | КонецЕсли;
293 | ГруппировкиМакета = Новый Массив;
294 | СтруктураМакета = Новый Массив;
295 | ЗаполнитьСтруктуруМакета(СтруктураМакета, МакетКомпоновкиДанных, МакетКомпоновкиДанных);
296 | Возврат СтруктураМакета;
297 | КонецФункции
298 |
299 | Функция ГруппировкиМакета() Экспорт
300 | Если ЗначениеЗаполнено(СтруктураМакета) Тогда
301 | Возврат ГруппировкиМакета;
302 | КонецЕсли;
303 | ГруппировкиМакета = Новый Массив;
304 | СтруктураМакета = Новый Массив;
305 | ЗаполнитьСтруктуруМакета(СтруктураМакета, МакетКомпоновкиДанных, МакетКомпоновкиДанных);
306 | Возврат ГруппировкиМакета;
307 | КонецФункции
308 |
309 | ТипыГенераторов = Новый Структура("ТабличныйДокумент, ДеревоЗначений, ТаблицаЗначений", 1, 2, 3);
310 | ВнешниеНаборыДанных = Новый Структура;
--------------------------------------------------------------------------------
/src/DataProcessors/МодельСхемыКомпоновкиДанных/ObjectModule.bsl:
--------------------------------------------------------------------------------
1 | // Подсистема "Модель отчета"
2 | // Автор: Калякин Андрей Г.
3 | // https://github.com/KalyakinAG/kassl
4 | // https://github.com/KalyakinAG/report-model
5 |
6 | //@skip-check object-module-export-variable
7 | //@skip-check module-accessibility-at-client
8 |
9 | #Область ОписаниеПеременных
10 |
11 | Перем СхемаКомпоновкиДанных Экспорт;
12 | Перем НаборДанных;
13 | Перем ПолеНабораДанных;
14 | Перем ПолеРесурса;
15 | Перем ВычисляемоеПоле;
16 | Перем ПараметрСхемы;
17 | Перем Раздел;
18 | Перем Разделы;
19 | Перем НомерПериода;
20 | Перем Роль;
21 | Перем ВнешниеНаборыДанных Экспорт;
22 | Перем НаборыДанных Экспорт;
23 | Перем КолонкиНабораДанных;
24 | Перем Соединение;
25 | Перем ВариантНастроек;
26 |
27 | Перем Настройки;
28 | Перем ВыбранноеПоле;
29 | Перем ГруппаВыбранныхПолей;
30 | Перем ГруппаОтбора;
31 | Перем ЭлементОтбора;
32 | Перем Группировка;
33 | Перем ПолеГруппировки;
34 | Перем Таблица;
35 | Перем ЭлементУсловногоОформления;
36 | Перем ОформляемоеПоле;
37 |
38 | #КонецОбласти
39 |
40 | #Область ПрограммныйИнтерфейс
41 |
42 | Функция НаборДанныхЗапрос(ТекстЗапроса, ИмяНабораДанных = "НаборДанных") Экспорт
43 | НомерПериода = 0;
44 | НаборДанных = НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
45 | НаборДанных.Имя = ИмяНабораДанных;
46 | НаборДанных.АвтоЗаполнениеДоступныхПолей = Истина;
47 | НаборДанных.ИспользоватьГруппировкиЗапросаЕслиВозможно = Истина;
48 | НаборДанных.Запрос = ТекстЗапроса;
49 | НаборДанных.ИсточникДанных = "ИсточникДанных";
50 | Возврат ЭтотОбъект;
51 | КонецФункции
52 |
53 | Функция НаборДанныхОбъект(Данные, ИмяНабораДанных = "НаборДанных", ИмяОбъекта = Неопределено) Экспорт
54 | КолонкиНабораДанных = Данные.Колонки;
55 | Если НЕ ЗначениеЗаполнено(ИмяОбъекта) Тогда
56 | ИмяОбъекта = ОбщийКлиентСервер.ИмяПоУникальномуИдентификатору();
57 | КонецЕсли;
58 | ВнешниеНаборыДанных.Вставить(ИмяОбъекта, Данные);
59 | НаборДанных = СхемаКомпоновкиДанных.НаборыДанных.Добавить(Тип("НаборДанныхОбъектСхемыКомпоновкиДанных"));
60 | НаборДанных.Имя = ИмяНабораДанных;
61 | НаборДанных.ИмяОбъекта = ИмяОбъекта;
62 | НаборДанных.ИсточникДанных = "ИсточникДанных";
63 | Возврат ЭтотОбъект;
64 | КонецФункции
65 |
66 | Функция ВнутреннееСоединение(НаборДанныхИсточник, НаборДанныхПриемник, Связь = Неопределено) Экспорт
67 | Соединение = СхемаКомпоновкиДанных.СвязиНаборовДанных.Добавить();
68 | Соединение.Обязательная = Истина;
69 | Соединение.НаборДанныхИсточник = НаборДанныхИсточник;
70 | Соединение.НаборДанныхПриемник = НаборДанныхПриемник;
71 |
72 | Если ЗначениеЗаполнено(Связь) Тогда
73 | Связь(Связь);
74 | КонецЕсли;
75 |
76 | Возврат ЭтотОбъект;
77 | КонецФункции
78 |
79 | Функция ЛевоеСоединение(НаборДанныхИсточник, НаборДанныхПриемник) Экспорт
80 | Соединение = СхемаКомпоновкиДанных.СвязиНаборовДанных.Добавить();
81 | Соединение.НаборДанныхИсточник = НаборДанныхИсточник;
82 | Соединение.НаборДанныхПриемник = НаборДанныхПриемник;
83 | Возврат ЭтотОбъект;
84 | КонецФункции
85 |
86 | Функция Связь(СоответствиеПолей) Экспорт
87 | ЭтоПервое = Истина;
88 | Для Каждого Выражение Из ОбщийКлиентСервер.Массив(СоответствиеПолей) Цикл
89 | Если НЕ ЭтоПервое Тогда
90 | Соединение1 = Соединение;
91 | Соединение = СхемаКомпоновкиДанных.СвязиНаборовДанных.Добавить();
92 | ЗаполнитьЗначенияСвойств(Соединение, Соединение1);
93 | КонецЕсли;
94 | ЭтоПервое = Ложь;
95 | Состав = СтрРазделить(Выражение, "= ", Ложь);
96 | Если Состав.Количество() = 1 Тогда
97 | Поле = Состав[0];
98 | Соединение.ВыражениеИсточник = Поле;
99 | Соединение.ВыражениеПриемник = Поле;
100 | Продолжить;
101 | КонецЕсли;
102 | Соединение.ВыражениеИсточник = Состав[0];
103 | Соединение.ВыражениеПриемник = Состав[1];
104 | КонецЦикла;
105 | Возврат ЭтотОбъект;
106 | КонецФункции
107 |
108 | Функция УсловиеСвязи(ВыражениеУсловия) Экспорт
109 | Соединение.УсловиеСвязи = ВыражениеУсловия;
110 | Возврат ЭтотОбъект;
111 | КонецФункции
112 |
113 | Функция ПараметрСвязи(Параметр) Экспорт
114 | Соединение.Параметр = Параметр;
115 | Возврат ЭтотОбъект;
116 | КонецФункции
117 |
118 | Функция НачальноеВыражение(НачальноеВыражениеСвязи) Экспорт
119 | Соединение.НачальноеВыражение = НачальноеВыражениеСвязи;
120 | Возврат ЭтотОбъект;
121 | КонецФункции
122 |
123 | Функция Счет(ИмяПоля, Знач Заголовок = "", Знач ПутьКДанным = "", ВыражениеВидаСчета = Неопределено) Экспорт
124 | Если НЕ ЗначениеЗаполнено(ПутьКДанным) Тогда
125 | ПутьКДанным = ИмяПоля;
126 | КонецЕсли;
127 | Если НЕ ЗначениеЗаполнено(ВыражениеВидаСчета) Тогда
128 | ВыражениеВидаСчета = ИмяПоля + "." + "Вид";
129 | КонецЕсли;
130 | ПолеНабораДанных = НаборДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
131 | ПолеНабораДанных.Поле = ИмяПоля;
132 | ПолеНабораДанных.ПутьКДанным = ПутьКДанным;
133 | ПолеНабораДанных.Заголовок = Заголовок;
134 | Роль = ПолеНабораДанных.Роль;
135 | Если Раздел = Разделы.Измерения Тогда
136 | ПолеНабораДанных.Роль.Измерение = Истина;
137 | КонецЕсли;
138 | Роль.ВыражениеВидаСчета = ВыражениеВидаСчета;
139 | Если КолонкиНабораДанных <> Неопределено Тогда
140 | ПолеНабораДанных.ТипЗначения = КолонкиНабораДанных[ИмяПоля].ТипЗначения;
141 | КонецЕсли;
142 | Возврат ЭтотОбъект;
143 | КонецФункции
144 |
145 | Функция Поле(ИмяПоля, Знач Заголовок = "", Знач ПутьКДанным = "", Выражение = "", Группировки = Неопределено) Экспорт
146 | Если Настройки <> Неопределено Тогда
147 | ПолеНастройки(ИмяПоля, Заголовок);
148 | Возврат ЭтотОбъект;
149 | КонецЕсли;
150 | Если НЕ ЗначениеЗаполнено(ПутьКДанным) Тогда
151 | ПутьКДанным = ИмяПоля;
152 | КонецЕсли;
153 | ПолеНабораДанных = НаборДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
154 | ПолеНабораДанных.Поле = ИмяПоля;
155 | ПолеНабораДанных.Заголовок = Заголовок;
156 | ПолеНабораДанных.ПутьКДанным = ПутьКДанным;
157 | Роль = ПолеНабораДанных.Роль;
158 | Если Раздел = Разделы.Измерения Тогда
159 | ПолеНабораДанных.Роль.Измерение = Истина;
160 | ИначеЕсли Раздел = Разделы.Ресурсы Тогда
161 | ПолеРесурса = СхемаКомпоновкиДанных.ПоляИтога.Добавить();
162 | ПолеРесурса.ПутьКДанным = ПутьКДанным;
163 | ПолеРесурса.Выражение = Выражение;
164 | Если ЗначениеЗаполнено(Группировки) Тогда
165 | ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ПолеРесурса.Группировки, ОбщийКлиентСервер.Массив(Группировки));
166 | КонецЕсли;
167 | КонецЕсли;
168 | Если КолонкиНабораДанных <> Неопределено Тогда
169 | ПолеНабораДанных.ТипЗначения = КолонкиНабораДанных[ИмяПоля].ТипЗначения;
170 | КонецЕсли;
171 | Возврат ЭтотОбъект;
172 | КонецФункции
173 |
174 | //Для оформления используются следующие элементы оформления:
175 | //ЦветФона (BackColor) - тип значения Цвет;
176 | //ЦветТекста (TextColor) - тип значения Цвет;
177 | //ЦветГраницы (BorderColor) - тип значения Цвет;
178 | //СтильГраницы (BorderStyle) - тип значения Линия;
179 | //СтильГраницы.Слева (BorderStyle.Left) - тип значения Линия;
180 | //СтильГраницы.Сверху (BorderStyle.Top) - тип значения Линия;
181 | //СтильГраницы.Справа (BorderStyle.Right) - тип значения Линия;
182 | //СтильГраницы.Снизу (BorderStyle.Bottom) - тип значения Линия;
183 | //Шрифт (Font) - тип значения Шрифт;
184 | //Отступ (Indent) - тип значения Число;
185 | //АвтоОтступ (AutoIndent) - тип значения Число;
186 | //ГоризонтальноеПоложение (HorizontalAlign) - тип значения ГоризонтальноеПоложение;
187 | //ВертикальноеПоложение (VerticalAlign) - тип значения ВертикальноеПоложение;
188 | //Размещение (Placement) - размещение текста - тип значения ТипРазмещенияТекстаКомпоновкиДанных;
189 | //ОриентацияТекста (TextOrientation) - тип значения Число;
190 | //Формат (Format) - тип значения Строка (форматная строка);
191 | //ВыделятьОтрицательные (MarkNegatives) - тип значения Булево;
192 | //МинимальнаяШирина (MinWidth) - тип значения Число;
193 | //МаксимальнаяШирина (MaxWidth) - тип значения Число;
194 | //МинимальнаяВысота (MinHeight) - тип значения Число;
195 | //МаксимальнаяВысота (MaxHeight) - тип значения Число;
196 | //Текст (Text) - тип значения Строка;
197 | //ОтметкаНезаполненного (MarkIncomplete) - отмечать ячейку как незаполненную - тип значения Булево;
198 | //Видимость (Visible) - Булево. Используется только для поля, расположенного в таблице (колонки);
199 | //Доступность (Enabled) - Булево. Используется только для поля, расположенного в таблице (колонки);
200 | //ТолькоПросмотр (ReadOnly) - Булево. Используется только для поля, расположенного в таблице (колонки);
201 | //Отображать (Show) - Булево. Используется только для поля, расположенного в таблице (колонки);
202 | //ЦветВДиаграмме (ColorInChart) - тип значения Цвет. Используется только для серии диаграммы;
203 | //ОтображатьГрафическоеПредставлениеДанныхВДиаграмме (ShowGraphicalRepresentationOfDataOnChart) тип значения ОтображениеВДиаграмме. Используется только для серий диаграммы;
204 | //ОтображатьГрафическоеПредставлениеДанныхВЛегендеДиаграммы (ShowGraphicalRepresentationOfDataInChartLegend) - тип значения ОтображениеВЛегендеДиаграммы. Используется только для серий диаграммы;
205 | //ЛинииТрендаВДиаграмме (ChartTrendlines) - тип значения ЛинииТрендаДиаграммы. Используется только для серий диаграммы;
206 | //ЛинияВДиаграмме (LineInChart) - тип значения Линия. Тип линии серии, полученной из данной группировки. Используется только для серий диаграммы;
207 | //МаркерВДиаграмме (MarkerInChart) - тип значения ТипМаркераДиаграммы. Тип маркера серии, полученной из данной группировки. Используется только для серий диаграммы;
208 | //ИндикаторВДиаграмме (IndicatorInChart) - тип значения Булево. Указывает, что серия, полученная из данной группировки является индикатором. Используется только для серий диаграммы;
209 | //РастягиватьПоГоризонтали (HorizontalStretch) - тип значения Булево. Указывает, что ширина текущей колонки рассчитывается автоматически;
210 | //ВесовойКоэффициентШирины (WidthWeightFactor) - тип значения Число. Весовой коэффициент для автоматического расчета ширины колонки;
211 | //ИнформационнаяЛинияВДиаграмме (ReferenceLineInChart) - тип значения ИнформационнаяЛинияДиаграммы. Информационная линия в диаграмме;
212 | //ИнформационныйИнтервалВДиаграмме (ReferenceBandInChart) - тип значения ИнформационныйИнтервалДиаграммы. Информационный интервал в диаграмме;
213 | //ВыводитьКартинку (PictureOutput) - тип значения ТипВыводаКартинкиКомпоновкиДанных. Способ вывода картинки;
214 | //РазмерКартинки (PictureSize) - тип значения ПоложениеТекстаОтносительноКартинки. Положение текста относительно картинки;
215 | //ПоложениеТекстаОтносительноКартинки (TextPositionRelativeToPicture) - тип значения ПоложениеТекстаОтносительноКартинки. Положение текста относительно картинки;
216 | //ГоризонтальноеПоложениеКартинки (PictureHorizontalAlign) - тип значения ГоризонтальноеПоложение. Размещение картинки по горизонтали;
217 | //ВертикальноеПоложениеКартинки (PictureVerticalAlign) - тип значения ВертикальноеПоложение. Размещение картинки по вертикали;
218 | //ТипГрафическогоПредставленияВДиаграмме (VisualTypeInChart) - тип значения ТипГрафическогоПредставленияСерииДиаграммы.Тип графического представления серии в диаграмме;
219 | //ТипНакопленияВДиаграмме (StackTypeInChart) - тип значения ТипНакопленияСерииДиаграммы. Тип накопления серии, отличный от типа диаграммы. Группа накопления серии создаётся автоматически, на основе элемента условного оформления. Разные элементы условного оформления будут имеют разные группы накопления;
220 | //ИспользуемаяОсьЗначенийВДиаграмме (UsedValueAxisInChart) - тип значения ИспользуемаяОсьЗначенийДиаграммы Настраивает использование дополнительной оси значений в диаграмме;
221 | //Картинка (Picture) - тип значения Картинка;
222 | //РазделительМножественныхЗначений (MultipleValuesSeparator) - тип значения Строка. Содержит разделитель, который вставляется между значениями множественных характеристик. Если параметр не задан, то используется запятая с пробелом;
223 | //ОтступСлева (LeftMargin) - тип значения Число;
224 | //ОтступСправа (RightMargin) - тип значения Число;
225 | //ОтступСверху (TopMargin) - тип значения Число;
226 | //ОтступСнизу (BottomMargin) - тип значения Число.
227 | Функция Оформление(ИмяПараметра, ЗначениеПараметра) Экспорт
228 | Если ЭлементУсловногоОформления <> Неопределено Тогда
229 | ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра(ИмяПараметра, ЗначениеПараметра);
230 | ИначеЕсли ПолеНабораДанных <> Неопределено Тогда
231 | ПолеНабораДанных.Оформление.УстановитьЗначениеПараметра(ИмяПараметра, ЗначениеПараметра);
232 | Иначе
233 | ВызватьИсключение "Неопределен элемент оформления!";
234 | КонецЕсли;
235 | Возврат ЭтотОбъект;
236 | КонецФункции
237 |
238 | Функция ТипЗначения(Тип) Экспорт
239 | ПолеНабораДанных.ТипЗначения = Тип;
240 | Возврат ЭтотОбъект;
241 | КонецФункции
242 |
243 | // Группировки
244 | // Массив, содержащий имена полей, для которых данное поле будет вычисляться в итогах. Через пробел после имени поля возможно указание ключевого слова Иерархия. Добавление данного ключевого слова обозначает, что выражение будет использоваться для иерархических записей группировки по полю, указанному перед словом, и всех вложенных группировок, для которых не задано собственное выражение данного ресурса. В случае, если массив пуст, итог будет вычисляться для всех полей. Может содержать строку ОбщийИтог для указания необходимости вычисления в общем итоге.
245 | Функция ВычисляемоеПоле(ИмяПоля, Знач Заголовок = "", Знач ПутьКДанным = "", Выражение, ВыражениеИтога = Неопределено, Группировки = Неопределено) Экспорт
246 | Если НЕ ЗначениеЗаполнено(ПутьКДанным) Тогда
247 | ПутьКДанным = ИмяПоля;
248 | КонецЕсли;
249 | ВычисляемоеПоле = СхемаКомпоновкиДанных.ВычисляемыеПоля.Добавить();
250 | ВычисляемоеПоле.ПутьКДанным = ПутьКДанным;
251 | ВычисляемоеПоле.Выражение = Выражение;
252 | ВычисляемоеПоле.Заголовок = Заголовок;
253 | Если Раздел = Разделы.Ресурсы Тогда
254 | ПолеРесурса = СхемаКомпоновкиДанных.ПоляИтога.Добавить();
255 | ПолеРесурса.ПутьКДанным = ПутьКДанным;
256 | ПолеРесурса.Выражение = ?(ЗначениеЗаполнено(ВыражениеИтога), ВыражениеИтога, СтрШаблон("СУММА(%1)", ИмяПоля));
257 | Если ЗначениеЗаполнено(Группировки) Тогда
258 | ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ПолеРесурса.Группировки, Группировки);
259 | КонецЕсли;
260 | КонецЕсли;
261 | Возврат ЭтотОбъект;
262 | КонецФункции
263 |
264 | Функция Обязательное() Экспорт
265 | Роль.Обязательное = Истина;
266 | Возврат ЭтотОбъект;
267 | КонецФункции
268 |
269 | Функция Сумма(ИмяПоля, Знач Заголовок = "", Знач ПутьКДанным = "", Группировки = Неопределено) Экспорт
270 | Поле(ИмяПоля, Заголовок, ПутьКДанным, СтрШаблон("СУММА(%1)", ?(ЗначениеЗаполнено(ПутьКДанным), ПутьКДанным, ИмяПоля)), Группировки);
271 | Возврат ЭтотОбъект;
272 | КонецФункции
273 |
274 | Функция Максимум(ИмяПоля, Знач Заголовок = "", Знач ПутьКДанным = "", Группировки = Неопределено) Экспорт
275 | Поле(ИмяПоля, Заголовок, ПутьКДанным, СтрШаблон("МАКСИМУМ(%1)", ?(ЗначениеЗаполнено(ПутьКДанным), ПутьКДанным, ИмяПоля)), Группировки);
276 | Возврат ЭтотОбъект;
277 | КонецФункции
278 |
279 | Функция Минимум(ИмяПоля, Знач Заголовок = "", Знач ПутьКДанным = "", Группировки = Неопределено) Экспорт
280 | Поле(ИмяПоля, Заголовок, ПутьКДанным, СтрШаблон("МИНИМУМ(%1)", ?(ЗначениеЗаполнено(ПутьКДанным), ПутьКДанным, ИмяПоля)), Группировки);
281 | Возврат ЭтотОбъект;
282 | КонецФункции
283 |
284 | Функция Среднее(ИмяПоля, Знач Заголовок = "", Знач ПутьКДанным = "", Группировки = Неопределено) Экспорт
285 | Поле(ИмяПоля, Заголовок, ПутьКДанным, СтрШаблон("СРЕДНЕЕ(%1)", ?(ЗначениеЗаполнено(ПутьКДанным), ПутьКДанным, ИмяПоля)), Группировки);
286 | Возврат ЭтотОбъект;
287 | КонецФункции
288 |
289 | Функция Количество(ИмяПоля, Знач Заголовок = "", Знач ПутьКДанным = "", Группировки = Неопределено) Экспорт
290 | Поле(ИмяПоля, Заголовок, ПутьКДанным, СтрШаблон("КОЛИЧЕСТВО(%1)", ?(ЗначениеЗаполнено(ПутьКДанным), ПутьКДанным, ИмяПоля)), Группировки);
291 | Возврат ЭтотОбъект;
292 | КонецФункции
293 |
294 | Функция КоличествоРазличных(ИмяПоля, Знач Заголовок = "", Знач ПутьКДанным = "", Группировки = Неопределено) Экспорт
295 | Поле(ИмяПоля, Заголовок, ПутьКДанным, СтрШаблон("КОЛИЧЕСТВО(РАЗЛИЧНЫЕ %1)", ?(ЗначениеЗаполнено(ПутьКДанным), ПутьКДанным, ИмяПоля)), Группировки);
296 | Возврат ЭтотОбъект;
297 | КонецФункции
298 |
299 | Функция НачальныйОстаток(ИмяПоля, Знач Заголовок = "", Знач ПутьКДанным = "", ИмяРесурса, ТипОстаткаДбКт = "Нет", ПолеСчета = "") Экспорт
300 | Если Раздел <> Разделы.Ресурсы Тогда
301 | ВызватьИсключение "Ресурсы указываются в разделе Ресурсов";
302 | КонецЕсли;
303 | Если НЕ ЗначениеЗаполнено(ИмяРесурса) Тогда
304 | ВызватьИсключение "Для остатка необходимо определить имя ресурса";
305 | КонецЕсли;
306 | Сумма(ИмяПоля, Заголовок, ПутьКДанным);
307 | Роль.Остаток = Истина;
308 | Роль.ТипОстатка = ТипОстаткаКомпоновкиДанных.НачальныйОстаток;
309 | Роль.ГруппаОстатка = ИмяРесурса;
310 | Роль.ТипБухгалтерскогоОстатка = ТипБухгалтерскогоОстаткаКомпоновкиДанных[ТипОстаткаДбКт];
311 | Роль.ПолеСчета = ПолеСчета;
312 | Возврат ЭтотОбъект;
313 | КонецФункции
314 |
315 | Функция КонечныйОстаток(ИмяПоля, Знач Заголовок = "", Знач ПутьКДанным = "", ИмяРесурса, ТипОстаткаДбКт = "Нет", ПолеСчета = "") Экспорт
316 | Если Раздел <> Разделы.Ресурсы Тогда
317 | ВызватьИсключение "Ресурсы указываются в разделе Ресурсов";
318 | КонецЕсли;
319 | Если НЕ ЗначениеЗаполнено(ИмяРесурса) Тогда
320 | ВызватьИсключение "Для остатка необходимо определить имя ресурса";
321 | КонецЕсли;
322 | Сумма(ИмяПоля, Заголовок, ПутьКДанным);
323 | Роль.Остаток = Истина;
324 | Роль.ТипОстатка = ТипОстаткаКомпоновкиДанных.КонечныйОстаток;
325 | Роль.ГруппаОстатка = ИмяРесурса;
326 | Роль.ТипБухгалтерскогоОстатка = ТипБухгалтерскогоОстаткаКомпоновкиДанных[ТипОстаткаДбКт];
327 | Роль.ПолеСчета = ПолеСчета;
328 | Возврат ЭтотОбъект;
329 | КонецФункции
330 |
331 | // Период.
332 | //
333 | // Параметры:
334 | // ИмяПоля - Строка - Имя поля
335 | // ПутьКДанным - Строка - Путь к данным
336 | // Дополнительный - Булево - данный период не определяет порядок для дочернего периода. Например
337 | // для секунды период день не является необходимым для порядка. Для Регистратора наоборот родительский период Секунда
338 | // определяет порядок
339 | //
340 | // Возвращаемое значение:
341 | // ОбработкаОбъект.МодельСхемыКомпоновкиДанных - Период
342 | Функция Период(ИмяПоля, Знач Заголовок = "", Знач ПутьКДанным = "", Дополнительный = Ложь) Экспорт
343 | Поле(ИмяПоля, Заголовок, ПутьКДанным);
344 | НомерПериода = НомерПериода + 1;
345 | ПолеНабораДанных.Роль.НомерПериода = НомерПериода;
346 | ПолеНабораДанных.Роль.ТипПериода = ?(Дополнительный, ТипПериодаКомпоновкиДанных.Дополнительный, ТипПериодаКомпоновкиДанных.Основной);
347 | Возврат ЭтотОбъект;
348 | КонецФункции
349 |
350 | // ПараметрСхемыКомпоновкиДанных
351 | Функция Параметр(Имя, Значение = null, ТипЗначения = null, Выражение = null) Экспорт
352 | Если Настройки <> Неопределено Тогда
353 | Если Значение = null Тогда
354 | ВызватьИсключение "Не задано значение параметра настройки " + Имя;
355 | КонецЕсли;
356 | ПараметрНастройки(Имя, Значение);
357 | Возврат ЭтотОбъект;
358 | КонецЕсли;
359 | ПараметрСхемы = СхемаКомпоновкиДанных.Параметры.Добавить();
360 | ПараметрСхемы.Имя = Имя;
361 | Если ТипЗначения <> null Тогда
362 | ПараметрСхемы.ТипЗначения = ТипЗначения;
363 | КонецЕсли;
364 | Если Значение <> null Тогда
365 | ПараметрСхемы.Значение = Значение;
366 | КонецЕсли;
367 | Если Выражение <> null Тогда
368 | ПараметрСхемы.Выражение = Значение;
369 | КонецЕсли;
370 | ПараметрСхемы.Использование = ИспользованиеПараметраКомпоновкиДанных.Авто;
371 | Возврат ЭтотОбъект;
372 | КонецФункции
373 |
374 | Функция Выражение(Выражение) Экспорт
375 | Если Раздел = Разделы.Параметры Тогда
376 | ПараметрСхемы.Выражение = Выражение;
377 | Возврат ЭтотОбъект;
378 | КонецЕсли;
379 | Возврат ЭтотОбъект;
380 | КонецФункции
381 |
382 | Функция Измерения() Экспорт
383 | Раздел = Разделы.Измерения;
384 | Возврат ЭтотОбъект;
385 | КонецФункции
386 |
387 | Функция Реквизиты() Экспорт
388 | Раздел = Разделы.Реквизиты;
389 | Возврат ЭтотОбъект;
390 | КонецФункции
391 |
392 | Функция Ресурсы() Экспорт
393 | Раздел = Разделы.Ресурсы;
394 | Возврат ЭтотОбъект;
395 | КонецФункции
396 |
397 | Функция Условия() Экспорт
398 | Раздел = Разделы.Условия;
399 | Возврат ЭтотОбъект;
400 | КонецФункции
401 |
402 | Функция УсловноеОформление() Экспорт
403 | Раздел = Разделы.УсловноеОформление;
404 | Возврат ЭтотОбъект;
405 | КонецФункции
406 |
407 | Функция ВариантНастроек(Имя, Представление = "") Экспорт
408 | ВариантНастроек = СхемаКомпоновкиДанных.ВариантыНастроек.Добавить();
409 | ВариантНастроек.Имя = Имя;
410 | ВариантНастроек.Представление = Представление;
411 | Настройки = ВариантНастроек.Настройки;
412 | Возврат ЭтотОбъект;
413 | КонецФункции
414 |
415 | Функция Параметры() Экспорт
416 | Раздел = Разделы.Параметры;
417 | Возврат ЭтотОбъект;
418 | КонецФункции
419 |
420 | #Область ВариантыНастроек
421 |
422 | Функция НастройкиПоУмолчанию() Экспорт
423 | Возврат СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
424 | КонецФункции
425 |
426 | Функция ЭлементОформления() Экспорт
427 | ЭлементУсловногоОформления = Настройки.УсловноеОформление.Элементы.Добавить();
428 | Возврат ЭтотОбъект;
429 | КонецФункции
430 |
431 | Функция ОформляемоеПоле(ИмяПоля)
432 | ОформляемоеПоле = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
433 | ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных(ИмяПоля);
434 | ОформляемоеПоле.Использование = Истина;
435 | Возврат ЭтотОбъект;
436 | КонецФункции
437 |
438 | Функция Выбор() Экспорт
439 | Возврат ЭтотОбъект;
440 | КонецФункции
441 |
442 | Функция ПолеНастройки(ИмяПоля, Заголовок = "") Экспорт
443 | Если Раздел = Разделы.УсловноеОформление Тогда
444 | Возврат ОформляемоеПоле(ИмяПоля);
445 | КонецЕсли;
446 | ЭтоАвтоПоле = ПустаяСтрока(ИмяПоля) ИЛИ ИмяПоля = "*";
447 | Если ЭтоАвтоПоле Тогда
448 | ТипПоля = Тип("АвтоВыбранноеПолеКомпоновкиДанных");
449 | Иначе
450 | ТипПоля = Тип("ВыбранноеПолеКомпоновкиДанных");
451 | КонецЕсли;
452 | Если ГруппаВыбранныхПолей = Неопределено Тогда
453 | Если Группировка = Неопределено Тогда
454 | ВыбранноеПоле = Настройки.Выбор.Элементы.Добавить(ТипПоля);
455 | Иначе
456 | ВыбранноеПоле = Группировка.Выбор.Элементы.Добавить(ТипПоля);
457 | КонецЕсли;
458 | Иначе
459 | ВыбранноеПоле = ГруппаВыбранныхПолей.Элементы.Добавить(ТипПоля);
460 | КонецЕсли;
461 | ВыбранноеПоле.Использование = Истина;
462 | Если ЭтоАвтоПоле Тогда
463 | Возврат ЭтотОбъект;
464 | КонецЕсли;
465 | ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных(ИмяПоля);
466 | Если ЗначениеЗаполнено(Заголовок) Тогда
467 | ВыбранноеПоле.Заголовок = Заголовок;
468 | КонецЕсли;
469 | Возврат ЭтотОбъект;
470 | КонецФункции
471 |
472 | Функция ГруппаНачать(Заголовок, Расположение = Неопределено) Экспорт
473 | Если ГруппаВыбранныхПолей = Неопределено Тогда
474 | Если Группировка = Неопределено Тогда
475 | ГруппаВыбранныхПолей = Настройки.Выбор.Элементы.Добавить(Тип("ГруппаВыбранныхПолейКомпоновкиДанных"));
476 | Иначе
477 | ГруппаВыбранныхПолей = Группировка.Выбор.Элементы.Добавить(Тип("ГруппаВыбранныхПолейКомпоновкиДанных"));
478 | КонецЕсли;
479 | Иначе
480 | ГруппаВыбранныхПолей = ГруппаВыбранныхПолей.Элементы.Добавить(Тип("ГруппаВыбранныхПолейКомпоновкиДанных"));
481 | КонецЕсли;
482 | ГруппаВыбранныхПолей.Использование = Истина;
483 | ГруппаВыбранныхПолей.Расположение = ?(Расположение = Неопределено, РасположениеПоляКомпоновкиДанных.Авто, Расположение);
484 | ГруппаВыбранныхПолей.Заголовок = Заголовок;
485 | Возврат ЭтотОбъект;
486 | КонецФункции
487 |
488 | Функция ГруппаЗавершить() Экспорт
489 | ГруппаВыбранныхПолей = ГруппаВыбранныхПолей.Родитель;
490 | Возврат ЭтотОбъект;
491 | КонецФункции
492 |
493 | Функция ОтборГруппаНачать(ТипГруппы) Экспорт
494 | Если ГруппаОтбора = Неопределено Тогда
495 | ГруппаОтбора = Настройки.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
496 | Иначе
497 | ГруппаОтбора = ГруппаОтбора.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
498 | КонецЕсли;
499 | ГруппаОтбора.Использование = Истина;
500 | ГруппаОтбора.ТипГруппы = ТипГруппы;
501 | Возврат ЭтотОбъект;
502 | КонецФункции
503 |
504 | Функция ОтборГруппаИНачать() Экспорт
505 | ОтборГруппаНачать(ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ);
506 | Возврат ЭтотОбъект;
507 | КонецФункции
508 |
509 | Функция ОтборГруппаИЛИНачать() Экспорт
510 | ОтборГруппаНачать(ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли);
511 | Возврат ЭтотОбъект;
512 | КонецФункции
513 |
514 | Функция ОтборГруппаНЕНачать() Экспорт
515 | ОтборГруппаНачать(ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаНе);
516 | Возврат ЭтотОбъект;
517 | КонецФункции
518 |
519 | Функция ОтборГруппаЗавершить() Экспорт
520 | ГруппаОтбора = ГруппаОтбора.Родитель;
521 | Возврат ЭтотОбъект;
522 | КонецФункции
523 |
524 | Функция Отбор(ИмяПоля, Значение, ВидСравнения = Неопределено) Экспорт
525 | Если ГруппаОтбора = Неопределено Тогда
526 | ЭлементОтбора = Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
527 | Иначе
528 | ЭлементОтбора = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
529 | КонецЕсли;
530 | ЭлементОтбора.Использование = Истина;
531 | ЭлементОтбора.ЛевоеЗначение = ?(ТипЗнч(ИмяПоля) = Тип("Строка"), Новый ПолеКомпоновкиДанных(ИмяПоля), ИмяПоля);
532 | ЭлементОтбора.ПравоеЗначение = Значение;
533 | ЭлементОтбора.ВидСравнения = ?(ВидСравнения = Неопределено, ВидСравненияКомпоновкиДанных.Равно, ВидСравнения);
534 | Возврат ЭтотОбъект;
535 | КонецФункции
536 |
537 | Функция Порядок(ИмяПоля, ТипУпорядочивания = Неопределено) Экспорт
538 | ЭлементПорядка = Настройки.Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных"));
539 | ЭлементПорядка.Поле = Новый ПолеКомпоновкиДанных(ИмяПоля);
540 | Если ТипЗнч(ТипУпорядочивания) = Тип("Строка") Тогда
541 | Если ТипУпорядочивания = "-" Тогда
542 | ЭлементПорядка.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Убыв;
543 | Иначе
544 | ЭлементПорядка.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр;
545 | КонецЕсли;
546 | Иначе
547 | ЭлементПорядка.ТипУпорядочивания = ?(ТипУпорядочивания = Неопределено, НаправлениеСортировкиКомпоновкиДанных.Возр, ТипУпорядочивания);
548 | КонецЕсли;
549 | ЭлементПорядка.Использование = Истина;
550 | Возврат ЭтотОбъект;
551 | КонецФункции
552 |
553 | Функция ГруппировкаНачать(ИмяГруппировки = Неопределено) Экспорт
554 | Если Группировка = Неопределено Тогда
555 | Группировка = Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
556 | ИначеЕсли ТипЗнч(Группировка) = Тип("ГруппировкаТаблицыКомпоновкиДанных") Тогда
557 | Группировка = Группировка.Структура.Добавить();
558 | Иначе
559 | Группировка = Группировка.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
560 | КонецЕсли;
561 | Группировка.Использование = Истина;
562 | Если ИмяГруппировки <> Неопределено Тогда
563 | Группировка.Имя = ИмяГруппировки;
564 | КонецЕсли;
565 | // ВыбранноеПоле = Группировка.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
566 | // ВыбранноеПоле.Использование = Истина;
567 | Возврат ЭтотОбъект;
568 | КонецФункции
569 |
570 | Функция ПолеГруппировки(ПутьКДанным) Экспорт
571 | Если ПутьКДанным = "*" Тогда
572 | ПолеГруппировки = Группировка.ПоляГруппировки.Элементы.Добавить(Тип("АвтоПолеГруппировкиКомпоновкиДанных"));
573 | Возврат ЭтотОбъект;
574 | КонецЕсли;
575 | ПолеГруппировки = Группировка.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
576 | ПолеГруппировки.Использование = Истина;
577 | ПолеГруппировки.Поле = ?(ТипЗнч(ПутьКДанным) = Тип("Строка"), Новый ПолеКомпоновкиДанных(ПутьКДанным), ПутьКДанным);
578 | Возврат ЭтотОбъект;
579 | КонецФункции
580 |
581 | Функция ГруппировкаЗавершить() Экспорт
582 | Группировка = Группировка.Родитель;
583 | Возврат ЭтотОбъект;
584 | КонецФункции
585 |
586 | Функция ТаблицаНачать() Экспорт
587 | Если Группировка = Неопределено Тогда
588 | Таблица = Настройки.Структура.Добавить(Тип("ТаблицаКомпоновкиДанных"));
589 | Иначе
590 | Таблица = Группировка.Структура.Добавить(Тип("ТаблицаКомпоновкиДанных"));
591 | КонецЕсли;
592 | Возврат ЭтотОбъект;
593 | КонецФункции
594 |
595 | Функция ТаблицаЗавершить() Экспорт
596 | Группировка = Таблица.Родитель;
597 | Таблица = Неопределено;
598 | Возврат ЭтотОбъект;
599 | КонецФункции
600 |
601 | Функция Строки() Экспорт
602 | Группировка = Таблица.Строки.Добавить();
603 | Группировка.Использование = Истина;
604 | ВыбранноеПоле = Группировка.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
605 | ВыбранноеПоле.Использование = Истина;
606 | Возврат ЭтотОбъект;
607 | КонецФункции
608 |
609 | Функция Колонки() Экспорт
610 | Группировка = Таблица.Колонки.Добавить();
611 | Группировка.Использование = Истина;
612 | ВыбранноеПоле = Группировка.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
613 | ВыбранноеПоле.Использование = Истина;
614 | Возврат ЭтотОбъект;
615 | КонецФункции
616 |
617 | Функция ПараметрНастройки(ИмяПараметра, Значение) Экспорт
618 | Если Раздел = Разделы.ПараметрыВывода Тогда
619 | Параметр = Настройки.ПараметрыВывода.Элементы.Найти(ИмяПараметра);
620 | Если Параметр = Неопределено Тогда
621 | ВызватьИсключение "Неизвестный параметр вывода " + ИмяПараметра;
622 | КонецЕсли;
623 | Параметр.Значение = Значение;
624 | Параметр.Использование = Истина;
625 | ИначеЕсли Раздел = Разделы.ПараметрыДанных Тогда
626 | Параметр = Настройки.ПараметрыДанных.Элементы.Добавить();
627 | Параметр.Параметр = Новый ПараметрКомпоновкиДанных(ИмяПараметра);
628 | Параметр.Значение = Значение;
629 | Параметр.Использование = Истина;
630 | Иначе
631 | ВызватьИсключение "Не задан контекст для параметра настройки СКД!";
632 | КонецЕсли;
633 | Возврат ЭтотОбъект;
634 | КонецФункции
635 |
636 | Функция Структура() Экспорт
637 | Раздел = Разделы.Структура;
638 | Возврат ЭтотОбъект;
639 | КонецФункции
640 |
641 | Функция ПараметрыДанных() Экспорт
642 | Раздел = Разделы.ПараметрыДанных;
643 | Возврат ЭтотОбъект;
644 | КонецФункции
645 |
646 | Функция ПараметрыВывода() Экспорт
647 | Раздел = Разделы.ПараметрыВывода;
648 | Возврат ЭтотОбъект;
649 | КонецФункции
650 |
651 | #КонецОбласти
652 |
653 | #КонецОбласти
654 |
655 | #Область Инициализация
656 |
657 | СхемаКомпоновкиДанных = Новый СхемаКомпоновкиДанных;
658 | Разделы = Новый Структура("Измерения, Реквизиты, Ресурсы, Условия, УсловноеОформление, Структура, Параметры, ПараметрыДанных, ПараметрыВывода", 1, 2, 3, 4, 5, 6, 7, 8, 9);
659 |
660 | // Добавление источника данных по-умолчанию
661 | ИсточникДанных = СхемаКомпоновкиДанных.ИсточникиДанных.Добавить();
662 | ИсточникДанных.Имя = "ИсточникДанных";
663 | ИсточникДанных.ТипИсточникаДанных = "Local";
664 |
665 | НаборыДанных = СхемаКомпоновкиДанных.НаборыДанных;
666 | ВнешниеНаборыДанных = Новый Структура;
667 |
668 | #КонецОбласти
--------------------------------------------------------------------------------