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, но разобраться там нетрудно. Непосредственно в отчетах таблица дневного журнала используется нечасто.
Другие таблицы
Здесь приведу краткое описание некоторых таблиц:
- GL52 - таблица служит для хранения сальдо в разрезе счетов, периодов и учетных измерений (только до четвертого включительно). Таблица нужна для ускоренного извлечения сальдо. Для перерасчета содержимого можно запустить процедуру реконструкции сальдо. Я предпочитаю не пользоваться этой таблицей, а при необходимости считать сальдо по таблице GL06
- GLCB, GLCD, GLCX, GLCY - таблицы модуля Касса
- GL10, GL1A - параметры модуля Главная Книга
- 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)
Если нужно, то приведу другие примеры - спрашивайте в комментариях.
также по GL06 иногда интерес представляют:
ОтветитьУдалитьGL06013-Код пользователя
GL06014-Дата ввода
GL06009-Флаг периодического автораспределения (когда нужно запустить его повторно)
GL06030-Флаг сложного автораспределения (когда нужно запустить его повторно)
GL06032-счет компании источника (для консолидированных компаний)
GL06033-сумма компании источника(для консолидированных компаний)
GL06034-код компании источника (для консолидированных компаний)
Еще есть интересная табличка GL41
Связка консолидированных компаний по счетам
Запрос не соответствует условию (01 и like '60%') :)
ОтветитьУдалитьКроме того т.к. и 01.. и 60.. - счета балансовые по ним переносится входящее сальдо года, его желательно не включать в данный запрос, откидывая или по номеру проводки '000000' либо по типу проводки GL06012 если память не изменяет то при переводе типа из binary в nchar "/".
Вообще вопрос с типами проводок, тоже достаточно интересен. Чего стоит только что бюджетные проводки Скала тоже хранит в GL06. ИМХО маразм.
Списибо за комментарий. Внес изменения. Со счетами 01/60 там была опечатка. По поводу исключения переноса сальдо, то не совсем согласен. Хотя это может быть по-разному в зависимости от того, что хочет получить пользователь.
ОтветитьУдалитьА не могли бы вы привести пример расчета дебиторской задолженности на дату?
ОтветитьУдалитьДебиторскую/Кредиторскую задолженности нужно собирать по Книге Продаж/Книге Закупок.
ОтветитьУдалитьПо текущему состоянию по таблицам инвойсов 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
Уже на основе этого запроса можно считать задолженность, выкидывая оплаченные полностью и группируя по контрагенту. Выборка, правда, может получится слишком большой, но ее можно ограничить, например, по полю даты последнего платежа в таблице инвойсов (если эта дата меньше нашей даты, а инвойс уже полностью оплачет, то нам не нужно раскручивать историю платежей по нему).
Спасибо большое за ответ.
ОтветитьУдалитьОчевидно, что в конце нужно добавить строку
where SL03004 < @OnDate
И еще вопросик: как правильно выкинуть из этого запроса счета фактуры на аванс (ведь они, очевидно, не должны фигурировать в задолженности)
Можно ли считать счетами фактурами на аванс нулевые счета фактуры, по которым есть оплаты? Или у счетов фактур есть признак, что они "Аванс"?
> where SL03004 < @OnDate
ОтветитьУдалитьНе факт, что нужно, никто не мешает делать платежи датами раньше даты инвойса. В общем тут на усмотрение.
> Можно ли считать счетами фактурами на аванс нулевые счета фактуры, по которым есть оплаты?
Да, обычно так и делается.
Спасибо огромное. Бился над дебиторкой 3 недели. Наконец все сошлось.
ОтветитьУдалитьСнова здравствуйте.
ОтветитьУдалитьТеперь у меня задача реализовать акт сверки.
Ситуация следующая: компания выставляет счета в евро, отгрузки по ERP проходят в рублях, клиенты платят тоже в рублях и конечно курс ERP и курс клиента различается.
Сам отчет с отгрузками и оплатами я получаю, но
при связывании оплат с отгрузками происходит формирование некой операции, которая отражает курсовую разницу, и вот ее-то я и не понимаю откуда брать. Очевно, нужно копать проводки... и действительно, курсовые разницы там есть, но я не могу привязать их к клиенту, т. к. поля Номер клиента и номер СФ (GL06006 и GL06007) не заполнены. Подскажите п-та куда копать. Заранее благодарю за ответ.
Акт сверки лучше собирать по книге продаж(покупок). Там есть и сумма в локальной и в оригинальной валюте. Но тут есть проблемы, т.к. обычно хотят сделать сверку на определенные даты и приходится собирать по таблице платежей. В этом случае очень сложно разделить исключить схлопывания (что обычно хотят).
ОтветитьУдалитьВ общем готового рецепта я тут не подскажу, нужно выяснять, что реально хотят видеть.
как быть если GARLIC = 0 и gl60120 = x31 или
ОтветитьУдалитьGL06017 = 1 и gl60120 = x30
как быть если GL06017 = 0 и gl06012 = x31 или
ОтветитьУдалитьGL06017 = 1 и gl06012 = x30
то есть
Если честно, то я не понял в чем вопрос. В том, как правильно определить красное ли это сторно? Тогда проверять нужно поле GL06017, это главный признак.
ОтветитьУдалить