Формирование многомерных данных в информационной финансово-экономической системе на предприятии госкорпорации «Роскосмос»

Автор: Картамышев А. С., Черныш Б. А., Мурыгин А. В.

Журнал: Сибирский аэрокосмический журнал @vestnik-sibsau

Рубрика: Информатика, вычислительная техника и управление

Статья в выпуске: 4 т.22, 2021 года.

Бесплатный доступ

Построение детализированного учета, позволяющего генерировать сложную, аналитическую отчетность, является непреложным требованием современной финансовой системы. Для предприятий госкорпорации «Роскосмос» с позаказным и мелкосерийным производством, работающих в условиях 275 ФЗ, отличающихся большим количеством НИОКР и высокой степенью неопределенности в процессе создания продукции, эта задача является системообразующей. Отчетность должна содержать согласованные непротиворечивые данные на любом участке управленческого и бухгалтерского учета на любой момент времени. Наряду с этим, система должна обеспечивать гибкость, надежность и быстродействие, присущие транзакционным базам данных. Для построения информационной поддержки, удовлетворяющей указанным условиям, требуется либо разделять OLTP и OLAP схемы данных, либо применять специализированные решения, основанные на использовании структур и методик, оптимизированных для выполнения OLAP операций в традиционных РСУБД. В данной статье рассматривается подход к формированию многомерных данных в автоматизированной системе управления финансово-экономическими задачами как эффективная альтернатива сложным и дорогостоящим BI-решениям. В отличие от многих коммерческих решений, описываемая система не хранит избыточные данные (например, регистры оперативного учета в платформе «1С: Предприятие»), необходимые для построения аналитического учета. Лежащие в ее основе структуры данных и методы их обработки позволяют осуществлять все виды учета и иметь мощные инструменты построения аналитической отчетности. В статье предлагаются алгоритмы работы системы на примере построения простых OLAP кубов, применяемых в реальных задачах автоматизации финансово-экономической деятельности в АО «ИСС» для одной из подсистем «Покупки». Проведена формализация этих задач, рассмотрен математический аппарат построения многомерных моделей данных на основе информации из фиксированного набора нормализованных таблиц реляционной БД. Представлены примеры SQL запросов и выходных данных. Обобщены преимущества применения системы в оперативном, управленческом и бухгалтерском учете на предприятии, повышающие ее эксплуатационную эффективность.

Еще

База данных, oltp, olap, аналитическая обработка, многомерное представление, реляционная схема, нормализация, нормальная форма, система автоматизации

Короткий адрес: https://sciup.org/148323924

IDR: 148323924   |   DOI: 10.31772/2712-8970-2021-22-4-589-599

Текст научной статьи Формирование многомерных данных в информационной финансово-экономической системе на предприятии госкорпорации «Роскосмос»

Одним из основных требований, предъявляемых к финансово-экономическим системам, является возможность оперативного получения актуальной аналитической информации, необходимой для принятия оперативных управленческих решений и генерации всеохватывающей детализированной отчетности. Особенно актуальной эта задача является для предприятий госкорпорации «Роскосмос», работающих в условиях гособоронзаказа и обязанных вести в своей хозяйственной деятельности раздельный учет затрат по различным проектам. Информационная поддержка бухгалтерского и управленческого учета построена на правилах хранения и обработки данных документов-первоисточников, регистрируемых в системах учета, их связях и процессах формирования новых информационных объектов учета. Данные на разных участках учета есть не что иное, как производные от первичных документов или множества первичной информации. В процессе передела и потребления данных на определенных участках учета ин- формационные связи между различными производными от одного основания могут теряться. Информационные объекты начинают «жить своей жизнью» и порождать новые производные. При информационных разрывах теряется возможность дифференцирования текущей производной до первоисточника данных (основания) и анализа связанных с ним данных в рамках технологических и экономических процессов. Математическое решение подобных задач, приводящее к логически выстроенной цепочке операций и возможности автоматизации учета, является предметом исследований многих ученых и практиков, работающих над созданием систем информационной поддержки финансово-экономических задач в управлении предприятиями.

