Язык описания данных DL200

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

Технология DL200 применяется для следующих целей:

  • Формирования финансовых отчетов, обладающих той особенностью, что каждая строка этих отчетов должна быть определена в соответствии с некоторым собственным правилом, в отличие от большинства встроенных отчетов, все строки которых генерируются по общему правилу, определяемому системой в соответствии с фильтром, заданным пользователем. Наиболее часто потребность таких отчетах возникает при формировании бухгалтерской и финансовой отчетности (например, формы баланса предприятия).
  • Формирование финансовых отчетов с помощью COM-интерфейсов системы в электронных таблицах (Microsoft Excel).
  • Описание правил расчета бизнес-показателей (см. главу link).
  • Определение специальных правил формирования бухгалтерских проводок в документах списания по счетам.
  • Принцип использования технологии для формирования финансовых отчетов

    Этапы процесса создания отчетов показаны на рис. link

    Создание описания правил формирования отчета

    Для описания отчетов используется специализированный язык DL200. Он состоит из описания переменных и описаний наборов данных, каждый из которых может быть использован для формирования собственного отчета.Файл описания может содержать любое количество наборов данных. Подробно синтаксис языка DL200 описан ниже.

    Файлы описания имеют расширение dl2 и, как правило, хранятся в подкаталоге DD основного каталога системы.

    Компиляция файла описания отчетов

    Для того чтобы система Papyrus могла использовать описания отчетов для генерации данных, необходимых для печати отчетов, файл описания необходимо скомпилировать с использованием программы компиляции dl200c.exe.Форма вызова компилятора предельно проста:

    dl200c <имя файла отчета>В результате работы компилятора будет создан файл с тем же именем, что и файл описания и расширением .bin. Система предполагает, что этот файл хранится в подкаталоге DD основного каталога.

    Создание формы отчета в системе CrystalReport

    Для вывода данных, рассчитанных в соответствии с описанием на печать, экран или на экспорт, используется форма отчета CrystalReport. Эта форма должна быть создана на основании данных, которые генерирует система при обработке соответствующего набора данных. Созданный файл отчета должен иметь имя следующего вида: dl2_DataSetName.rpt, где DataSetName - имя набора данных. Система ищет этот файл по тем же правилам, по которым ищет все другие файлы отчетов.

    Язык DL200

    Структура файла

    Файл описания данных состоит из описания переменных и описания наборов данных. Приведем пример описания

    
    // -----------------------------------------------------------------------
    // Данные для формирования отчетной формы Ф-2 (Отчет о прибылях и убытках)
    // -----------------------------------------------------------------------
    //
    // Доходы и расходы
    PrftTaxless "Выручка (нетто)"=
    	[90.1C]-[90.3D]-[90.4D]-[90.5D];
    CostValueSold "Себестоимость проданных товаров"=
    	[90.2D:20]+[90.2D:21]+[90.2D:23]+[90.2D:40]+[90.2D:41]+
    	[90.2D:43]+[90.2D:45];
    GrossPrft "Валовая прибыль"=
    	PrftTaxless-CostValueSold;
    CommBill "Коммерческие расходы"=
    	[90.2D:44];
    ManagBill "Управленческие расходы"=
    	[90.2D:26];
    PrftOrLossSold "Прибыль (убыток) от продаж"=
    	PrftTaxless-CostvalueSold-GrossPrft-CommBill-ManagBill;
    PrcntToGet "Проценты к получению"=
    	[90.1C:62]+[90.1C:76]+[90.1C:51]+[90.1C:52];
    PrcntToPay "Проценты к уплате"=
    	[91.2D:60]+[91.2D:76]+[91.2D:66]+[91.2D:67];
    PrftOthrOrgnz "Доходы от участия в других организациях"=
    	[91.1C:76];
    OthrOpertnlPrft "Прочие операционные доходы"=
    	0;
    OthrOpertnlLoss "Прочие операционные расходы"=
    	0;
    OutMarktPrft "Внереализационные доходы"=
    	0;
    OutMarktLoss "Внереализационные расходы"=
    	0;
    PrftOrLossTaxless "Прибыль (убыток) до налогообложения"=
    	PrftOrLossSold+PrcntToGet-PrcntToPay+PrftOthrOrgnz+OthrOpertnlPrft-
    	OthrOpertnlLoss+OutMarktPrft-OutMarktLoss;
    DefrrdTaxActives "Отложенные налоговые активы"=
    	0;
    DefrrdTaxDebt "Отложенные налоговые обязательства"=
    	0;
    CurPrftTax "Текущий налог на прибыль"=
    	0;
    NetTrnvr "Чистая прибыль (убыток) отчетного периода"=
    	0;
    UsualTaxDebt "Постоянные налоговые обязательства"=
    	0;
    BasTrnvrPerShr "Базовая прибыль (убыток) на акцию"=
    	0;
    WatrdTrnvrPerShr "Разводненная прибыль (убыток) на акцию"=
    	0;
    FinePenltyEtc "Штрафы, пени и неустойки, признанные"=
    	0;
    PastPrftLoss "Прибыль (убыток) прошлых лет"=
    	0;
    PaymntOfDamags "Возмещение убытков, причиненных неисполнением обязательств"=
    	0;
    CurrencyOdds "Курсовые разницы по операциям в иностранной валюте"=
    	0;
    AssessmntFund "Отчисления в оценочные резервы"=
    	0;
    DebtLimtPeriod "Списание дебиторских и кредиторских задолженностей"=
    	0;

    DATA IncomeStat "Отчет о прибылях и убытках" < "Наименование показателя" STRING (128), "Код показателя" INT, "За отчетный период" [T], "За аналогичный период прошлого года" [T,-1Y] > { GROUP UsualTrnvr "Доходы и расходы по обычным видам деятельности" { "Выручка (нетто) от продажи товаров, продукции, работ, услуг (за минусом НДС, акцизов и иных аналогичных обязательных платежей)", 1, PrftTaxless, PrftTaxless; "Себестоимость проданных товаров, продукции, работ, услуг", 2, CostValueSold, CostValueSold; "Валовая прибыль", 3, GrossPrft, GrossPrft; "Коммерческие расходы", 4, CommBill, CommBill; "Управленческие расходы", 5, ManagBill, ManagBill; "Прибыль (убыток) от продаж", 6, PrftOrLossSold, PrftOrLossSold; } GROUP OthrPrftAndLoss "Прочие доходы и расходы" { "Проценты к получению", 7, PrcntToGet, PrcntToGet; "Проценты к уплате", 8, PrcntToPay, PrcntToPay; "Доходы от участия в других организациях", 9, PrftOthrOrgnz, PrftOthrOrgnz; "Прочие операционные доходы", 10, OthrOpertnlPrft, OthrOpertnlPrft; "Прочие операционные расходы", 11, OthrOpertnlLoss, OthrOpertnlLoss; "Внереализационные доходы", 12, OutMarktPrft, OutmarktPrft; "Внереализационные расходы", 13, OutMarktLoss, OutMarktLoss; "Прибыль (убыток) до налогообложения", 14, PrftOrLossTaxless, PrftOrLossTaxless; "Отложенные налоговые активы", 15, DefrrdTaxActives, DefrrdTaxActives; "Отложенные налоговые обязательства", 16, DefrrdTaxDebt, DefrrdTaxDebt; "Текущий налог на прибыль", 17, CurPrftTax, CurPrftTax; "Чистая прибыль (убыток) отчетного периода", 18, NetTrnvr, NetTrnvr; "СПРАВОЧНО Постоянные налоговые обязательства (активы)", 19, UsualTaxDebt, UsualTaxDebt; "Базовая прибыль (убыток) на акцию", 20, BasTrnvrPerShr, BasTrnvrPerShr; "Разводненная прибыль (убыток) на акцию", 21, WatrdTrnvrPerShr, WatrdTrnvrPerShr; } }

    Переменные

    Переменные используются для описания расчета какого-либо значения, либо для мнемонической подстановки некоторой константы.Формат оператора, определяющего переменную следующий:

    ИмяПеременной, Описание = Значение;Здесь: ИмяПеременной - мнемоническое имя переменной.

    Например: GrossPrft.Имя переменной не должно содержать пробелов. Допускается использование русских букв. Описание - необязательный элемент определения переменной. Может содержать любой текст. Значение - константа или формула, определяющая значение переменной.

    Например: 5, “Просто текст”, [60].Для подстановки данных из базы данных по счетам (как в последнем приведенном примере) используются специальные конструкции, называемые определителями счетов, описанные в следующем пункте.

    Правила описания определителей счетов

    Определения переменных, заполняемых из данных бухгалтерского учета базы данных системы Papyrus , используют следующие правила: Формальный синтаксис представления данных по счету:
    ACCVAL := [(ACCDEF)?(([DC])?([IRTS])?)?(:ACCDEF)?(,PERIODOFFS)?]
    ACCDEF := ACCNUMBER | ACC_CODE([O][123])?
    ACCNUMBER := ([0-9]+(.[0-9]+){0,2})
    ACC_CODE :=   IDENT
    PERIODOFFS := ((-)?[0-9]+)[DMQY]
    Для того чтобы все это стало более понятным, приведем несколько примеров:

    [60]
    Получить информацию по счету 60. Если из контекста не следует, какие значения по этому счету необходимо получить, то указанное выражение по умолчанию подразумевает: чистый остаток по счету 60 (дебет - кредит).
    [60T]
    Чистые обороты (T) по счету 60 (обороты по дебету - обороты по кредиту).

    [60DS]
    Развернутое (S) дебетовое (D) сальдо по счету 60.
    [60DT]
    Дебетовый (D) оборот (T) по счету 60.

    [10C]
    Кредитовое (C) сальдо по счету 10.
    [10CR]
    Тоже, но более формально (R - сальдо. Если не указано ни R, ни T, то по умолчанию предполагается, что необходимо получить сальдо по счету).

    [60DS,-Y]
    Дебетовое (D) развернутое (S) сальдо по счету 60 на дату, отстоящую от заданной на один год назад (,-Y).
    [90.2DT:44]
    Обороты (T) по дебету (D) счета 90.2 в корреспонденции со счетом 44.

    Теперь рассмотрим синтаксис подробнее и с примерами:

    Номер счета
    Числовой номер счета, возможно с субсчетом и аналитической статьей через точку. Если числовое представление счета не определяет однозначно его порядок, то следует использовать латинский символ O с непосредственно следующей за ней цифрой 1, 2 или 3. 1 означает счет первого порядка, 2 - счет второго порядка, 3 - терминальный счет.

    Например, если вы хотите получить сальдо по счету 60 в случае если по нему самому (как терминальному счету) шли проводки, то следует написать [60O3DR].

    Код счета
    Представление бухгалтерского счета в виде символьного кода. Используется в формате  строка. Представление счета в виде кода может понадобиться для извлечения из базы данных информации оборотов или остатков по забалансовым счетам, бухгалтерским регистрам или обобщенным счетам.

    Пример: [ cash] - сальдо по счету, имеющему символ cash.

    Символы результата по счету
    Символы, указывающие системе, какая информация по счету нам нужна: R - исходящее сальдо по счету, I - входящее сальдо по счету, T - обороты по счету. Любой из этих вариантов накладывается на период расчета, заданный пользователем. Если ни один из этих символов не указан, то система по умолчанию полагает, что необходимо рассчитать исходящее сальдо по счету.

    Символы стороны счета
    Это символы, показывающие интересует нас дебетовая или кредитовая часть счета. В этом случае D - дебетовая сторона счета, C - кредитовая сторона счета. Если ни один из этих символов не указан, то сальдо система рассчитывает как разницу между дебетом и кредитом счета, а оборот как разницу между дебетовыми и кредитовыми оборотами за период. Дополнительно символ S предписывает системе рассчитывать развернутое сальдо по счету. И брать дебет либо кредит развернутый. Эта опция действует только для активно-пассивных счетов. Для чисто активных или чисто пассивных счетов сальдо не разворачивается.
    Корреспонденция в расчете оборотов
    Если необходимо рассчитать обороты по счету в корреспонденции с конкретным счетом, то используется грамматическая конструкция :счет. Здесь счет, следующий за символом двоеточия, представлен либо номером счета, либо кодом счета.

    Смещение периода
    Если необходимо получить расчет по счету, смещенный относительно периода заданного пользователем, то используется грамматическая конструкция, смещение (запятая период смещения). Период смещения задается в формате: ((-)?[0-9]+)[DMQY]. Здесь: - опциональный символ, означающий смещение назад по времени (например, год назад). Если минус не указан, то период смещается вперед; число - указывает количество периодов, на которое следует сместить заданный период. Если число не указано, то предполагается, что это значение равно единице; буква, характеризующая кратность периода смещения: D - дни, M - месяцы, Q - кварталы, Y - годы.

    Например: -2Q - период, смещенный относительно заданного на два квартала назад.

    Наборы данных

    Набор данных определяет правила формирования данных для одного отчета. Синтаксис набора данных следующий:
    DATA ИмяНабора ОписаниеНабора
    <ОписаниеКолонок>
    {
    ОписаниеСтрок
    } Опишем каждый из элементов синтаксиса набора данных. DATA & Ключевое слово, с которого начинается описание набора данных

    ИмяНабора & Символьное имя набора данных, не содержащее пробелов. Мы рекомендуем использовать латиницу для имен наборов, однако подойдут и русские наименования. Длина наименования не должна превышать 32 символов. Пример: balance ОписаниеНабора & Строка в кавычках, служащая для более четкого описания набора данных, чем ИмяНабора. Это строка может быть сколь угодно длинной.

    Пример: "Баланс предприятия" ОписаниеКолонок & Конструкция, окаймленная угловыми скобками и перечисляющая наименования и типы колонок отчета. Более подробно синтаксис описания колонок объясняется в следующем пункте.

    ОписаниеСтрок & Перечисление строк отчета и способов вычисления из параметров. Синтаксис описания строк объясняется ниже. Фигурные скобки {} & Обязательный элемент, обрамляющий зону описания строк отчета.

    Колонки

    Синтаксис описания колонок

    Для того чтобы система могла разделить определяемый вами отчет на колонки, необходимо описать каждую из колонок в соответствующей зоне. Формальный синтаксис зоны описания колонок следующий:
    columns_def := | < column_def_list >
    column_def_list := column_def | column_def_list , column_def
    column_def := STRING column_type columnmaxsize | column_type columnmaxsize | STRING ACCVAL | ACCVAL
    columnmaxsize := | ( INTVAL )
    column_type := INT | REAL | STRING | DATE | TIME | PERIOD

    Внесем пояснения.Зона описания колонок может содержать любое количество так называемых дескрипторов колонок, разделенных запятыми. Вся зона описания колонок обрамляется угловыми скобками. Дескриптор колонки может быть представлен в одном из следующих вариантов:

  • СтрокаЗаголовка ТипКолонки
  • ТипКолонки
  • СтрокаЗаголовка ПараметрыСчета
  • ПараметрыСчета
  • Здесь:

    СтрокаЗаголовка
    строка в двойных кавычках, используемая в качестве заголовка колонки отчета. Например: “Наименование”
    ТипКолонки
    тип данных, ассоциированный с колонкой. Это может быть одно из ключевых слов:
    INT
    целочисленное значение
    REAL
    значение с плавающей точкой
    DATE
    дата
    TIME
    время
    PERIOD
    период дат (дата начала периода и дата конца периода)
    STRING
    текстовая строка. В случае использования этого варианта необходимо указать максимальную длину строки в скобках. Например: “Наименование” STRING(128)
    Параметры счета
    специальная опция, позволяющая перенастраивать определители счетов, заданных в выражениях, используемых для описания строк отчета.

    Перенастройка определителей счетов

    Для того чтобы стал понятен смысл перенастройки определителей счетов, приведем два примера.

    Необходимо получить отчет, состоящий из колонок: наименование счета, входящее сальдо, дебетовые обороты, кредитовые обороты, исходящее сальдо. Этот отчет должен содержать строки, соответствующие, скажем, трем счетам: 50, 51, 52. Определим переменные:
    Acc50 = [50];
    Acc51 = [51];
    Acc52 = [52];
    Теперь определим набор данных для формирования отчета
    DATA Example1 “Пример 1”
    <
    “Наименование счета” STRING(64),
    “Входящее сальдо”,
    “Обороты дебет”,
    “Обороты кредит”,
    “Исходящее сальдо”
    >
    Далее следует описание строк отчета
    {
    “Касса”, Acc50, Acc50, Acc50, Acc50;
    “Расчетный счет”, Acc51, Acc51, Acc51, Acc51;
    “Валютный счет”, Acc52, Acc52, Acc52, Acc52;
    } В этом примере мы по одному разу задаем переменные, соответствующие некоторым счетам, а функция перенастройки определителей счетов автоматически подставляет параметры определителей в соответствующие колонки.

    Необходимо получить отчет, состоящий из колонок: наименование счета, сальдо на конец периода, сальдо на конец соответствующего периода предыдущего года. Этот отчет должен содержать строку, соответствующую сумме счетов 50, 51 и 52. Определим переменную:
    Cash = [50]+[51]+[52];
    Теперь определим набор данных
    DATA Example2 “Пример 2”
    <
    “Наименование” STRING(64),
    “Сальдо на конец периода”,
    “Сальдо на конец соответствующего периода прошлого года”
    >
    {
    “Денежные средства и расчетные счета”, Cash, Cash;
    }

    Таким образом, перенастройка определителей счетов позволяет многократно использовать переменную, определенную один раз. Более формально: каждый раз, перед вычислением определителя счета, система уточняет этот определитель из описания перенастройки, содержащегося в дескрипторе колонки при условии, что перенастроенный таким образом определитель счета не будет содержать противоречий. Так, если определитель счета задает расчет оборотов, а перенастройка предполагает расчет сальдо, то эта перенастройка не включится и определитель будет вычислен в том виде, в котором задан изначально.

    Дескриптор колонки по умолчанию

    Если зона описания колонок в описании набора данных отсутствует, то система полагает по умолчанию, что отчет состоит из одной колонки с наименованием “Default” и типом REAL (значение с плавающей точкой).

    Строки

    Зона описания строк отчета состоит из дескрипторов групп и дескрипторов строк. Каждый дескриптор строки описывает одну строку отчета. Дескрипторы групп используются для логического объединения нескольких строк. Система допускает неограниченную вложенность группировки отчета, то есть, группа может включать в себя одну или несколько подгрупп, как вложенных одна-в-другую, так и следующих одна-за-другой. Формальный синтаксис описания строк отчета следующий:
    data_def_body : { group_items_list }
    group_items_list : | group_items_list expression_list ; | group_items_list group_def | group_items_list GROUP IDENT ;
    row_def : IDENT description = expression ;
    group_def : group_def_header data_def_body
    group_def_header : GROUP IDENT description
    description : | STRING
    expression_list : expression | expression_list , expression
    expression : IDENT | REALVAL | INTVAL | STRING | ACCVAL | ( expression) | - expression %prec - | + expression %prec + |
    expression * expression | expression / expression | expression + expression | expression - expression

    Использование отчетов DL200

    Параметры расчета отчета DL200Для использования отчетов DL200 из системы Papyrus следует выбрать пункт меню Отчетность→ Внешние отчеты DL200. На экране появится диалог, показанный на рисунке. В поле “Файл описания данных” выберите файл, содержащий интересующие вас наборы данных. В поле “Имя структуры данных” выберите одну из структур, содержащихся в выбранном файле. В поле “Период” следует указать период, которому должен соответствовать отчет. После того, как вы нажмете кнопку [ОК], система рассчитает данные, на основе описания и предложит распечатать или экспортировать полученный отчет.