1.24 Как разделить механизм нумерации документов по филиалам для многофирменного учета?
❓ 1.24 Как разделить механизм нумерации документов по филиалам для многофирменного учета?
📚 Документация
Заголовок раздела «📚 Документация»ИТС: Платформа — Особенности поведения объектов системы с включенным режимом разделения данных (7.6.2. Нумерация объектов)
— https://its.1c.ru/db/v8326doc#bookmark:dev:TI000001249
ИТС: Платформа — 5.6.6.4. Префиксы нумерации
— https://its.1c.ru/db/v8327doc#bookmark:dev:TI000001485
ИТС: Методическая поддержка — Установка префикса автонумерации
— https://its.1c.ru/db/metod8dev/content/2755/hdoc/_top
🧠 Краткая теория
Заголовок раздела «🧠 Краткая теория»В вопросе (1.23 Как можно разделить список пользователей на группы) мы уже рассматривали механизм разделения данных.
Теперь посмотрим на них чуть глубже — с точки зрения поведения платформы.
Что происходит при добавлении общего реквизита
Заголовок раздела «Что происходит при добавлении общего реквизита»При создании общего реквизита мы указываем:
Состав — список объектов, к которым он применяется.
После этого:
- Для всех объектов из состава на уровне СУБД в таблицах появляется новая колонка
Это происходит:
- и в режиме Разделять
- и в режиме Не использовать
То есть физически поле в таблице будет всегда при добавлении общего реквизита.
Режим «Разделять»
Заголовок раздела «Режим «Разделять»»Если у общего реквизита:
- Разделение данных = Разделять
- Использование разделяемых данных = Независимо
то:
❗ Без установленного разделителя в сеансе обращение к объектам будет вызывать ошибку.
Платформа контролирует доступ.
А как же типовые конфигурации?
Заголовок раздела «А как же типовые конфигурации?»В типовых решениях (на основе БСП) есть общий реквизит:
ОбластьДанныхОсновныеДанные
И у него включено разделение.
Но когда мы работаем в типовой:
- ошибок нет
- всё работает
- разделение как будто «не ощущается»
Почему?
Ответ — Условное разделение
Заголовок раздела «Ответ — Условное разделение»У общего реквизита есть свойство: Условное разделение
Оно зависит от константы.
Если значение константы = Ложь,
платформа ведет себя так, будто разделителя нет.
Но физически:
- поле в таблице остается
- разделитель продолжает участвовать в работе платформы
- разделитель учитывается в механизмах доступа и индексах
Просто в качестве значения используется значение по умолчанию.
Что это означает на практике
Заголовок раздела «Что это означает на практике»Даже если разделение «условно выключено»:
- колонка в таблице остается;
- разделитель продолжает участвовать в работе запросов;
- разделитель влияет на индексы и производительность.
Разделитель не исчезает.
Он просто заполняется значением по умолчанию.
Итог по механизму разделения
Заголовок раздела «Итог по механизму разделения»В типовых конфигурациях механизм разделения данных обычно присутствует всегда.
Мы можем его не замечать, потому что:
- включено условное разделение;
- значение разделителя фиксировано;
- доступ пользователей не ограничивается.
Но на уровне платформы и СУБД система уже работает как разделенная.
Нумерация объектов в разделённой базе данных
Заголовок раздела «Нумерация объектов в разделённой базе данных»Когда база использует механизм разделения данных,
нумерация работает в рамках каждой комбинации значений разделителей.
Это означает:
- для каждой комбинации разделителей ведётся своя последовательность номеров;
- контроль уникальности выполняется внутри области данных, а не по базе;
- одинаковые номера могут существовать в разных областях данных.
Установка номера через встроенный язык
Заголовок раздела «Установка номера через встроенный язык»Нумерацией можно управлять программно.
Есть два способа.
Вариант 1 — передать префикс напрямую
Заголовок раздела «Вариант 1 — передать префикс напрямую»Через методы объекта:
УстановитьНовыйКод()— для справочникаУстановитьНовыйНомер()— для документа
В эти методы можно передать префикс.
Например:
- префикс «МО» → МО0001, МО0002
- префикс «СПБ» → СПБ0001, СПБ0002
Вариант 2 — через обработчики событий (предпочтительный)
Заголовок раздела «Вариант 2 — через обработчики событий (предпочтительный)»ПриУстановкеНовогоКода()— для справочниковПриУстановкеНовогоНомера()— для документов
В обработчиках можно централизованно определить нужный префикс.
Обычно:
- определяется нужный префикс;
- вызывается установка нового номера;
- платформа формирует номер уже с нужным префиксом.
После этого для каждого префикса ведётся своя последовательность.
Почему этот способ предпочтительнее
Заголовок раздела «Почему этот способ предпочтительнее»Такой подход:
- централизует логику;
- не зависит от места создания объекта;
- работает при автоматической генерации номера;
- упрощает сопровождение системы.
Как это реализовано в типовых конфигурациях
Заголовок раздела «Как это реализовано в типовых конфигурациях»В типовых решениях на базе БСП используется подсистема:
«Префиксация объектов»
Она централизует установку префиксов через подписки на события:
ПриУстановкеНовогоКодаПриУстановкеНовогоНомера