Блокировка периода (постановка)
SYSDBA (обсуждение | вклад) |
SYSDBA (обсуждение | вклад) (→Интерфейс пользователя) |
||
| Строка 47: | Строка 47: | ||
=== Интерфейс пользователя === | === Интерфейс пользователя === | ||
| − | Предусмотрим чек-бокс "Блокировка включена". Если он выключен, то больше ничего не показывается | + | Изменение параметров блокировки возможно только под учетной записью Администратор. Если зашли под другой учетной записью, то скрываем все и пишем пояснительное сообщение. |
| − | * Тип документа | + | |
| − | * Дата блокировки | + | Предусмотрим чек-бокс "Блокировка включена". Если он выключен, то больше в разделе ничего не показывается. Если включен, то появляется два чек бокса и таблица с тремя колонками. Чекбоксы: |
| + | * Для всех типов документов. Если установлен, то в таблице отображается только одна строка, причем в первой колонке выводится надпись "Все". | ||
| + | * Для всех групп пользователей. Если установлен, то в таблице третью колонку редактировать нельзя и в ней выводится надпись "Все". | ||
| + | Таблица: | ||
| + | * Тип документа. Из выпадающего списка выбирается тип документа. | ||
| + | * Дата блокировки. Дата, до которой будут заблокированы документы. Действует операция меньше. т.е. сам указанный день блокировки не включается в период блокировки. Кроме ввода непосредственных дат можно воспользоваться метапеременными: | ||
| + | ** Месяц -- первое число текущего месяца; | ||
| + | ** ПредМесяц -- первое число предыдущего месяца; | ||
| + | ** Квартал -- первое число текущего квартала; | ||
| + | ** ПредКвартал -- первое число предыдущего квартала; | ||
| + | ** Год -- первое число текущего года; | ||
| + | ** ПредГод -- первое число предыдущего года. | ||
* Группы пользователей | * Группы пользователей | ||
Возможно, для этих целей стоит использовать компонент [[TListView]]. | Возможно, для этих целей стоит использовать компонент [[TListView]]. | ||
[[Category:Постановка]] | [[Category:Постановка]] | ||
Версия 19:19, 21 марта 2007
Мы добавили в блокировку периода возможность исключать некоторые типы документов. За определение: подпадает конкретный тип под блокировку или нет, отвечает процедура gd_p_exclude_block_dt, которая возвращает 1, если переданный идентификатор типа документа не блокируется и 0 в противном случае. Процедура формируется в окне Tgd_dlgOptions при выборе типов документов исключаемых из блокировки. Системными составляющими механизма блокировки периода являются генераторы gd_g_block и gd_g_block_group. Первый хранит дату, до которой документы считаются заблокированными, а второй -- битовую маску групп пользователей, на которых распространяется блокировка. Механизм реализуется с помощью 12 триггеров, по три на каждую из четырех таблиц: gd_document, ac_entry, ac_record и inv_movement. Существующий триггер блокировки периода выглядит следующим образом:
CREATE TRIGGER ac_bi_entry_block FOR ac_entry
INACTIVE
BEFORE INSERT
POSITION 28017
AS
DECLARE VARIABLE IG INTEGER;
DECLARE VARIABLE BG INTEGER;
DECLARE VARIABLE DT INTEGER;
DECLARE VARIABLE F INTEGER;
BEGIN
IF ((NEW.entrydate - CAST('17.11.1858' AS DATE)) < GEN_ID(gd_g_block, 0)) THEN
BEGIN
SELECT d.documenttypekey
FROM gd_document d
JOIN ac_record r ON r.documentkey = d.id
WHERE
r.id = NEW.recordkey
INTO
:DT;
EXECUTE PROCEDURE gd_p_exclude_block_dt (:DT)
RETURNING_VALUES :F;
IF(:F = 0) THEN
BEGIN
BG = GEN_ID(gd_g_block_group, 0);
IF (:BG = 0) THEN
BEGIN
EXCEPTION gd_e_block;
END ELSE
BEGIN
SELECT ingroup FROM gd_user WHERE ibname = CURRENT_USER
INTO :IG;
IF (BIN_AND(:BG, :IG) = 0) THEN
BEGIN
EXCEPTION gd_e_block;
END
END
END
END
END
На сегодняшний день у некоторых из наших клиентов возникла необходимость устанавливать разные периоды блокировки для разных типов документов. Предлагается модифицировать механизм блокировки следующим образом:
Интерфейс пользователя
Изменение параметров блокировки возможно только под учетной записью Администратор. Если зашли под другой учетной записью, то скрываем все и пишем пояснительное сообщение.
Предусмотрим чек-бокс "Блокировка включена". Если он выключен, то больше в разделе ничего не показывается. Если включен, то появляется два чек бокса и таблица с тремя колонками. Чекбоксы:
- Для всех типов документов. Если установлен, то в таблице отображается только одна строка, причем в первой колонке выводится надпись "Все".
- Для всех групп пользователей. Если установлен, то в таблице третью колонку редактировать нельзя и в ней выводится надпись "Все".
Таблица:
- Тип документа. Из выпадающего списка выбирается тип документа.
- Дата блокировки. Дата, до которой будут заблокированы документы. Действует операция меньше. т.е. сам указанный день блокировки не включается в период блокировки. Кроме ввода непосредственных дат можно воспользоваться метапеременными:
- Месяц -- первое число текущего месяца;
- ПредМесяц -- первое число предыдущего месяца;
- Квартал -- первое число текущего квартала;
- ПредКвартал -- первое число предыдущего квартала;
- Год -- первое число текущего года;
- ПредГод -- первое число предыдущего года.
- Группы пользователей
Возможно, для этих целей стоит использовать компонент TListView.