Серии номеров

Материал из Course Orchestra
Перейти к: навигация, поиск
Внимание! Вы просматриваете документацию к Celesta 6.x. Документация по Celesta 7.x доступна на courseorchestra.github.io/celesta.

1. Справочник Celesta

1.1 Введение и основные понятия
1.2 Запуск и авто-обновление
1.3 Базовая настройка
1.4 Системные таблицы
1.5 CelestaSQL
1.6 CelestaDoc
1.7 Контексты сессии и вызова
1.8 Курсоры
1.9 BLOB-поля
1.10 Option-поля
1.11 Защита от потерянных обновлений
1.12 Метаданные Celesta
1.13 CelestaUnit

2. Celesta и базы данных

2.1 Особенности работы Celesta с поддерживаемыми типами СУБД
2.2 Проектирование базы данных Celesta в DBSchema

3. Создание решений с использованием Celesta для ShowCase

3.1 Программа обучения Celesta
3.2 Подготовка рабочего места для работы с Celesta
3.2.1 Для разработчиков платформы
3.2.2 Для разработчиков решений
3.3 Системные гранулы Celesta
3.3.1 common
3.3.1.1 Экспорт/импорт данных
3.3.1.2 Навигатор
3.3.1.3 Серии номеров
3.3.1.4 Иерархия Дьюи
3.3.1.5 Системные функции
3.3.1.6 Реестр настроек
3.3.1.7 Mailsender
3.3.1.8 Common.filter
3.3.2 common.api
3.3.4 security
3.3.3 lyra
3.4 Стандартные гранулы Celesta
3.4.1 dirusing
3.4.2 workflow
3.4.3 File repository
3.5 Отрисовка элементов Showcase при помощи Celesta
3.5.1 Конвертер XML-JSON
3.5.2 Навигатор (Navigator)
3.5.3 Информационная панель (Datapanel)
3.5.4 Серверное действие (Server activity)
3.5.5 Вебтекст (WebText)
3.5.6 Грид (Grid)
3.5.6.1 Панель инструментов (ToolBar)
3.5.7 XForms
3.5.7.1 Селекторы
3.5.7.2 Submission
3.5.7.3 Загрузка/Выгрузка файлов (Upload/Download)

5. Решение проблем

5.1 Проблемы с кодировкой jython-файлов

Описание

В грануле common существует возможность для создания серий номеров практически любой сложности. Серии номеров представляют собой буквенно числовую последовательность, с изменяющимся числовым блоком внутри нее. Фактически это более усовершенствованный механизм identity. Кроме того одна серия номеров может состоять из нескольких частей, например если вы объявляете серию для номеров договоров, и в код договора входит год его заключения.

Для использование данного функционала необходимо внести записи в две специальные таблицы:

create table numbersSeries (
id varchar(50) not null primary key,
description varchar(250)
);

create table linesOfNumbersSeries (
seriesId varchar(50) not null foreign key references numbersSeries(id),
numberOfLine int not null,
startingDate datetime not null,
startingNumber int  not null,
endingNumber int  not null,
incrimentByNumber int not null,
lastUsedNumber int,
prefix varchar(20) not null default '',
postfix varchar(20) not null default '',
isFixedLength bit not null default 'TRUE',
isOpened bit not null default 'TRUE',
lastUsedDate datetime,

PRIMARY KEY (seriesId, numberOfLine)
);

В первой находятся серии номеров, а во второй линии или фрагменты этих серий. Смысл полей первой таблицы интуитивно понятен, на второй таблице следует остановиться подробнее.

  • seriesId - код серии
  • numberOfLine - номер фрагмента (линии) в серии
  • startingDate - дата начала использования линии серии (если дата превышает текущую, то серия не используется)
  • startingNumber - начальный номер линии в серии (имеется ввиду чисто числовой блок)
  • endingNumber - последний номер линии в серии (имеется ввиду чисто числовой блок)
  • incrimentByNumber - шаг между соседними номерами, чаще всего используется значение 1
  • lastUsedNumber - последний использованный номер (имеется ввиду чисто числовой блок)
  • prefix - набор символов перед числовым блоком
  • postfix - набор символов после числового блока
  • isOpened -параметр определяет открыта ли данная линия серии для использования, в случает если стоит false номера из линии не используются
  • lastUsedDate - последняя дата использования
  • isFixedLength - параметр определяет дополнять ли сгенерированный номер необходимым числом "0" вначале (длина числового блока будет равна длине последнего числа линии). В случае если номера линии изменяются в пределах от 1 до 100 и 1) в поле указано true, то сгенерированные для пользователя номера будут иметь вид prefix001postfix,prefix002postfix ... prefix015postfix ... 2) в поле указано false, то сгенерированные для пользователя номера будут иметь вид prefix1postfix,prefix2postfix ... prefix15postfix ...

Для того чтобы использовать данный функционал необходимо импортировать в ваш питоновский скрипт модуль getNextNo из пакета common.numbersseries. Для получения следующего номера серии необходимо просто вызвать функцию getNextNoOfSeries

# coding: utf-8

from ru.curs.celesta import Celesta
from ru.curs.celesta import ConnectionPool
from ru.curs.celesta import CallContext
from common.numbersseries import getNextNo

conn = ConnectionPool.get()
sesContext = SessionContext('admin', 'initsession')
context = CallContext(conn, sesContext)

print getNextNo.getNextNoOfSeries(context, 'series1')

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

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

Пользовательский интерфейс

Для доступа к пункту меню Серии номеров нужно связать соответствующую роль с разрешением 'numbersSeriesPoint'. (Описание, как это сделать, в статье security) Пользовательский интерфейс ведения серий номеров представляет собой два грида: Типы серий номеров и зависимый от него Серии номеров.

NumbersSeries.png

Карточки гридов содержат поля таблиц, кнопки "Сохранить" и "Закрыть"

Для удобства миграции данных между решениями добавлены кнопки "Скачать" и "Загрузить", использующие модуль экспорта/импорта данных. Загружать в таблицу данные можно только xml-файла, выгруженного ранее из тождественной таблицы.