Учётные измерения (Дополнительная аналитика)

Как мы собираемся поступить с учётными измерениями?

В классическом виде кусок таблицы со строками проводок выглядит примерно следующим образом:

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

То есть у нас есть отдельные поля для учётного измерения № 1 (УИ1), УИ2, УИ3 и так далее до УИ9. Неважно при этом, это именно отдельные поля или, как это сделано в Скале, где было применено оригинальное решение: использовалось одно поле под названием «Учётная строка». Внутри она была как бы «нарезана» на отдельные учётные сегменты, всего этих сегментов было 10. Нулевой сегмент (обязательный) – бухгалтерский счёт, далее необязательные сегменты с 1 по 9 – дополнительная аналитика (учётные измерения). Длины сегментов могли назначаться разной длины, но не более 12 символов каждый. Далее система выводила информацию уже «нарезанную» на отдельные поля-сегменты.

Эти поля или учётные сегменты могут быть заняты или свободны. У одних клиентов были использованы только первые 3 учетные измерения, остальные не использовались, у других клиентов были использованы все 9 и при этом их не хватало. В этом случае какие-то учётные измерения делали общими, где в одном случае значение означало номер основного средства, например, для счетов ОС, амортизации и т.п., а в других случаях, например, для каких-то затратных счетов это же учётное измерение означало типы затрат. Коды ОС и типы затрат, естественно, не должны были пересекаться. Почему так делалось? Потому что, если бы мы захотели добавить новое учётное измерение, например, №10, тогда пришлось бы вносить изменения во все таблицы, где они фигурируют, в проводки модуля «Главной книги», в журналы Счетов-фактур и платежей модулей «Книга Продаж», «Книга Закупок», «Прямая выписка счетов», «Управление Сервисным обслуживанием», Заказы на Продажу и Закупку и так далее. Представляете, насколько это обширные изменения и в самой БД и в сопутствующих формах и процедурах ввода, в отчётах и так далее?

Каков же выход?

А выход достаточно прост. Мы разбиваем строку проводки на 2 таблицы. В одной (основной) остаётся всё, кроме учётных измерений, а в другой только учётные измерения, причём мы как бы преобразуем их из столбцов в строки:
Преобразование учётных измерений из столбцов в строки

Тогда для каждой строки проводки в основной таблице будет несколько записей в таблице учётных измерений по строке. Если никаких УИ не нужно для строки, значит записи не делаются, а если заполнены УИ1, УИ2, УИ4, УИ6 и УИ9, тогда в дополнительной таблице создаются 5 записей. Это позволяет иметь сколько угодно разных типов учётных измерений, не 9, а сколько душа пожелает. Понятно, что 100 учётных измерений это явный перебор, избыточная информация, но чисто технически такое решение позволяет это сделать. Изящно, неправда ли? 🙂

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