Анализ исследований

Ведущее место в решении данного класса задач занимают OLAP-технологии [1] (OLAP – online analytical processing, оперативная аналитическая обработка). Системы, реализующие OLAP, должны отвечать так называемым принципам FASMI [2]: Fast (быстрый отклик системы), Analysis (полнофункциональный анализ), Shared (многопользовательский доступ к данным), Multidimensional (многомерное концептуальное представление данных), Information (получение информации в нужном объеме там, где она необходима). Как видно, исходя из данных принципов, требования к системе построения отчетности, которую действительно можно назвать OLAP-системой, весьма жесткие. За секунды отчеты должны строиться по миллионам записей, столь же быстро раскрываться по интересующим пользователя аналитикам, фильтроваться и перегруппировываться [3].

Наиболее распространенным подходом в реализации OLAP-систем является разделение данных между двумя базами: транзакционной (OLTP – online transaction processing) и аналитической (OLAP). При этом OLTP-база оптимизируется под быстрое внесение данных, а OLAP – под быстрое построение сложной отчетности. Фактически OLAP-база обычно строится по специальной архитектуре и содержит предварительно просчитанные агрегатные данные, что и обеспечивает высокую скорость выполнения запросов. Платой за это становится необходимость синхронизировать OLTP и OLAP. Так как подобный процесс, как правило, периодичен, то между появлением данных в оперативной базе и аналитическими данными имеется запаздывание. Данный подход реализован практически во всех современных BI-системах (business intelligence – сбор и анализ бизнес-информации): Microsoft Analysis Services, Oracle OLAP, IBM Informix, Arbor Essbase и др.

Другим подходом в решении задач оперативной аналитической обработки данных является встраивание OLAP-инструментария непосредственно в OLTP-хранилище. Это достигается как использованием специальных элементов данных (например, регистры оперативного учета в платформе «1С: Предприятие» [4]), так и оптимальной (с точки зрения оптимизации выполнения OLAP-запросов) структуризацией схемы данных. Данный подход лег в основу разработанной на предприятии системы управления финансово-экономическими задачами (АСУ ФЭЗ) [5] как эффективная альтернатива сложным и дорогостоящим BI-системам.

Описание подхода

Структуры и алгоритмы, лежащие в основе АСУ ФЭЗ, позволяют эффективно сочетать гибкость и быстродействие транзакционной базы данных (БД), с одной стороны, и возможности построения сложной отчетности за приемлемое время – с другой. Далее в статье приведен обзор технической реализации хранилища данных на примере подсистемы «Покупки», отвечающей за учет товаров, работ и услуг, которые предприятие приобретает для создания собственных объектов продажи.

Ядро модуля «Покупки» составляет 5 таблиц, построенных в соответствии с правилами нормальных форм [6; 7], и представлено на рис. 1:

  • –    POK_PRIH – документы прихода товарно-материальных ценностей, работ, услуг;

  • –    POK_OSN – документы-основания для учета НДС (входящие счета-фактуры);

  • –    PO_SOGL – документы-основания для платежа (акцепт-согласие ответственных сотрудников на оплату товарно-материальных ценностей, работ, услуг);

  • –    POK_OPL – платежные документы;

  • –    POK_SW – таблица связей, содержит ссылки в виде внешних ключей на первичные ключи записей из перечисленных выше таблиц (ID_PR – на таблицу POK_PRIH, ID_OSN – на таблицу POK_OSN, ID_TS – на таблицу POK_SOGL, ID_OPL – на таблицу POK_OPL).

POK_PRIH

PK

ID PRIM

NUMERIC(10;2)

WID_DOC

CHAR(IO)

NUM_DOC

CHAR(30)

DATE_DOC

DATETIME

REG NUM DOC

INTEGER

REG DATE DOC

DATETIME

COD PRED

INTEGER

COD VAL

INTEGER

SUM_DOC

NUMERIC(10;2)

DOC COD PRED

INTEGER

DOC COD VAL

INTEGER

