vk fb tw rss

Режим разделения итогов

Разделение

 

В платформе 1С есть много интересных механизмов, о существовании которых знают многие, но не многие понимают как именно их использовать в своей работе. Одним из таких механизмов и является режим разделения итогов.
 

 

Разделяй и властвуй!

 

Механизм разделения итогов делает очень полезную вещь, он позволяет параллельно записывать одинаковые значения по набору измерений в регистры накопления и бухгалтерии.

 

До включения разделителя

Проще всего пользу и эффект режима разделения итогов продемонстрировать с помощью примера.

Допустим у нас есть 2 одинаковых документа под номерами 0001 и 0002.

Разделитель итогов документы

Документы делают движения по регистру накопления, при этом контроль остатков отсутствует.

Состав регистра накопления:

Регистр накопления

Два оператора, каждый в своем документе, одновременно нажимают кнопку провести. Получается ситуация когда два одинаковых документа пытаются записать свои движения одновременно.

Давайте посмотрим, что происходит в этот момент в СУБД.

Без разделения итогов 1

 

А происходит следующее:

Документы пытаются внести запись в регистр накопления.

Регистр накопления на уровне СУБД состоит из 2х таблиц, таблицы движений и таблицы остатков (другое название таблица итогов). Подробнее о внутреннем устройстве регистра накопления можно узнать тут.

В таблицу движений оба документа могут записать свои данные параллельно, т.к. благодаря столбцу «Регистратор» документы работают с разными строками таблицы. Разные строки можно менять параллельно, так же как 2 человека могут одновременно писать на разных строчках в тетради.

Но в таблице остатков нет столбца «Регистратор», данные там хранятся в разрезе измерений регистра.

Возникает ситуация, когда 2-м документам нужно изменить одну запись, но одну запись одновременно менять нельзя. Два человека не могут писать одновременно в одной строке тетради, т.к. потом эту надпись нельзя будет прочесть.

Что бы сохранить данные, один из документов вынужден встать в очередь и подождать пока первый документ завершит свою работу. Как только первый документ внесет свои данные, второй документ может вносить свои.

Без разделения итогов 2

В итоге имеем потерю рабочего времени, ведь один из операторов вынужден ждать другого.

 

Включение режима разделения итогов

Вроде бы все логично, только вот параллельность работы пользователей при этом страдает.

Для решения этой проблемы и был придуман механизм разделения итогов. Данный режим, возможно использовать только для регистров накопления и регистров бухгалтерии.

Включается механизм очень просто.

Флаг разделение итогов

 

По умолчанию разделение итогов включено для всех создаваемых регистров накопления и бухгалтерии.

Тем не менее, не мешает проверить, что разделение итогов включено не только в конфигураторе, но и в пользовательском режиме.

Разделение итогов в режиме 1С Предприятие

 

Что происходит после включения режима разделения итогов?

Все очень просто, в таблицу итогов регистра накопления/бухгалтерии добавляется новый столбец под названием «Разделитель». В СУБД он отображается как Splitter. Другими словами у нас как бы появляется дополнительное, невидимое измерение.

Регистр накопления с разделителем

Причем таблица движений остается без изменений (там разделителем служит регистратор), изменение касается только таблицы итогов.

Данный столбец заполняется только в том случае, если 2 (или более) транзакции попытаются изменить одну строку в таблице итогов. Как только такая ситуация происходит, столбец разделитель принимает разные значения для каждой из транзакций. Это дает возможность всем транзакциям писать свои данные параллельно.

Вернемся к нашему примеру с двумя документами, только теперь включим разделитель итогов для регистра, и посмотрим что произойдет.

Режим разделения итогов - с разделением

Благодаря тому, что появился новый столбец, оба документа смогли записать свои данные параллельно. При этом мы избавились от ожиданий на блокировках и повысили параллельность работы пользователей.

 

Минусы режима разделения итогов.

