Приложение 21. (Общее описание)

Служба глобальных счетчиков

Navigation:  ПРИЛОЖЕНИЯ >

Приложение 21. (Общее описание)

Служба глобальных счетчиков

Previous pageReturn to chapter overviewNext page

В этом разделе:

База данных COUNT

Форматный выход для глобального счетчика &uf(‘++C<index>#<value>’)

Пример

Продвинутым пользователям

 

 

Служба ГЛОБАЛЬНЫХ СЧЕТЧИКОВ (имеет отношение ко ВСЕМ АРМам!)

 

Служба ГЛОБАЛЬНЫХ СЧЕТЧИКОВ – предназначена для ведения глобальных (т.е. действующих в рамках системы в целом) данных, которые представляют собой строку, содержащую переменную числовую составляющую.

 

База данных COUNT

Для хранения глобальных счетчиков служит специальная база данных с именем COUNT (зарезервированное имя). Каждая запись базы данных служит для хранения и описания одного глобального счетчика и содержит три обязательных поля:

 

Поле 1: Индекс глобального счетчика

Индекс глобального счетчика – уникальный идентификатор счетчика (в простейшем случае – номер); метка поля – 1;

 

Поле 2: Текущее значение глобального счетчика

Текущее значение глобального счетчика; метка поля – 2;

 

Поле 3: Шаблон (маска) глобального счетчика

Шаблон глобального счетчика – определяет структуру (маску) счетчика; метка поля - 3.

Шаблон глобального счетчика в общем случае может содержать три части:

Префиксная часть – любой набор символов (кроме символа *), в частном случае может отсутствовать;

Числовая часть – обязательная, обозначается символами *;

Суффиксная часть - любой набор символов (кроме символа *), в частном случае может отсутствовать.

 

Если числовая часть счетчика не имеет фиксированной длины (т.е. не имеет лидирующих нулей), то она обозначается одним символом *.

Если числовая часть имеет фиксированную длину (с лидирующими нулями), то она обозначается соответствующим количеством символов *

 

Примеры:

Примеры шаблонов и соответствующих им значений счетчиков:

 

Шаблон

Значения счетчика

АИ-***/1

АИ-000/1, АИ-001/1, АИ-100/1 и т.п.

****

0000, 0020, 0100, 9999 и т.п.

С/*

С/10, С/965, С/10000, С/0 и т.п.

 

 

Форматный выход для глобального счетчика &uf(‘++C<index>#<value>’)

Для чтения и изменения значения глобального счетчика служит форматный выход языка форматирования ИРБИС следующего вида:

 

&uf(‘++C<index>#<value>’)

 

где:

<index> - индекс глобального счетчика

<value> - управляющая часть, которая может принимать следующие значения:

пустота (т.е отсутствовать) – в этом случае форматный выход возвращает текущее значение глобального счетчика

целое число (возможно отрицательное) – в этом случае числовая часть глобального счетчика изменяется на соответствующее значение и форматный выход возвращает новое (измененное) текущее значение глобального счетчика

конструкция вида !<value> - в этом случае глобальному счетчику (в целом, а не числововй его части) присваивается значение <value> и форматный выход ничего не возвращает; в случае если <value> не указывается (т.е. указывается только символ !) – числовая часть счетчика устанавливается в нулевое значение и форматный выход ничего не возвращает.

 

Формально данный форматный выход можно использовать в любом формате, но практически:

 

 Внимание:

имеет смысл использовать данный форматный выход ТОЛЬКО в операндах команд глобальной корректировки

 

Следует понимать, что данный форматный выход (изменяющий текущее значение глобального счетчика) будет отрабатывать при ВСЯКОМ исполнении формата, в котором он содержится (т.е. если формат, содержащий данный форматный выход, отлаживать в Редакторе форматов, то он – форматный выход – будет отрабатывать на текущем документе при ЛЮБОЙ корректировке формата)

 

Пример:

Пример (разумеется, упрощенный) использования глобальных счетчиков для автоматического формирования идентификатора читателя в зависимости от его категории.

 

Предположим, что есть две категории читателей (значение поля 50)

0 – студенты

1 – преподаватели

 

Для студентов необходимо формировать идентификаторы (поле 30) вида:

С–nnnnnn (nnnnnn – порядковые номера)

 

А для преподавателей:

П–mmmmmm (mmmmmm – порядковые номера)

 

Поступаем следующим образом:

 

В БД COUNT создаем описания двух глобальных счетчиков.

 

Для студентов:

#1: 01

#2: C-000000

#3: C-******

Для преподавателей:

#1: 02

#2: П-000000

#3: П-******

 

В autoin.gbl для БД RDR добавляем следующие строки:

 

ADD

30

XXXXXXXXXXXXXXXXXXX

if v30='' then if v50='0' then &uf('++C01#1') else if v50='1' then &uf('++C02#1') fi fi fi

XXXXXXXXXXXXXXXXXXX

 

Замечания для продвинутых пользователей:

Замечания для продвинутых пользователей:

Может возникнуть вопрос, почему конструкция

&uf(‘++C<index>#!<value>’)

устанавливает значение глобального счетчика в целом, а не значение его числовой части.

Объяснить это можно на следующем примере.

Допустим, мы в Редакторе форматов редактируем формат, который содержит форматный выход, меняющий значение глобального счетчика (с индексом 01). В этом случае возникает проблема: как в процессе отладки (редактирования формата) сохранить НЕИЗМЕННЫМ значение соответствующего глобального счетчика. Сделать это можно, если добавить (в Редакторе форматов) следующие конструкции:

 

&uf(‘+7W1#’,&uf(‘++C01#’))…<редактируемый формат>…..&uf(‘++C01#!’,g1)

 

Здесь в начальной конструкции в глобальной переменной 1 запоминается исходное значение глобального счетчика 01, а в конечной конструкции оно восстанавливается.

 

Что же касается установки конкретного значения числовой части глобального счетчика (например, 999), то это можно сделать следующим образом:

 

&uf(‘++C01#!’),&uf(‘++C01#999’)

 


См. также:

Приложение  4. ЯЗЫК ФОРМАТИРОВАНИЯ ДАННЫХ. РЕДАКТОР ФОРМАТОВ