DOC SUM DOC

NUMERIC(10;2)

DOC PROC NDS

NUMERIC(10;2)

DOC SUM NDS

NUMERIC(10;2)

RUB SUM DOC

NUMERIC(10;2)

RU B SUM NDS

NUMERIC(10;2)

COR NUM DOC

CHAR(30)

COR DATE DOC

DATETIME

PATCH NUM DOC

CHAR(30)

PATCH DATE DOC

DATETIME

BUH_PERIOD

INTEGER

IN_BOOK

INTEGER

DATE_OTGR

DATETIME

USR

CHAR(IO)

DTR

DATETIME

POK_SOGL

PK

ID SOGL

NUMERIC(10;2)

WID_DOC

CHAR(IO)

NUM_DOC

CHAR(30)

DATE_DOC

DATETIME

REG NUM DOC

INTEGER

REG DATE DOC

DATETIME

COD_PRED

INTEGER

COD VAL

INTEGER

SUM_DOC

NUMERIC(10;2)

DOC COD PRED

INTEGER

DOC COD VAL

INTEGER

DOC SUM DOC

NUMERIC(10;2)

DOC PROC NDS

NUMERIC(10;2)

DOC SUM NDS

NUMERIC(10;2)

RUB SUM DOC

NUMERIC(10;2)

RU B SUM NDS

NUMERIC(10;2)

CO R NUM DOC

CHAR(30)

COR DATE DOC

DATETIME

PATCH NUM DOC

CHAR(30)

PATCH DATE DOC

DATETIME

BUH_PERIOD

INTEGER

IN_BOOK

INTEGER

DATE OTGR

DATETIME

USR

CHAR(IO)

DTR

DATETIME

POK_SW

PK

ID SW

INTEGER

FK1

ID_PR

NUMERIC(10;2)

FK2

ID_OSN

NUMERIC(10;2)

FK4

ID_TS

NUMERIC(10;2)

FK3

ID_OPL

NUMERIC(10;2)

SUM_DOC

NUMERIC(10;2)

COD VAL

INTEGER

REFI

NUMERIC(10;2)

REFO

NUMERIC(10;2)

REF_STORNO

NUMERIC(10;2)

COD_PRED

INTEGER

ID_DOG

INTEGER

ID_ZATR

INTEGER

NUM1

INTEGER

NUM2

INTEGER

NUM3

INTEGER

NUM4

INTEGER

ID1_PR

NUMERIC(10;2)

ID1_OSN

NUMERIC(10;2)

ID1_TS

NUMERIC(10;2)

ID1_OPL

NUMERIC(10;2)

PR_BUH

NUMERIC(10;2)

USR

CHAR(30)

DTR

DATETIME

POK_OSN

PK

ID OSN

NUMERIC(10;2)

WID_DOC

CHAR(IO)

NUM_DOC

CHAR(30)

DATE_DOC

DATETIME

REG NUM DOC

INTEGER

REG DATE DOC

DATETIME

COD PRED

INTEGER

COD VAL

INTEGER

SUM_DOC

NUMERIC(10;2)

DOC COD PRED

INTEGER

DOC COD VAL

INTEGER

DOC SUM DOC

NUMERIC(10;2)

DOC PROC NDS

NUMERIC(10;2)

DOC SUM NDS

NUMERIC(10;2)

RUB SUM DOC

NUMERIC(10;2)

RUB SUM NDS

NUMERIC(10;2)

COR NUM DOC

CHAR(30)

COR DATE DOC

DATETIME

PATCH NUM DOC

CHAR(30)

PATCH DATE DOC

DATETIME

BUH_PERIOD

INTEGER

IN_BOOK

INTEGER

DATE_OTGR

DATETIME

USR

CHAR(IO)

DTR

DATETIME

POK_OPL

PK

ID PPL

NUMERIC(10;2)

WID_DOC

CHAR(IO)

NUM_DOC

CHAR(30)

DATE_DOC

DATETIME

REG NUM DOC

INTEGER

REG DATE DOC

DATETIME