При включенном разделителе итогов немного увеличивается размер таблицы итогов регистра, т.к. добавляется новый столбец и в место одной строки по набору измерений может появится несколько.

Второй момент состоит в том, что при получении остатков по регистру появляется необходимость свертки данных, на что тратится некоторое время, хотя и незначительное. В нашем примере, для получения остатка товара «Стол» по складу «Основной», необходимо будет сложить 2 строки, что бы получить итоговое значение 7. Если бы разделитель был выключен, то ничего складывать бы не пришлось.

 

Когда следует использовать режим разделения итогов?

Данный режим следует использовать при выполнении следующих двух условий:

1. По данному регистру нет контроля остатков.

При использовании регистра бухгалтерии контроль остатков как правило отсутствует.

Если есть контроль остатков, то выигрыша в производительности не будет. Так же при контроле остатков необходимо использовать свойство набора записей БлокироватьДляИзменения, иначе возможна взаимоблокировка.

2. С регистром идет активная параллельная работа пользователей.

Если с регистром работают только последовательно, либо с ним работает малое количество пользователей, тогда нет особого смысла включать разделитель итогов. Ведь при отсутствии конкурирующих транзакциях мы не получим никакого эффекта от включения режима разделения итогов, т.к. нет ожиданий на блокировках.

 

А у вы используете разделитель итогов в своей работе?

 

Друзья, давайте не будем теряться на просторах интернета! Если вы хотите регулярно получать материалы по оптимизации, подпишитесь на новости!

 



Лучшие материалы по теме

Расскажите своим друзьям
Вам ничего не стоит, а им будет интересно
Подпишитесь на обновления
Ваш e-mail: * Ваше имя: *


Обсудить Вконтакте


Обсудить в Facebook

8 комментариев: Режим разделения итогов

  • Добрый день!
    В последнем абзаце Вы утверждаете (цитата): «Если есть контроль остатков, то выигрыша в производительности не будет.». Согласен с этим лишь в отношении документа «Реализация», который использует блокировку. А вот на документе «Поступление», который блокировку не использует, производительность будет выше. Поэтому в общем случае Ваше утверждение не верно. )

    • Какая разница какой документ. Если есть контроль остатков после записи то будут читаться все данные без учета разделителя, а это может привести либо к дедлоку, либо к отрицательным остаткам (если включен RCSI). А если контроль остатков до записи, тогда перед запросов остатков накладывается упр. блокировка без учета разделителя и параллельности опять же не будет.
      И еще что вы имеете ввиду документ поступление блокировку не использует? Любая запись это всегда блокировка, если документ двигает регистр, значит он в любом случае блокирует там данные.

      • Я имею в виду программную блокировку в обработке проведения документа.
        Если включен Режим разделения итогов, то блокировки таблицы СУБД при записи не возникает, разве не об этом речь в статье?

        • Речь не о блокировках, а об ожиданиях на блокировках. Блокировки будут в любом случае, но если разделитель итогов включен и нет контроля остатков, тогда ожиданий на блокировках не будет. Если использовать контроль остатков, тогда разделение итогов не поможет, причину я уже описал выше.

          • Разделение итогов применимо к регистру, а контроль остатков используется или не используется в модуле разных видов документов. Если разделение включено, то ожидания на блокировках не будет для видов документов, не использующих контроль остатков, а значит и увеличение производительности будет для этих видов документов.Хотя другие виды документов могут использовать контроль остатков.

            • Здесь когда я говорю про контроль остатков, естественно я имею ввиду контроль остатков по конкретному регистру в конкретном документе, а не вообще контроль остатков в конфигурации.

              • Спасибо за уделенное время и разъяснения. Но я не вижу оснований сужать вопрос до одного документа. Мне, и наверняка остальным читателям, интересен более общий случай.

                • Разделение итогов это не общий случай.
                  Надо для каждого конкретного документа и каждого конкретного регистра смотреть, можем ли мы использовать этот механизм или нет.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *