1
0
mirror of https://github.com/ones-devguide/dev-rules.git synced 2026-04-24 03:33:20 +02:00

Новые страницы теории

This commit is contained in:
Vladimir Ochakovskiy
2025-12-21 15:51:11 +07:00
parent e7a7b87b3c
commit 43afffbb32
18 changed files with 701 additions and 56 deletions
+67 -15
View File
@@ -10,14 +10,47 @@ title: Блокировки
#### Что такое блокировка?
**Блокировка данных** — механизм, обеспечивающий конкурентный доступ пользователей к информационной базе и целостность данных при одновременных изменениях. Она предотвращает конфликты, когда несколько пользователей пытаются изменить одни и те же данные.
**Простой аналог:**
Продавец блокирует яблоко для покупателя, пока тот отсчитывает деньги. Другие покупатели не могут выбрать это яблоко до завершения операции.
#### Проблемы, которые решают блокировки:
1. **Потерянное изменение** — когда изменения одной транзакции перезаписываются другой
```bsl
// Транзакция A: // Транзакция B:
Остаток = 100 Остаток = 100
Остаток = Остаток - 10 = 90 Остаток = Остаток - 20 = 80
Записать(90) Записать(80) // Затерло 90!
```
2. **"Грязное" чтение** — чтение незафиксированных данных
```bsl
// Транзакция A: // Транзакция B параллельно:
ИзменитьСумму(1000 → 2000) Сумма = ПрочитатьСумму() // =2000!
ОтменитьТранзакциюА() // Работа с некорректным значением
```
3. **Неповторяемое чтение** — разные результаты при повторном чтении тех же данных
```bsl
// Транзакция A: // Транзакция B:
Сумма = Прочитать() // =1000 // Параллельно:
Изменить(1000 → 2000)
Сумма = Прочитать() // =2000!
```
4. **Чтение фантомов** — появление новых данных между чтениями (актуально для необъектных сущностей, например, регистры сведений и накопления)
#### Простой аналог:
Продавец блокирует яблоко для покупателя, пока тот отсчитывает деньги. Другие покупатели не могут выбрать это яблоко до завершения операции.
```bsl
// Транзакция A (регистр сведений, упрощенный пример):
ВсегоЗаписей = КоличествоЗаписей() // =100
// Транзакция Б добавляет новую запись
ДобавитьЗаписьВРегистр()
ВсегоЗаписей = КоличествоЗаписей() // =101!
```
## Типы блокировок в 1С
@@ -95,7 +128,7 @@ title: Блокировки
| **Фантомы** | ✅ Возможно | ✅ Возможно | ✅ Возможно | ❌ Запрещено |
| **Параллельность** | Высокая | Средняя | Низкая | Очень низкая |
**Read Committed Snapshot (RCSI)**: Режим версионирования, поддерживается в PostgreSQL, Oracle и MS SQL (с 8.3). Нет ожиданий на блокировках при чтении т.к если другая транзакция пишет данные, ваш запрос не ждет, а читает "старый снимок" данных, которые были до начала записи. **Рекомендуется включать** для MS SQL в управляемом режиме.
**Read Committed Snapshot (RCSI)**: Режим версионирования, поддерживается в PostgreSQL, Oracle и MS SQL (с 8.3). Нет ожиданий на блокировках при чтении т.к если другая транзакция пишет данные, ваш запрос не ждет, а читает "старый снимок" данных, которые были до начала записи. **Рекомендуется включать** для 8.2 или 8.3 в режиме совместимости с 8.2.
#### Сравнение Read Committed vs Read Committed Snapshot
@@ -252,15 +285,6 @@ title: Блокировки
**Решение**: Делите большие операции на пакеты (по 1000-2000 записей).
#### Рекомендации по оптимизации
1. ✅ Перейти на **управляемый режим** блокировок
2. ✅ Включить **RCSI (Read Committed Snapshot)** для MS SQL
3. ✅ Включить **разделитель итогов** для регистров без контроля остатков
4. ✅ Использовать **Запрос** вместо `НаборЗаписей.Прочитать()` для чтения
5. ✅ Делать **транзакции короткими**
6. ✅ Использовать **многопоточность** для массовых операций
7. ✅ **Мониторить** блокировки специальными инструментами
## Механизмы контроля остатков в типовых конфигурациях
#### Два механизма контроля остатков
@@ -290,14 +314,42 @@ title: Блокировки
**Симптом**: Две транзакции ждут друг друга.
**Причины**:
- Недостаточный уровень изоляции
Транзакции считывают данные под разделяемой блокировкой (S), а затем пытаются обновить их, что требует установки монопольной блокировки (X).
Если две транзакции одновременно удерживают S-блокировки на одних и тех же ресурсах и запрашивают X-блокировки для их изменения, возникает взаимоблокировка.
- Неоптимальный порядок блокировок
Пример: Два документа — «Поступление товаров» и «Реализация товаров» — при проведении обращаются к одним и тем же виртуальным таблицам регистров, но порядок вызова методов записи различен:
```bsl
// Поступление товаров
// 1. 🔒 Сначала блокируются ОстаткиНаСкладах
ОстаткиНаСкладах.Записать();
// 2. Потом пробуем блокировать ОстаткиОрганизаций, но уже заблокировано реализацией, ожидаем...
ОстаткиОрганизаций.Записать();
```
```bsl
// Реализация товаров
// 1. 🔒 Сначала блокируются ОстаткиОрганизаций
ОстаткиОрганизаций.Записать();
// 2. Потом пробуем блокировать ОстаткиНаСкладах, но уже заблокировано поступлением, ожидаем...
ОстаткиНаСкладах.Записать();
```
При параллельном проведении таких документов высока вероятность взаимоблокировки, так как каждая транзакция удерживает блокировку на одном ресурсе и ожидает освобождения другого.
- Длительные транзакции
- Отсутствие индексов
**Решение**:
- Блокировка в транзакции должна изначально осуществляться с максимально необходимым уровнем
- Устанавливать блокировки в одинаковом порядке
- Делать транзакции короткими
- Использовать правильные индексы
#### Ожидания на блокировках
@@ -368,7 +420,7 @@ title: Блокировки
* [Ответственное чтение данных](https://its.1c.ru/db/v8std#content:648:hdoc)
* [Блокировка данных объекта для редактирования из кода](https://its.1c.ru/db/v8std/content/490/hdoc)
* [Блокировка данных объекта для редактирования из кода](https://its.1c.ru/db/v8std/content/490/hdoc)
* [Ускорение в 100 раз. Решаем проблему блокировок](https://infostart.ru/1c/articles/629017/)
+12 -20
View File
@@ -152,56 +152,51 @@ title: Управляемые формы
## Ответы на ключевые вопросы
#### 1. Где установить признак видимости у существующего объекта без проверки на новый объект?
**Ответ:** В обработчике `ПриЧтенииНаСервере`. Этот обработчик вызывается только для существующих объектов, и здесь можно безопасно устанавливать видимость элементов.
В обработчике `ПриЧтенииНаСервере`. Этот обработчик вызывается только для существующих объектов, и здесь можно безопасно устанавливать видимость элементов.
#### 2. Во что сериализуется ДанныеФормыКоллекции?
**Ответ:** В XML. Все данные формы (включая коллекции) сериализуются в XML для передачи между клиентом и сервером.
В XML. Все данные формы (включая коллекции) сериализуются в XML для передачи между клиентом и сервером.
#### 3. Какую переменную нужно использовать для обращения на клиенте и на сервере для постоянных значений?
**Ответ:** Реквизиты формы. Они доступны и на клиенте, и на сервере, сохраняются на время жизни формы.
Реквизиты формы. Они доступны и на клиенте, и на сервере, сохраняются на время жизни формы.
#### 4. Переменные модуля формы?
**Ответ:**
- `&НаКлиенте` переменные: существуют с создания до закрытия формы, только на клиенте
- `&НаСервере` переменные: существуют только во время выполнения серверной процедуры, уничтожаются после возврата на клиент
#### 5. Параметры формы для чего используются?
**Ответ:**
#### 5. Параметры формы для чего используются?
- Для создания формы (передача начальных данных)
- Для уникальности формы (ключевые параметры)
- Различают: системные, ключевые (для уникальности), обычные (только при создании)
#### 6. Мы находимся в обработчике событий "ПриСозданииНаСервере" модуля формы. Необходимо обратиться к реквизиту объекта, который имеет тип "ХранилищеЗначения". Как это сделать?
**Ответ:** Использовать `РеквизитФормыВЗначение()` для преобразования данных формы в прикладной объект, затем работать с его реквизитами.
Использовать `РеквизитФормыВЗначение()` для преобразования данных формы в прикладной объект, затем работать с его реквизитами.
#### 7. Необходимо создать форму списка, где выводится информация из периодического регистра сведений только самые последние значения на текущую дату. Где и как это можно сделать? Два варианта.
**Ответ:**
1. В качестве таблицы динамического списка указать регистр среза последних
2. В обработчике `ПриСозданииНаСервере` настроить отбор динамического списка на срез последних
#### 8. На форме есть элемент. Необходимо, чтобы по умолчанию видимость была установлена в "Ложь" и пользователь мог включить видимость в пользовательском режиме через "Еще→Изменить форму". Как это сделать?
**Ответ:** Установить свойству "ПользовательскаяВидимость" значение "Истина". Это позволит пользователям управлять видимостью через настройки формы.
Установить свойству "ПользовательскаяВидимость" значение "Истина". Это позволит пользователям управлять видимостью через настройки формы.
#### 9. Есть форма, она открывает вторую форму. Во второй форме мы получаем таблицу значений, необходимо данную таблицу значений передать в первую форму, как это сделать?
**Ответ:** С использованием временного хранилища. Сохранить таблицу во временное хранилище во второй форме и при закрытии передать идентификатор в первую форму.
С использованием временного хранилища. Сохранить таблицу во временное хранилище во второй форме и при закрытии передать идентификатор в первую форму.
#### 10. В модуле формы поместили во временное хранилище таблицу значений, необходимо, чтобы хранилище было удалено, если форму закроют. Как это сделать?
**Ответ:** Указать уникальный идентификатор формы при помещении в хранилище, или использовать обработчик `ПриЗакрытии` для очистки хранилища.
Указать уникальный идентификатор формы при помещении в хранилище, или использовать обработчик `ПриЗакрытии` для очистки хранилища.
#### 11. Какие обработчики событий в модуле формы включены в транзакции записи?
**Ответ:** `ПриЗаписиНаСервере` выполняется внутри транзакции записи объекта.
`ПриЗаписиНаСервере` выполняется внутри транзакции записи объекта.
#### 12. Отличия ключевых параметров формы от обычных?
**Ответ:**
- **Ключевые параметры:** существуют все время жизни формы, определяют уникальность формы
- **Обычные параметры:** существуют только в момент создания формы
- **Системные параметры:** предопределены платформой
#### 13. Какой тип имеет объект на форме?
**Ответ:** `ДанныеФормыСтруктура` — набор свойств произвольного типа, представляющий прикладной объект в форме.
`ДанныеФормыСтруктура` — набор свойств произвольного типа, представляющий прикладной объект в форме.
#### 14. Чем отличается Объект от ТекущийОбъект в событиях?
**Ответ:**
- **Объект:** реквизит формы типа `ДанныеФормыСтруктура`
- **ТекущийОбъект:** настоящий прикладной объект (например, `СправочникОбъект.Номенклатура`)
@@ -212,23 +207,20 @@ title: Управляемые формы
- `ПослеЗаписиНаСервере`: `ТекущийОбъект` изменять бессмысленно, данные уже в `Объект`
#### 15. Для чего служит флажок реквизита управляемой формы "Основной реквизит"?
**Ответ:**
1. Изменяет поведение формы — стандартные команды работают в контексте типа основного реквизита
2. Изменяет контекст модуля формы — дополняется свойствами и методами типа основного реквизита
#### 16. Что нужно сделать, чтобы при открытии управляемой формы списка справочника курсор сразу стоял на нужной строке списка?
**Ответ:** Передать в параметр "Параметры" метода `ОткрытьФорму()` структуру: `Новый Структура("ТекущаяСтрока", НужнаяСсылка)`
Передать в параметр "Параметры" метода `ОткрытьФорму()` структуру: `Новый Структура("ТекущаяСтрока", НужнаяСсылка)`
#### 17. Как реализовать отображение и поведение поля как гиперссылки в ячейке табличной части управляемой формы?
**Ответ:**
1. У нужного элемента установить флаги: "Гиперссылка" и "ГиперссылкаЯчейки"
2. Обработать нажатие в событии таблицы формы "Выбор"
#### 18. В чем опасность изменения видимости элемента на клиенте?
**Ответ:** Изменение видимости может потребовать обращения к серверу для пересчета расположения элементов, что снижает производительность.
Изменение видимости может потребовать обращения к серверу для пересчета расположения элементов, что снижает производительность.
#### 19. Для чего используют ключевое слово `Знач` в параметрах метода?
1. **Оптимизация трафика** (главная причина)
- Параметры с `Знач` **не возвращаются на клиент** после серверного выполнения
- Экономия на двойной сериализации больших объектов
+1 -1
View File
@@ -20,7 +20,7 @@ title: Индексы
| **Аналог** | Оглавление книги (порядок страниц = содержание) | Алфавитный указатель в конце книги |
| **Кол-во** | 1 на таблицу | Много на таблицу |
| **Скорость** | Максимальная (данные сразу там) | Высокая, но требует перехода по ссылке (найти запись в индексе, затем по ссылке перейти к данным) |
| **Что хранит** | Сами строки данных (таблица отсортирована) | Копия ключевых полей + ссылка на строку. Существует отдельно от данных. Сам индекс хранится в одном месте, а данные — в другом |
| **Что хранит** | Сами строки данных (таблица отсортирована) | Копия ключевых полей + ссылка на строку. Существует отдельно от данных. Сам индекс хранится в одном месте в виде b-дерева, а данные — в другом |
| **Влияние** | Меняет физический порядок хранения | Не меняет физический порядок |
**Простая аналогия**:
@@ -0,0 +1,71 @@
---
sidebar_position: 28
sidebar_label: Регистры бухгалтерии
title: Регистры бухгалтерии
---
**Регистры бухгалтерии** — объекты для ведения **многомерного аналитического учета** по плану счетов с поддержкой двойной записи и субконто.
## Ключевые понятия
**Субконто** — аналитические разрезы учета (Склады, Контрагенты, Номенклатура). Настраиваются в плане счетов для каждого счета. Cубконто связаны с планом видов характеристик.
**Корреспонденция** — режим работы регистра: с двойной записью (СчетДт/СчетКт) или без (единая запись). Проводки без поддержки корреспонденции характерны для международного.
**Балансовый признак** — контроль равенства значений измерений/ресурсов в дебете и кредите. Отключается для операций между разными объектами (валютные переводы между организациями).
## Виртуальные таблицы и их особенности
| Таблица | Назначение | Особенности использования |
|---|---|---|
| **Остатки** | Получение остатков на дату | Учитывает начальные остатки и все движения до указанной даты |
| **Обороты** | Получение оборотов за период | Только движения за указанный период, без остатков |
| **ОстаткиИОбороты** | Получение остатков на начало и оборотов за период | Основная таблица для отчетов. **Параметр `МетодДополнения`** — управляет показом счетов без оборотов, но с остатками |
| **ДвиженияССубконто** | Получение проводок с детализацией по субконто | Соединение основной таблицы и таблицы субконто. **Включает все записи, даже неактивные**. Используется для отборов проводок |
| **ОборотыДтКт** | Получение оборотов с корреспонденцией счетов | Только для регистров с включенной корреспонденцией |
## Субконто в виртуальных таблицах
**Когда появляются:**
Субконто появляются в виртуальных таблицах при выполнении **двух условий**:
1. В **плане счетов** для конкретного счета настроены типы субконто (например, Склад, Номенклатура)
2. В **регистре бухгалтерии** включено соответствующее количество субконто (больше 0)
**Как работают:**
- В таблицах **Остатки**, **Обороты**, **ОстаткиИОбороты** субконто становятся **дополнительными измерениями**
- В таблице **ДвиженияССубконто** субконто представлены как отдельные записи
## Ответы на ключевые вопросы
#### 1. Отличие от регистров накопления
**Вопрос:** *Чем регистр бухгалтерии отличается от регистра накопления?*
**Ответ:**
- **Привязка к плану счетов** — обязательная связь с конкретным планом счетов
- **Субконто** — многоуровневая аналитика через план видов характеристик
- **Корреспонденция** — поддержка двойной записи (Дт/Кт)
- **Балансовый контроль** — проверка равенства сумм по дебету и кредиту
#### 2. Работа с субконто
**Вопрос:** *Как настроить субконто для счета?*
**Ответ:**
1. В **плане счетов** открыть свойства нужного счета
2. В разделе **"Субконто"** добавить типы субконто (Склады, Контрагенты и т.д.)
3. В **регистре бухгалтерии** проверить количество включенных субконто
#### 3. Параметр `МетодДополнения`
**Вопрос:** *Зачем нужен параметр `МетодДополнения`?*
**Ответ:**
Управляет включением в результат записей **без оборотов за период, но с остатками**.
#### 4. Таблица `ДвиженияССубконто`
**Вопрос:** *Когда использовать `ДвиженияССубконто` вместо `Остатки`?*
**Ответ:**
Использовать `ДвиженияССубконто` когда нужно:
- Получить **детальные проводки** с развернутыми субконто
- Сделать **отбор по значениям субконто** (например, все операции по конкретному контрагенту)
- Увидеть **все записи**, включая неактивные (сторнированные)
#### 5. Балансовый признак
**Вопрос:** *В каком сценарии отключают балансовый признак у измерения?*
**Ответ:**
При **валютных операциях между разными организациями**.
Пример: Перевод валюты из ОрганизацииА в ОрганизациюБ. В дебете — ОрганизацияА, в кредите — ОрганизацияБ. Без отключения балансового признака система выдаст ошибку.
+12 -14
View File
@@ -3,7 +3,7 @@ sidebar_position: 27
sidebar_label: Регистры накопления
title: Регистры накопления
---
**Регистры накопления** — объекты для учета движения и накопления числовых данных в многомерных разрезах (товары, деньги, материалы). Есть два вида: **остатков** (сохраняет остатки) и **оборотов** (только изменения).
**Регистры накопления** — объекты для учета движения и накопления числовых данных в многомерных разрезах (товары, деньги, материалы). Есть два вида: **остатков** и **оборотов**.
## Ключевые моменты
@@ -31,10 +31,14 @@ title: Регистры накопления
3. **Досчитает** по движениям с этой даты до нужной (15.12.2023)
4. Если итогов нет → считает полностью по движениям
### Таблица "Обороты"
#### Алгоритм получения оборотов
- Для регистра **остатков**: всегда работает по **таблице движений** (не использует итоги)
- Для регистра **оборотов**: использует **таблицу итогов**, если параметры совпадают, а иначе по **таблице движений**
#### Алгоритм получения остатков и оборотов для таблицы `ОстаткиИОбороты`
- **Без периодичности:** Объединяет результат двух подзапросов — `Остатки` на начало периода и `Обороты` за период.
- **С периодичностью:** Разбивает период на интервалы (день, месяц), получает остатки на начало каждого и обороты внутри него, затем объединяет.
## Виртуальные таблицы и параметры
#### Параметр "Период"
@@ -46,7 +50,7 @@ title: Регистры накопления
Если использовать МоментВремени = 21.11.2003 12:00:00, остатки будут рассчитаны до этого момента (движения в 12:00:00 не учтутся).
Если использовать Граница(МоментВремени, ВидГраницы.Включая), движения в этот момент будут учтены
Если использовать Граница(МоментВремени, ВидГраницы.Включая), движения в этот момент будут учтены.
#### Параметр "Периодичность"
**Варианты:**
@@ -86,31 +90,25 @@ title: Регистры накопления
- **Нет.** Набор записей формируется **только по регистратору** (документу). Отбор по измерениям невозможен.
#### 5. **В чем разница между регистрами остатков и оборотов?**
**Ответ:**
- **Остатки**: хранит и остатки, и обороты. Есть таблица итогов для остатков. Позволяет получить остатки на любую дату.
- **Обороты**: только обороты, нет остатков. Может иметь агрегаты.
#### 6. **Как работает виртуальная таблица `ОстаткиИОбороты`?**
- **Без периодичности:** Объединяет результат двух подзапросов — `Остатки` на начало периода и `Обороты` за период.
- **С периодичностью:** Разбивает период на интервалы (день, месяц), получает остатки на начало каждого и обороты внутри него, затем объединяет.
#### 7. **Когда создавать агрегаты и сколько таблиц агрегатов можно создавать?**
**Ответ:** Когда частые запросы в **нестандартных разрезах**:
#### 6. **Когда создавать агрегаты и сколько таблиц агрегатов можно создавать?**
Когда частые запросы в **нестандартных разрезах**:
- Группировка по кварталам (а не месяцам)
- Отчеты по подмножеству измерений
- Частые отборы по конкретному измерению
Ограничений по количеству таблиц нет. Можно создать для любых часто используемых комбинаций измерений и периодов (квартал, неделя).
#### 8. **Есть оборотный регистр с измерениями Подразделение, Контрагент. Данные получаем в основном по кварталу и контрагенту. Как ускорить?**
**Ответ:**
#### 7. **Есть оборотный регистр с измерениями Подразделение, Контрагент. Данные получаем в основном по кварталу и контрагенту. Как ускорить?**
- **Основное:** Создать **агрегат** с измерениями `Контрагент` и периодичностью `Квартал`.
- **Альтернативы:**
1) Поменять порядок измерений (Контрагент — первым). Изменение порядка — дорогостоящая операция при уже заполненной базе — требует перестройки таблиц из-за того что влияет на структуру индексов в СУБД.
2) Создать индекс по измерению `Контрагент`.
#### 9. **Для чего могут отключать итоги?**
**Ответ:** Когда нужно провести много документов по регистру. Так как в этом случае при проведении документа не будут пересчитываться итоги, операция выполнится быстрее.
#### 8. **Для чего могут отключать итоги?**
Когда нужно провести много документов по регистру. Так как в этом случае при проведении документа не будут пересчитываться итоги, операция выполнится быстрее.
## Материалы
+39
View File
@@ -0,0 +1,39 @@
---
sidebar_position: 18
sidebar_label: Справочники
title: Справочники
---
**Объект метаданных для хранения списковых данных** (сотрудники, товары, контрагенты). Состоит из элементов с реквизитами и табличными частями. Может быть иерархическим и подчиненным. Аналогия: таблица в базе данных с элементами и их характеристиками.
## Ответы на ключевые вопросы
#### 1. Запись элемента без штатных обработок:
```bsl
// Через ОбменДанными.Загрузка
ОбменДанными.Загрузка = Истина;
```
#### 2. Отличие справочника от документа:
| Критерий | Справочник | Документ |
|---|---|---|
| **Назначение** | Хранение статичной информации | Фиксация хозяйственных операций |
| **Изменение** | Редко, вручную | Часто, как следствие событий |
| **Движения** | Не создает | Создает движения в регистрах |
| **Проведение** | Не проводится | Может проводиться |
| **Регистратор в регистрах** | ❌ | ✅ |
| **Пример** | Список товаров, сотрудников | Приходная накладная, счет |
```bsl
// Справочник — это "кто/что"
Товар = Справочники.Товары.НайтиПоНаименованию("Молоко");
// Документ — это "что произошло"
Документ = Документы.ПриходнаяНакладная.СоздатьДокумент();
Документ.Товар = Товар;
Документ.Количество = 10;
Документ.Провести(); // Создаст движения
```
---
Предопределенные элементы создаются в конфигураторе и автоматически появляются в базе. Управляются через ИмяПредопределенныхДанных. Критически важно правильно настраивать режимы обновления, особенно в распределенных системах.
Режимы обновления предопределенных данных — Управление тем, КОГДА и КАК новые предопределенные элементы появляются в базе при обновлении конфигурации.
+71
View File
@@ -0,0 +1,71 @@
---
sidebar_position: 24
sidebar_label: Планы счетов
title: Планы счетов
---
**Объект метаданных для хранения структуры счетов бухгалтерского учета.** Иерархическая структура счетов с поддержкой аналитики через субконто.
Ключевые особенности: максимум 3 субконто в типовых (ограничение СУБД), возможность отключения хранения остатков по субконто. Важно избегать примитивных типов в субконто из-за проблем с индексами СУБД."
## Ключевые моменты
| | Описание | Пример |
|---|---|---|
| **Иерархия** | Счета → субсчета → субсчета | 10 → 10.1 → 10.1.1 |
| **Субконто** | Аналитические разрезы учета | Организация, Склад, Номенклатура |
| **Признаки учета** | Доп. виды учета по счету | Количественный, Валютный |
| **Балансовый/Забалансовый** | Контроль баланса | Актив/Пассив или внебаланс |
## Структура плана счетов
#### Пример иерархии:
```
ПланСчетов "Хозрасчетный"
├── 10 "Материалы" (субконто: Номенклатура, Склад)
│ ├── 10.1 "Сырье и материалы"
│ ├── 10.2 "Покупные полуфабрикаты"
│ └── 10.3 "Топливо"
├── 20 "Основное производство"
├── 26 "Общехозяйственные расходы"
└── 41 "Товары" (субконто: Номенклатура, Склад)
```
## Ответы на ключевые вопросы
#### 1. Фиксация порядка субконто в запросе:
```bsl
Через параметр запроса можно задать порядок субконто. Передается массив с видами субконто в том порядке в котором нужно.
```
#### 2. Субконто без остатков (только обороты):
```bsl
// В свойствах субконто установить галку ТолькоОбороты
```
#### 3. Почему максимум 3 субконто в типовых:
```bsl
// Историческая причина: ограничения старых СУБД
// Каждое субконто ссылочного типа = 3 индексированных поля в SQL:
// 3 субконто × 3 поля = 9 полей в индексе
// При 4 субконто → 12 полей → снижение производительности
// + ограничение старых версий MS SQL на 16 полей в индексе
```
#### 4. Не использовать примитивные типы в субконто:
```bsl
// ПЛОХО: Составной тип с примитивами
Субконто = [Справочник.Организации, Число, Строка, Дата]
// На уровне СУБД: 3 поля + 4 примитива = 7 колонок
// Индекс > 15 колонок → неэффективен в MS SQL
// ХОРОШО: Только ссылочные типы
Субконто = [Справочник.Организации, Справочник.Склады]
// Только 2 × 3 = 6 колонок в индексе
```
#### 5. Количество регистров бухгалтерии:
```bsl
// На один план счетов можно создать:
// ✅ Неограниченное количество регистров бухгалтерии
```
+44
View File
@@ -0,0 +1,44 @@
---
sidebar_position: 2
sidebar_label: Общие модули
title: Общие модули
---
Назначение ключевых свойств
| Свойство | Для чего нужно | Важные нюансы |
|---|---|---|
| **Сервер** | Исполнение кода *на сервере*. Доступ к серверным функциям (работа с ИБ, безопасность). | Без `Клиент`. Из клиента вызывается через `ВыполнитьНаСервере()` |
| **ВызовСервера** | Позволяет вызывать **экспортные** функции модуля *из клиентского кода напрямую*. | Работает только в паре с `Сервер`. Упрощает синтаксис. |
| **Клиент (Обычное)** | Исполнение кода *на клиенте*. Доступ к интерфейсу, диалогам, локальным данным. | Для толстого/управляемого клиента. |
| **Клиент (Управляемое)** | Исполнение кода *в веб-клиенте или тонком клиенте*. | |
| **ВнешнееСоединение** | Доступ к модулю *из внешних подключений* (COM, OLE, HTTP-сервисы, ВнешниеИсточникиДанных). | Нужен для интеграций, когда код запускается не из сеанса пользователя. |
| **ПовторноеИспользование** | Кэширование результатов функций для *одинаковых входных параметров*. | `НаВремяВызова` (до 20 мин от последнего вызова). `НаСеанс` (до конца сеанса). **Только простые типы параметров!** |
## Типовые комбинации свойств
| Сценарий использования | Рекомендуемые свойства |
|---|---|
| **Серверная логика, вызываемая из клиента** | `Сервер` + `ВызовСервера` |
| **Логика для внешних интеграций (COM, HTTP)** | `Сервер` + `ВнешнееСоединение` |
| **Обработчики событий (Подписки)** | `Сервер` (если логика серверная) + `ВнешнееСоединение` (если из COM) |
| **Глобальные утилиты** | `Сервер`/`Клиент` + `Глобальный` (осторожно!) |
| **Кэшируемый справочник настроек** | `Сервер` + `ПовторноеИспользование` |
## Критически важные нюансы
#### Повторное использование возвращаемых значений
* **Параметры:** Только простые типы (`Неопределено`, `Null`, `Булево`, `Число`, `Строка`, `Дата`, `Ссылка`).
* **Возвращаемые значения:** Рекомендуются иммутабельные (`ФиксированнаяСтруктура`, `ФиксированныйМассив`).
* **Память:** Необоснованное использование → утечки памяти (кэш живет до 20 минут).
* **Использовать если:** Результат часто нужен и стабилен (настройки, константы, справочники-списки).
#### Глобальный общий модуль
* Функции доступны **без указания имени модуля**.
* **Требование уникальности имен** функций в рамках всей конфигурации.
* **Осторожно!** Может привести к конфликтам имен и усложнить чтение кода ("откуда эта функция?"
#### Вызов сервера
* Устанавливать признак "Вызов сервера" только для тех серверных общих модулей, чьи экспортные методы действительно должны вызываться с клиента
* Не устанавливать этот признак принудительно для всех серверных модулей — он должен быть осознанным и ограниченным
* Размещать в таких модулях только безопасные методы, которые передают клиенту только разрешенные данные (например, итоговые результаты расчетов, а не исходные или промежуточные данные, недоступные пользователю)
* Не размещать в модулях с "Вызов сервера" методы, использующие привилегированный режим, либо требующие повышенных прав доступа
+23
View File
@@ -0,0 +1,23 @@
---
sidebar_position: 17
sidebar_label: Константы
title: Константы
---
**Объекты метаданных для хранения значений, единых для всей информационной базы.** Аналогия: "глобальные переменные" системы. Используются для системных настроек, бизнес-параметров, редко меняющихся данных.
С версии 8.3 каждая константа хранится в отдельной таблице для исключения блокировок.
## Ключевые моменты
| | Описание | Пример |
|---|---|---|
| **Единичные значения** | Одно значение на всю базу | Валюта учета, организация
| **Редкое изменение** | Значения меняются нечасто | Настройки системы |
## Рекомендации по использованию
#### Использовать константы для:
- ✅ Системных настроек (валюта, организация)
- ✅ Параметров бизнес-логики (ставки, лимиты)
- ✅ Конфигурационных данных (версии, пути)
- ✅ Редко меняющихся значений
+36
View File
@@ -0,0 +1,36 @@
---
sidebar_position: 19
sidebar_label: Документы
title: Документы
---
Объект метаданных для фиксации хозяйственных операций с временной привязкой.
## Последовательности
**Последовательности** — это механизм для автоматического перепроведения зависимых документов при изменении исторических данных. Устанавливает метку времени после которой требуется восстановление последовательности, до неё считается что учет корректен.
Изменили ранний документ → система перепроводит все последующие. Критически важны для корректности расчетов (себестоимость, валютные переоценки), но создают проблемы с производительностью и блокировками. В современных конфигурациях используют альтернативные подходы (например, закрытие месяца).
## Журналы документов
**Журналы документов** - Объект метаданных для объединенного просмотра документов разных видов в одной таблице. Аналогия: "сводная таблица" для документов. Позволяют показывать один документ в нескольких журналах с разными графами (колонками). Используются для логической группировки по бизнес-процессам или ролям пользовате
#### Когда создавать журналы:
- ✅ Логическая группировка документов (по процессам)
- ✅ Упрощение работы пользователей (одно окно)
- ✅ Контроль и мониторинг (сводные данные)
## Ответы на ключевые вопросы
#### 1. Из реквизитов перенесли движения документа на форму. Начали задваиваться движения при записи в форме. Почему?
```bsl
// РЕШЕНИЕ: Установить галочку "Использовать всегда"
// Когда движения на форме они прочитаны и новые движения просто добавляются.
```
#### 2. Если проводим документ или перепроводим, то надо запустить алгоритм проверки расчетов показателей, которые были внесены в документ. Если показатели не верны, то необходимо сообщить об этом пользователю и не дать провести документ. Где и как это сделать?
```bsl
- Если ввод интерактивный в обработчике ОбработкаПроверкиЗаполнения
- Если программно тогда явно вызвать ПроверитьЗаполнение()
```
+127
View File
@@ -0,0 +1,127 @@
---
sidebar_position: 6
sidebar_label: Планы обмена и РИБ
title: Планы обмена и РИБ
---
**План обмена** — объект конфигурации для организации обмена данными между узлами.
**РИБ** — частный случай использования планов обмена с централизованным управлением конфигурацией.
## Иерархия и взаимосвязь
```
План обмена (базовый механизм)
├── Обычный обмен (разные конфигурации)
└── РИБ (специализированный обмен)
├── Главный узел (изменяет конфигурацию)
└── Подчиненные узлы (только данные)
```
## Ключевые концепции плана обмена
| Концепция | Описание | Важно |
|---|---|---|
| **Узлы плана** | Участники обмена (как элементы справочника) | Каждая база — предопределенный узел в своем плане |
| **Несколько планов** | Разные составы данных/механизмы для разных узлов | Гибкая настройка обмена |
| **Объекты обмена** | Данные для передачи: объекты БД + необъектные данные | Документы, справочники, регистры, константы |
| **Механизм регистрации** | Отслеживание изменений через свойство `ОбменДанными` | Формирует записи в таблицах регистрации изменений |
#### Авторегистрация изменений:
| Режим | Механизм | Где настраивать |
|---|---|---|
| **ВКЛЮЧЕНА** | Регистрируются любое изменение объекта (включая перепроведение). План обмена автоматически заполняет `ОбменДанными.Получатели` | Состав данных плана обмена → признак Авторегистрация |
| **ВЫКЛЮЧЕНА** | Разработчик программно заполняет `ОбменДанными.Получатели` | Обработчики `ПередЗаписью()` и `ПередУдалением()`, Если после записи то использовать ПланОбмена.ЗарегистрироватьИзменения |
## Архитектура плана обмена
#### 1. **Регистрация изменений**
- Каждый объект обмена имеет свойство `ОбменДанными`
- При записи/удалении → формируются записи в таблице регистрации
- Одна запись на каждый узел-получатель
#### 2. **Таблицы регистрации**
- Отдельная таблица для каждого типа объектов обмена
- Содержит: ссылку на объект, узел-получатель, номер сообщения
- Создаются только если объект в составе плана обмена
#### 3. **Инфраструктура сообщений**
- Сообщение = единица обмена информации
- Уникальный номер в рамках плана обмена
- Подтверждения приема через номер последнего принятого сообщения
## Особенности РИБ (как специализации)
| Аспект | Обычный план обмена | РИБ |
|---|---|---|
| **Конфигурация** | Может отличаться | Одинаковая, изменяется только в главном узле |
| **Направленность** | Любая (peer-to-peer) | Иерархическая (центр → подчиненные) |
| **Автономность** | Полная | Ограниченная (без изменений конфигурации) |
| **Использование** | Интеграция разных систем | Распределение одной системы |
#### Критические ограничения РИБ:
1. **Главный узел** — единственный источник изменений конфигурации
2. **Конфликты** — разрешаются в пользу главного узла
3. **Зависимость** — подчиненные не могут работать без обновлений конфигурации
## Критические нюансы
#### Производительность:
1. **Авторегистрация ВКЛ** → больше записей в таблице регистрации, возможны взаимные транзакционные блокировки
2. **Таблицы регистрации** → дополнительная нагрузка при записи объектов
3. **Очистка записей** → по подтверждениям от узлов-получателей
#### При ОбменДанными.Загрузка = Истина
НЕ работают:
- ПриУстановкеНомера(), ПриУстановкеКода()
- ОбработкаПроведения() (документов)
- Автоматические заполнения и проверки
- ПередЗаписью() и ПриЗаписи() сработают, но если объект по "стандарту" (реализована проверка), то фактически код их не выполнится
## Техническая реализация
#### Таблица регистрации изменений:
| Поле | Назначение | Особенности |
|---|---|---|
| **Объект** | Ссылка на измененный объект | |
| **Узел** | Узел-получатель для этого изменения | |
| **Сообщение** | Номер сообщения, в котором отправлено | Null пока не отправлено |
## Критерии выбора
#### Использовать план обмена, если:
- ✅ Нужен обмен между базами 1С
- ✅ Регулярная синхронизация данных
- ✅ Встроенные механизмы конфликтов/повторов
Для обмена с разными конфигурациямии нужны правила конвертации данных.
#### Использовать РИБ, если:
- ✅ Одна распределенная система
- ✅ Централизованное управление конфигурацией
- ✅ Иерархическая структура (центр → филиалы)
## Примеры работы
#### 1. Регистрация объекта только, если новый:
```bsl
Процедура ПередЗаписью(Отказ)
Если Это Новый Тогда
ОбменДанными.Получатели = Новый Массив;
ОбменДанными.Получатели.Добавить(УзелДляОбмена);
КонецЕсли;
КонецПроцедуры;
```
#### 2. Удалить объект из регистрации при включеной Авторегистрации:
```bsl
Процедура ПередЗаписью(Отказ)
// Авторегистрация заполнила Получатели
// Удаляем ненужные узлы
Для Каждого Узел Из ОбменДанными.Получатели Цикл
Если Не НуженЭтоУзел(Узел) Тогда
ОбменДанными.Получатели.Удалить(Узел);
КонецЕсли;
КонецЦикла;
КонецПроцедуры;
```
@@ -0,0 +1,14 @@
---
sidebar_position: 31
sidebar_label: Внешние источники данных
title: Внешние источники данных
---
**Внешний источник данных** — это конфигурационный объект 1С, который позволяет работать с внешними базами данных **как с родными таблицами 1С**. Подключение выполняется через ODBC драйвер с использованием строки подключения (возможен вариант программного подключения).
В пользовательском режиме строка подключения задается в стандартной форме "Управление внешними источниками данных".
#### Может использоваться:
- ✅ В запросах
- ✅ В СКД
- ✅ Указываться в реквизите
+40
View File
@@ -0,0 +1,40 @@
---
sidebar_position: 5
sidebar_label: Общие реквизиты
title: Общие реквизиты
---
**Объекты метаданных для добавления реквизитов сразу для множества прикладных объектов** (справочников, документов, регистров). Два типа: **с разделением данных** и **без разделения данных**. Добавляется одинаковая колонка в разные таблицы базы данных
**Разделяемые**: используется для разделения данных (например, по организациям).
**Без разделения**: используется для решения технических задач конфиурации. Не предназначены для удобства добавления одинаковых реквизитов.
## Ключевые моменты
| | Описание | Важно |
|---|---|---|
| **Назначение** | Единый реквизит в разных таблицах | Добавляет одинаковую колонку в несколько таблиц |
| **Основное применение** | Разделение данных между организациями | В основном используется в 1С:Fresh |
| **Типы объектов** | Могут добавляться к большинству объектов | Документы, справочники, регистры |
## Частые ошибки и проблемы
1. **Использование для бизнес-логики** — реквизиты заказа, продажи и т.д.
2. **Необоснованное применение** — "просто чтобы было"
3. **Смешение с разделяющими** — использование не тех общих реквизитов
4. **Усложнение поддержки** — непрозрачная структура объектов
## Рекомендации по использованию
#### Когда применять:
- ✅ Технические/системные задачи конфигурации (не для разделения данных)
- ✅ Разделение данных (разделяемые реквизиты)
#### Когда НЕ применять:
- ❌ Добавление одинаковых полей в разные объекты
- ❌ Решение бизнес-задач
- ❌ Упрощение разработки (без реальной необходимости)
#### Альтернатива:
1. **Отдельные базы** — для каждой компании своя ИБ
2. **Логическое разделение** — через РЛС
@@ -30,7 +30,7 @@ title: Регистры сведений
**в) Уникальность записей**
* Контролируется системой автоматически.
* **Ключ записи** формируется из комбинации:
* Регистратора (если подчинен),
* Регистратора (если подчинен, но не всегда входит в разряд ключевых полей),
* Периода (если периодический),
* Значений **всех** измерений.
* **Пример:** Не может быть двух одинаковых цен на одну номенклатуру в одном типе цен на одну дату.
@@ -41,7 +41,7 @@ title: Регистры сведений
* **Основной отбор** задаёт измерения, по которым формируется логическая единица данных. При обмене вместо отдельных записей передаётся весь набор записей, соответствующий комбинации значений этих измерений. Это обеспечивает целостность данных — например, все характеристики одного товара передаются вместе, а не по отдельности.
* Например, если в основной отбор включено измерение "Товар", то при изменении хотя бы одной записи по этому товару будут переданы все его характеристики2.
* Например, если в основной отбор включено измерение "Товар", то при изменении хотя бы одной записи по этому товару будут переданы все его характеристики.
* **Основной отбор по периоду** доступен только для периодических регистров с независимым режимом записи. Если он включён, в логическую единицу обмена дополнительно включается поле Период, что позволяет группировать данные по времени.
@@ -51,7 +51,7 @@ title: Регистры сведений
* Предотвращают разрыв логической целостности данных при синхронизации между узлами
* Определяют состав ключа в таблице регистрации изменений: для регистра без регистратора ключ формируется по измерениям с установленным "Основным отбором" и (если включено) по периоду
#### **Функциональные возможности (что можно делать)**
**д) Функциональные возможности (что можно делать)**
* Получение «срезов» — значений ресурсов на заданную дату (последних, первых).
@@ -75,7 +75,7 @@ title: Регистры сведений
* Неопределено
**4. Как программно определить, подчинен регистр сведений или нет?**
* Через объект метаданных:
* Через объект метаданных
**5. В чем разница хранения между табличной частью справочника и регистра сведений?**
* Для каждого справочника создается **отдельная таблица** в СУБД, даже если она пустая. Если табличная часть заполняется редко тогда лучше использовать регистр сведений.
@@ -0,0 +1,16 @@
---
sidebar_position: 23
sidebar_label: Планы видов характеристик
title: Планы видов характеристик (ПВХ)
---
**Объект метаданных для динамического добавления пользовательских атрибутов к объектам.** Позволяет создавать произвольные характеристики без изменения конфигурации.
- Отличается от справочника переменным типом значений и более высокой абстракцией.
- План счетов использует **ПВХ** для хранения видов субконто (аналитик учета).
- **Дополнительные значения** — это подчиненный справочник, где пользователь сам создает значения для характеристик. Идеально для товаров с произвольными параметрами (цвет, размер, материал)."
#### Использовать ПВХ когда:
- ✅ Нужны динамические атрибуты (пользователь сам добавляет)
- ✅ Разные объекты требуют разных наборов свойств
- ✅ Часто добавляются новые характеристики
- ✅ Хочется избежать постоянных доработок конфигурации
+89
View File
@@ -0,0 +1,89 @@
---
sidebar_position: 4
sidebar_label: Роли
title: Роли
---
В 1С существует **два основных принципа**:
1. **Запрещено всё, что явно не разрешено.**
2. Нет механизмов **"запрета"**, есть только механизмы **"разрешения"**. Если право дано одной ролью, его невозможно отнять другой.
**1. Права доступа** — это **минимальная и единственная единица**, определяющая доступ к чему-либо (объекту, реквизиту, режиму работы). Права связаны иерархически: чтобы дать право низкого уровня (например, "Редактирование"), нужно дать права более высокого уровня ("Чтение", "Изменение").
**2. Роли, профили и группы доступа** — это **обвязка для удобной группировки и выдачи прав**.
* **Роль** — набор связанных прав.
* **Профили доступа** и **Группы доступа** (в типовых решениях) — надстройки над ролями для массового назначения комплектов ролей пользователям.
**3. Логика разрешений (пересечение ролей)** — итоговые права пользователя это **объединение (OR)** всех прав из всех его ролей. Важно избегать ситуаций, когда одна роль даёт нежелательный доступ, который нельзя будет забрать.
**4. Косвенные механизмы управления доступом**
| Механизм | Назначение | Влияние на доступ | Ключевые особенности |
| :--- | :--- | :--- | :--- |
| **Функциональные опции** | **Интерфейсное** скрытие неиспользуемого функционала (кнопок, полей). | **Не влияет на реальный доступ!** Пользователь может работать со скрытыми данными через обработки. | Упрощает интерфейс, но не защищает данные. |
| **RLS (Record Level Security)** | **Фильтрация** данных на уровне записей **в рамках конкретной роли**. | Ограничивает **выдачу** прав, разрешая работать только с определёнными записями (напр., по организации). | Это **фильтр**, а не запрет. Если право дано другой ролью без RLS — фильтр не сработает. |
| **Разделение данных** | Физическое разделение данных в одной ИБ для независимой работы (арендаторы, филиалы). | Жёсткая фильтрация по разделителю на уровне всех запросов. | Даёт выигрыш в скорости при работе внутри раздела, но резко замедляет работу при его отсутствии. |
| **Программный код** | Точечные ограничения в конкретных формах, отчетах или модулях объектов. | Частично ограничивает действия в заданных сценариях (например, проверка при открытии формы). | **Не гарантирует** полную защиту, так как данные могут быть получены другими способами (запросами, обработками). |
**Итог:**
* **База:** Правильное разбиение на **роли**.
* **Ограничение видимости данных:** Использование **RLS**.
* **Частные случаи:** **Программный код**.
* **Упрощение интерфейса:** **Функциональные опции**.
* **Изоляция независимых данных:** **Разделение данных**.
**Для анализа** итоговых прав пользователя в типовых конфигурациях используйте стандартный отчёт **"Права доступа"**.
## RLS
**Разграничение прав доступа на уровне записей** (строк таблиц). Позволяет ограничить видимость данных для разных пользователей/групп.
#### Ключевые моменты
| | Описание | Важно |
|---|---|---|
| **Уровень** | Разграничение на уровне отдельных записей (строк) | В отличие от ролей (объектный уровень) |
| **Параметры** | Используются параметры сеанса `&Параметр` | `&ТекущийСклад`, `&ТекущийПользователь` |
| **Производительный режим** | Новая оптимизация в БСП 3.x | Требует специальной настройки |
**Пример RLS для документа:**
```bsl
// Ограничение по ответственному
Ответственный = &ТекущийПользователь
```
**Производительность:**
1. **Избегать периодических регистров** — сложные вычисления в RLS
2. **Использовать готовые данные** — предварительно рассчитанные значения
3. **Индексы** — поля в условиях RLS должны быть проиндексированы
**Архитектура в типовых конфигурациях:**
1. **Профили групп доступа** — шаблоны настроек прав доступа, выбираются роли конфигурации
2. **Группы доступа** — указывается профиль, пользователи, ограничения на уровне записей
3. **Роли конфигурации** — привязываются к профилю
в
**Частые ошибки**
1. **Сложные условия в RLS** — вычисления, подзапросы
2. **Дублирование условий** — в нескольких ролях для одного объекта
3. **Отсутствие индексов** — на полях, используемых в RLS
4. **Использование медленных виртуальных таблиц** — периодических регистров
#### Оптимизация RLS
**Производительный режим (БСП 3.x):**
- **Предварительные вычисления** — данные готовятся заранее
- **Кэширование** — результаты RLS кэшируются
- **Меньше JOIN** — упрощенные условия в SQL
**Общие рекомендации:**
1. **Простая логика** — элементарные сравнения (`=`, `IN`)
2. **Использование справочников** — вместо вычислений в запросе
3. **Тестирование на объеме** — проверка с реальными данными
**Множественные роли с RLS для одного пользователя:**
1. Разные объекты — можно
2. Разные права — можно (чтение + запись)
## Материалы
* [Управление доступом: роли, права, профили, группы доступа, функциональные опции, RLS](https://infostart.ru/1c/articles/685213/)
@@ -0,0 +1,34 @@
---
sidebar_position: 3
sidebar_label: Параметры сеанса
title: Параметры сеанса
---
**Глобальные переменные сеанса**, инициализируемые при старте или первом обращении. Используются для хранения контекста пользователя и в RLS.
## Ключевые моменты
| | Описание | Важно |
|---|---|---|
| **Модуль сеанса** | Место установки параметров | `УстановкаПараметровСеанса()` и `ПередУстановкойПараметраСеанса()` |
| **Инициализация** | При старте или лениво (при первом обращении) | Ленивая инициализация экономит ресурсы |
| **Синтаксис** | `ПараметрыСеанса.Имя` или `&Имя` (в запросах/RLS) | `&` — работает только в текстах запросов и RLS |
| **RLS** | Использование в условиях ограничения доступа | Безопасная передача контекста пользователя |
## Практическое применение
**Примеры сценариев:**
1. **Контекст пользователя** — роль, подразделение, организация
2. **Настройки сессии** — язык, валюта, режим работы
3. **Динамические условия RLS**`Ответственный = &ТекущийПользователь`
## Критические нюансы
1. **Объем данных** — не хранить большие массивы (справочники лучше кэшировать иначе)
2. **Типы данных** — простые типы и ссылки, избегать сложных структур
3. **Инициализация** — параметр вычисляется один раз за сеанс
## Частые ошибки
- Циклические зависимости между параметрами
- Тяжелые вычисления при инициализации
- Хранение часто изменяемых данных
+1 -2
View File
@@ -54,8 +54,7 @@ title: Контроль остатков
Через **разделение итогов** (включено по умолчанию). Каждая транзакция пишет в свой "слой", итоги суммируются при чтении.
#### 3. **Что делает `БлокироватьДляИзменения`?**
- **В режиме разделения итогов:** Выключает его, включает **управляемую блокировку** на записываемые строки.
- **Без разделения итогов:** Устанавливает монопольную блокировку.
- Выключает режим разделения итогов.
## Материалы