COD_PRED

INTEGER

COD VAL

INTEGER

SUM_DOC

NUMERIC(10;2)

DOC COD PRED

INTEGER

DOC COD VAL

INTEGER

DOC SUM DOC

NUMERIC(10;2)

DOC PROC NDS

NUMERIC(10;2)

DOC SUM NDS

NUMERIC(10;2)

RUB SUM DOC

NUMERIC(10;2)

RU B SUM NDS

NUMERIC(10;2)

CO R NUM DOC

CHAR(30)

COR DATE DOC

DATETIME

PATCH NUM DOC

CHAR(30)

PATCH DATE DOC

DATETIME

BUH_PERIOD

INTEGER

IN_BOOK

INTEGER

DATE OTGR

DATETIME

USR

CHAR(IO)

DTR

DATETIME

Рис. 1. Схема данных модуля «Покупки»

Fig. 1. Module “Purchase” data schema

Предлагаемый подход к структурированию данных позволяет выполнять широкий спектр задач аналитической обработки без предварительной подготовки данных или использования промежуточных представлений. Для наглядного описания проведем их формализацию [8], затем рассмотрим несколько реальных примеров таких задач, решаемых в рамках подсистемы «Покупки». Итак, пусть задана схема базы данных = { R 1 , R 2 , ..., R k }, полученная в результате нормализации отношений [6; 7]. Отношения R i определены на множестве атрибутов U = { A 1 , A 2 , ..., A n }. Пусть [ R i ] – схема отношения, множество атрибутов, на которых определено отношение Ri . Предположим, что схема является редуцированной [7], т. е. не существует двух отношений таких, что [ R i ] [ R j ], при i j . Кортеж t [ X ] – совокупность значений атрибутов A j X [ R i ], заданных в кортеже t R i . Неопределенное значение NULL атрибута A j в кортеже t : t [ A j ] = NULL не равно любому другому значению, в том числе другому неопределенному значению.

Многомерное представление будем задавать в виде совокупности размерностей { D 1 , D 2 , …, D d }, где D l – множество расширенных имен атрибутов: R i A j , A ϕ [ R i ]; M – множество мер, также заданных в виде расширенных имен атрибутов. Значения D l являются значениями координат гиперкуба, значения M будут располагаться в рабочей области гиперкуба. Для каждой размерности задается ограничение в виде логической формулы F l .

Пример 1. Необходимо найти данные оплат (любых перечислений денежных средств) предприятию с кодом 12345 по проекту 111 и договорам поставки 222, 223, где были уплачены денежные средства с 01.01.2021 по 28.02.2021 по статьям бюджетного планирования (СБП) 333, 334 и получены товар/работы/услуги в период с 01.01.2021 по 31.01.2021.

С целью упрощения постановки и реализации, в этом и последующих примерах не используемые в выборке атрибуты опускаются. Таким образом, в рамках описанной схемы БД имеем следующее подмножество атрибутов: A1 – идентификатор связи, A2 – идентификатор записи о поступлении товара/работ/услуг, A 3 – идентификатор записи платежа, A 4 – код предприятия, A 5 – идентификатор проекта, A 6 – идентификатор договора поставки, A 7 – СБП, A 8 – дата приходной накладной, A 9 – дата платежа, A 10 – сумма платежа. Здесь существуют следующие функциональные зависимости: DEP = { A 1 A 2 A 3 A 4 A 5 A 6 A 7 , A 2 A 8 , A 3 A 9 A 10 }. На основании данного подмножества получаем упрощенную схему отношений: Связи документов = R1 ( A1 , A2 , A3 , A 4 , A 5 , A 6 , A 7 ), Поступления товаров/работ/услуг = R 2 ( A 2 , A 8 ), Платежные документы = R 3 ( A 3 , A 9 , A 10 ), где жирным выделены ключевые атрибуты отношений. Одно из возможных представлений гиперкуба приведено в табл. 1.

Таблица 1

Данные оплат

Код предприятия

12345

Проект

111

Договор поставки

222

223

СБП

333

