Документы

Сервер электронной торговли Elastic - это документо-ориентированная система. Поэтому любое изменение состояния системы возможно только после регистрации (проводки) в ней какого-либо документа.

Однако, если Elastic сконфигурирован как кластер, то это справедливо только для кластера в целом, проскольку далеко не все узлы могут хранить документы-основания. В этом случае, справедливо говорить о документо-ориентированной архитектуре применительно к кластеру и регистро-ориентированной архитектуре применительно к отдельному узлу кластера.

Документы сервера не содердат ссылок на справочники, а используют при заполнении взятые из справочников значения. Это с одной стороны позволяет с меньшими трудностями реплицировать документы, а с другой дает гарантию, что в случае удаления, - допустим, по ошибке, - справочных данных, их удаление не потянет за собой и связанные с ними документы.

Обязательные атрибуты документа

Все документы имеют ряд обязательных атрибутов, таких как:

  • номер документа
  • уникальный внутренний код (GUID) документа
  • дата создания документа
  • дата последней модификации документа

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

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

Дата последней модификации помогает серверу понять нужно или нет обновлять документ. Это касается как репликации, так и обновления посредством REST API

Проводки документа

Документ оказывает влияние на систему, только после того как будет зарегистрирован в ней, или проведен.

Проводка документа состоит из набора атомарных операций с корреспондирующими документу регистрами.

Каждый тип (класс) документа сам определяет с какими регистрами он работает. Так, Накладные изменяют регистр остатков и учета товаров в пути, а АктУстановкиЦен - регистр цен

Проводки транзактивны, и поэтому проводка считается выполненной только если выполнены все операции с регистрами, которые она изменяет.

Статусы документа

Для того что бы судить какие к настоящему моменту операции над документом были совершены, а какие нет, существуют статусы документа.

Сервер управляет статусами документов централизовано с помощью модуля Workflow. Этот модуль позволяет задавать для каждого типа документов свою схему, т. е. набор статусов, допустимые переходы между ними и набор операций над документом выполняемый при конкретном переходе. Кроме того модуль Workflow несет трекер состояний всех зарегистрированных на узле документов.

На долю же самого документа остается определение допустимых с ним операций.

Таким образом каждый документ определяет как именно с ним можно работать, а модуль Workflow определяет - когда и при каких уловиях нужно провести ту или иную работу с документом.

К примеру, в модуле Stock имеется накладная, в которой определена операция проводки документа. Однако, решение когда нужно накладную провести принимается модулем Workflow, в соотвествии с заданной схемой.

Такой, на первый взгляд усложненный, механизм введен для того, что бы администратор системы, через административный веб-интерфейс модуля Workflow, был способен, не меняя исходного кода, самостоятельно определить схему для каждого документа.

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