Apico Soft / АПИКО Софт



Спонсором блога ScalaHelp.RU является компания АПИКО Софт.

Мы предоставляем:
- Качественный ERP консалтинг.
- Внедрение и сопровождение системы.
- Российские формы первичных документов, бухгалтерская и налоговая отчетность.

- Разработка корпоративной отчетности.

Наш телефон 8 (495) 961 98 48
Сайт http://www.apicosoft.ru/

Позвоните нам, мы сделаем все, чтобы помочь Вам.

вторник, августа 21, 2007

Структура БД: Главная Книга

GL/General Ledger/ГК/Главная книга. Основной модуль, практически любая операция в конечном итоге находит свое отражение в проводках этого модуля. Вот и начнем плясать от печки. Сразу оговорюсь, что не ставлю своей целью досконально описать структуру БД, скорее это описание основных сущностей, необходимых для построения отчетов.

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

Сначала стоит определиться с учетной строкой - это строка из 50 символов, включает в себя счет и учетные измерения. Разбивка внутри этой строки делается на этапе внедрения и потом редко меняется. Максимальное число составных частей учетной строки 9 . Подсмотреть текущую разбивку можно здесь: Системные Утилиты - Управление Деловой Информацией - Настройка Компании (System Utilities - Business Data Management - Company Setup) закладка 5.

GL53 - Справочник счетов

Годо-Зависимость - ДА
Компание-Зависимость - ДА

Поле Описание
GL53001 Счет
GL53002 Наименование счета
GL53003 Тип счета.
0 - прибылей и убытков
1 - балансовый
2 - статистический
GL53005 Определяет привязку учетных измерений. Состоит из девяти символов. Каждый символ отвечает за свое УИ.
0 - УИ не привязано
1 - УИ должно использоваться обязательно
2 - УИ может использоваться
GL53006 Блокировка счета
0 - счет можно использовать
1 - счет заблокирован
2 - прямой ввод для счета запрещен
GL53009 Код книги или спецфункции. Возможные значения можно посмотреть в форме редактирования счета

Остальные поля  редко используются при построении отчетов.

GL03 - Справочник учетных измерений

Годо-Зависимость - ДА
Компание-Зависимость - ДА

Поле Описание
GL03001 Код учетного измерения. B - 1, C - 2, D - 3, E - 4, F - 5, G - 6, H - 7, I - 8, J - 9
GL03002 Код учетного измерения
GL03003 Наименование учетного измерения
GL03004, GL03005 Описание учетного измерения

GL06 - Проводки

Годо-Зависимость - ДА
Компание-Зависимость - ДА

Можно сказать - основная таблица модуля. Именно здесь хранятся все проводки. Каждая проводка состоит из двух и более линий. Знак суммы определяет дебет это или кредит. Кроме случая красного строно - тогда минус это дебет, а плюс кредит. Строки красного сторно помечаются в поле GL06017.

Поле Описание
GL06001 Учетная строка
GL06002 Номер проводки
GL06003 Дата проводки
GL06004 Сумма в локальной валюте
GL06005 Текст проводки
GL06006 Код контрагента
GL06007 Содержимое зависит от модуля. Для КЗ и КП - это номер СЧФ
GL06009

Флаг периодического автораспределения (когда нужно запустить его повторно)

GL06012 Тип проводки. По этому полю можно узнать из какого модуля создана проводка. Более подробно смотри в отдельной статье "Типы проводок".
GL06013 Код пользователя
GL06014 Дата ввода
GL06016 В этом поле хранится уникальный ключ линии. Не советую пользоваться им в качестве ключа связи с другими таблицами, т.к. при некоторых операциях Скала перенумеровывает это поле.
GL06017 Красное сторно
0 - обычная линия
1 - красное сторно
GL06018 Сумма в оригинальной валюте
GL06019 Код валюты
GL06030

Флаг сложного автораспределения (когда нужно запустить его повторно)

GL06032 счет компании источника (для консолидированных компаний)
GL06033 сумма компании источника(для консолидированных компаний)
GL06034