334

333

334

Дата

Сумма

Сумма

Сумма

Сумма

21.01.2021

75000

250000

357500

65500

26.01.2021

31000

310000

785000

96000

28.01.2021

70000

870080

6500

55000

Атрибуты измерений представлены жирным шрифтом, атрибуты фактов – курсивом, значения атрибутов – обычным шрифтом. Схема гиперкуба в табл. 1 может быть представлена в следующем виде:

{R3.A9} × {R1.A4{R1.A5{R1.A6{R1.A7(R3.A10)}}}}, где D1 = {R3.A9} и D2 = {R1.A4, R1.A5, R1.A6, R1.A7} – измерения, M = {R3.A10} – факты. Логическое ограничение: F = (R1.A2 ≠ NULL ∧ R1.A3 ≠ NULL ∧ R1.A4 = 12345 ∧ R1.A5 = 111 ∧ (R1.A6 = 222 ∨ R1.A6 = 223) ∧ (R1.A7 = 333 ∨ R1.A7 = 334) ∧ R3.A11 >= 01.01.2021 ∧ R3.A11 <= 28.02.2021 ∧ R2.A8 >= 01.01.2020 ∧ R8.A8 <= 31.01.2020).

Соответствующий SQL запрос приведен на рис. 2.

SELECT pok.cod_pred AS pok_cod_pred, -- предприятие pok.id_zatr AS pok_id_zatr, -- проект pok.id_dog AS pok_id_dog, -- договор pok.num4 AS pok_num4, -- статья бюджетного плана opl.date_doc AS opl_date_doc, -- дата платежного документа opl.sum_doc AS opl_sum_doc -- сумма платежного документа FROM pok_sw pok

LEFT JOIN pok_opl opl ON pok.id_opl = opl.id_opl

LEFT JOIN pok_prih pr ON pok.id_pr = pr.id_prih

WHERE pok.id_opl IS NOT NULL -- были уплачены деньги

AND pok.id_pr IS NOT NULL -- были получены товар/работы/услуги

AND pok.cod_pred = 12345 -- данные по предприятию с кодом 12345

AND pok.id_zatr = 111 -- по проекту с кодом 111

AND pok.id_dog = 222 -- по договору с кодом 222

AND pok.num4 = 333 -- платеж был по СБП с кодом 333

Рис. 2. SQL запрос данных оплат предприятию с указанной аналитикой

  • Fig. 2.    SQL query of payments data to the enterprise with the specified analytics

С использованием описанной схемы БД в запрос аналогичным образом включаются любые другие измерения и факты (данные и аналитика оплат, счетов-фактур, акцептов, приходов и т. д.), позволяющие отследить все движение (документы, операции) по данному либо иному логическому ограничению.

Пример 2. Необходимо найти дебиторскую задолженность (сумму долга) предприятию с кодом 12345 за поставленные товары/работы/услуги по проектам 111 и 112.

Задано минимальное подмножество атрибутов: A 1 – идентификатор связи, A 2 – идентификатор записи о поступлении товара/работ/услуг, A 3 – идентификатор записи платежа, A 4 – код предприятия, A 5 – идентификатор проекта, A 6 – идентификатор договора поставки, A 7 – номер документа прихода, A 8 – сумма документа прихода, A 9 – отчетный период. На данном множестве атрибутов существуют следующие функциональные зависимости: DEP = { A 1 → A 2 A 3 A 4 A 5 A 6 , A 2 A 7 A 8 A 9 }. Получаем схему отношений: Связи документов = R 1 ( A 1 , A 2 , A 3 , A 4 , A 5 , A 6 ), Поступления товаров/работ/услуг = R 2 ( A 2 , A 7 , A 8 , A 9 ). Одно из возможных представлений гиперкуба приведено в табл. 2.

Схема гиперкуба в табл. 2 может быть представлена в следующем виде:

