Вступление
Общий принцип
В любом решении можно выделить основную линию или несколько. Например взглянем на такой пример:
Мы проводим мероприятия, записываем на них учащихся и записываем кто и за какое мероприятие оплатил.
Жирным я выделил две основные линии этого решения — мероприятия и оплаты.
Основной линией можно назвать те данные, которые будут бесконечно и последовательно добавлятся в ваше решение (ну пока работает бизнес его эксплуатирующий).
А как же учащиеся? они же тоже будут добавлятся бесконечно. Действительно так, учащиеся могут быть основной линией по вашему желанию, никакого железного ограничения нет тк это просто принцип думать про решение. Вы создатель вашего решения и вы принимаете решение так это будет или иначе.
Моя рекомендация — выделить в качестве основных линий только самое необходимое. Учащиеся в этом случае могут даже не иметь отдельной таблицы, а записываться внутрь мероприятия.
Каждая основная линия — это отдельная таблица.
В тотум есть разные типы таблиц, но для основных линий подходят только два типа — циклов и простая.
Если в каждой записи в таблице основной линии будет не очень много полей (до 30) — то это может быть простая таблица.
Если больше 30 или предполагается нестрочное оформление каждой записи в таблице основной линии — то циклов.
Таблица циклов — это простая таблица у которой есть расширение на несколько таблиц для каждой строки. Те внутрь каждой строки можно прицепить несколько таблиц.
Давайте прикинем, как будет в типах таблиц выглядеть это решение:
Здесь мы используем комплект из циклов и одной таблице внутри цикла для основной линии мероприятий и простую таблицу для основной линии оплат.
Учащихся мы записываем внутрь мероприятия, а в таблице оплат делаем привязку к мероприятию (строке в Мероприятиях) и учащемуся (строке в Мероприятии).
Сейчас мы учащегося буквами записываем прямо в мероприятии, но ведь человек может придти на несколько наший мероприятий и мы наверняка захотим узнать куда он ходил, сколько всего заплатил итп.
Для того, что бы потом это сделать, нам надо записать учащегося в отдельную таблицу — справочник и в мероприятии уже записать его не буквами в строковое поле, а сослаться на строчку в справочнике учащихся через Селект.
Каталоги как и основные линии — это простые и циклов.
Только основные линии надо приоритетно рассматривать как таблицы циклов, а каталоги как простые таблицы.
Циклов используются в каталогах, по аналогичной причине, что и в основных линиях — когда к одной строке необходимо прикрепить большое количество данных. Например это карточка производственной операции в которой надо перечислить общие параметры и список компонент.
Есть подход, который позволяет использовать простые таблицы для таких задач, записывая расширенные параметры в техническое поле. Применяется когда расширенные данные есть, но их как-то маловато для того, чтобы создавать таблицу циклов. Мы этот подход рассмотрим в одном из мастерклассов.
Добавим в это решение каталог с Учащимися:
Например у нас такое усложнение: мы хотим, что бы у нас была возможность из мероприятия открыть список учащихся, которые были на каком-то другом мероприятии, выбрать в нем несколько человек и сразу нескольких записать на текущее.
Тип таблиц для таких промежуточных задач — временные таблицы. Те мы в мероприятии делаем кнопку, которая открывает такую временную таблицу, передаем в нее данные и из нее выполняем обратное действие — массовое добавление учащихся в мероприятие.
Получается так:
Теперь у нас уже есть работающее решение, в котором перемещаются данные и мы хотим создать отчеты.
Для отчетов в основном используются два типа — временные и циклов.
Временные — подходят для динамических отчетов в которых мы задаем необходимый произвольный интервал. Тк в отчет одновременно может смотреть несколько пользователей, каждй в свой интервал — используется временная, а не расчетная в дереве! Дашборды относятся сюда же.
Циклов — используется для отчетов с типизированным интервалом. Например для отчетов за месяц — в этом случае у нас каждая строка — это месяц. В этом случае пользователи заходя в отчет смотрят в один и тот же фиксированный интервал.
Так же циклов используется для агрегирования промежуточных значений. Если у нас крупное решение с сотнями тысяч строк в основнх линиях в каждом месяце, то формирование годового отчета может занимать большое время. Но если у нас уже рассчитаны и записаны в циклах значения по месяцам — это кратно быстрее.
Дополним наше решение отчетами:
Разберем основные линии для более сложного решения
Предположим, что нам нужна система, которая обрабатывает заказы/проекты, выставление счетов, отгрузки, денежный оборот, движение ТМЦ по проектам и складские остатки.
Основные линии:
Каталоги:
Промежуточные:
Отчеты:
Временные или циклов в зависимости от задачи.
Если необходимо усложнить: простые —> циклы.
Если упростить: циклы —> простые.
Пример этого решения в собрано в виде можно посмотреть на демо-сервере.
С чего начинать разработку решения?
С главной основной линии!
Потом добавить для нее справочники.
Потом обслуживающую второстепенную основную линию.
Потом добавить справочники для второстепенной линии.
Итд