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

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

Прежде всего, нужно отметить, что режим разделения итогов влияет только на параллельность работы системы и никак не сказывается на самой бизнес-логике решаемых задач. То есть это механизм платформы, который обеспечивает более высокий уровень параллельности и управляется в конфигурации и в информационной базе только с целью настройки использования данной возможности для конкретных объектов конфигурации и в конкретном внедрении. С точки зрения решаемых задач предметной области он конфигурирования не требует.

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

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

Например, есть движения:

Регистратор Вид движения Дата Измерение Товар Измерение Склад Ресурс Количество
Приходная накладная 1 Приход 12.06.06 Стол Основной 10
Приходная накладная 1 Приход 12.06.06 Стул Основной 8
Приходная накладная 2 Приход 12.06.06 Стол Основной 1
Расходная накладная 5 Расход 13.06.06 Стол Основной 5

Тогда в системе есть текущие остатки в таблице остатков:

Измерение Товар Измерение Склад Ресурс Количество
Стол Основной 6
Стул Основной 8

То есть таблица итогов содержит алгебраическую сумму движений (с учетом вида движений) по каждой комбинации измерений.

При каждой записи движений система добавляет или вычитает в зависимости от вида движения значения ресурсов движений из соответствующих строк таблицы итогов. Для того чтобы это сделать, система должна считать текущее значение, увеличить или уменьшить его, и записать измененное значение. Разумеется, чтобы эта операция прошла корректно, нужно заблокировать считываемую запись, чтобы никто не мог изменить запись после считывания. Таким образом, в приведенном примере приходная накладная номер 1 и приходная накладная номер 2 не могу быть параллельно проведены, так как не могут быть записаны параллельно записи по комбинации измерений «Стол — Основной».

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

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

Разделитель Измерение Товар Измерение Склад Ресурс Количество
Стол Основной 10
1 Стол Основной 1
Стул Основной 8

Таким образом, уже становится возможным параллельное проведение приходной накладной 1 и приходной накладной 2.

Когда после этого будет записана расходная накладная 5, записи будут выглядеть так:

Разделитель Измерение Товар Измерение Склад Ресурс Количество
Стол Основной 5
1 Стол Основной 1
Стул Основной 8
Читайте также  Реклама сири с коржиком на русском

При получении итогов (обращении к виртуальной таблице), система сворачивает записи по комбинациям измерений, и поэтому при обращении к виртуальной таблице мы получим:

Измерение Товар Измерение Склад Ресурс Количество
Стол Основной 6
Стул Основной 8

Новые записи с уже существующими комбинациями измерений создаются системой только в случае, если параллельно выполняются две и более транзакции. Фактически, значение разделителя — это некоторое число, выдаваемое системой в очередной транзакции и уникальное среди всех параллельно выполняемых транзакций в данный момент времени. Система выдает первое свободное число, то есть числа, выданные ранее завершившимся транзакциям, переиспользуются. Таким образом, увеличение количества записей итогов зависит от количества одновременно выполняемых транзакций.

Данный механизм работает только при записи движений. При обращении к итогам регистров в запросе блокировка накладывается на все записи с используемыми комбинациями измерений. И это соответствует сути решаемой задачи. Например, при проведении расходной накладной средствами встроенного языка выполняется считывание остатков для проверки возможности продажи товара. В этом случае блокировка не позволит провести расходную накладную параллельно с другой расходной накладной или приходной накладной, если имеются пересекающиеся комбинации измерений. И это правильно, потому что, расходную накладную номер 5 нельзя проводить параллельно с приходной накладной 1 и приходной накладной 5, так как необходимо обеспечить логическую проверку наличия товара на складе, так чтобы никто не мог поменять считанный остаток до конца транзакции проведения расходной накладной. Таким образом, механизм разделения итогов исключает блокировки, устанавливаемые для поддержки актуальных итогов (решения системной задачи), но не исключает блокировки, накладываемые для решения задач бизнес-логики.

Аналогичная логика поддерживается и при использовании управляемого режима блокировки. Из встроенного языка доступна блокировка только по измерениям (без учета разделения итогов по отдельным записям).

Заметим, что данный механизм не работает в файловом варианте, так как там поддерживается только блокировка уровня таблиц. Также он не поддерживается при работе с СУБД PostgreSQL в автоматическом режиме блокировок.

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

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

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

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