код компании источника (для консолидированных компаний)

 

GL07 - Дневной журнал

Годо-Зависимость - ДА
Компание-Зависимость - ДА

Все проводки сначала попадают в дневной журнал. При проведении операции обновления дневного журнала проводки проверяются, если данных не хватает, то выводится запрос на коррекцию проводки. Только после этого проводка попадает в таблицу GL06. Структура GL07 существенно отличается от GL06, но разобраться там нетрудно. Непосредственно в отчетах таблица дневного журнала используется нечасто.

Другие таблицы

Здесь приведу краткое описание некоторых таблиц:

  1. GL52 - таблица служит для хранения сальдо в разрезе счетов, периодов и учетных измерений (только до четвертого включительно). Таблица нужна для ускоренного извлечения сальдо. Для перерасчета содержимого можно запустить процедуру реконструкции сальдо. Я предпочитаю не пользоваться этой таблицей, а при необходимости считать сальдо по таблице GL06
  2. GLCB, GLCD, GLCX, GLCY - таблицы модуля Касса
  3. GL10, GL1A - параметры модуля Главная Книга
  4. GL41 - Связка консолидированных компаний по счетам

Примеры запросов

В запросах макросы CC и YY нужно заменить на код компании и финансовый год соответственно. Если есть

Вывод проводки по номеру:

select * from GL06CCYY where GL06002 = '123456'


Расчет сальдо(кредитовое, дебетовое, свернутое) по всем счетам, начинающимся на 60 (при условии, что длинна счета 12 символов):

select left(GL06001, 12) Account,
sum(case when (GL06004 > 0 and GL06017 = '0')or(GL06004 < 0 and GL06017 = '1') then GL06004 else 0 end) DSaldo,
-sum(case when (GL06004 < 0 and GL06017 = '0')or(GL06004 > 0 and GL06017 = '1') then GL06004 else 0 end) CSaldo,
sum(GL06004) Saldo
from GL06V106
where GL06001 like '60%'
group by left(GL06001, 12)


 


Если нужно, то приведу другие примеры - спрашивайте в комментариях.

