Перейти к содержимому

1.24 Как разделить механизм нумерации документов по филиалам для многофирменного учета?

Telegram → Просто о платформе 1С

❓ 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 Как можно разделить список пользователей на группы) мы уже рассматривали механизм разделения данных.

Теперь посмотрим на них чуть глубже — с точки зрения поведения платформы.


Что происходит при добавлении общего реквизита

Заголовок раздела «Что происходит при добавлении общего реквизита»

При создании общего реквизита мы указываем:

Состав — список объектов, к которым он применяется.

После этого:

  • Для всех объектов из состава на уровне СУБД в таблицах появляется новая колонка

Это происходит:

  • и в режиме Разделять
  • и в режиме Не использовать

То есть физически поле в таблице будет всегда при добавлении общего реквизита.


Если у общего реквизита:

  • Разделение данных = Разделять
  • Использование разделяемых данных = Независимо

то:

❗ Без установленного разделителя в сеансе обращение к объектам будет вызывать ошибку.

Платформа контролирует доступ.


В типовых решениях (на основе БСП) есть общий реквизит:

ОбластьДанныхОсновныеДанные

И у него включено разделение.

Но когда мы работаем в типовой:

  • ошибок нет
  • всё работает
  • разделение как будто «не ощущается»

Почему?


У общего реквизита есть свойство: Условное разделение

Оно зависит от константы.

Если значение константы = Ложь,
платформа ведет себя так, будто разделителя нет.

Но физически:

  • поле в таблице остается
  • разделитель продолжает участвовать в работе платформы
  • разделитель учитывается в механизмах доступа и индексах

Просто в качестве значения используется значение по умолчанию.


Даже если разделение «условно выключено»:

  • колонка в таблице остается;
  • разделитель продолжает участвовать в работе запросов;
  • разделитель влияет на индексы и производительность.

Разделитель не исчезает.
Он просто заполняется значением по умолчанию.


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

Мы можем его не замечать, потому что:

  • включено условное разделение;
  • значение разделителя фиксировано;
  • доступ пользователей не ограничивается.

Но на уровне платформы и СУБД система уже работает как разделенная.


Нумерация объектов в разделённой базе данных

Заголовок раздела «Нумерация объектов в разделённой базе данных»

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

Это означает:

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

Нумерацией можно управлять программно.

Есть два способа.


Через методы объекта:

  • УстановитьНовыйКод() — для справочника
  • УстановитьНовыйНомер() — для документа

В эти методы можно передать префикс.

Например:

  • префикс «МО» → МО0001, МО0002
  • префикс «СПБ» → СПБ0001, СПБ0002

Вариант 2 — через обработчики событий (предпочтительный)

Заголовок раздела «Вариант 2 — через обработчики событий (предпочтительный)»
  • ПриУстановкеНовогоКода() — для справочников
  • ПриУстановкеНовогоНомера() — для документов

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

Обычно:

  • определяется нужный префикс;
  • вызывается установка нового номера;
  • платформа формирует номер уже с нужным префиксом.

После этого для каждого префикса ведётся своя последовательность.


Такой подход:

  • централизует логику;
  • не зависит от места создания объекта;
  • работает при автоматической генерации номера;
  • упрощает сопровождение системы.

Как это реализовано в типовых конфигурациях
Заголовок раздела «Как это реализовано в типовых конфигурациях»

В типовых решениях на базе БСП используется подсистема:

«Префиксация объектов»

Она централизует установку префиксов через подписки на события:

  • ПриУстановкеНовогоКода
  • ПриУстановкеНовогоНомера