Читайте также  Ряд 1 n сходится или расходится

В информационной базе для регистров (тех, для которых разделение итогов разрешено в конфигурации) поддерживается хранение признака использования разделения итогов. Он может быть получен и установлен методами ПолучитьРежимРазделенияИтогов() и УстановитьРежимРазделенияИтогов() , а также в стандартном диалоге (« Операции-Управление итогами-Установка режима разделения итогов »). Такая возможность позволяет включать или выключать режим разделения итогов в зависимости от условий работы пользователей в конкретной организации. Например, при интенсивном параллельном вводе информации этот режим может быть полезен. Но если с системой работает небольшое количество пользователей, то выигрыш от его применения будет небольшой, а некоторое замедление при получении отчетов и лишние записи в таблицах итогов, фактически будут лишними (неоправданными).

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

Разрешить разделение итогов. Если флаг установлен в значение Истина, то будет задействован механизм разделителя итогов, который обеспечивает более высокую параллельность работы при записи в регистр. Система при одновременной записи движений несколькими сеансами не будет обновлять одни и те же записи итогов, а будет записывать изменения итогов в отдельные записи. При получении итогов эти данные складываются. Таким образом, обеспечивается и поддержание в актуальном состоянии итогов (для быстрого получения отчетов, например) и параллельность записи движений. Этот режим требует дополнительных расходов ресурсов (например, увеличивается количество данных в итоговых таблицах). Поэтому есть свойства и в конфигурации, и в языке для управления этим режимом.

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

Режим разделения итогов может быть изменен пользователем в режиме работы «1С:Предприятие» в диалоге «Управление итогами».

По умолчанию свойство выключено.

Похожие FAQ

Еще в этой же категории

Ключевые слова и Изображения

Слова упорядочены по частоте использования в тексте

Изображения

marchenko
13.01.2016 13:52

Комментарий: 1

Скажите, при включении режима разделения итогов в регистре накопления и последующем запуске Предприятия, происходит ли некий скрытый, системный Пересчет итогов этого регистра ? Потому, как были ошибки в виртуальной таблице остатков регистра накопления. Это всё решалось Пересчетом итогов регистра. НО ! Мы узнали это позже. А до этого, мы решили проблему установкой режима Разделения остатков — поставили галочку в регистре в конфигураторе.

Привет, друзья! Сегодня мы поговорим про свойство регистра «Режим разделения итогов». Все слышали, что такое существует, но на практике мало кто знает – что это за зверь.

Итак, как обычно, есть проблема – большое время ожидания предоставления блокировки, ошибки таймаута блокировок:

Читайте также  Сканер штрих кодов для виндовс 10

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

И тут мы включаем режим разделения итогов регистра. Технически, это выглядит так:

Система добавила колонку в таблицу итогов «_Splitter», или разделитель. Теперь, когда несколько человек одновременно пишут данные по одному набору измерений, все строки попадают в таблицы итогов, но с разными значениями разделителя (0, 1, 2 …).

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

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

Но у каждого решения есть и отрицательные стороны. Сейчас в 1С «модно» контролировать остатки методом «посмертного вскрытия» — сначала записываются движения, а потом считываем остатки и смотрим, не ушли ли мы в минус. И тут нас ждет следующая проблема:

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

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

Чтобы этого не происходило, в тех местах, где используется метод «посмертного вскрытия» набору записей необходимо устанавливать свойство «БлокироватьДляИзменения». При этом установится управляемая блокировка на регистр по нашим измерениям, а также будет недопустимо использование режима разделения итогов в данной ситуации. Это и логично, мы как бы сообщаем системе – «мы не просто пишем данные, а хотим потом проверить остатки, и другие пользователи не должны изменить эти данные, пока мы не закончим».

Спасибо за внимание 🙂

Смотрите также:

В данном вебинаре я расскажу о применяемых в нашей компании правилах и приемах доработки типовых конфигураций 1С для облегчения их дальнейшей поддержки и обновления. В видео использованы материалы…

Небольшая зарисовка на тему, какие были бы сливные трубы, если бы их делали 1С-ники.

В данной статье представлен экземпляр кода на язке 1С и добавлена небольшая обработка, позволяющая отправить электронное сообщение средствами 1С, есть возможность прикрепления файлов в тело письма. В первую очередь, будет…

Ссылка на основную публикацию
Adblock
detector