13 комментариев:

  1. также по GL06 иногда интерес представляют:
    GL06013-Код пользователя
    GL06014-Дата ввода
    GL06009-Флаг периодического автораспределения (когда нужно запустить его повторно)
    GL06030-Флаг сложного автораспределения (когда нужно запустить его повторно)
    GL06032-счет компании источника (для консолидированных компаний)
    GL06033-сумма компании источника(для консолидированных компаний)
    GL06034-код компании источника (для консолидированных компаний)

    Еще есть интересная табличка GL41
    Связка консолидированных компаний по счетам

    ОтветитьУдалить
  2. Запрос не соответствует условию (01 и like '60%') :)
    Кроме того т.к. и 01.. и 60.. - счета балансовые по ним переносится входящее сальдо года, его желательно не включать в данный запрос, откидывая или по номеру проводки '000000' либо по типу проводки GL06012 если память не изменяет то при переводе типа из binary в nchar "/".
    Вообще вопрос с типами проводок, тоже достаточно интересен. Чего стоит только что бюджетные проводки Скала тоже хранит в GL06. ИМХО маразм.

    ОтветитьУдалить
  3. Списибо за комментарий. Внес изменения. Со счетами 01/60 там была опечатка. По поводу исключения переноса сальдо, то не совсем согласен. Хотя это может быть по-разному в зависимости от того, что хочет получить пользователь.

    ОтветитьУдалить
  4. А не могли бы вы привести пример расчета дебиторской задолженности на дату?

    ОтветитьУдалить
  5. Дебиторскую/Кредиторскую задолженности нужно собирать по Книге Продаж/Книге Закупок.
    По текущему состоянию по таблицам инвойсов SL03/PL03, если же нужно сделать это на дату, то сначала составляется список по предыдущим таблицам, а потом раскручивается текущая ситуация по таблицам платежей SL21/PL21.
    Если навскидку, то вот запрос выводящий список всех инвойсов по Книге Продаж с состоянием оплаты на заданную дату:

    declare @OnDate datetime
    set @OnDate = '20090301' -- дата, на которую считаем
    select SL03001 Cust, -- покупатель
    SL03002 InvNo, -- номер инвойса
    SL03013 InvAmountLoc, -- сумма инвойса в локальной валюте
    SL03014 InvAmountOrig, -- сумма инвойса в оригинальной валюте
    isnull((
    select SUM(SL21007)
    from SL210100
    where SL21006 < @OnDate
    and SL21001 = SL03001
    and SL21002 = SL03002
    ), 0) PaidAmountLoc, -- оплата на дату в локальной валюте
    isnull((
    select SUM(SL21008)
    from SL210100
    where SL21006 < @OnDate
    and SL21001 = SL03001
    and SL21002 = SL03002
    ), 0) PaidAmountOrig -- оплата на дату в оригинальной валюте
    from SL030100

    Уже на основе этого запроса можно считать задолженность, выкидывая оплаченные полностью и группируя по контрагенту. Выборка, правда, может получится слишком большой, но ее можно ограничить, например, по полю даты последнего платежа в таблице инвойсов (если эта дата меньше нашей даты, а инвойс уже полностью оплачет, то нам не нужно раскручивать историю платежей по нему).

    ОтветитьУдалить
  6. Спасибо большое за ответ.
    Очевидно, что в конце нужно добавить строку
    where SL03004 < @OnDate

    И еще вопросик: как правильно выкинуть из этого запроса счета фактуры на аванс (ведь они, очевидно, не должны фигурировать в задолженности)
    Можно ли считать счетами фактурами на аванс нулевые счета фактуры, по которым есть оплаты? Или у счетов фактур есть признак, что они "Аванс"?

    ОтветитьУдалить
  7. > where SL03004 < @OnDate

    Не факт, что нужно, никто не мешает делать платежи датами раньше даты инвойса. В общем тут на усмотрение.

    > Можно ли считать счетами фактурами на аванс нулевые счета фактуры, по которым есть оплаты?

    Да, обычно так и делается.

    ОтветитьУдалить
  8. Спасибо огромное. Бился над дебиторкой 3 недели. Наконец все сошлось.

    ОтветитьУдалить
  9. Снова здравствуйте.
    Теперь у меня задача реализовать акт сверки.
    Ситуация следующая: компания выставляет счета в евро, отгрузки по ERP проходят в рублях, клиенты платят тоже в рублях и конечно курс ERP и курс клиента различается.
    Сам отчет с отгрузками и оплатами я получаю, но
    при связывании оплат с отгрузками происходит формирование некой операции, которая отражает курсовую разницу, и вот ее-то я и не понимаю откуда брать. Очевно, нужно копать проводки... и действительно, курсовые разницы там есть, но я не могу привязать их к клиенту, т. к. поля Номер клиента и номер СФ (GL06006 и GL06007) не заполнены. Подскажите п-та куда копать. Заранее благодарю за ответ.

    ОтветитьУдалить
  10. Акт сверки лучше собирать по книге продаж(покупок). Там есть и сумма в локальной и в оригинальной валюте. Но тут есть проблемы, т.к. обычно хотят сделать сверку на определенные даты и приходится собирать по таблице платежей. В этом случае очень сложно разделить исключить схлопывания (что обычно хотят).
    В общем готового рецепта я тут не подскажу, нужно выяснять, что реально хотят видеть.

    ОтветитьУдалить
  11. как быть если GARLIC = 0 и gl60120 = x31 или
    GL06017 = 1 и gl60120 = x30

    ОтветитьУдалить
  12. как быть если GL06017 = 0 и gl06012 = x31 или
    GL06017 = 1 и gl06012 = x30
    то есть

    ОтветитьУдалить
  13. Если честно, то я не понял в чем вопрос. В том, как правильно определить красное ли это сторно? Тогда проверять нужно поле GL06017, это главный признак.

    ОтветитьУдалить