AC ACCOUNT

Материал из GedeminWiki
Перейти к: навигация, поиск
/*
 *
 *  Активность счета
 *  A - (active) активный
 *  P - (passive) пассивный
 *  B - (both) активно-пассивный
 *
 *  Пустое значение - для групп счетов, планов счетов
 *
 */
 
CREATE DOMAIN daccountactivity
  AS VARCHAR(1)
  CHECK ((VALUE IS NULL) OR (VALUE = 'A') OR (VALUE = 'P') OR (VALUE = 'B'));
 
 
/*
 *
 *  Часть плана счетов
 *  C - (chart of account) план счетов
 *  F - (folder) папка (группа) счетов
 *  A - (account) счет
 *  S - (subaccount) субсчет
 *
 */
 
 
CREATE DOMAIN dchartofaccountpart
  AS VARCHAR(1)
  CHECK ((VALUE = 'C') OR (VALUE = 'F') OR (VALUE = 'A') OR (VALUE = 'S'));
 
 
/*
 *
 *  Список планов бухгалтерских счетов, состоящих
 *  из групп счетов, счетов и субсчетов
 *
 */
 
 
CREATE TABLE ac_account
(
  id               dintkey,             /* Идентификатор */
  parent           dparent,             /* Родительская ветка */
 
  lb               dlb,                 /* Левая граница */
  rb               drb,                 /* Правая граница */
 
  name             dtext180,            /* Наименование счета */
  alias            daccountalias,       /* Код счета */
 
  analyticalfield  dforeignkey,         /* аналитическое поле для активно-пассивных счетов */  
 
  activity         daccountactivity,    /* Активность счета */
 
  accounttype      dchartofaccountpart, /* Часть плана счетов */
 
  multycurr        dboolean DEFAULT 0,  /* Является ли счет валютным */
  offbalance       dboolean DEFAULT 0,  /* Забалансовый счет */
 
  afull            dsecurity,           /* Дескрипторы безопасности */
  achag            dsecurity,
  aview            dsecurity,
 
  fullname         COMPUTED BY (CASE WHEN ALIAS IS NULL THEN '' ELSE ALIAS || ' ' END || CASE WHEN NAME IS NULL THEN '' ELSE NAME END),
 
  description      dblobtext80_1251,
 
  disabled         dboolean DEFAULT 0,
  reserved         dinteger
);

Поиск субсчетов, для которых неверно указан родитель

SELECT
  p.id, p.alias, a.parent, a.alias, a.accounttype
FROM
  ac_account p JOIN ac_account a
    ON a.alias LIKE p.alias || '._%'
      AND NOT a.alias LIKE p.alias || '.%._%'
  JOIN ac_account a_root
    ON a_root.lb < a.lb AND a_root.rb >= a.rb
      AND a_root.parent IS NULL
  JOIN ac_account p_root
    ON p_root.lb < p.lb AND p_root.rb >= p.rb
      AND p_root.parent IS NULL
WHERE
  (a.ID <> p.id)
  AND
  (a_root.id = p_root.id)
  AND
  (
    a.parent <> p.id
    OR
    a.accounttype <> 'S'
   )
Персональные инструменты
Пространства имён

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