Блокировка периода (постановка)

Материал из GedeminWiki
(Различия между версиями)
Перейти к: навигация, поиск
(Интерфейс пользователя)
(Интерфейс пользователя)
Строка 53: Строка 53:
 
Изменение параметров блокировки возможно только под учетной записью [[Administrator]]. Если зашли под другой учетной записью, то скрываем все и пишем пояснительное сообщение.  
 
Изменение параметров блокировки возможно только под учетной записью [[Administrator]]. Если зашли под другой учетной записью, то скрываем все и пишем пояснительное сообщение.  
  
Предусмотрим чек-бокс "Блокировка включена". Если он выключен, то больше в разделе ничего не показывается. Если включен, то появляется два чек-бокса и таблица с тремя колонками. Чек-боксы:
+
Предусмотрим чек-бокс "Блокировка включена". Если он выключен, то больше в разделе ничего не показывается. Если включен, то появляется два чек-бокса и таблица с тремя колонками. Высота строк таблицы не фиксирована и зависит от содержимого первой и третей колонок. Чек-боксы:
 
* '''Для всех типов документов'''. Если установлен, то в таблице отображается только одна строка, причем в первой колонке выводится надпись "Все".
 
* '''Для всех типов документов'''. Если установлен, то в таблице отображается только одна строка, причем в первой колонке выводится надпись "Все".
 
* '''Для всех групп пользователей'''. Если установлен, то в таблице третью колонку редактировать нельзя и в ней выводится надпись "Все".
 
* '''Для всех групп пользователей'''. Если установлен, то в таблице третью колонку редактировать нельзя и в ней выводится надпись "Все".
 
Таблица:
 
Таблица:
* '''Тип документа'''. Из выпадающего списка выбирается тип документа.  
+
* '''Тип документа'''. Содержит список наименований типов документов через запятую. В правой части находится кнопка "..." для выбора типов документов.  
 
* '''Дата блокировки'''. Дата, до которой будут заблокированы документы. Действует операция меньше. т.е. сам указанный день блокировки не включается в период блокировки. Кроме ввода непосредственных дат можно воспользоваться метапеременными:
 
* '''Дата блокировки'''. Дата, до которой будут заблокированы документы. Действует операция меньше. т.е. сам указанный день блокировки не включается в период блокировки. Кроме ввода непосредственных дат можно воспользоваться метапеременными:
 
** Месяц -- первое число текущего месяца;
 
** Месяц -- первое число текущего месяца;
Строка 67: Строка 67:
 
* '''Группы пользователей'''. Выводится строкой, через запятую список групп пользователей, на которых распространяется блокировка. Справа выводится кнопка "...", которая позволяет открыть окно для изменения списка.
 
* '''Группы пользователей'''. Выводится строкой, через запятую список групп пользователей, на которых распространяется блокировка. Справа выводится кнопка "...", которая позволяет открыть окно для изменения списка.
 
Возможно, для этих целей стоит использовать компонент [[TListView]].
 
Возможно, для этих целей стоит использовать компонент [[TListView]].
 +
 +
=== Метаданные ===
 +
 +
  
 
[[Category:Постановка]]
 
[[Category:Постановка]]

Версия 18:29, 22 марта 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

На сегодняшний день у некоторых из наших клиентов возникла необходимость устанавливать разные периоды блокировки для разных типов документов. Предлагается модифицировать механизм блокировки следующим образом:

Интерфейс пользователя

Изменение параметров блокировки возможно только под учетной записью Administrator. Если зашли под другой учетной записью, то скрываем все и пишем пояснительное сообщение.

Предусмотрим чек-бокс "Блокировка включена". Если он выключен, то больше в разделе ничего не показывается. Если включен, то появляется два чек-бокса и таблица с тремя колонками. Высота строк таблицы не фиксирована и зависит от содержимого первой и третей колонок. Чек-боксы:

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

Таблица:

  • Тип документа. Содержит список наименований типов документов через запятую. В правой части находится кнопка "..." для выбора типов документов.
  • Дата блокировки. Дата, до которой будут заблокированы документы. Действует операция меньше. т.е. сам указанный день блокировки не включается в период блокировки. Кроме ввода непосредственных дат можно воспользоваться метапеременными:
    • Месяц -- первое число текущего месяца;
    • ПредМесяц -- первое число предыдущего месяца;
    • Квартал -- первое число текущего квартала;
    • ПредКвартал -- первое число предыдущего квартала;
    • Год -- первое число текущего года;
    • ПредГод -- первое число предыдущего года.
  • Группы пользователей. Выводится строкой, через запятую список групп пользователей, на которых распространяется блокировка. Справа выводится кнопка "...", которая позволяет открыть окно для изменения списка.

Возможно, для этих целей стоит использовать компонент TListView.

Метаданные

Персональные инструменты
Пространства имён

Варианты
Действия
Навигация
Инструменты