Як прискорити 1с - режим поділу підсумків - проект - курси 1с
Що Ви дізнаєтеся з цієї статті?
- У статті розглядається призначення режиму поділу підсумків
- Розбирається поведінку системи «1С: Підприємство 8» при паралельній роботі великої кількості користувачів
- Показуються мінуси режиму поділу підсумків
- Видаються рекомендації щодо коректного використання поділу підсумків регістра
Платформа «1С: Підприємство 8» містить можливості і механізми, про роботу яких не всі мають повне уявлення, як і про способи їх ефективного використання. Таким є режим поділу підсумків.
Механізм поділу підсумків виконує дуже важливу і корисну функцію: його використання робить можливим здійснювати паралельний запис в регістри бухгалтерії і регістри накопичення.
Покажемо ефективність даного режиму за допомогою прикладу. Для цього розглянемо ситуацію до і після включення режиму поділу підсумків.
До включення режиму поділу підсумків
Ми маємо в наявності два однакових документа з номерами 001 і 002:
Обидва документи здійснюють рух по регістру накопичення. Контролю залишків немає. Структура регістра накопичення:

Два користувача, працюючи в своїх документах, починають одночасне проведення. Виникає ситуація, при якій два документа одного типу намагаються зробити руху одночасно.
При цьому на рівні СУБД виникає наступна картина:

Ось що відбувається в системі:
- Документи намагаються внести запис в регістр накопичення

В результаті ми спостерігаємо втрату часу - другий користувач змушений чекати закінчення проведення документа у першого. З одного боку, все правильно і логічно, з іншого - страждає паралельність роботи користувачів в системі.
Для вирішення цієї проблеми і створений механізм поділу підсумків.
Його використання передбачено лише для регістрів накопичення і регістрів бухгалтерії.
Функція переходу в режим поділу підсумків
Включення даного режиму виконується досить просто:

Зауважимо, що режим поділу підсумків включений за замовчуванням для всіх створюваних регістрів накопичення і бухгалтерії. Крім Конфігуратора в призначеному для користувача режимі ми можемо подивитися, для яких регістрів включено використання режиму:

Що відбувається після включення режиму поділу підсумків?
У таблиці підсумків регістра накопичення / бухгалтерії з'являється новий стовпець «Роздільник». У самій СУБД він названий «Splitter».
При цьому таблиця рухів залишається незмінною, роздільником в ній виступає «Реєстратор». Зміна ми бачимо в таблиці підсумків.
Це поле заповнюється тільки в тому випадку, коли дві (або більше) транзакції намагаються змінити один рядок в таблиці підсумків. При виникненні такого випадку поле «Роздільник» зберігає різні значення для кожної з транзакцій.
Така реалізація режиму поділу підсумків уможливлює виконувати паралельну запис всіх транзакціях.
У нашому прикладі з двома документами при включенні режиму спостерігається наступне:

Обидва наших документа виконали паралельний запис своїх даних завдяки новому полю «Роздільник». В результаті не виникають очікування при блокування і підвищена паралельність роботи користувачів.
Мінуси режиму поділу підсумків
При включенні даного режиму збільшується розмір таблиці підсумків регістра через те, що було додано нове поле, і з'являється кілька рядків по набору вимірів замість однієї.
При отриманні залишків по регістру виникає потреба згортки даних, що призводить до витрат часу, нехай і незначним.
У нашому випадку з двома документами для отримання залишку товару «Стіл» за складом «Основний» виникає необхідність складання двох рядків для отримання підсумкового значення «7». При вимкненому роздільник угруповання рядків (додавання) не потрібно.
Коли слід використовувати режим поділу підсумків?
Для цього необхідно виконати умови:
- За регістру немає контролю залишків - немає читання даних в транзакції. У регістрах бухгалтерії контроль залишків, як правило, відсутня. Але якщо контроль залишків присутній, то ми не отримаємо ніякого виграшу в продуктивності. До того ж, при контролі залишків потрібно використовувати властивість набору записів «БлокіроватьДляІзмененія», так як виникає ймовірність взаимоблокировки.
При послідовній роботі з регістром або роботі з малим числом користувачів немає сенсу включати режим поділу підсумків: відсутність конкуруючих транзакцій не призводить до очікуванням на блокування, і, відповідно, не спостерігається ефекту від використання режиму поділу підсумків.
PDF-версія статті для учасників групи ВКонтакте
35 навчальних годин, підготовка до 1С: Експерт, правильна настройка серверної частини, оптимізація коду, моніторинг завантаженості обладнання та інші дорослі речі.
21 Responses to Оптимізація «1С: Підприємство 8» - Режим поділу підсумків
Добридень!
Підкажіть будь ласка, Ви пишіть що цей режим не слід застосовувати якщо по регістру існує контроль залишків - і є читання даних в транзакції. Тобто в нових методах оперативного проведення (списання, потім контроль залишків) в регістрі накопичення ОстаткіТоваров цей режим повинен бути відключений? На екзамені з фахівцеві на це звертають увагу?
> Тобто в нових методах оперативного проведення (списання, потім контроль залишків) в регістрі накопичення ОстаткіТоваров цей режим повинен бути відключений?
Або відключений, або у набору записів цього регістра має бути встановлено властивість БлокіроватьДляІзмененія = Істина. Якщо цього не зробити, то при паралельному проведенні документів з однаковими значеннями в 8.2 буде можливий Дедлок, а в 8.3 будуть можливі негативні залишки.
> На екзамені з фахівцеві на це звертають увагу?
Ось цього не можу сказати.
Добридень!
у всіх книгах, курсах «БлокіроватьДляІзмененія = Істина» не ставлять в документі ПриходнаяНакладная підкажіть чому? Адже якщо я перепровожу документ ПриходнаяНакладная то я повинен блокувати поля за якими був прихід інакше можна товар списати в мінус. Приклад: було Стілець 2шт, перепровожу змінюючи Стілець на Тумбу і в цей момент списую Стілець, то у мене спишеться в мінус. Питання виникло тому здавав на спеца і там поставив в документі ПриходнаяНакладная «БлокіроватьДляІзмененія = Істина» мені написали зайва блокування.