Михаил Заборов CustIS «Заказные ИнформСистемы» Руководитель направления «Торговые сети» Декабрь 2009 Аналитические планы счетов как архитектурный артефакт
2/113 Занимается разработкой больших корпоративных информационных систем на заказ
3/113 Большие проекты t 04 мес. 1 год Маленькие Средние Наш размерчик! = от 10 – 15 чел. лет Команда 5-10 человек
4/113 Очень большие проекты t 01 год10 лет = от 40 – 100 чел. лет Команда человек
5/113 Принудительно делим на просто большие
6/113 В чем еще можно мерять размер? ? Объем данных ? Количество транзакций ? Объем изменений ? Длительность проекта ? Количество отчетов ?
7/113 Промышленные технологии
8/113 Внутренняя логистика -Операционная система 24x7 -Объем базы >1 Tb -10 млн Проводок в месяц -Общее количество проводок 270 млн
9/113 Аналитическое хранилище - Объем базы > 525 Gb - Проводок в месяц 8 млн - Общее количество проводок 200 млн - Пиковое кол-во проводок в день 1.7 млн
10/113 Биллинг ЖКХ «Радей» (Саратов) - Проводок в месяц 4.6 млн - Общее количество проводок 130 млн - Пиковое кол-во проводок в день 2.8 млн
11/113 Успешные и востребованные проекты после фазы внедрения вовсе не заканчивают свою «жизнь»
12/113 Начало работы
13/113 Развитие, сопровождение Внедрение, адаптация Сильные изменения в законодательстве
14/113 Корпоративные(Enterprise) Системы ERP / биллинг / банковские / торговые / складские системы … Прикладное программное обеспечение предприятий и организаций Buzzword
15/113
Немного истории От инструмента к методологии 16/113
17/113 Методология появилась не сразу
Вначале появились архитектурные паттерны, решавшие прикладные задачи Потом появился инструментарий Выделился специализированный слой архитектуры Появилась методология описания и использования планов счетов 18/113
19/113 Задачи, которые призван решать инструментарий
20/113 Ведение остатков и движений ресурсов материальные виртуальные
21/113 Гарантия «Консервативности» «Ничто не может произойти из ничего, и никак не может то, что есть, уничтожиться» © Эмпедокл «Однако за время пути собака могла подрасти!» «Багаж» С.Я.Маршак Законы сохранения
22/113 Ведение полной истории изменений ресурса Состояние на любой момент времени Привязка к документам, породившим изменение
23/113 Отчеты Повторяемость Детализация Согласованность
24/113 Больше всего для этих целей подходит учет: Двойная запись Журнал операции План счетов «Консервативность» Полная история Согласованность отчетов
ЧТО ЕСТЬ УЧЕТ? Основные артефакты 25/113
26/113 Стандарт OMG Архитектурные паттерны Спецификация на проводочную машину Что по этому поводу есть в IT?
27/113 В средневековье Учет велся в больших хозяйственных книгах (Ledger)
28/113 Запись в книге (Entry) 2 типа - приход/расход Страница в книге = счет(Account) Регулярно рассчитывается остаток или сальдо (Balance)
29/113 Именно эти объекты отразил в своей модели Фаулер
30/113 Но нам нужна двойная запись У Фаулера есть и такой паттерн (Two Legged Transaction) Новый термин - проводка(Transaction) В бух учете: счет зачисления - дебет счет списания - кредит На самом деле все не так просто
ПРОВОДОЧНАЯ МАШИНА CustIS Инструментарий 31/113 Наша реализация существенно сложнее
32/113 Учетные счета (Accounts) Выделяются различные виды ресурсов – они называются синтетическими (балансовыми) счетами Для них жестко задан набор аналитик
33/113
34/113 Учетные счета (Accounts) Под каждым синтетическим счетом есть иерархия аналитических счетов
35/113 Синтетический счетАналитические счета
36/113 Экземпляры счетов 0123 Товар на складе: Москва Товар на складе: Москва:Опт Товар на складе: Москва:Опт: А-101 Обруч гимнастический Товар на складе: Москва:Опт: Шарики Spezial … Товар на складе: Москва:Розница … … Товар на складе: Питер … … … … … … Товар на складе
37/113 Учетные счета (Accounts) Под каждым синтетическим счетом также есть OLAP куб аналитических счетов
38/113 Текущий остаток хранится на каждом аналитическом счете нижнего уровня Учетные счета Синтетические счета Аналитические счета Аналитика 1 Аналитика 2 N Аналитика 1 Синтетический счет: код, активность, [набор аналитик] Аналитика 2
39/113 Проводки (Transaction) Между синтетическими счетами типы операций жестко задают корреспонденции Аналитика 1 Аналитика 2 Аналитика 1 Проводки Тип операции
40/113 Схему можно чуть усложнить
41/113 Остатки (Сальдо, Balance) Несложно получить остаток на гранях OLAP куба Расчетный счет Банк Распорядитель 51 Всего в банке X у распорядителя Y Всего в банке X Всего на р/с Z Итого на счете 51-2 Всего у распорядителя Y Всего в банке X на р/с Z
42/113 Кроме того, для каждой ячейки куба, если нужно, хранится график изменения остатка в нужных временных разрезах
43/113 Показатели Можно хранить (заранее настроенные) произвольные агрегированные показатели по аналитикам счетов и операций Стандартная агрегация Произвольная агрегация Если нужно, то с графиком
44/113 Кроме агрегированных показателей можно хранить и более детальные (подокументные расшифровки, например состояние заказа) Показатели
45/113 Можно хранить несколько разнородных показателей в одной записи таблицы БД, например план- факт Показатели
46/113 И еще… Множество временных разрезов физическая дата учетная дата бухгалтерская дата период отчетности дата документа
47/113 Мультивалютность Разные типы валюты: - Документа - Контракта - Учетная - Бюджетная - Национальная - Бухгалтерская Разные номиналы (рубли,, $, ¥ и т.д.) Переоценка - Курсовые разницы - Суммовые разницы И еще…
48/113 Множественность учета Несколько планов счетов Товарный (количественный) учет Денежный учет Смешанный (товарно-денежный) учет в одном плане счетов Работа с начальным сальдо Процедуры инициализации остатков ведение истории движений до начала расчетов Разные механизмы создания аналитических счетов Автоматическое по аналитикам операции Ручное в соответствии с требованиями бухгалтерии И еще…
49/113 Принципиальная схема работы
МЕТОДОЛОГИЯ ОПИСАНИЯ УЧЕТА Описание нотации 50/113
51/113 Простой план счетов
52/113
53/113 Как читать схему Начальное состояние системы Что мы знаем: Остатки: Всего книг в фонде – 0 На руках - 0 в библиотеке - 0 Обороты: Принято книг - 0 Выдано - 0 Вернулось – 0 Потеряна - 0
54/113 Что мы знаем: Остатки: Всего книг в фонде – 7 На руках - 0 в библиотеке - 7 по авторам: Буч – 7 по полкам A1 – 7 Обороты: Принято книг - 7 Выдано - 0 Вернулось – 0 Потеряна - 0
55/113 Что мы знаем: Остатки: Всего книг в фонде – 10 На руках - 0 в библиотеке - 10 по авторам: Буч – 10 по полкам A1 – 7 A2 - 3 Обороты: Принято книг - 10 Выдано - 0 Вернулось – 0 Потеряна - 0
56/113 Что мы знаем: Остатки: Всего книг в фонде – 10 На руках - 2 в библиотеке - 8 по авторам: Буч – 8 по полкам A1 – 7 A2 - 1 Обороты: Принято книг - 10 Выдано - 2 Вернулось – 0 Потеряна - 0
57/113 Что мы знаем: Остатки: Всего книг в фонде – 16 На руках - 2 в библиотеке - 14 по авторам: Буч – 8 Кайт - 6 по полкам A1 – 7 A2 - 7 Обороты: Принято книг - 16 Выдано - 2 Вернулось – 0 Потеряна - 0
Что мы знаем: Остатки: Всего книг в фонде – 16 На руках - 2 в библиотеке - 14 по авторам: Буч – 8 Кайт - 6 по полкам A1 – 7 A /113 Эту ошибку можно обрабатывать по-разному Обороты: Принято книг - 16 Выдано - 2 Вернулось – 0 Потеряна - 0 Так нельзя! На полке A1 нет Кайта
59/113 Что мы знаем: Остатки: Всего книг в фонде – 15 На руках - 1 в библиотеке - 14 по авторам: Буч – 8 Кайт - 6 по полкам A1 – 7 A2 - 7 Обороты: Принято книг - 16 Выдано - 2 Вернулось – 0 Потеряна - 1
60/113 А если выкладывание на полку - отдельный процесс?
61/113 Эти картинки понятны и бизнесу и разработчику
62/113 В больших планах счетов мы используем субсчета Очень похоже на наследование
63/113
64/113 Эквивалентная запись: Убрать главный счет Все аналитики главного счета прописать в субсчетах Все операции главного счета размножить на субсчета
65/113 Есть еще один «нюанс» - активно/пассивный учет
Баланс компании Актив - те ресурсы, которые принадлежат компании, или которые она надеется получить в будущем, например, долг за отгруженный товар Пассив – обязательства или задолженность компании в той или иной форме, например, долг поставщику или обязательства по отгрузке товара Дебет счета – увеличение ресурса компании или уменьшение ее обязательства Кредит счета – уменьшение ресурса компании или увеличение ее обязательства 66/113 Эти критерии тяжело понять, если ты не бухгалтер
67/113 Для нас это выглядит так: Активный счет - это счет, где увеличение остатка записывается по дебету, уменьшение остатка – по кредиту (т.е. если на него пришла сумма, то остаток на счете увеличился, а если ушла – то уменьшился) Пассивный счет - увеличение остатка записывается по кредиту, уменьшение остатка – по дебету (т.е. если на него пришла сумма, то остаток на счете уменьшился, а если ушла – то увеличился) Активно-пассивный счет – это активный счет, на котором разрешен отрицательный остаток Естественный ход вещей Естественный ход вещей С ног на голову
Активность AАктивность BОстаток на AОстаток на B активный уменьшилсяувеличился активныйпассивныйуменьшился пассивныйактивныйувеличился пассивный увеличилсяуменьшился 68/113 Теперь вы ничего не сможете сказать по этой картинке… …если не знаете активность счетов C «консервативностью» тоже много вопросов
69/113 Как это отображается у нас
70/113 Можно представить как 2 ресурса Пользоваться нужно с осторожностью Пользоваться нужно с осторожностью
71/113 А как описывать планы счетов по-другому?
72/113 Например так…
73/113 В лучшем случае - так
74/113 почти эквивалентно
УЧЕТ - АРХИТЕКТУРНЫЙ АРТЕФАКТ Как встраивается в приложение 75/113
76/113 Классическая ситуация: Формочки Бизнес логика Объекты/Классы/ Сущности Реляционные Таблицы Справочники Документы Что–то еще Всем понятно что такое «Документ»?
77/113 Наш случай:
78/113 Чуть подробнее
79/113 Объектная модель ведет учетную Отображение может быть On-line и off-line
80/113 Отчетность
81/113 Отчетность
УЧЕТ – МОДЕЛЬ ПРЕДМЕТНОЙ ОБЛАСТИ 82/113
83/113 При итеративной разработке мы работаем с небольшим куском системы
84/113
85/113 Где гарантия, что мы получится то, что нужно?
86/113
87/113 Нужна общая картина
88/113
89/113 При проектировании такая картина – модель предметной области aka Domain Model
90/113 Модель – это упрощенное приближение реальности. Максимально простое, при условии достаточной близости к действительности.
91/113 Чаще это всего диаграмма классов(ER-модель)
92/113 Мы часто используем Учетные модели, как модели предметной области Совместно с диаграммой классов PROFIT: Учет, обычно, более стабилен. В него гораздо реже вносятся изменения - «инвариант предметной области» Учет обычно более лаконичен и информативен Практически всегда мы включаем схему учета в концептуальный проект (vision)– диаграмму классов не всегда. И почти всегда рисуем план счетов раньше.
93/113 Планы счетов «прочно вошли в нашу жизнь»
94/113
95/113
96/113
97/113
98/113 Аналитические планы счетов: Модель предметной области Методология описания потоков ресурсов Дополнительный архитектурный слой Инструментарий разработки учетных систем 15 лет успешного использования
99/113 Спасибо за внимание!