Примеры программирования на ORL
Версия 1.0 alpha
В настоящем документе даются примеры изпользования языка ORL для программирования структур данных и бизнес-логик
различных прикладных учетных и финансовых приложений.
Исчисление предикатов (PROLOG)
CLASS REMOTE_ADDRESS; TEXT Адреса; OWNER (NAME DATA); TYPE STRUCTURE; ATTRIBUTES NAME CITY; TEXT "Город"; KEY DUP;; ; CLASS REMOTE_PHONE; TEXT Телефоны; OWNER (NAME DATA); TYPE STRUCTURE; ATTRIBUTES NAME PHONE_NUMBER; TEXT "Номер телефона";KEY UNIQUE;; ; CLASS REMOTE_BANK; TEXT Банки; OWNER (NAME DATA); TYPE STRUCTURE; ATTRIBUTES NAME BANK_NAME; TEXT "Название банка";KEY UNIQUE; TYPE EMB|DEFAULT;; ; CLASS REMOTE_GROUP; TEXT Группа; OWNER (NAME DATA); TYPE STRUCTURE; ATTRIBUTES NAME NAME; TEXT "Название группы";KEY UNIQUE; TYPE EMB|DEFAULT;; ; CLASS REMOTE_CLIENT; TEXT Клиенты; OWNER (NAME DATA); TYPE STRUCTURE; USAGE ALONE; ; CLASS (REMOTE_CLIENT) ATTRIBUTES NAME MIDDLENAME; TEXT; KEY DUP;, NAME LASTNAME; TEXT "Фамилия"; KEY UNIQUE;, NAME ADDRESS; TEXT "Адрес"; TYPE REF; DOMAIN (REMOTE_ADDRESS);, NAME PHONES; TEXT "Телефоны"; TYPE COLL; DOMAIN (REMOTE_PHONE);, NAME GROUP; TEXT "Группа"; TYPE REF|SHARED; DOMAIN (REMOTE_GROUP);, NAME BANK; TEXT "Банки"; TYPE COLL|SHARED; DOMAIN (REMOTE_BANK); ; ; CLASS REMOTE_SECURITY; TEXT ЦБ; OWNER (NAME DATA); TYPE STRUCTURE; USAGE ALONE; ATTRIBUTES NAME EMITENT; TEXT "Название ЦБ"; TYPE EMBEDDED; NULLS yes; DOMAIN (NAME STRING); key dup;, NAME PRICE; TEXT "Цена ЦБ"; TYPE EMBEDDED; NULLS yes; DOMAIN (NAME NUMBER);; ; CLASS REMOTE_DEAL; TEXT Сделка; OWNER (NAME DATA); TYPE STRUCTURE; USAGE ALONE; ATTRIBUTES NAME NUMBER; TEXT "Номер"; TYPE EMBEDDED; NULLS yes; DOMAIN (NAME STRING);, NAME QUANTITY; TEXT "Количество"; TYPE EMBEDDED; NULLS yes; DOMAIN (NAME NUMBER);, NAME CLI; TEXT "Клиент"; TYPE REF; NULLS NO; DOMAIN (NAME REMOTE_CLIENT); SHARED YES;, NAME SEC; TEXT "ЦБ"; TYPE REF; NULLS NO; DOMAIN (NAME REMOTE_SECURITY);SHARED YES;; ; REMOTE_BANK BANK_NAME "Онэксим";, BANK_NAME "Мост";, BANK_NAME "Токо";; REMOTE_GROUP NAME "Партнеры";, NAME "Оффшоры";, NAME "Клиенты";; REMOTE_CLIENT LASTNAME "Первачев"; ADDRESS CITY Москва;; GROUP (NAME "Партнеры"); BANK (BANK_NAME "Мост"),(BANK_NAME "Токо"); PHONES REMOTE_PHONE PHONE_NUMBER "11-11-11";; , LASTNAME "Вторухин"; ADDRESS CITY Питер;; GROUP (NAME "Партнеры"); BANK (BANK_NAME "Онэксим"),(BANK_NAME "Токо"); PHONES PHONE_NUMBER "22-11-11";,PHONE_NUMBER "22-22-22";; , LASTNAME "Третьяков"; ADDRESS CITY Новосибирск;; GROUP (NAME "Оффшоры"); BANK (BANK_NAME "Мост"),(BANK_NAME "Онэксим"); PHONES PHONE_NUMBER "33-11-11";,PHONE_NUMBER "33-22-22";,PHONE_NUMBER "33-33-33";; , LASTNAME "Четвертушкин"; ADDRESS CITY Мелитополь;; GROUP (NAME "Клиенты"); BANK (BANK_NAME "Мост"),(BANK_NAME "Онэксим"),(NAME "Токо"); PHONES PHONE_NUMBER "44-11-11";,PHONE_NUMBER "44-22-22";,PHONE_NUMBER "44-33-33";,PHONE_NUMBER "44-44-44";; , LASTNAME "a"; , LASTNAME "b"; ; REMOTE_SECURITY EMITENT "Газпром"; PRICE 123000;, EMITENT "ГКО";PRICE 456000;, EMITENT "Онэксим";PRICE 789000;; REMOTE_DEAL NUMBER "XX12345"; QUANTITY 67; CLI (FIRSTNAME Первачев); SEC (EMITENT Онэксим);, NUMBER "XX67890"; QUANTITY 33; CLI (FIRSTNAME Вторухин); SEC (EMITENT Газпром);; METHOD OWNER (REMOTE_CLIENT); NAME INCREMENT; TEXT "Изменить имя"; CODE LASTNAME += 1 ;//CODE ; METHOD OWNER (REMOTE_CLIENT); NAME NEW_PHONE; TEXT "Завести новый телефон"; ATTRIBUTES NAME _NO; TEXT Нум; TYPE EMB|IN; DOMAIN (STRING); ; CODE // RUN MESSAGE TEXT XXX;;, PHONES += NEW REMOTE_PHONE OWNER THIS; PHONE_NUMBER = _NO;; ;//CODE ; METHOD OWNER (REMOTE_CLIENT); NAME CONSTRUCT; TEXT "Завести новый телефон и счет в банке"; ATTRIBUTES NAME _BN; TEXT Бнк; TYPE EMB|IN; DOMAIN (STRING); , NAME _NO; TEXT Нум; TYPE EMB|IN|OUT; DOMAIN (STRING); , NAME _BNO; TEXT Банк; TYPE EMB|OUT; DOMAIN (STRING);, NAME _NO_; TYPE EMB; DOMAIN (STRING); ; CODE // RUN MESSAGE TEXT XXX;;, LASTNAME += 1, BANK += NEW REMOTE_BANK BANK_NAME = _BN;;, PHONES += NEW REMOTE_PHONE OWNER THIS; PHONE_NUMBER = _NO;;, _BNO = "Банк: ", _BNO += _BN , _NO_ = "Пхон: ", _NO_ += _NO, _NO = _NO_ ;//CODE ; REMOTE_CLIENT(LASTNAME "Первачев") CONSTRUCT _BN "Банк 1"; _NO "Пхон 1";; INCREMENT; ; ACCESSGRANT NAME "a"; TEXT "Хороший Юзер"; PASSWORD "a"; RIGHTS ACCESSCLASS (OBJECT); LEVEL (FULL);, ACCESSCLASS (CLASS); LEVEL (FULL);, ACCESSCLASS (ATTRIBUTE); LEVEL (VIEW);, ACCESSCLASS (REMOTE_BANK); LEVEL (FULL);, ACCESSCLASS (REMOTE_CLIENT); LEVEL (FULL); ; , NAME "b"; TEXT "Плохой Юзер"; PASSWORD "b"; RIGHTS ACCESSCLASS (OBJECT); LEVEL (NO);, ACCESSCLASS (CLASS); LEVEL (NO);, ACCESSCLASS (ACCESSLOGIN); LEVEL (FULL);, ACCESSCLASS (ATTRIBUTE); LEVEL (VIEW);, ACCESSCLASS (REMOTE_BANK); LEVEL (FULL);, ACCESSCLASS (REMOTE_ADDRESS); LEVEL (VIEW); ; ;
CLASS ELEMENT_CLASS; OWNER (NAME "DATA"); TEXT "Класс элементов M:1"; ; CLASS DOMAIN_CLASS; OWNER (NAME "DATA"); TEXT "Класс значений 1:M"; TABLE "Чегой-то"; ; CLASS CLASS_FOR_TEST; OWNER (NAME "DATA"); TEXT "Класс, выбирающий значения"; ; METHOD //QUERY NAME BUILD_FULL_NAME; OWNER (NAME DOMAIN_CLASS); TYPE GET; ATTRIBUTES NAME _FULLNAME;PARAMETER OUT;; RETURN _FULLNAME; CODE//INLINE _FULLNAME=FIRSTNAME, _FULLNAME+=" ", _FULLNAME+=LASTNAME ;//INLINE ; //QUERY DOMAIN_CLASS (PK_NAME=FK_NAME) FULLNAME; METHOD //QUERY NAME SELECT_DOMAIN_CLASS; //TEXT "Ку"; OWNER (NAME DOMAIN_CLASS); RETURN FULLNAME; TYPE GET; CODE PK_NAME=FK_NAME ; ; METHOD //QUERY NAME SELECT_ELEMENT; OWNER (ELEMENT_CLASS); RETURN THIS; TYPE GET; CODE PK_NAME=FK_NAME ; ; CLASS(ELEMENT_CLASS) ATTRIBUTES NAME FK_NAME; KEY DUP;, NAME VALUE; KEY UNIQUE; ; ; CLASS(NAME DOMAIN_CLASS) ATTRIBUTES NAME PK_NAME; KEY UNIQUE;, NAME FIRSTNAME;, NAME LASTNAME;, NAME FULLNAME; TYPE EMB|CALC; QUERY (BUILD_FULL_NAME);, NAME ELEMENTS; TEXT "Элементики"; TYPE COLL|CALC; DOMAIN (ELEMENT_CLASS); QUERY (SELECT_ELEMENT); CONDITION "FK_NAME=PK_NAME"; ; ; CLASS(NAME CLASS_FOR_TEST) ATTRIBUTES NAME NUMBER; DOMAIN (NUMBER);, NAME FK_NAME;, NAME FK_DATA; TYPE EMB|CALC; QUERY (NAME SELECT_DOMAIN_CLASS); ; ; ELEMENT_CLASS FK_NAME XXX; VALUE XXX1;, FK_NAME XXX; VALUE XXX2;, FK_NAME XXX; VALUE XXX3;, FK_NAME YYY; VALUE YYY1;, FK_NAME YYY; VALUE YYY2;, FK_NAME ZZZ; VALUE ZZZ1; ; DOMAIN_CLASS PK_NAME XXX; FIRSTNAME Икс; LASTNAME Иксов;, PK_NAME YYY; FIRSTNAME Игрек; LASTNAME Игреков;, PK_NAME ZZZ; FIRSTNAME Зет; LASTNAME Зетов; ; CLASS_FOR_TEST NUMBER 33; FK_NAME "XXX";, NUMBER 44; FK_NAME "ZZZ"; ; CLASS SYSTEM_COUNTER; TEXT "Счетчик идентификаторов"; OWNER (NAME OBJECT); ATTRIBUTES NAME NAME;DOMAIN (NAME STRING);, NAME COUNTER;DOMAIN (NAME NUMBER); ; ; SYSTEM_COUNTER COUNTER 100;; METHOD //QUERY NAME INCREMENT_ID; OWNER (NAME DOMAIN_CLASS); TYPE SET; CODE IF (CLASS.TABLE != "") LET SYSTEM_COUNTER() COUNTER += 1;;, ID=SYSTEM_COUNTER().COUNTER ; ; ; ATTRIBUTE(NAME ID) QUERY(NAME INCREMENT_ID);; /////////////////////////////////////////////////////////////////////////// // Описание того, как могут реализовываться учетные регистры /////////////////////////////////////////////////////////////////////////// CLASS SOURCE_CLASS; OWNER (NAME "DATA"); TEXT "Класс представления"; ATTRIBUTES NAME NAME;KEY UNIQUE;, NAME SOURCE; TYPE REF|SHARED; DOMAIN (NAME CLASS); ; ; CLASS SOURCE_ATTRIBUTE; OWNER (NAME "DATA"); TEXT "Атрибут представления"; ; METHOD NAME SOURCE_ATTRIBUTE_CLASS; OWNER (NAME ATTRIBUTE); RETURN THIS; TYPE GET; CODE OWNER=SOURCE.OWNER ; ; CLASS (SOURCE_ATTRIBUTE) ATTRIBUTES NAME NAME;KEY UNIQUE;, NAME SOURCE; TYPE REF|SHARED; DOMAIN (SOURCE_CLASS);, NAME ATTRIBUTE; TYPE REF|SHARED; DOMAIN (ATTRIBUTE); QUERY(SOURCE_ATTRIBUTE_CLASS); ; ; CLASS SUMMARY; OWNER (NAME "DATA"); TEXT "Сводное представление"; ATTRIBUTES NAME TYPE; TEXT "Режим обновления";, // PERMANENT|SNAPSHOT NAME SOURCES; TEXT "Откуда выбирать"; TYPE COLL|OWNED; DOMAIN (SOURCE_CLASS);, NAME FIELDS; TEXT "Что выбирать"; TYPE COLL|OWNED; DOMAIN (SOURCE_ATTRIBUTE);, NAME DISPLAY; TEXT "Что показывать"; TYPE COLL|SHARED; DOMAIN (SOURCE_ATTRIBUTE);, NAME ORDERS; TEXT "Как упорядочивать"; TYPE COLL|SHARED; DOMAIN (SOURCE_ATTRIBUTE);, NAME GROUPS; TEXT "Как группировать"; TYPE COLL|SHARED; DOMAIN (SOURCE_ATTRIBUTE);, NAME FILTER; TEXT "Метод фильтрации"; TYPE REF|SHARED; DOMAIN (METHOD);, NAME CONDITION; TEXT "Условие отбора"; ; ; // SELECT FROM DOMAIN_CLASS X, CLASS_FOR_TEST Y // Y.NUMBER, X.FULLNAME // WHERE X.PK_NAME=Y.FK_NAME // ORDER BY Y.NUMBER // GROUP BY X.FULLNAME SUMMARY TYPE SNAPSHOT; SOURCES NAME X; SOURCE (DOMAIN_CLASS);, NAME Y; SOURCE (CLASS_FOR_TEST); ; FIELDS NAME X_PK; SOURCE(X); ATTRIBUTE (PK_NAME);, NAME X_FULLNAME; SOURCE(X); ATTRIBUTE (FULLNAME);, NAME Y_FK; SOURCE(Y); ATTRIBUTE (FK_NAME);, NAME Y_NUMBER; SOURCE(Y); ATTRIBUTE (NUMBER); ; DISPLAY (Y_NUMBER), (X_FULLNAME) ; ORDERS (Y_NUMBER) ; GROUPS (X_FULLNAME) ; CONDITION "X_PK=Y_FK"; ;
////////////////////////////////////// Классы CLASS ACCOUNT; TEXT "Счет"; OWNER (NAME DATA); ATTRIBUTES NAME NUMBER; TEXT "Код счета"; TYPE Embedded; KEY unique; NULLS no; DOMAIN (NAME STRING); , NAME ACC_TYPE; TEXT "Тип счета"; TYPE Embedded; KEY no; NULLS no; DOMAIN (NAME STRING); , NAME DEBET; TEXT "Дебет"; TYPE Embedded; KEY no; NULLS yes; DOMAIN (NAME NUMBER); , NAME CREDIT; TEXT "Кредит"; TYPE Embedded; KEY no; NULLS yes; DOMAIN (NAME NUMBER); , NAME SALDO; TEXT "Сальдо"; TYPE Embedded; KEY no; NULLS yes; DOMAIN (NAME NUMBER); ; ; CLASS RECORD; TEXT "Проводка двойного учета"; OWNER (NAME DATA); ATTRIBUTES NAME DATE; TEXT "Дата проводки"; TYPE EMB; KEY duplicate; NULLS yes; DOMAIN (NAME DATE); , NAME DEBET; TEXT "Счет дебета"; TYPE REF; SHARED YES; KEY no; NULLS yes; DOMAIN (NAME ACCOUNT); , NAME CREDIT; TEXT "Счет кредита"; TYPE REF; SHARED YES; KEY no; NULLS yes; DOMAIN (NAME ACCOUNT); , NAME AMOUNT; TEXT "Сумма проводки"; TYPE EMB; KEY no; NULLS yes; DOMAIN (NAME NUMBER); ; ; ////////////////////////////////////// Данные ACCOUNT NUMBER "01"; ACC_TYPE А; DEBET 1000; ; ACCOUNT NUMBER "02"; ACC_TYPE П; CREDIT 100; ; ACCOUNT NUMBER "03"; ACC_TYPE П; CREDIT 100; ; ACCOUNT NUMBER "04"; ACC_TYPE П; DEBET 100; ; ACCOUNT NUMBER "05"; ACC_TYPE П; CREDIT 10; ; ACCOUNT NUMBER "10"; ACC_TYPE А; DEBET 40; ; ACCOUNT NUMBER "12"; ACC_TYPE А; DEBET 20; ; ACCOUNT NUMBER "41"; ACC_TYPE А; DEBET 60; ; ACCOUNT NUMBER "50"; ACC_TYPE А; DEBET 100; ; ACCOUNT NUMBER "51"; ACC_TYPE А; DEBET 1000; ; ACCOUNT NUMBER "98"; ACC_TYPE ; DEBET 100; CREDIT 1100; ; ACCOUNT NUMBER "99"; ACC_TYPE П; CREDIT 100; ; ACCOUNT NUMBER "a"; DEBET 1; ; ACCOUNT NUMBER "b"; DEBET 1; ; ACCOUNT NUMBER "c"; DEBET 1; ; ACCOUNT NUMBER "d"; DEBET 1; ; ACCOUNT NUMBER "e"; DEBET 2; ; ACCOUNT NUMBER "f"; DEBET 2; ; ACCOUNT NUMBER "g"; DEBET 2; ; ACCOUNT NUMBER "h"; DEBET 2; ; RECORD ID 12345; DEBET (NUMBER "51"); CREDIT (NUMBER "50"); AMOUNT 12345; ; RECORD ID 54321; DEBET (NUMBER "51"); CREDIT (NUMBER "99"); AMOUNT 54321; ; ////////////////////////////////////// Методы CLASS ACCOUNT_UPDATE_TYPE; OWNER (NAME DATA); TEXT "Тип проводки"; ATTRIBUTES NAME VALUE; TYPE EMB|DEF; ; ; ACCOUNT_UPDATE_TYPE VALUE Д; , VALUE К; ; METHOD NAME CONVERT_SALDO; OWNER (NAME ACCOUNT); TEXT "Свернуть сальдо"; CODE SALDO := DEBET, SALDO -= CREDIT ; ; METHOD NAME UPDATE_DEBET; OWNER (NAME ACCOUNT); TEXT "Изменить"; // LOGIC NONE; LOGIC ANY; RETURN NOTHING; ATTRIBUTES NAME _UTYPE; TEXT Тип; NULLS no; TYPE REF|IN|SHAR; DOMAIN (ACCOUNT_UPDATE_TYPE); , NAME _ACCOUNT; TEXT Счет; NULLS no; TYPE REF|IN; SHARED YES; DOMAIN (NAME ACCOUNT); , NAME _AMOUNT; TEXT Сумма; NULLS no; TYPE EMB|IN; DOMAIN (NAME NUMBER); , NAME _DATE; TEXT Дата; NULLS no; TYPE EMB|IN; DOMAIN (NAME DATE); ; CODE IF (_UTYPE.VALUE Д) DEBET += _AMOUNT, _ACCOUNT.CREDIT += _AMOUNT , NEW RECORD DEBET THIS; CREDIT _ACCOUNT; AMOUNT _AMOUNT; DATE _DATE; ; ;, IF (_UTYPE.VALUE К) CREDIT += _AMOUNT, _ACCOUNT.DEBET += _AMOUNT , NEW RECORD CREDIT THIS; DEBET _ACCOUNT; AMOUNT _AMOUNT; DATE _DATE; ; ;, run MESSAGE TEXT "Проводка проведена";, // выплюнуть сообщение //? CONVERT_SALDO, _ACCOUNT.CONVERT_SALDO ;//CODE ; METHOD OWNER (NAME RECORD); NAME ENTER_RECORD; TEXT "Провести проводку"; CODE /* DEBET.UPDATE_DEBET _AMOUNT 50; _DATE "12/12/97"; // конец запроса , // конец оператора CREDIT.UPDATE_DEBET _AMOUNT 50; _DATE "12/12/97"; // конец запроса ; // конец кода */ // DEBET.UPDATE_DEBET AMOUNT AMOUNT, DATE "12/12/97"; //? DEBET .DEBET += AMOUNT, // увеличить обороты по дебету DEBET .CONVERT_SALDO, CREDIT.CREDIT += AMOUNT, // увеличить обороты по кредиту CREDIT.CONVERT_SALDO, run MESSAGE TEXT "Проводка проведена";; // выплюнуть сообщение //? ; ; ////////////////////////////////////// Запросы ACCOUNT( {DEBET 1, DEBET 2}, {NUMBER a, NUMBER c, NUMBER e, NUMBER g} ) CREDIT 77;; ACCOUNT{ (CREDIT 0,DEBET 1), (CREDIT 0,DEBET 2) } CREDIT 88;; ACCOUNT( {(NUMBER=a, {CREDIT=77,CREDIT=88}), (NUMBER b, {CREDIT=77,CREDIT=88}), (NUMBER=e, {CREDIT=77,CREDIT=88}), (NUMBER=f,{CREDIT=77,CREDIT=88})}, {DEBET=1, DEBET=2} ).CONVERT_SALDO; ACCOUNT(NUMBER0,{NUMBER1,NUMBER5}).CONVERT_SALDO; ////////////////////////////////// Формы FONT "MS Sans Serif"; FORM NAME MAIN_MENU; TEXT "Главное меню"; PRINTER_NAME "Епсон"; FONT_NAME "Arial Cyr"; BACK "200,220,250"; PAGE_WIDTH 200; PAGE_HEIGHT 140; CONTROLS TYPE STATIC; X 50; Y 10; WIDTH 100; HEIGHT 20; FONT_SIZE 32; COLOR "50,150,230"; TEXT "Счета и проводки"; , TYPE BUTTON; X 50; Y 40; WIDTH 100; HEIGHT 20; TEXT "Счета"; EVENTS NAME LCLICK; CODE RUN FORM(NAME EDIT_ACCOUNT);; ; , TYPE BUTTON; X 50; Y 70; WIDTH 100; HEIGHT 20; TEXT "Проводки"; EVENTS NAME LCLICK; CODE RUN FORM(NAME EDIT_RECORD);; ; , TYPE BUTTON; X 50; Y 100; WIDTH 100; HEIGHT 20; TEXT "Выход"; NAME QUIT; ; ; FORM NAME EDIT_ACCOUNT; TEXT "Просмотр и редактирование счетов"; OWNER (NAME ACCOUNT); PRINTER_NAME "Стилус"; FONT_NAME "Arial Cyr"; BACK "200,220,200"; PAGE_WIDTH 200; PAGE_HEIGHT 140; COLOR "255,255,255"; CONTROLS TYPE STATIC; X 50; Y 5; WIDTH 100; HEIGHT 10; FONT_SIZE 32; COLOR "10,100,10"; TEXT "Счета";, TYPE GRID; X 10; Y 20; WIDTH 180; HEIGHT 100; NAME THIS;, /* TYPE BUTTON; X 10; Y 125; WIDTH 40; HEIGHT 10; TEXT "Изменить счет"; EVENTS NAME LCLICK; ATTRIBUTES NAME _ACCOUNT; TYPE REF|SHARED|IN; DOMAIN(ACCOUNT); ; CODE // RUN MESSAGE TEXT TARGET.NUMBER;; _ACCOUNT=TARGET, _ACCOUNT.CONVERT_SALDO ; ; , */ TYPE BUTTON; X 10; Y 125; WIDTH 38; HEIGHT 10; TEXT "Исправить"; NAME "TARGET.EDIT";, TYPE BUTTON; X 50; Y 125; WIDTH 38; HEIGHT 10; TEXT "Свернуть"; EVENTS NAME LCLICK; CODE TARGET.CONVERT_SALDO, RUN MESSAGE TEXT "Обновите таблицу, чтобы увидеть результят";; ; ; , TYPE BUTTON; X 90; Y 125; WIDTH 38; HEIGHT 10; TEXT "Проводка"; EVENTS NAME LCLICK; CODE TARGET.UPDATE_DEBET, RUN MESSAGE TEXT "Обновите таблицу, чтобы увидеть результят";; ; ; , TYPE BUTTON; X 160; Y 125; WIDTH 38; HEIGHT 10; TEXT "Закрыть"; NAME BACK; ; ;//FORM FORM NAME EDIT_RECORD; TEXT "Просмотр и редактирование проводок"; OWNER (NAME RECORD); PRINTER_NAME "Стилус"; FONT_NAME "Times New Roman Cyr"; BACK "250,250,200"; PAGE_WIDTH 210; PAGE_HEIGHT 140; COLOR "255,255,255"; CONTROLS TYPE STATIC; X 50; Y 5; WIDTH 100; HEIGHT 10; FONT_SIZE 32; COLOR "120,80,15"; TEXT "Проводки";, TYPE GRID; X 10; Y 20; WIDTH 180; HEIGHT 100; NAME THIS;, TYPE BUTTON; X 10; Y 125; WIDTH 40; HEIGHT 10; TEXT "Провести проводку"; EVENTS NAME LCLICK; CODE TARGET.ENTER_RECORD, ; ; , TYPE BUTTON; X 60; Y 125; WIDTH 40; HEIGHT 10; TEXT "Исправить"; NAME "TARGET.EDIT";, TYPE BUTTON; X 110; Y 125; WIDTH 40; HEIGHT 10; TEXT "Закрыть"; NAME BACK; ; ;//FORM FORM(MAIN_MENU).RUN; RUN MESSAGE TEXT 'Загружено "Ведение счетов"';;
Учет клиентуры
////////////////////////////////// Классы CLASS DICTIONARY; OWNER (NAME DATA); TEXT "Справочная информация"; ; CLASS PHONE; TEXT "Контактный телефон"; OWNER (NAME DICTIONARY); ATTRIBUTES NAME NUMBER; TEXT "Номер телефона"; ACCESS public; TYPE Embedded; KEY unique; NULLS no; DOMAIN (NAME STRING); , NAME FROM_TIME; TEXT "С какого времени"; ACCESS public; TYPE Embedded; KEY unique; NULLS no; DOMAIN (NAME STRING); , NAME TO_TIME; TEXT "По какое время"; ACCESS public; TYPE Embedded; KEY unique; NULLS no; DOMAIN (NAME STRING); ; ; CLASS ADDRESS; TEXT "Адрес"; OWNER (NAME DICTIONARY); ATTRIBUTES NAME STREET; TEXT "Улица"; ACCESS public; TYPE Embedded; KEY unique; NULLS no; DOMAIN (NAME STRING); , NAME CITY; TEXT "Город"; ACCESS public; TYPE Embedded; KEY unique; NULLS no; DOMAIN (NAME STRING); ; ; CLASS SUBJECT; TEXT Субъекты; OWNER (NAME DICTIONARY); TYPE STRUCTURE; USAGE ALONE; ATTRIBUTES NAME CODE; TEXT Код; ACCESS public; TYPE Embedded; KEY unique; NULLS no; OWNER (NAME SUBJECT); DOMAIN (NAME NUMBER); , NAME ADDRESS; TEXT "Фактический адрес"; TYPE REF; SHARED NO; NULLS yes; DOMAIN (NAME ADDRESS); , NAME PHONES; TEXT "Контактные телефоны"; TYPE COLLECTION; SHARED NO; DOMAIN (NAME PHONE);; ; CLASS PERSON; OWNER (NAME DICTIONARY); TEXT "Физические лица"; TYPE STRUCTURE; USAGE ALONE; ATTRIBUTES NAME FIRSTNAME; TEXT Имя; ACCESS public; TYPE Embedded; KEY duplicate; NULLS yes; OWNER (NAME PERSON); DOMAIN (NAME STRING); , NAME LASTNAME; TEXT Фамилия;ACCESS public; TYPE Embedded; KEY no; NULLS no; OWNER (NAME PERSON); DOMAIN (NAME STRING); ; ; CLASS ENTERP; TEXT Предприятия; OWNER (NAME DICTIONARY); TYPE STRUCTURE; USAGE ALONE; ATTRIBUTES NAME ORGNAME; TEXT Название; ACCESS public; TYPE Embedded; KEY duplicate; NULLS no; OWNER (NAME ENTERP); DOMAIN (NAME STRING); , NAME INN; TEXT ИНН; ACCESS public; TYPE Embedded; KEY unique; NULLS no; OWNER (NAME ENTERP); DOMAIN (NAME STRING); ; ; /////////////////////////////////////// Данные SUBJECT CODE 111;; SUBJECT CODE 222; ADDRESS CITY Новосибирск; STREET "Морской 1-2"; ; PHONES NUMBER 35-35-35; FROM_TIME "01:01";, NUMBER 12-34-56; FROM_TIME "02:02";, NUMBER 00-00-01;, NUMBER 77-77-77; ; ; SUBJECT CLASS (name PERSON); CODE 333; FIRSTNAME Ильич;; SUBJECT CLASS (name ENTERP); CODE 444; ORGNAME "ТОО ЗАО"; ; //Multiple inheritance danger!!! PERSON CLASS (name SUBJECT); FIRSTNAME Кот; LASTNAME "Матроскин"; CODE 555;; ENTERP CLASS (name SUBJECT); INN 0010020071; CODE 666;; //Multiple inheritance danger!!! PERSON LASTNAME Чубайс;; SUBJECT CODE 12345;; PERSON(LASTNAME Чубайс) CLASS (NAME SUBJECT); CODE 67890;; SUBJECT(CODE 12345) CLASS (NAME PERSON); LASTNAME Ельцин;; OBJECT(CLASS SUBJECT, code 111) CLASS (name ENTERP); ORGNAME "ABC"; INN "987654321";; SUBJECT(CODE 222) CLASS (name PERSON); FIRSTNAME "Сидор"; LASTNAME "Петров"; ; PERSON LASTNAME Лоханкин; FIRSTNAME "Васисуалий";; SUBJECT CODE 777; joins PERSON(FIRSTNAME "Васисуалий", LASTNAME Лоханкин) ;; SUBJECT CODE 888; JOINS PERSON FIRSTNAME "Варвара";;; SUBJECT(CODE 888) CLASS (PERSON); LASTNAME Лоханкина;; OBJECT(CLASS SUBJECT,CODE 222) LASTNAME "Петров-Водкин";; SUBJECT(CODE 222) FIRSTNAME "Иван";; PERSON(FIRSTNAME Ильич) LASTNAME Ленин;; //? SUBJECT CODE 999;; // OBJECT CLASS (NAME SUBJECT); CODE 999;; // Pure Abstract !!! OBJECT(CLASS SUBJECT, CODE 999) CLASS (NAME PERSON); FIRSTNAME Инженер; LASTNAME Птибурдуков;; //? ////////////////////////////////// Формы FONT "MS Sans Serif"; FORM NAME MAIN_MENU; TEXT "Главное меню"; PRINTER_NAME "Епсон"; FONT_NAME "Arial Cyr"; BACK "230,230,230"; PAGE_WIDTH 200; PAGE_HEIGHT 140; CONTROLS TYPE STATIC; X 50; Y 10; WIDTH 100; HEIGHT 20; FONT_SIZE 32; COLOR "100,100,100"; TEXT "Справочник субъектов"; , TYPE BUTTON; X 50; Y 40; WIDTH 100; HEIGHT 20; TEXT "Субъекты"; EVENTS NAME LCLICK; CODE RUN FORM(NAME VIEW_SUBJECTS);; ; , TYPE BUTTON; X 50; Y 80; WIDTH 100; HEIGHT 20; TEXT "Выход"; NAME QUIT; ; ; FORM NAME VIEW_SUBJECTS; TEXT "Просмотр и редактирование субъектов"; OWNER (NAME SUBJECT); BACK "230,230,230"; FONT_SIZE 12; PAGE_WIDTH 200; PAGE_HEIGHT 140; CONTROLS TYPE STATIC; X 50; Y 5; WIDTH 100; HEIGHT 10; FONT_SIZE 24; COLOR "100,100,100"; TEXT "Список всех субъектов"; , TYPE GRID; X 10; Y 20; NAME THIS; WIDTH 180; HEIGHT 100; UPDATE YES; CONTROLS NAME "CODE"; TEXT "КОД СУБЪЕКТА"; DOMAIN (NAME ACCOUNT); , NAME "ORGNAME"; TEXT "ОРГАНИЗАЦИЯ"; , NAME "FIRSTNAME"; TEXT "ФИО"; , NAME "ADDRESS.STREET"; TEXT "УЛИЦА"; , NAME "ADDRESS.CITY"; TEXT "ГОРОД"; ; , TYPE BUTTON; X 10; Y 125; WIDTH 18; HEIGHT 10; TEXT "Исправить"; NAME "TARGET.EDIT";, TYPE BUTTON; X 30; Y 125; WIDTH 18; HEIGHT 10; TEXT "&<"; NAME PREV;, TYPE BUTTON; X 50; Y 125; WIDTH 18; HEIGHT 10; TEXT "&"; NAME NEXT;, TYPE BUTTON; X 70; Y 125; WIDTH 18; HEIGHT 10; TEXT "&Новый"; NAME NEW;, TYPE BUTTON; X 90; Y 125; WIDTH 18; HEIGHT 10; TEXT "&Записать"; NAME POST;, TYPE BUTTON; X 110; Y 125; WIDTH 18; HEIGHT 10; TEXT "&Удалить"; NAME DEL;, TYPE BUTTON; X 130; Y 125; WIDTH 18; HEIGHT 10; TEXT "&Закрыть"; NAME BACK; ;//CONTROLS ;//FORM FORM(MAIN_MENU).RUN; RUN MESSAGE TEXT 'Загружен "Справочник субъектов"';;
Исчисление предикатов (PROLOG)
CLASS NAME HUMAN; TEXT "Human"; ATTRIBUTES NAME NAME; ; CLASS PARENT (NAME HUMAN); NAME MALE; TEXT "Male"; ; CLASS PARENT (NAME HUMAN); NAME FEMALE; TEXT "Female"; ; CLASS PARENT (NAME ENTITY); TEXT "Male/Female"; ATTRIBUTES NAME SEX;, NAME HUMAN;; ; CLASS PARENT (NAME ENTITY); NAME PARENT; TEXT "Parent of child"; ATTRIBUTES NAME PARENT;, NAME CHILD;; ; PARENT PARENT PAM; CHILD BOB;, PARENT TOM; CHILD BOB;, PARENT TOM; CHILD LIZ;, PARENT BOB; CHILD ANN;, PARENT BOB; CHILD PAT;, PARENT PAT; CHILD JIM;; // Who are BOB's kids? //? PARENT( PARENT BOB ).EDIT; //! ANN, PAT // Is BOB parent of PAT? //? PARENT( PARENT BOB, CHILD PAT ); //! TRUE // Is LIZ parent of PAT? //? PARENT( PARENT LIZ, CHILD PAT ); //! NO PARENT( CHILD (CHILD JIM).PARENT ).EDIT; //? PARENT( PARENT (CHILD BOB).PARENT ).CHILD;
Объектно-реляционный язык ORL и системное ядро