Тип: Булево. Если это свойство установлено в значение Истина, то для хранения итогов регистров будет задействован механизм разделения итогов, который обеспечивает более высокую параллельность работы при записи в регистр. Система при одновременной записи движений несколькими сеансами будет не обновлять одни и те же записи итогов, а записывать изменения итогов в отдельные записи. При получении итогов эти данные складываются. Таким образом, обеспечивается и поддержание в актуальном состоянии итогов (для быстрого получения отчетов, например), и параллельность записи движений. Этот режим требует дополнительных расходов ресурсов (например, увеличивается количество данных в итоговых таблицах). Записи будут "размножаться" только при параллельно выполняемых транзакциях. Их количество по каждой комбинации измерений будет зависеть от максимального количества одновременно выполняемых транзакций. При пересчете итогов накопленные отдельные записи сворачиваются.
Полное описание, параметры и ограничения
ОбъектМетаданных: РегистрНакопления.РазрешитьРазделениеИтогов (MetadataObject: AccumulationRegister.EnableTotalsSplitting)
ОбъектМетаданных: РегистрНакопления (MetadataObject: AccumulationRegister)
РазрешитьРазделениеИтогов (EnableTotalsSplitting)
Доступен, начиная с версии 8.1.
Использование:
Только чтение.
Описание:
Тип: Булево.
Если это свойство установлено в значение Истина, то для хранения итогов регистров будет задействован механизм разделения итогов, который обеспечивает более высокую параллельность работы при записи в регистр. Система при одновременной записи движений несколькими сеансами будет не обновлять одни и те же записи итогов, а записывать изменения итогов в отдельные записи. При получении итогов эти данные складываются. Таким образом, обеспечивается и поддержание в актуальном состоянии итогов (для быстрого получения отчетов, например), и параллельность записи движений. Этот режим требует дополнительных расходов ресурсов (например, увеличивается количество данных в итоговых таблицах).
Записи будут "размножаться" только при параллельно выполняемых транзакциях. Их количество по каждой комбинации измерений будет зависеть от максимального количества одновременно выполняемых транзакций. При пересчете итогов накопленные отдельные записи сворачиваются.
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.
Использование в версии:
Доступен, начиная с версии 8.1.
Методическая информация
Практические примеры
Отделить стандартные поля движения от измерений, ресурсов и модулей
Период/Регистратор/ВидДвижения относятся к стандартным полям. КодТовара и Количество находятся в отдельных коллекциях; свойства модулей не возвращают текст исходников.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Создайте НОВУЮ пустую файловую базу, имя корневой конфигурации УчебныеОстатки85. Не добавляйте эти объекты в УТ/КА2/УНФ/БП. Режим управления блокировкой данных конфигурации — Управляемый.
Документы → Добавить: УчебноеДвижение85. Номер: Строка длиной 40, автонумерация выключена. Модули объекта и менеджера оставьте пустыми; не добавляйте обработчики, подписки и обязательные пользовательские реквизиты.
Регистры накопления → Добавить: УчебныеОстатки85. Вид регистра Остатки. Единственное измерение КодТовара: Строка 50, индексировать, проверка заполнения Показывать ошибку. Единственный ресурс Количество: Число 12,3, неотрицательное. Дополнительных реквизитов нет.
В списке регистраторов выберите только собственный документ УчебноеДвижение85. Оставьте модули регистра пустыми, использование итогов включённым. Планы обмена, разделители, историю данных и фоновые задания для урока не создавайте.
Обновите конфигурацию базы данных. Создайте серверный общий модуль УчебныеЗадачи и команду собственной обработки. Фрагмент вставьте внутрь ВыполнитьПример() Экспорт; запускайте задачи по отдельности.
Первые задачи работают с незаписанными наборами. Только задачи с пометкой «в собственной транзакции» временно записывают два собственных документа и движения, затем обязательно отменяют транзакцию. В рабочей базе этот код не запускайте.
В этом разделе код ТОЛЬКО ЧИТАЕТ метаданные УчебныеОстатки85. Наборы, документы, транзакции, блокировки и запись движений не создаются.
Не создавайте пользовательские формы, команды, макеты и дополнительные индексы у учебного регистра; расширения не устанавливайте.
Если Метаданные.Документы.Количество() <> 1
Или Метаданные.РегистрыНакопления.Количество() <> 1
Или Метаданные.Документы.Найти("УчебноеДвижение85") = Неопределено Тогда
ВызватьИсключение "Разрешены только собственный учебный документ и регистр";
КонецЕсли;
Описание = Метаданные.РегистрыНакопления.Найти("УчебныеОстатки85");
Если Описание = Неопределено Тогда
ВызватьИсключение "Сначала создайте собственный учебный регистр";
КонецЕсли;
Если Описание.ВидРегистра <> Метаданные.СвойстваОбъектов.ВидРегистраНакопления.Остатки
Или Описание.Измерения.Количество() <> 1
Или Описание.Ресурсы.Количество() <> 1
Или Описание.Реквизиты.Количество() <> 0
Или Описание.Измерения.Найти("КодТовара") = Неопределено
Или Описание.Ресурсы.Найти("Количество") = Неопределено Тогда
ВызватьИсключение "Нужен регистр остатков с КодТовара и Количество";
КонецЕсли;
Менеджер = РегистрыНакопления.УчебныеОстатки85;
ЕстьПериод = Ложь;
ЕстьРегистратор = Ложь;
ЕстьВидДвижения = Ложь;
Для Каждого Стандартный Из Описание.СтандартныеРеквизиты Цикл
Сообщить("Стандартное поле: " + Стандартный.Имя);
Если Стандартный.Имя = "Период" Тогда ЕстьПериод = Истина; КонецЕсли;
Если Стандартный.Имя = "Регистратор" Тогда ЕстьРегистратор = Истина; КонецЕсли;
Если Стандартный.Имя = "ВидДвижения" Тогда ЕстьВидДвижения = Истина; КонецЕсли;
КонецЦикла;
Сообщить(ЕстьПериод);
Сообщить(ЕстьРегистратор);
Сообщить(ЕстьВидДвижения);
Сообщить(Описание.Измерения.Найти("КодТовара") <> Неопределено);
Сообщить(Описание.Ресурсы.Найти("Количество") <> Неопределено);
Сообщить(Описание.Реквизиты.Количество() = 0);
Сообщить(Описание.ДополнительныеИндексы.Количество() = 0);
Сообщить(Описание.Агрегаты.Количество() = 0);
Сообщить(Описание.Команды.Количество() = 0);
Сообщить(Описание.Макеты.Количество() = 0);
Сообщить(Описание.МодульНабораЗаписей = Неопределено);
Сообщить(Описание.МодульМенеджера = Неопределено);
Сообщить(Описание.Справка = Неопределено);
Сообщить("Разделение итогов разрешено: " + Строка(Описание.РазрешитьРазделениеИтогов));
Сообщить("Режим блокировки схемы: " + Строка(Описание.РежимУправленияБлокировкойДанных));Разбор по шагам
СтандартныеРеквизиты перебираем через описания и Имя; не вызываем отсутствующий метод Найти у этой коллекции.
Проверяем Период, Регистратор и ВидДвижения. Пользовательское измерение и ресурс ищем уже в собственных коллекциях Измерения/Ресурсы.
Пустые Реквизиты, ДополнительныеИндексы, Агрегаты, Команды и Макеты соответствуют минимальной подготовке. Агрегаты не являются строками остатков товаров.
РазрешитьРазделениеИтогов и РежимУправленияБлокировкойДанных показываем как фактические настройки. Чтение не меняет итоговые таблицы и не устанавливает блокировки.
МодульНабораЗаписей, МодульМенеджера и Справка возвращают Неопределено по текущему контракту. Читать исходный BSL через эти свойства нельзя.
Как проверить результат
Все тринадцать логических сообщений дают Истина.
В выводе стандартных имён есть Период, Регистратор, ВидДвижения; КодТовара находится в Измерения, Количество — в Ресурсы.
Исходные модули, движения и итоговые таблицы не выгружаются и не изменяются.
Ожидаемый результат
Показан правильный обход схемы движения и границы API доступа к исходникам.
На что обратить внимание
Общее количество стандартных полей не зашито: оно зависит от вида объекта и версии платформы.
Неопределено у свойства модуля не доказывает, что модуль пуст; для исходного текста используйте Конфигуратор/выгрузку.
Стандартное поле ВидДвижения не добавляйте вручную как измерение или дополнительный реквизит.
Разрешённое разделение итогов не доказывает, что сейчас есть параллельные записи или несколько строк итогов. Здесь запись движений вообще не выполняется.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Разобрать схему регистра накопления перед отчётом
Выбираем первый регистр текущей учебной конфигурации и разделяем измерения, ресурсы и реквизиты. Остатки не читаем и записи не создаём.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Запускайте в учебной копии конфигурации. Примеры читают структуру метаданных, но не создают объекты, не записывают регистры и не проводят документы.
Сверяйте вывод с деревом конфигурации в Конфигураторе. Имена, длины и настройки в УНФ, КА2, БП, УТ 11 и УТ 10.3 могут различаться.
Если Метаданные.РегистрыНакопления.Количество() = 0 Тогда
ВызватьИсключение "В этой конфигурации нет регистров накопления";
КонецЕсли;
Регистр = Метаданные.РегистрыНакопления.Получить(0);
Сообщить(Регистр.ПолноеИмя());
Сообщить(СтрШаблон("%1 (%2): вид %3", Регистр.Имя, Регистр.Синоним, Регистр.ВидРегистра));
Сообщить(Регистр.Комментарий);
Сообщить(СтрШаблон("Разделение итогов: %1; блокировки: %2",
Регистр.РазрешитьРазделениеИтогов, Регистр.РежимУправленияБлокировкойДанных));
Для Каждого Измерение Из Регистр.Измерения Цикл
Сообщить(СтрШаблон("Измерение %1: %2", Измерение.Имя, Измерение.Тип));
КонецЦикла;
Для Каждого Ресурс Из Регистр.Ресурсы Цикл
Сообщить(СтрШаблон("Ресурс %1: %2", Ресурс.Имя, Ресурс.Тип));
КонецЦикла;
Для Каждого Реквизит Из Регистр.Реквизиты Цикл
Сообщить(СтрШаблон("Реквизит %1: %2", Реквизит.Имя, Реквизит.Тип));
КонецЦикла;
Сообщить(СтрШаблон("Измерений %1; ресурсов %2; реквизитов %3; агрегатов %4",
Регистр.Измерения.Количество(), Регистр.Ресурсы.Количество(),
Регистр.Реквизиты.Количество(), Регистр.Агрегаты.Количество()));Разбор по шагам
Проверяем наличие регистра до обращения к индексу 0. Порядок коллекции не означает бизнес-приоритет объекта.
Измерения задают разрезы учёта, ресурсы — учитываемые значения, реквизиты — дополнительные поля записи.
ВидРегистра определяет регистр остатков или оборотов: нельзя автоматически подставлять виртуальную таблицу Остатки для любого регистра.
Разделение итогов, агрегаты и режим блокировок читаем как настройки схемы, не изменяя их.
Как проверить результат
Откройте указанный регистр в Конфигураторе: имена и количества трёх групп полей должны совпасть.
Выполните пример в конфигурации без регистров накопления: ожидается понятное исключение, а не ошибка индекса.
После запуска в базе не появились новые движения: в примере нет наборов записей и Записать().
Ожидаемый результат
Получена фактическая схема одного регистра для дальнейшего проектирования запроса.
На что обратить внимание
Наличие ресурса Количество не объясняет, что считать свободным остатком: правила резервов и распределения нужно изучать в конкретной конфигурации.
Количество агрегатов не является количеством товаров или строк движений. Первый регистр может не относиться к складу.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.