{R2.A7} × {R1.A4{R1.A5{R1.A6{R2.A9(R2.A8)}}}}, где D1 = {R2.A7} и D2 = {R1.A4, R1.A5, R1.A6, R2.A9} – измерения, M = {R2.A8} – факты. Логическое ограничение: F = (R1.A2 ≠ NULL ∧ R1.A3 = NULL ∧ R1.A4 = 12345).

Таблица 2

Код предприятия

12345

Проект

111

112

Договор поставки

222

223

224

225

Отчетный период

333

334

333

334

№ док.

I/2020

II/2020

III/2020

IV/2020

I/2020

II/2020

III/2020

IV/2020

11

75000

21500

250000

784200

357500

650800

65500

48000

12

31000

79200

310000

58100

785000

130000

96000

51700

13

70000

623300

870080

3700

6500

210000

55000

3580

Дебиторская задолженность

Пример соответствующего SQL запроса приведен на рис. 3.

SELECT pok.cod_pred AS pok_cod_pred, -- предприятие pok.id_zatr AS pok_id_zatr, -- проект pok.id_dog AS pok_id_dog, -- договор prih.num_doc AS prih_num_doc, -- номер документа прихода prih.sum_doc AS prih_sum_doc, -- сумма документа прихода prih.cod_val AS prih_cod_val, -- код валюты документа прихода prih.buh_period AS prih_buh_period -- отчетный период

FROM pok_sw pok

LEFT JOIN pok_prih prih ON pok.id_pr = prih.id_prih

WHERE pok.id_pr IS NOT NULL -- был приход товара (наличие документа прихода)

AND pok.id_opl IS NULL -- не было оплаты

AND pok.cod_pred = 12345 -- данные по предприятию с кодом 12345

Рис. 3. SQL запрос данных о дебиторской задолженности указанному предприятию

  • Fig. 3.    SQL query of data on accounts receivable for the specified company

Результатом будут все строки по исследуемому предприятию, где зарегистрированы первичные приходные документы, по всем проектам, договорам поставки с возможными оплатами в любой валюте. Здесь можно анализировать, за какую поставку чем оплачивалось, какие были согласованы акцепты, авансы или платежи, по каким договорам, для кого, какие счета-фактуры для налогового учета и когда они должны попасть в книги покупок и продаж и т. д. Пример подсчета суммы платежей предприятию представлен на рис. 4.

SELECT SUM(DECODE(NVL(pok.id_opl, 0), 0, 0, pok.sum_doc)) AS sum_opl, pok.cod_val FROM pok_sw pok

WHERE pok.id_pr IS NOT NULL -- был приход товара (наличие приходного ордера)

AND pok.cod_pred = 12345 -- данные по предприятию с кодом 12345 GROUP BY pok.cod_val

Рис. 4. SQL запрос суммы долга указанному предприятию

  • Fig. 4.    SQL query for the amount owed to the specified company

Пример 3. Получить информацию о том, какие товары/работы/услуги были оплачены данным документом и на основании какого документа согласования (акцепта) это было сделано.

Задано минимальное подмножество атрибутов: A 1 – идентификатор связи, A 2 – идентификатор записи о поступлении товара/работ/услуг, A 3 – идентификатор записи документа согласования (акцепта), A 4 – идентификатор записи платежа, A 5 – код предприятия, A 6 – идентификатор проекта, A 7 – идентификатор договора поставки, A 8 – вид документа прихода, A 9 – номер документа прихода, A 10 – сумма прихода, A 11 – номер акцепта, A 12 – номер документа оплаты, A 13 – дата документа оплаты. Имеются следующие зависимости: DEP = { A 1 A 2 A 3 A 4 A 5 A 6 A 7 , A 2 A 8 A 9 ( A 10 ), A 3 A 11 , A 4 → A 12 A 13 } (три функциональных и одна многозначная).

В данном примере предлагается отказаться от необходимости выполнения функциональной зависимости [9–13]

D1D2…Dd → M, которая означает, что любому составному вектору значений размерностей D1D2…Dd соответствует не более одного вектора значений мер M.

