Система компоновки данных (СКД) » История » Версия 8
Всеволод Дорофеев, 12.02.2017 03:01
1 | 1 | Всеволод Дорофеев | h1. Система компоновки данных (СКД) |
---|---|---|---|
2 | 1 | Всеволод Дорофеев | |
3 | 1 | Всеволод Дорофеев | h3. Программное выполнение СКД с выводом в таблицу значений |
4 | 1 | Всеволод Дорофеев | |
5 | 1 | Всеволод Дорофеев | <pre> |
6 | 1 | Всеволод Дорофеев | &НаСервере |
7 | 1 | Всеволод Дорофеев | Процедура ПеренестиНоменклатуруСервере() |
8 | 1 | Всеволод Дорофеев | ОбъектНаСервере = РеквизитФормыВЗначение("Объект"); |
9 | 1 | Всеволод Дорофеев | СхемаНоменклатуры = ОбъектНаСервере.ПолучитьМакет("СКД"); |
10 | 1 | Всеволод Дорофеев | |
11 | 2 | Всеволод Дорофеев | //СКД. Программная установка параметров в управляемой форме отчета |
12 | 2 | Всеволод Дорофеев | ПараметрДанных = КомпоновщикНаФорме.Настройки.ПараметрыДанных.Элементы.Найти("ГруппаНоменклатуры"); |
13 | 1 | Всеволод Дорофеев | ПараметрДанных.Использование = Истина; |
14 | 1 | Всеволод Дорофеев | ПараметрДанных.Значение = Объект.ПапкаАрхив; |
15 | 1 | Всеволод Дорофеев | |
16 | 1 | Всеволод Дорофеев | КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; |
17 | 1 | Всеволод Дорофеев | МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаНоменклатуры, КомпоновщикНаФорме.ПолучитьНастройки(),,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений")); |
18 | 1 | Всеволод Дорофеев | |
19 | 1 | Всеволод Дорофеев | ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; |
20 | 1 | Всеволод Дорофеев | ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,,, Истина); |
21 | 1 | Всеволод Дорофеев | |
22 | 1 | Всеволод Дорофеев | ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений; |
23 | 1 | Всеволод Дорофеев | |
24 | 1 | Всеволод Дорофеев | ТЗНоменклатура = Новый ТаблицаЗначений; |
25 | 1 | Всеволод Дорофеев | ПроцессорВывода.УстановитьОбъект(ТЗНоменклатура); |
26 | 1 | Всеволод Дорофеев | ПроцессорВывода.Вывести(ПроцессорКомпоновки); |
27 | 1 | Всеволод Дорофеев | ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); |
28 | 1 | Всеволод Дорофеев | |
29 | 1 | Всеволод Дорофеев | Для каждого СтрокаТЗ из ТЗНоменклатура Цикл |
30 | 1 | Всеволод Дорофеев | ОбработкаОбъект.ПеренестиНоменклатурнуюПозициюВПапкуНаСервере(СтрокаТЗ); |
31 | 1 | Всеволод Дорофеев | КонецЦикла; |
32 | 1 | Всеволод Дорофеев | |
33 | 1 | Всеволод Дорофеев | КонецПроцедуры |
34 | 1 | Всеволод Дорофеев | </pre> |
35 | 5 | Всеволод Дорофеев | Вариант 2. |
36 | 5 | Всеволод Дорофеев | <pre> |
37 | 5 | Всеволод Дорофеев | Процедура СформироватьОтчетВТаблицуЗначений(Результат = Неопределено, ДанныеРасшифровки = Неопределено, ВыводВФормуОтчета = Истина, ВнешниеНаборыДанных = Неопределено) Экспорт |
38 | 5 | Всеволод Дорофеев | |
39 | 5 | Всеволод Дорофеев | Настройки = КомпоновщикНастроек.ПолучитьНастройки(); |
40 | 5 | Всеволод Дорофеев | |
41 | 5 | Всеволод Дорофеев | КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; |
42 | 5 | Всеволод Дорофеев | |
43 | 5 | Всеволод Дорофеев | МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, |
44 | 5 | Всеволод Дорофеев | КомпоновщикНастроек.Настройки, , , |
45 | 5 | Всеволод Дорофеев | Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений")); |
46 | 5 | Всеволод Дорофеев | |
47 | 5 | Всеволод Дорофеев | ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных; |
48 | 5 | Всеволод Дорофеев | ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных); |
49 | 5 | Всеволод Дорофеев | |
50 | 5 | Всеволод Дорофеев | ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений; |
51 | 5 | Всеволод Дорофеев | |
52 | 5 | Всеволод Дорофеев | ПроцессорВывода.УстановитьОбъект(Результат); |
53 | 5 | Всеволод Дорофеев | ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных); |
54 | 5 | Всеволод Дорофеев | |
55 | 5 | Всеволод Дорофеев | КонецПроцедуры |
56 | 5 | Всеволод Дорофеев | |
57 | 5 | Всеволод Дорофеев | //Пример вызова: |
58 | 5 | Всеволод Дорофеев | Результат = новый ТаблицаЗначений; |
59 | 5 | Всеволод Дорофеев | СформироватьОтчетВТаблицуЗначений(Результат, ЭтаФорма.ДанныеРасшифровки); |
60 | 5 | Всеволод Дорофеев | </pre> |
61 | 5 | Всеволод Дорофеев | |
62 | 3 | Всеволод Дорофеев | |
63 | 3 | Всеволод Дорофеев | h3. ШАБЛОНЫ ДЛЯ ИСПОЛЬЗОВАНИЯ СКД |
64 | 3 | Всеволод Дорофеев | |
65 | 3 | Всеволод Дорофеев | <pre> |
66 | 3 | Всеволод Дорофеев | //**************************************************************************** |
67 | 3 | Всеволод Дорофеев | // ШАБЛОНЫ ДЛЯ ИСПОЛЬЗОВАНИЯ СКД |
68 | 3 | Всеволод Дорофеев | // {{ |
69 | 3 | Всеволод Дорофеев | //**************************************************************************** |
70 | 3 | Всеволод Дорофеев | // Заполняет переданный объект на основани СКД |
71 | 3 | Всеволод Дорофеев | // |
72 | 3 | Всеволод Дорофеев | // Параметры |
73 | 3 | Всеволод Дорофеев | // |
74 | 3 | Всеволод Дорофеев | // СКД – собствеено настройки СКД |
75 | 3 | Всеволод Дорофеев | // |
76 | 3 | Всеволод Дорофеев | // ОбъектДляЗагрузки – объект в который выгружаются данные, таблица значений, дерево значений, табличный документ |
77 | 3 | Всеволод Дорофеев | // |
78 | 3 | Всеволод Дорофеев | // ИсполняемыеНастройки – Пользовательские настройки СКД если не указаны будут использованы настроки СКД по умолчанию |
79 | 3 | Всеволод Дорофеев | // |
80 | 3 | Всеволод Дорофеев | // СтруктураПараметров - Структура – Передаваемые для СКД параметры |
81 | 3 | Всеволод Дорофеев | // |
82 | 3 | Всеволод Дорофеев | // ДеревоЗначений = Новый ДеревоЗначений; |
83 | 3 | Всеволод Дорофеев | // |
84 | 3 | Всеволод Дорофеев | // ПРИМЕР ВЫЗОВА |
85 | 3 | Всеволод Дорофеев | // СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных"); |
86 | 3 | Всеволод Дорофеев | // СтруктураПараметров = Новый Структура("ДатаОтчета", НашаДата); |
87 | 3 | Всеволод Дорофеев | // ПолучитьДанныеНаОснованииСКД(СхемаКомпоновкиДанных, ДеревоЗначений, СхемаКомпоновкиДанных.НастройкиПоУмолчанию, СтруктураПараметров); |
88 | 3 | Всеволод Дорофеев | // |
89 | 3 | Всеволод Дорофеев | &НаСервере |
90 | 3 | Всеволод Дорофеев | Процедура ПолучитьДанныеНаОснованииСКД(СКД, ОбъектДляЗагрузки, ИсполняемыеНастройки = Неопределено, СтруктураПараметров = Неопределено, РасшифровкаСКД = Неопределено, МакетКомпоновки = Неопределено, ВнешниеНаборыДанных = Неопределено) Экспорт |
91 | 3 | Всеволод Дорофеев | |
92 | 3 | Всеволод Дорофеев | КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; |
93 | 3 | Всеволод Дорофеев | |
94 | 3 | Всеволод Дорофеев | //Если ТипЗнч(ОбъектДляЗагрузки) = Тип("ПолеТабличногоДокумента") ИЛИ ТипЗнч(ОбъектДляЗагрузки) = Тип("ТабличныйДокумент") Тогда |
95 | 3 | Всеволод Дорофеев | Если ТипЗнч(ОбъектДляЗагрузки) = Тип("ТабличныйДокумент") Тогда |
96 | 3 | Всеволод Дорофеев | ТипГенератора = Тип("ГенераторМакетаКомпоновкиДанных"); |
97 | 3 | Всеволод Дорофеев | Иначе |
98 | 3 | Всеволод Дорофеев | ТипГенератора = Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"); |
99 | 3 | Всеволод Дорофеев | КонецЕсли; |
100 | 3 | Всеволод Дорофеев | |
101 | 3 | Всеволод Дорофеев | Если ИсполняемыеНастройки = Неопределено Тогда |
102 | 3 | Всеволод Дорофеев | |
103 | 3 | Всеволод Дорофеев | ИсполняемыеНастройки = СКД.НастройкиПоУмолчанию; |
104 | 3 | Всеволод Дорофеев | |
105 | 3 | Всеволод Дорофеев | КонецЕсли; |
106 | 3 | Всеволод Дорофеев | |
107 | 3 | Всеволод Дорофеев | Если СтруктураПараметров <> Неопределено Тогда |
108 | 3 | Всеволод Дорофеев | |
109 | 3 | Всеволод Дорофеев | КоллекцияЗначенийПараметров = ИсполняемыеНастройки.ПараметрыДанных.Элементы; |
110 | 3 | Всеволод Дорофеев | |
111 | 3 | Всеволод Дорофеев | Для каждого Параметр Из СтруктураПараметров Цикл |
112 | 3 | Всеволод Дорофеев | |
113 | 3 | Всеволод Дорофеев | НайденноеЗначениеПараметра = КоллекцияЗначенийПараметров.Найти(Параметр.Ключ); |
114 | 3 | Всеволод Дорофеев | |
115 | 3 | Всеволод Дорофеев | Если НайденноеЗначениеПараметра <> Неопределено Тогда |
116 | 3 | Всеволод Дорофеев | |
117 | 3 | Всеволод Дорофеев | НайденноеЗначениеПараметра.Использование = Истина; |
118 | 3 | Всеволод Дорофеев | |
119 | 3 | Всеволод Дорофеев | НайденноеЗначениеПараметра.Значение = Параметр.Значение; |
120 | 3 | Всеволод Дорофеев | |
121 | 3 | Всеволод Дорофеев | КонецЕсли; |
122 | 3 | Всеволод Дорофеев | |
123 | 3 | Всеволод Дорофеев | КонецЦикла; |
124 | 3 | Всеволод Дорофеев | |
125 | 3 | Всеволод Дорофеев | КонецЕсли; |
126 | 3 | Всеволод Дорофеев | |
127 | 3 | Всеволод Дорофеев | МакетКомпоновкиСКД = КомпоновщикМакета.Выполнить(СКД, ИсполняемыеНастройки, РасшифровкаСКД, МакетКомпоновки, ТипГенератора); |
128 | 3 | Всеволод Дорофеев | |
129 | 3 | Всеволод Дорофеев | ПроцессорКомпановки = Новый ПроцессорКомпоновкиДанных; |
130 | 3 | Всеволод Дорофеев | |
131 | 6 | Всеволод Дорофеев | ПроцессорКомпановки.Инициализировать(МакетКомпоновкиСКД, ВнешниеНаборыДанных, РасшифровкаСКД, Истина); |
132 | 3 | Всеволод Дорофеев | |
133 | 3 | Всеволод Дорофеев | //Если ТипЗнч(ОбъектДляЗагрузки) = Тип("ПолеТабличногоДокумента") ИЛИ ТипЗнч(ОбъектДляЗагрузки) = Тип("ТабличныйДокумент") Тогда |
134 | 3 | Всеволод Дорофеев | Если ТипЗнч(ОбъектДляЗагрузки) = Тип("ТабличныйДокумент") Тогда |
135 | 3 | Всеволод Дорофеев | |
136 | 3 | Всеволод Дорофеев | ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; |
137 | 3 | Всеволод Дорофеев | |
138 | 3 | Всеволод Дорофеев | ПроцессорВывода.УстановитьДокумент(ОбъектДляЗагрузки); |
139 | 3 | Всеволод Дорофеев | |
140 | 3 | Всеволод Дорофеев | Иначе |
141 | 3 | Всеволод Дорофеев | |
142 | 3 | Всеволод Дорофеев | ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений; |
143 | 3 | Всеволод Дорофеев | |
144 | 3 | Всеволод Дорофеев | ПроцессорВывода.УстановитьОбъект(ОбъектДляЗагрузки); |
145 | 3 | Всеволод Дорофеев | |
146 | 3 | Всеволод Дорофеев | КонецЕсли; |
147 | 3 | Всеволод Дорофеев | |
148 | 3 | Всеволод Дорофеев | ПроцессорВывода.ОтображатьПроцентВывода = Истина; |
149 | 3 | Всеволод Дорофеев | |
150 | 3 | Всеволод Дорофеев | ПроцессорВывода.Вывести(ПроцессорКомпановки, Истина); |
151 | 3 | Всеволод Дорофеев | |
152 | 3 | Всеволод Дорофеев | КонецПроцедуры // ПолучитьДанныеНаОснованииСКД() |
153 | 3 | Всеволод Дорофеев | |
154 | 3 | Всеволод Дорофеев | //**************************************************************************** |
155 | 3 | Всеволод Дорофеев | // }} |
156 | 3 | Всеволод Дорофеев | //**************************************************************************** |
157 | 3 | Всеволод Дорофеев | </pre> |
158 | 4 | Всеволод Дорофеев | |
159 | 4 | Всеволод Дорофеев | h3. Смена схемы СКД |
160 | 4 | Всеволод Дорофеев | |
161 | 4 | Всеволод Дорофеев | <pre> |
162 | 4 | Всеволод Дорофеев | Функция СохранитьПараметры(ИменаПараметров) |
163 | 4 | Всеволод Дорофеев | |
164 | 4 | Всеволод Дорофеев | Параметры = КомпоновщикНастроек.Настройки.ПараметрыДанных; |
165 | 4 | Всеволод Дорофеев | |
166 | 4 | Всеволод Дорофеев | МассивСИменами = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(ИменаПараметров,","); |
167 | 4 | Всеволод Дорофеев | |
168 | 4 | Всеволод Дорофеев | СтруктураДляПараметров = Новый Структура; |
169 | 4 | Всеволод Дорофеев | |
170 | 4 | Всеволод Дорофеев | Для Каждого ИмяПараметра Из МассивСИменами Цикл |
171 | 4 | Всеволод Дорофеев | |
172 | 4 | Всеволод Дорофеев | Параметр = Параметры.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных(ИмяПараметра)); |
173 | 4 | Всеволод Дорофеев | |
174 | 4 | Всеволод Дорофеев | Если Параметр <> Неопределено Тогда |
175 | 4 | Всеволод Дорофеев | |
176 | 4 | Всеволод Дорофеев | СтруктураДляПараметров.Вставить(ИмяПараметра, Параметр.Значение); |
177 | 4 | Всеволод Дорофеев | |
178 | 4 | Всеволод Дорофеев | КонецЕсли; |
179 | 4 | Всеволод Дорофеев | |
180 | 4 | Всеволод Дорофеев | КонецЦикла; |
181 | 4 | Всеволод Дорофеев | |
182 | 4 | Всеволод Дорофеев | |
183 | 4 | Всеволод Дорофеев | |
184 | 4 | Всеволод Дорофеев | Возврат СтруктураДляПараметров; |
185 | 4 | Всеволод Дорофеев | |
186 | 4 | Всеволод Дорофеев | КонецФункции |
187 | 4 | Всеволод Дорофеев | |
188 | 4 | Всеволод Дорофеев | |
189 | 4 | Всеволод Дорофеев | |
190 | 4 | Всеволод Дорофеев | |
191 | 4 | Всеволод Дорофеев | |
192 | 4 | Всеволод Дорофеев | Процедура ЗагрузитьПараметры(СтруктураСПараметрами) |
193 | 4 | Всеволод Дорофеев | |
194 | 4 | Всеволод Дорофеев | Параметры = КомпоновщикНастроек.Настройки.ПараметрыДанных; |
195 | 4 | Всеволод Дорофеев | |
196 | 4 | Всеволод Дорофеев | Для Каждого ТекущийПараметр Из СтруктураСПараметрами Цикл |
197 | 4 | Всеволод Дорофеев | |
198 | 4 | Всеволод Дорофеев | Параметр = Параметры.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных(ТекущийПараметр.Ключ)); |
199 | 4 | Всеволод Дорофеев | |
200 | 4 | Всеволод Дорофеев | Если Параметр <> Неопределено Тогда |
201 | 4 | Всеволод Дорофеев | |
202 | 4 | Всеволод Дорофеев | Параметр.Значение = ТекущийПараметр.Значение; |
203 | 4 | Всеволод Дорофеев | |
204 | 4 | Всеволод Дорофеев | Параметр.Использование = Истина; |
205 | 4 | Всеволод Дорофеев | |
206 | 4 | Всеволод Дорофеев | КонецЕсли; |
207 | 4 | Всеволод Дорофеев | |
208 | 4 | Всеволод Дорофеев | КонецЦикла; |
209 | 4 | Всеволод Дорофеев | |
210 | 4 | Всеволод Дорофеев | КонецПроцедуры |
211 | 4 | Всеволод Дорофеев | |
212 | 4 | Всеволод Дорофеев | |
213 | 4 | Всеволод Дорофеев | |
214 | 4 | Всеволод Дорофеев | |
215 | 4 | Всеволод Дорофеев | |
216 | 4 | Всеволод Дорофеев | Процедура СменитьСхему() |
217 | 4 | Всеволод Дорофеев | |
218 | 4 | Всеволод Дорофеев | СтруктураСНастройками = СохранитьПараметры("Параметр1,Параметр2,Параметр3"); |
219 | 4 | Всеволод Дорофеев | |
220 | 4 | Всеволод Дорофеев | СхемаКомпоновкиДанных = ПолучитьМакет("ЗдесьИмяНужнойВамСхемы"); |
221 | 4 | Всеволод Дорофеев | |
222 | 4 | Всеволод Дорофеев | Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию; |
223 | 4 | Всеволод Дорофеев | |
224 | 4 | Всеволод Дорофеев | КомпоновщикНастроек.ЗагрузитьНастройки(Настройки); |
225 | 4 | Всеволод Дорофеев | |
226 | 4 | Всеволод Дорофеев | ЗагрузитьПараметры(СтруктураСНастройками); |
227 | 4 | Всеволод Дорофеев | |
228 | 1 | Всеволод Дорофеев | КонецПроцедуры |
229 | 6 | Всеволод Дорофеев | </pre> |
230 | 6 | Всеволод Дорофеев | |
231 | 6 | Всеволод Дорофеев | h3. Как в СКД получить GUID (ГУИД) объекта |
232 | 6 | Всеволод Дорофеев | |
233 | 6 | Всеволод Дорофеев | В вычисляемые поля добавить выражение "XMLСтрока(Номенклатура)" |
234 | 6 | Всеволод Дорофеев | |
235 | 6 | Всеволод Дорофеев | Все работает если процессор компоновки инициализировать программно и четвертым параметром указать использование общих модулей конфигурации в выражениях. |
236 | 6 | Всеволод Дорофеев | Казалось бы, причем здесь функции глобального контекста? Но факт остается фактом, без этого при компоновке вываливается приведенная вами ошибка. Проверено на версии платформы 8.3.8.1747. |
237 | 6 | Всеволод Дорофеев | <pre> |
238 | 6 | Всеволод Дорофеев | ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,,,Истина); |
239 | 4 | Всеволод Дорофеев | </pre> |
240 | 7 | Всеволод Дорофеев | |
241 | 7 | Всеволод Дорофеев | h3. Функции округления в СКД в вычисляемых полях |
242 | 7 | Всеволод Дорофеев | |
243 | 7 | Всеволод Дорофеев | В выражении вычисляемого поля можно использовать функции платформы, например: Окр() (без третьего параметра), Цел(), Макс() |
244 | 7 | Всеволод Дорофеев | Так же можно использовать функции общих модулей. |
245 | 7 | Всеволод Дорофеев | |
246 | 8 | Всеволод Дорофеев | Например: |
247 | 7 | Всеволод Дорофеев | <pre> |
248 | 1 | Всеволод Дорофеев | Цел(ОстатокУТ11*&КоэффициентОстатка/100) - ЕстьNull(ОстатокБухгалтерия,0) |
249 | 8 | Всеволод Дорофеев | //где &КоэффициентОстатка - Параметр |
250 | 7 | Всеволод Дорофеев | </pre> |