Шибанов С.В.
ОРГАНИЗАЦИЯ ВЫЧИСЛЕНИЙ И КОНТРОЛЯ ДОСТОВЕРНОСТИ ДАННЫХ В АИС «ПРОКУРАТУРА-СТАТИСТИКА»
Под вычислениями в АИС «Прокуратура-Статистика» понимаются автоматические вычисления, проводимые по определенным выражениям, над значениями, вводимыми пользователем в ячейки той или иной формы. Контроль данных в АИС «Прокуратура-Статистика» предполагает проверку контрольных и логических правил, фиксирующих определенные закономерности в данных. Предлагается подход, обеспечивающий автоматизацию процесса построения и актуализации вычислительных формул и контрольных логических правил.
Введение. Под вычислениями в АИС «Прокуратура-Статистика» понимаются автоматические вычисления, проводимые по определенным выражениям, над значениями, вводимыми пользователем в ячейки той или иной формы. Примером могут служить вычисления для формирования итоговых значений (например, суммарных значений) для совокупности ячеек в строке или столбце, а также произвольной совокупности ячеек. Вычисления на основе введенных выражений выполняются автоматически при вводе или редактировании данных в ячейках, значения которых присутствуют в выражениях. В настоящее время в вычислительных выражениях могут участвовать только значения ячеек текущей формы. Однако нет никаких гарантий, что в будущем
Контроль данных в АИС «Прокуратура-Статистика» предполагает проверку контрольных и логических правил, фиксирующих определенные закономерности в данных. Контроль данных направлен на повышение достоверности данных в процессе формирования статистической отчетности. Контрольные и логические правила связаны с конкретной статистической формой, контроль достоверности данных в которой они обеспечивают. Тем не менее, в контрольных и логических правилах могут участвовать данные из других статистических форм. Контроль данных инициируется пользователем по мере заполнения той или иной статистической формы. Результатом контроля данных для пользователя могут быть: либо сообщение об успешной проверке, либо одно или несколько сообщений о неудачном завершении того или иного правила. Результаты успешного или неуспешного завершения проверки контрольных и логических правил для каждой из заполняемых статистических форм также должны фиксироваться в системе (в данном конкретном случае, в базе данных АИС «Прокуратура-Статистика»).
Возможные подходы к организации вычислений и контроля данных. Вычисления и контроль данных принципиально могут быть реализованы несколькими способами. Первый способ заключается в «жесткой» реализации вычислений и контроля данных для каждой из статистических форм в виде программных приложений. Возможно, что этот способ и является менее затратным при создании программных средств, в этом его основное достоинство. Кроме того, по всей видимости, данный способ может обеспечить наибольшее быстродействие. Однако имеется ряд существенных недостатков. Для каждой из статистических форм придется создавать собственные программные приложения для проведения вычислений и контроля данных. В процессе изменения вычислительных формул и контрольных и логических правил потребуется внесение изменений в соответствующие программные средства. При этом изменения могут быть связаны не только со сменой алгоритмов вычислений и контроля, но и с реализацией новых запросов на выборку данных из базы данных. Таким образом, модификация программных средств при изменении вычислительных формул и контрольных и логических правил в процессе функционирования системы является достаточно затратной (а возможно, и сложной) самостоятельной задачей.
Второй способ предполагает создание единого механизма для организации вычислений и контроля данных, не зависящего от конкретной статистической формы. Таким образом, преодолевается основной недостаток первого способа - мы имеем возможность создать единые программные средства для всех статистических форм, обрабатываемых в системе. Кроме того, данный механизм должен обеспечить возможность внесения изменений в вычислительные формулы и контрольные правила в процессе функционирования АИС «Прокуратура-Статистика». При этом (конечно, в определенных границах), не потребуется перепрограммирование приложений (или, точнее, потребуется крайне редко). Конечно же, данный способ реализации вычислений и контроля данных является весьма нетривиальной, а самое главное затратной задачей. Его преимущества можно будет ощутить только при реализации вычислений и контроля данных для нескольких форм, а также в процессе сопровождения системы и модификации соответствующих вычислительных формул и контрольных и логических правил. В пользу применения второго способа говорит и достаточно универсальный способ представления статистических форм в АИС «Прокуратура-Статистика» в виде xml-схем.
Для реализации вычислений и контроля данных в соответствии со вторым способом необходимо решить несколько отдельных, но тесно взаимосвязанных задач:
определить тэги для задания вычислительных формул и контрольных и логических правил в xml-схемах статистических форм;
определить язык для задания вычислительных формул и контрольных и логических правил внутри тэгов xml-схем статистических форм;
разработать программные средства синтаксического анализа и интерпретации вычислительных формул и контрольных и логических правил;
разработать программный интерфейс и правила взаимодействия между приложением, отвечающим за создание и редактирование статистических форм, и программными средствами синтаксического анализа и интерпретации вычислительных формул и контрольных и логических правил.
Для автоматизации процесса создания и редактирования вычислительных формул и контрольных и логических правил также необходимо создать интерактивные программные средства конструирования соответствующих выражений.
Тэги для задания вычислительных формул и контрольных логических правил в xml-схемах статистических форм. Каждая из статистических форм, создаваемая и обрабатываемая в АИС «Прокуратура-Статистика» описывается в виде xml-схем. Такой подход обеспечивает автоматизацию создания, отображения и обработки соответствующей формы в пользовательском приложении. Он позволяет быстро, практически без внесения изменений в приложения, добавлять новые формы и модифицировать структуру существующих форм.
В xml-схемах, описывающих статистические формы, содержатся тэги, определяющие внешний вид (макет) таблиц формы. Речь идет об описании заголовочных ячеек для столбцов и строк, для которых задаются размеры, нумерация, текст, стиль начертания, ориентация и параметры выравнивания текста. Для внутренних ячеек таблицы, в которых непосредственно размещаются статистические сведения, определяются формат ячейки (целый, десятичный и т.д.), уровень доступа (доступны или недоступны для редактирования). Также вводятся тэги для задания вычислительных формул и контрольных логических правил.
Тэг для определения вычислительной формулы:
<tmp:formula> Вычислительная формула </tmp: formula >
Тэг для определения контрольного логического правила:
<tmp:rule> Контрольное логическое правило </tmp:rule>
Вычислительные формулы и контрольные логические правила задаются в виде выражения на специально разработанном языке.
Язык для задания вычислительных формул и контрольных логических правил внутри тэгов хт1-схем таблиц статистических форм. При разработке языка для задания вычислительных формул и контрольных логических правил учитывались следующие соображения:
язык должен обеспечивать построение всех существующих видов вычислительных формул и контрольных логических правил, а также быть расширяем в процессе развития системы;
язык быть достаточно прост для конструирования и разбора вычислительных формул и контрольных логических правил;
конструкции языка должны быть по возможности однотипны как для вычислительных формул, так и контрольных логических правил;
язык должен позволять как в вычислительных формулах, так и в контрольных логических правилах адресоваться к данным из любой таблицы любого раздела текущей формы, а также к данным из любой таблицы любого раздела любой формы;
язык должен позволять конструировать выражения таким образом, чтобы они задавали однотипные вычислительные формулы и контрольные логические правила сразу для групп ячеек, что позволит уменьшить размер xml-схем.
Базовое описание языка имеет следующий вид:
<Начало строки>::=<Выражение><Присваивание>
<Присваивание> ::= <Идент> = <Выражение>
<Список переменных> ::= <Идент>|<Идент>;<Список переменных>
<Выражение> ::= <Ун оп>< Подвыражение>|<Подвыражение>
<Подвыражение> ::=(<Выражение>) | <Операнд> | < Подвыражение >
<Бин.оп.><Подвыражение>|<Функция>
<Функция> ::= SUM[<Список переменных>]|МШ[<Список переменных>]| MAX[<Список переменных>]| AVG[<Список переменных>]
<Бин.оп.> ::= *|+|-|/|%|Л <Ун Оп>::=-|+
<Сравнение>::=<Выражение><Оп. отношения><Выражение>
<Оп. отношения>::=>|<|>=|<=|<>|==|
<Операнд> ::= <Идент>|<Число>
<Идент> ::= <Идент><Буква>|<Идент><Цифра>|<Буква>
<Число>::=<Число><Цифра>|<Цифра>
<Буква>::=А|..|Е|а|..|г
<Цифра>::=0|..|9
Адресация к ячейкам форм в выражениях происходит с помощью конструкции вида:
[[Е<форм>~][^<раздел формы>~]Т<таблица>~]] <ячейка>.
В адресе может отсутствовать <наименование формы>, если определяется адрес в текущей форме. Аналогично, в адресе может отсутствовать <номер раздела формы> и <номер таблицы>, если определяется адрес соответственно для текущего раздела и текущей таблицы.
В настоящее время в системе существуют следующие формы:
форма 1ЕМ - основные показатели следственной работы органов прокуратуры, внутренних дел, наркоконтроля;
форма П - отчет о работе прокурора;
форма 1Е - отчет о следственной работе и дознании;
форма 2Е - отчет о рассмотрении органами прокуратуры сообщений о преступлении; сведения о работе прокурора в сфере реализации приоритетных национальных проектов.
В дальнейшем не исключается появление новых форм статистической отчетности. А пока имеем:
<наименование формы> := {1ЕМ|2Е|П|1Е|2Е|НП}.
Таблица 1. Вычислительные формулы по форме 1ЕМ и их реализация.
№ п/п Вычислительные правила Реализация в виде выражений
В графах 1-10:
1 Показатель строки 4 равен сумме показателей строк 6-9 и 14 МА8К[Е1ЕМ~81~ТА~4~1:Е1ЕМ~81~ТА~4~10;МА8К1]МА8К1= ЗиМ[МАЗК1 + го'м2:МАЗК1 + го'м7] + МАБК1 +гow10
Номера разделов в каждой из форм задается целыми положительными числами от 1 до числа, соответ-
ствующего последнему разделу формы. Таким образом,
<номер раздела формы> := {1, 2, 3, ...}.
Таблицы в разделах форм задаются, как правило, в виде Таблица А, Таблица Б и т.д. Таким образом, <номер таблицы формы> := {А, Б, В, ...}
Ячейка таблицы представляет собой пересечение столбца и строки таблицы, поэтому адрес ячейки формируется как адрес столбца и адрес строки:
<адрес ячейки> := <адрес столбца><адрес строки>.
Пример вычислительной формулы для формы 1ЕМ «Отчет об основных показателях следственной работы органов прокуратуры, внутренних дел, наркоконтроля» приведен в таблице 1. Примеры контрольных логи-
ческих правил для формы 1ЕМ приведены в таблице 2.
Таблица 2. Контрольные логических правила по форме 1ЕМ
№ п/п Контрольные и логические правила Реализация в виде выражений
В графах 1-10:
1 Остаток неоконченных дел на начало отчетного периода (строка 1) равен остатку таких дел на конец предыдущего года (форма 1 - Е раздел 3 строка 33) МАБК[ПЕМ~81~ТА~1~1: Е1ЕМ~31~ТА~1~3;МА8К1]МА8К1+гом0 МАБК[Е1Е^1~ТА~33~1: Е1EM~S1~TA~33~3;MASK2]MASK2+гow0; и MASK[Е1EM~S1~TA~1~7: Е1EM~S1~TA~1~8;MASK1]MASK1+гow0 MASK[Е1E~S1~TA~33~5: Е1EM~S1~TA~33~6;MASK2]MASK2+гow0;
2 Показатель строки 4 равен сумме показателей строк 6-9 и 14 MASK[Е1EM~S1~TA~4~1:Е1EM~S1~TA~4~10;MASK1]MASK1+гow0 SUM[MASK1+гow2:MASK1+гow7] + MASK1 +row10
3 Показатель строки 5 больше суммы строк 612 либо равен ему MASK[Е1EM~S1~TA~5~1:Е1EM~S1~TA~5~10;MASK1]MASK1+гow0 >= SUM[MASK1 + row1:MASK1 + row7]
Показатель суммы строк 5 и 14 больше показателя строки 23 либо равен ему
МА8К[Е1ЕМ~81~ТА~5~1:Е1ЕМ~81~ТА~5~10;МА8К1]МАЗК1 + гом'0+ МАЗК1 + гом9 >=
МА8К1+гом18
Показатель строки 15 больше показателя строки 2 4
МАБК[Е1ЕМ~81~ТА~15"
>
МАБК1+гом9
1:Е1ЕМ~81~ТА~15~10;МАБК1]МАБК1+гом0
Показатели строки 24 больше показателя
строки 25
МАБК[Е1ЕМ~31~
>
МАБК1+гом1
ТА~2 4~1:Е1ЕМ~81~ТА~2 4~10;МАБК1]МАБК1+гом0
Показатели строки 26 больше показателя
строки 27__________________
МАБК[Е1ЕМ~81~ТА~2 6"
>
МАБК1+гом1
1: Е1ЕМ~81~ТА~2 6~10; МАБК1] МАБК1 + гом0
В графах 1-6:
8
Сумма показателей строк 1 и 2 равна сумме показателей строк 5, 14,
16,18- 22,28_______________
МАЗК[Е1ЕМ~81~ТА~1~1:Е1ЕМ~81~ТА~1~6;МА8К1]МА8К1 + гом'0+МА8К1 + гом'1
MASK1+гow4+MASK1+гow13+MASK1+гow15+
ЗиМ[МАЗК1+гом17:МАЗК1+гом21]+МАЗК1+гом27
В графах 7-10:
9
Сумма показателей строк 1 и 2 равна сумме показателей строк
3,5,14,16,18-22, 28
MASK[Е1EM~S1~TA~1~7:Е1EM~S1~TA~1~10;MASK1]MASK1 + гow0+MASK1 + гow1
MASK1+гow2+ MASK1+гow4+MASK1+гow13+MASK1+гow15+
SUM[MASK1 + гow17:MASK1 + гow21]+MASK1 + гow27
В графах 2, 4, 6, 8, 10:
10
Показатель строки 15 больше показателя строки 8 либо равен ему________
MASK[Е1EM~S1~TA~15~2:Е1EM~S1~TA~15~10;MASK1;2] MASK1+гow0 >=
MASK1-гow7
Во всех строках
11
Показатель графы 1 больше показателя графы 2 либо равен ему
MASK[Е1EM~S1~TA~1~1:Е1EM~S1~TA~2 9~1;MASK1]MASK1+col0
MASK1+col1
12
Показатель графы 3 больше показателя графы 4 либо равен ему
MASK[Е1EM~S1~TA~1~3:Е1EM~S1~TA~2 9~3;MASK1]MASK1+col0+ >=
MASK1+col1
13
Показатель графы 5 больше показателя графы 6 либо равен ему________
MASK[Е1EM~S1~TA~1~5:Е1EM~S1~TA~2 9~5;MASK1]MASK1+col0 >=
MASK1+col1
14
Показатель графы 7
больше показателя графы 8 либо равен ему
MASK[Е1EM~S1~TA~1~7:Е1EM~S1~TA~2 9~7;MASK1]MASK1+col0
MASK1+col1
15
Показатель графы 9
больше показателя графы 10 либо равен ему
MASK[Е1EM~S1~TA~1~9:Е1EM~S1~TA~2 9~9;MASK1]MASK1+col0
MASK1+col1
Показатели равны 0:
* - задаются в виде тегов хші-схєм, анализируются непосредственно в клиентском приложении и как логические правила не разбираются,
для таких ячеек также в виде тегов хші-схєм задается свойство недоступности при редактировании, поэтому проверять их не имеет смысла
16 В строке 7 графах 7-10 тз 0 N -Н 0 г 0 N а є -М V = с Є а і—і 0 о ’7" row= 7" />;
тз 0 N -Н 0 г 0 N а є -М V тоіиш^ '8" row= 7" />;
<tmp:zeroized тоіиш^ '9" row= 7" />;
<tmp:zeroized тоіиш^ '10 ' row= "7" />
17 В строке 19 графах 2,4, <tmp:zeroized тоіиш^ '2" row= 19" />;
6-10 <tmp:zeroized тоіиш^ 4" row= 19" />;
<tmp:zeroized тоіиш^ 6" row= 19" />;
<tmp:zeroized тоіиш^ 7" row= 19" />;
<tmp:zeroized тоіиш^ 8" row= 19" />;
<tmp:zeroized тоіиш^ 9" row= 19" />;
<tmp:zeroized тоіиш^ 10" ' row= = "19" />
5
5
7
Программные средства синтаксического анализа и интерпретации вычислительных формул и контрольных логических правил. Программные средства синтаксического анализа и интерпретации вычислительных формул и контрольных логических правил должны реализовывать: синтаксический анализ формул и правил; контроль ошибок в формулах и правилах;
перевод вычислительных формул и правил в удобный для последующей интерпретации вид (например, в польскую постфиксную запись);
интерпретация вычислительных формул - получение результата вычислений, помещение результата в ячейку с заданным адресом, интерпретация цепочки связанных вычислительных формул (если такая цепочка имеется);
интерпретация контрольных логических правил - проверка результата выполнения правила, в случае ложности правила вернуть диагностические сведения о месте и причине нарушения того или иного правила.
Обработка вычислительных формул. Разбор вычислительных формул включает не только синтаксический анализ, проверку корректности формул и перевод в удобный с точки зрения быстродействия вид (например, в польскую постфиксную запись). В процессе разбора совокупности формул, относящихся к открытой таблице, должна быть построена такая структура данных, которая фиксировала бы порядок выполнения формул при изменении содержимого той или иной ячейки. Интерпретация (выполнение) формулы происходит при изменении значения ячейки, которая присутствует в выражении, расположенном справа от знака присваивания. Построенная в процессе разбора структура данных, позволит определить какая именно формула (или цепочка формул) должна быть выполнена при изменении значения в той или иной ячейки.
Обработка контрольных логических правил. Разбор вычислительных формул включает синтаксический анализ, проверку корректности правил и перевод в удобный с точки зрения быстродействия вид (напри-
мер, в польскую постфиксную запись). Интерпретация правил происходит последовательно. Если все правила выполнены (имеют значение - истина), то возвращается код и сообщение об успешном завершении. Если какое-либо правило завершается неуспешно (значение - ложь), то возвращается код завершения, сообщение, если возможно адрес возникновения (если имеется конкретная ячейка), уровень ошибки (критично/не критично).
Взаимодействие программных средств синтаксического анализа и интерпретации вычислительных формул и контрольных логических правил с клиентским приложением. Сценарий взаимодействия клиентского приложения, реализующего ведение статистических форм, и программных средств синтаксического анализа и интерпретации вычислительных формул и контрольных логических правил определяется особенностями и отличием выполнения вычислительных формул и контрольных логических правил.
Взаимодействие приложений при выполнении вычислительных формул происходит следующим образом:
Клиентское приложение при загрузке формы считывает из xml-схемы множество вычислительных формул, определяемых соответствующим тэгом (formula).
Если список считанных вычислительных формул не пуст, то вызывается метод разбора. Разбор включает синтаксический анализ, проверку корректности формул и перевод в удобный с точки зрения быстродействия вид (например, в польскую постфиксную запись) каждой вычислительной формулы. В процессе разбора строится структура данных, которая фиксирует порядок выполнения формул при изменении содержимого той или иной ячейки.
В процессе редактирования данных в ячейках формы пользователем клиентское приложение вызывает метод, в который передается пара значений <<адрес ячейки>, <значение>>. Метод активизирует (интерпретирует) цепочку формул, в соответствии с построенной на 2 шаге структурой данных. Цепочка формул для заданной ячейки может быть пуста, тогда никаких вычислений не производится и ничего не возвращается в клиентское приложение. Если цепочка формул для заданной ячейки не пуста, то вычисления проводятся, и возвращается цепочка пар значений <<адрес ячейки>, <значение>>. Клиентское приложение помещает в соответствующие ячейки соответствующие значения.
При создании или открытии новой формы в клиентском приложении шаги 1-3 повторяются уже для новой формы.
Взаимодействие приложений при выполнении контрольных логических правил происходит следующим образом:
Клиентское приложение при загрузке формы считывает из xml-схемы множество контрольных логических правил, определяемых соответствующим тэгом (rule).
Если список правил не пуст, то в момент активизации пользователем процесса проверки контрольных логических правил клиентское приложение вызывает метод, который осуществляет разбор поочередно всех правил. Метод возвращает либо код, свидетельствующий об успешном завершении процесса разбора правил, либо список ошибок. При успешном завершении метод может вернуть (в случае необходимости) коллекцию, элементы которой указывают, какие данные из других форм необходимы для проверки корректности правил. Элемент коллекции может иметь следующий вид: <<наименование формы>, <номер раздела>, <номер табли-
цы>, <ячейка_1> [, <ячейка_2>] >. При этом ячейки можно интерпретировать как список или как диапазон (нужно выбрать приемлемый вариант).
Клиентское приложение интерпретирует полученную коллекцию (если она не пуста) в запрос к серверу приложений на получение соответствующих данных из базы данных.
Клиентское приложение вызывает метод интерпретации контрольных логических правил, передает в него коллекции необходимых данных (из текущей формы и из других форм, полученных от сервера приложений) и получает коллекцию сообщений о результатах проверки контрольных логических правил и выдает их пользователю.