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

Материал из GedeminWiki
(Различия между версиями)
Перейти к: навигация, поиск
(Интерфейс пользователя)
Строка 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.

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

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