Отказ от данной зависимости позволит использовать содержательные (не ключевые) атрибуты в размерностях и иметь в одной ячейке гиперкуба несколько значений (список) атрибута R i A j M . Списки значений используются в анализе данных, когда значения параметров не надо соотносить с объектами.

Получаем следующую схему отношений: Связи документов = R 1 ( A 1 , A 2 , A 3 , A 4 , A 5 , A 6 , A 7 ), Поступления товаров/работ/услуг = R 2 ( A 2 , A 8 , A 9 , A 10 ), Документы согласования платежей = R 3 ( A 3 , A 11 ), Платежные документы = R 4 ( A 4 , A 12 , A 13 ). Одно из возможных представлений гиперкуба приведено в табл. 3.

Таблица 3

Данные платежного документа

Код предприятия

12345

Проект

111

Договор поставки

222

223

Вид документа прихода

Приходная накладная

Приходный ордер

Акт выполненных работ

Приходная накладная

№ акцепта

Сумма

№ док. прихода

Сумма

№ док. прихода

Сумма

№ док. прихода

Сумма

№ док. прихода

11

75000

21

357500

24

250000

27

65500

30

12

31000

22

785000

25

310000

28

96000

31

13

70000

23

6500

26

870080

29

55000

32

Схема гиперкуба в табл. 3 может быть представлена в следующем виде:

{R3.A11} × {R1.A5{R1.A6{R1.A7{R2.A8(R2.A9)}(R2.A10)}}}, где D1 = {R3.A11} и D2 = {R1.A5, R1.A6, R1.A7, R2.A8} – измерения, M = {R3.A9, R3.A10} – факты. Логическое ограничение: F = (R4.A12 = 987 ∧ R4.A13 = 21.01.2021).

Пример соответствующего SQL запроса приведен на рис. 5.

Аналогичным образом реализован модуль АСУ ФЭЗ «Продажи» и другие вспомогательные модули. В совокупности эти модули составляют ядро системы.

Схема базы данных изначально спроектирована в соответствии с правилами нормальных форм [6; 7] и обладает свойством соединения без потерь информации (СБПИ) в соответствии с теоремой 5.8 [6]:

Пусть σ – декомпозиция отношения R, образованная схемами отношений в третьей нормальной форме, и пусть также X – ключ R. Тогда τ = σ {X} – декомпозиция R, такая, что все составляющие ее схемы отношений находятся в третьей нормальной форме. Эта декомпозиция сохраняет зависимости и сохраняет свойство соединения без потерь.

SELECT pok.cod_pred AS pok_cod_pred, -- предприятие pok.id_zatr AS pok_id_zatr, -- проект pok.id_dog AS pok_id_dog, -- договор prih.wid_doc AS prih_wid_doc, -- вид документа прихода prih.num_doc AS prih_num_doc, -- номер документа прихода prih.sum_doc AS prih_num_doc, -- сумма прихода sogl.num_doc AS osn_num_doc -- номер акцепта

FROM pok_sw pok

LEFT JOIN pok_prih prih ON pok.id_pr = prih.id_prih

LEFT JOIN pok_sogl sogl ON pok.id_osn = sogl.id_osn

LEFT JOIN pok_opl opl ON pok.id_opl = opl.id_opl

Рис. 5. SQL запрос данных платежа

  • Fig. 5.    SQL query for payment data

Полученные в результате кубы данных соответствуют формальным правилам, рассмотренным в работе [14], в соответствии с моделью данных «композиционная таблица», которая, в свою очередь, является обобщением модели «семантическая трансформация» [12], на случай списка значений в одной ячейке. Данный алгоритм формирует иерархии в измерениях гиперкуба, используя функциональные, многозначные зависимости исходной базы данных и иерархии атрибутов, заданные пользователем.

Описанная методика хранения и обработки данных позволяет эффективно выполнять как OLTP, так и OLAP операции без создания дополнительных структур данных и выполнения лишних преобразований. Это, в свою очередь, ведет к существенному снижению накладных расходов как по сложности составления запросов, так и по времени их выполнения по сравнению с классическим OLAP-инструментарием, способствует более оптимальному использованию ресурсов хранилища данных, позволяет избегать необходимости хранить избыточные данные. Применение описанного алгоритма в OLAP-системах позволяет сократить время на формирование схемы новой многомерной модели данных, а также сделать представление модели наиболее удобным для работы пользователя.

