ПодзвонитиДемо

Свої скрипти, без свого сервера

UGLAScript — мова зі статичною типізацією й середовище для неї всередині UGLA. Звіти, розрахунки, сповіщення й файли пишуть в IDE в самій системі, а запускаються вони за розкладом, на подію чи як власний метод API, поруч із вашими даними й без власного сервера.

UGLAScript

Для всіх галузей

← Усі модулі
Редактор UGLAScript: бібліотека sales-digest і її запуск у консолі
Редактор UGLAScript: бібліотека sales-digest і її запуск у консолі
/// A VAT summary for 30 days, as a PDF, sent by email.
import { byEntity } from "ugla/reports/vat/main";

const string RECIPIENT = "finance@example.test";
const int ARCHIVE = 169;
const string ZONE = "Europe/Kyiv";

export bool main(date asOf) {
    date to = today(zoneOf(ZONE)) ?? asOf;
    date from = plusDays(to, -30) ?? to;
    string period = text(from) + " to " + text(to);

    // Each legal entity pays VAT on its own:
    // the report clamps every one before the total.
    var rows = byEntity(from, to, null, null, null);

    string pdf = renderPDF(
        "<h1>VAT summary</h1><p>" + period + "</p>" + table(rows),
        "VAT summary"
    );
    string file = "vat-summary-" + text(to) + ".pdf";

    // Filed first, sent second: if the mail fails, the file exists.
    diskWriteBytes(ARCHIVE, file, pdf);

    return sendEmailWithFile(
        RECIPIENT,
        "VAT summary " + period,
        "<p>The VAT summary is attached.</p>",
        file,
        pdf
    );
}

string table(List<{
    entity: string, entityID: int?, entityHref: string,
    currency: string, obligations: decimal, credit: decimal,
    toPay: decimal, creditReserve: decimal
}> rows) {
    string body = "";

    for (r in rows) {
        body = body + "<tr><td>" + r.entity + "</td><td>"
            + text(round(r.toPay, 2)) + "</td><td>" + r.currency
            + "</td></tr>";
    }

    return "<table><tr><th>Entity</th><th>To pay</th><th></th></tr>"
        + body + "</table>";
}
Звіт у PDF, в архів і поштою: підсумок ПДВ за 30 днів
  • Імпортує готовий звіт ПДВ, тож цифри ті самі, що на екрані, і кожна юрособа рахується окремо.
  • Формує PDF, кладе його в архів на Диску й надсилає поштою.
  • Запускається за розкладом, а кінець періоду можна передати параметром.
  • Бачить і робить лише те, що дозволено IAM ролі, від імені якої працює.
/// A Disk folder for every legal entity, then a notification.
import { Entity } from "ugla/models/restaurants";
import { DiskDirectory } from "ugla/models/general";

[Notifies("entity-folders", "Entity folders", "")]
export int main(date asOf) {
    string day = text(today(zoneOf("Europe/Kyiv")) ?? asOf);
    int made = 0;

    // Reading: rows arrive as records, every column checked
    // against the live schema when the script compiles.
    var entities = from x in Entity
        where x.exist == true
        select { name: x.name };

    for (e in entities) {
        // Writing: a new row is a handle until save() stores it.
        var folder = DiskDirectory.create();

        folder.name = e.name + " " + day;
        folder.save();
        made++;
    }

    sendNotification(
        [1],
        "Entity folders",
        text(made) + " folders made for " + day + ".",
        "entity-folders"
    );

    return made;
}
Читання й запис даних: папка на Диску для кожної юрособи
  • Читає юрособи запитом, і кожне поле звіряється зі структурою даних ще під час компіляції.
  • Створює й зберігає нові записи через ту саму модель даних, що й інтерфейс.
  • Надсилає бухгалтеру сповіщення з підсумком.
  • Запис даних потребує окремого дозволу, який надають свідомо.

Що вміє модуль

Куди йдуть дані далі

Модуль не живе окремо: те, що в ньому сталося, одразу бачать інші.

Часті питання

Чим скрипт відрізняється від зовнішньої інтеграції?

Зовнішня програма працює поза UGLA й бачить дані лише через API. Скрипт працює всередині: поруч із даними, з перевіркою на їхній структурі, за розкладом, на подію чи на запит, без сервера, який треба тримати. А коли дані потрібні іншій системі, скрипт можна опублікувати як власний метод API, доступний через UGLAQL за API-ключем.

Де пишуть скрипти?

У вбудованій IDE, в самій UGLA: там скрипт пишуть, перевіряють на структурі ваших даних і тестують.

Покажемо на ваших даних

Оберіть зручний час: 45 хвилин з менеджером онлайн, демо під вашу галузь і ціна під вашу команду.

Як вам зручніше

Демо на 45 хвилин

Скільки точок

Ми використаємо ці дані лише для зв'язку щодо демо, як описано в політиці конфіденційності. Або напишіть: sales@ugla.ua

Запис на демо