You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/theory/data_blocking.md
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -314,13 +314,13 @@ title: Блокировки
314
314
**Симптом**: Две транзакции ждут друг друга.
315
315
316
316
**Причины**:
317
-
- Недостаточный уровень изоляции
317
+
-**Недостаточный уровень изоляции**
318
318
319
319
Транзакции считывают данные под разделяемой блокировкой (S), а затем пытаются обновить их, что требует установки монопольной блокировки (X).
320
320
321
321
Если две транзакции одновременно удерживают S-блокировки на одних и тех же ресурсах и запрашивают X-блокировки для их изменения, возникает взаимоблокировка.
322
322
323
-
- Неоптимальный порядок блокировок
323
+
-**Неоптимальный порядок блокировок**
324
324
325
325
Пример: Два документа — «Поступление товаров» и «Реализация товаров» — при проведении обращаются к одним и тем же виртуальным таблицам регистров, но порядок вызова методов записи различен:
Copy file name to clipboardExpand all lines: docs/theory/skd.md
+110-1Lines changed: 110 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -39,6 +39,22 @@ title: СКД
39
39
***`ПроцессорКомпоновкиДанных`** — Исполняет макет, выдает элементы результата. Ключевые методы `Инициализировать(Макет)`, `Следующий()`.
40
40
***`ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент`** — Выводит элементы в табличный документ.
41
41
42
+
### Основные элементы схемы компоновки
43
+
44
+
1.**Поля:**
45
+
* Формируются автоматически из запроса.
46
+
* Имеют **роли** («Период», «Измерение», «Остаток»), критичные для корректного расчета итогов по регистрам (остатки, обороты).
47
+
* Можно настраивать оформление, подсказки, формы выбора.
48
+
49
+
2.**Ресурсы:**
50
+
* Поля, по которым считаются **итоги** (агрегаты: сумма, среднее, количество).
51
+
* Итоги рассчитываются на уровне всей СКД, а не в запросе.
52
+
* Можно задавать сложные выражения и агрегатные функции.
53
+
54
+
3.**Параметры:**
55
+
* Используются для динамической фильтрации данных (например, «Период», «Контрагент»).
56
+
* Могут иметь доступные значения, типы и настройки редактирования.
57
+
42
58
### Важные особенности и приемы
43
59
44
60
1.**Несколько наборов данных:** Можно связывать в схеме. В настройках в одной группировке можно использовать поля только из связанных наборов (кроме ресурсов).
@@ -50,6 +66,99 @@ title: СКД
50
66
*`{ГДЕ Поле1, Поле2}` — По каким полям можно делать отбор.
51
67
* Параметры виртуальных таблиц `{&ДатаНачала, &ДатаКонца}` также становятся доступны для отбора.
52
68
69
+
## Назначение ролей для полей
70
+
71
+
Роли полей в СКД — это **ключевая настройка для корректного расчета итогов**, особенно для работы с регистрами накопления, бухгалтерии и при использовании группировок по периодам. Роли сообщают системе, как обрабатывать поля при построении запросов и расчете агрегатов.
72
+
73
+
**Типы ролей и их настройки:**
74
+
75
+
#### 1. **Роль «Период»**
76
+
**Назначение:** Для полей, содержащих даты/временные периоды. Используется при работе с виртуальными таблицами регистров, где задана периодичность.
77
+
78
+
**Важные настройки:**
79
+
-**Номер строки:** Определяет иерархию периодов. Нумерация должна быть строго последовательной:
80
+
- 1 — самый младший период (например, День)
81
+
- 2 — старший (например, Месяц)
82
+
- 3 — еще старший (например, Квартал)
83
+
-**Дополнительный (флаг):**
84
+
- ✅ **Установлен** — в итоговый запрос включаются только явно указанные периоды
85
+
- ❌ **Снят** — в запрос автоматически включаются все родительские периоды (для корректного расчета остатков)
86
+
87
+
**Особенности:**
88
+
- Поля с ролью «Период» **нельзя использовать в одной группировке** с другими полями
89
+
- При периодичности «Регистратор» обязательно нужно поле «Период»
90
+
- При периодичности «Авто» обязательно нужно поле «ПериодСекунда»
91
+
-**Проблема:** Группировка по неделям совместно с месяцами может давать задвоение данных
92
+
93
+
#### 2. **Роль «Измерение»**
94
+
**Назначение:** Для полей, по которым будут рассчитываться итоги (обычно измерения регистров).
95
+
96
+
**Настройки:**
97
+
-**Родительское поле:** Если используется не само измерение, а его реквизит, здесь указывается родительское поле
98
+
-**Реквизит:** Указывается конкретный реквизит измерения
99
+
100
+
**Важно:**
101
+
- Родительское поле тоже должно иметь роль «Измерение»
102
+
- Если в настройках выбрано подчиненное поле измерения, а само измерение не выбрано — оно будет добавлено в запрос **неявно** (для корректных итогов)
103
+
104
+
#### 3. **Роль «Счет»**
105
+
**Назначение:** Для полей, содержащих бухгалтерские счета (работа с регистром бухгалтерии).
106
+
107
+
**Настройки:**
108
+
-**Вид счета:** Обязательно указывается тип счета:
109
+
- Активный
110
+
- Пассивный
111
+
- Активно-пассивный
112
+
-**Если не указан:** Система считает счет активно-пассивным, но может некорректно обрабатывать отрицательные остатки
113
+
114
+
#### 4. **Роль «Остаток»**
115
+
**Назначение:** Для полей начальных и конечных остатков регистров.
116
+
117
+
**Настройки:**
118
+
-**Имя:** Группировочное имя для пары «Начальный-Конечный остаток». Должно быть одинаковым для обоих полев
119
+
-**Тип:** Выбирается:
120
+
- Начальный остаток
121
+
- Конечный остаток
122
+
-**Бух. тип:** Для регистра бухгалтерии указывается:
123
+
- Дебет
124
+
- Кредит
125
+
-**Поле счета:** Связь с полем, имеющим роль «Счет»
126
+
127
+
**Критически важно:**
128
+
- В схеме **обязательно должны присутствовать оба поля** (и начальный, и конечный остаток)
129
+
- Если пользователь выбрал только один остаток — в запрос все равно включаются **оба** для корректных расчетов
130
+
131
+
#### Дополнительные настройки ролей (общие для всех)**
132
+
133
+
1.**«Игнорировать значение NULL»**
134
+
- ✅ **Установлен:** Из итоговой выборки исключаются записи, где это поле имеет значение NULL
135
+
- ❌ **Снят:** NULL-значения участвуют в расчетах и отображении
136
+
137
+
2.**«Обязательное»**
138
+
- ✅ **Установлен:** Поле **всегда** включается в итоговый запрос, даже если не выбрано в настройках
139
+
-**Пример использования:**
140
+
- Принудительный расчет итогов по всем измерениям регистра
141
+
- Развернутое сальдо по всем субконто в бухгалтерии
142
+
- Обязательные поля для корректной работы расширений
143
+
144
+
#### **Типичные ошибки и решения**
145
+
146
+
-**Ошибка 1: Неправильная нумерация периодов**
147
+
***Симптом:** Некорректный расчет остатков на начало периода
-**Ошибка 4: Использование подчиненных реквизитов без родителя**
159
+
***Симптом:** Ошибки при построении запроса
160
+
***Решение:** Указать родительское поле в роли «Измерение»
161
+
53
162
## Наборы данных
54
163
55
164
#### 1. **Типы наборов данных в СКД**
@@ -257,7 +366,7 @@ title: СКД
257
366
258
367
#### 18. **Для чего в конструкторе СКД, на вкладке "Наборы данных", нужно поле "Роль"?**
259
368
260
-
Роли (`Измерение`, `Ресурс`, `Остаток`, `Период` и т.д.) необходимы **внутреннему механизму СКД** для правильного расчета агрегатов (особенно остатков, оборотов, иерархии), независимо от того, как пользователь настроит отчет.
369
+
Роль (`Измерение`, `Счет`, `Остатки`, `Период` и т.д.) необходимы **внутреннему механизму СКД** для правильного расчета агрегатов (особенно остатков, оборотов, иерархии), независимо от того, как пользователь настроит отчет.
261
370
262
371
#### 19. **При соблюдении каких условий доступно использование функций из общих модулей в полях выражений СКД?**
0 commit comments