Заключение

Предложенный вариант формирования и хранения данных первичных документов о хозяйственной деятельности предприятия обеспечивает детализированный раздельный учет финансово-хозяйственных операций покупок и продаж, и позволяет эффективно решать проблемы построения бухгалтерского, налогового и управленческого учетов. Применение вышеописанных схем, логики хранения и обработки данных для работы с различными их производными дает возможность дифференцировать элементы цепочки событий (состояний) в учете до первоисточников, увязанных в таблице связей в соответствии с логикой хозяйственных операций, что позволяет анализировать данные по любому интересующему набору аналитики. Таким образом, на любом этапе и участке учета всегда имеются целостные информационные связи. При этом обеспечивается возможность построения сложных OLAP структур данных в сочетании с быстродействием транзакционной СУБД. Эффективность работы АСУ ФЭЗ и лежащих в ее основе алгоритмов подтверждается опытом многолетней промышленной эксплуатации на одном из ведущих предприятий госкорпорации «Роскосмос» АО «ИСС» без привлечения внешних коммерческих решений.

Список литературы Формирование многомерных данных в информационной финансово-экономической системе на предприятии госкорпорации «Роскосмос»

  • Вычугжанина Т. В., Долгова И. А. Использование хранилищ данных и OLAP-технологии в современных ERP-системах // Информационные технологии в моделировании и управлении: подходы, методы, решения : сб. тр. конф. Пенза, 2017.
  • Аврунев О. Е., Стасышин В. М. Модели баз данных. Новосибирск : Изд. НГТУ, 2018. 124 с.
  • Компания «Абис Софт». Применение O LAP--технологий для учетных систем на платформе 1С [Электронный ресурс]. URL: https://www.cfin.ru/itm/olap/1c.shtml (дата обращения: 11 02 2021).
  • Гончарова Ю. А., Андреева Н. М. Чтение данных периодического регистра сведений «1С:Предприятие 8.1» методами табличной модели информационной базы // Актуальные проблемы авиации и космонавтики. 2012. № 1. С. 393-394.
  • Картамышев А. С., Вилков Ю. В., Инновации в управлении предприятием РКО. Интегрированная информационная система управления предприятием АО «ИСС» // Актуальные вопросы проектирования автоматических космических аппаратов для фундаментальных и прикладных научных исследований. Анапа, 2017.
  • Ульман Дж. Основы систем баз данных. М. : Финансы и статистика, 1983. 334 с.
  • Maier D. The Theory of Relational Databases. Rockville: Computer Science Press, 1983.
  • Зыкин С. В., Мосин С. В., Полуянов А. Н. Технология раздельного формирования многомерных данных // Вестник Донского гос. техн. ун-та. 2016. № 2(85). С. 121-128.
  • Lechtenborger J., Vossen G. Multidimensional normal forms for data warehouse design // Information Systems Frontiers. 2003. No. 28. P. 415-434.
  • Lehner W., Albrecht J., Wedekind H. Normal forms for multidimensional databases // Proceedings of the Tenth International Conference on Scientific and Statistical Database Management. 1998. P.63-72.
  • Mazon J., Trujillo J., Lechtenborger J. Reconciling requirement-driven data warehouses with data sources via multidimensional normal forms // Data & Knowledge Engineering, 2007. No. 3 (63). P. 725-751.
  • Zykin S.V. Formation of Hypercube Representation of Relational Database. Programming and Computer Software. 2006. No. 6 (32). P. 348-354.
  • Zykin S.V. Dynamic contexts of relational-type database. Informatics and Applications. 2014. No. 1 (8). P. 77-88.
  • Редреев П. Г. Построение иерархий в многомерных моделях данных // Известия Саратовского ун-та, 2009. № 4. С. 7-12.
Еще
Статья научная