Некоторые особенности языка программирования среды разработки tmaplatform



    Данный пост рассказывает о языках программирования и запросах среды разработки учетных приложений tmaplatform.

    У всех вкусы разные...

    При работе с платформой Вы можете использовать несколько языков программирования: Паскаль (Similar Pascal), Бейсик (Similar Basic). В стадии разработки Java-подобный язык, который появится в ближайшее время. Все примеры поста написаны на Similar Pascal.

    В платформу интегрирован язык запросов, названный нами «Внутренний SQL», большая часть поста будет именно о нем.

    Независимость от СУБД.

    У каждой СУБД есть свои плюсы и минусы, разные СУБД предназначены для разных задач и объемов хранимых данных. И просто разные разработчики привыкли к разным серверам баз данных. Это аксиома.

    Среда разработки tmaplatform позволяет легко (легко – значит без изменения кода) переносить программы между различными серверами баз данных: MySQL (работает), PgSQL (тестирование), MSSQL (тестирование), SQLite(тестирование), в дальнейшем данный перечень будет расширяться. И все мы знаем, что при всей универсальности языка SQL просто так перевести программу для работы с БД с одного сервера на другой не получится. Еще сильнее осложнит переход активное использование триггеров, хранимых процедур и функций.

    Поэтому мы добавили в платформу внутренний язык запросов, максимально похожий на SQL92 (как базовый стандарт SQL). При выполнении Вашей программы платформа транслирует запросы с внутреннего языка на язык используемой БД.

    Этот язык запросов не позволяет использовать 100% возможностей Вашего любимого сервера баз данных. Поэтому мы оставили возможность совместно с внутренним языком запросов использовать язык запросов базы данных (прямые запросы). При использовании прямых запросов переносимость теряется. Но если Вы используете внутренний язык запросов в 98% программы, то это облегчит Вам перенос программы и отладку на несколько порядков.

    Непосредственные запросы

    Запросы к базе данных можно писать непосредственно в коде программы. Язык запросов является частью языка программирования. Поэтому сразу во время ввода запроса платформа проверяет наличие таблиц, полей и их типы. Еще до запуска программы платформа проверит корректность всех запросов.

    ClientId := 3;
    D := (Select Sum(Summa) From Documents Where Client = :ClientId);
    

    Например, если тип переменной ClientId отличается от типа поля Client, то платформа оповестит об этом (подчеркнет место ошибки красной линией).

    Так же в редакторе платформы доступна подсказка по синтаксису, именам полей, функциям базы данных и автозавершение.

    При рефакторинге базы данных платформа автоматически скорректирует все запросы. То есть, когда вы разделяете таблицу на две части, запрос "Select A, B From Table" будет заменен на "Select A, LinkField.B From Table1".
    Параметры запроса указываются после символа ":", при этом можно указать не только переменную, но и любое выражение языка программирования.

    Технология AutoJoin

    Ничего так кратко и лаконично не описывает что-либо в программировании, как пример:

    Select Account.Client.City.Country.Name From Document

    В этом запросе мы получаем наименование страны, в которой находится город, в котором зарегистрирован клиент, которому принадлежит счет, на который оформлен документ.

    В стандартном SQL этот запрос выглядит так:

    Select Countries.Name From Document
    Left Join Accounts On Accounts.Id = Document.Account
    Left Join Clients On Clients.Id = Accounts.Client
    Left Join Cities On Cities.Id = Clients.City
    Left Join Countries On Countries.Id = Cities.Country

    Правда, проще? Объем запроса уменьшился в 5 раз. Эти 4 блока Join приходятся только на одно поле. А если у нас 20 полей? Ну, в общем, Вы поняли.

    Single, новая команда SQL

    Оператор Select возвращает набор данных (далее датасет), а если Вам требуется получить единственное значение, то приходится добавлять в программу команды извлечения данных.

    D := (Select Sum(S) From Documents Where Client=:Client);
    If D.Count=0 Then S := 0 Else S := D[0].S;

    Оператор Single работает аналогично Select, но возвращает единственное значение (первое поле первой строки).

    S := (Single Sum(S) From Documents Where Client=:Client);

    Обращение к внешним запросам

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

    Select Name, (Select Sum(Summa) From Money Where Client=.Id) From Clients
    Select Name, (Select (Select Sum(Summa) From Money Where Client=..Id)) From Clients

    Оптимизация запросов

    Запросы в программе должны быть как можно проще и нагляднее (ведь, возможно, не только Вам, но и кому-то еще придется разбираться в этой программе). Но часто такие запросы не являются самыми быстрыми. И, к тому же, внутренний язык запросов не позволяет использовать все возможности СУБД, чтобы написать оптимальный запрос.

    Платформа содержит инструмент «Оптимизатор запросов». С помощью него вы можете задавать пары запросов на внутреннем и внешнем языке. То есть указать самый быстрый запрос:

    Заменить с

    Select Name, (Select Sum(Summa) From Documents Where Client=.Id) From Clients

    Заменить на

    Select Client.Name, Sum(Document.Summa) From Clients, Documents Where Clients.Id=Documents.Client

    Также этот инструмент позволяет опытным путем проверить идентичность результатов работы запросов и сравнить время выполнения. Оптимизируйте программу, не усложняя её!

    Типизированные датасеты.

    Любой Select-запрос возвращает датасет (объект типа Dataset). Мы сделали работу с ним такой же, как и с массивом.

    Dataset := DirectQuery('Select * From mysql.user');
    For y:=0 To Dataset.Count-1 Do
      For x:=0 To Dataset.Columns.Count-1 Do
       Warning(Dataset[x,y]);

    Более интересная возможность — типизированные датасеты. В прошлом примере Dataset[x,y] возвращает тип данных Variant и контроль типов на этапе ввода текста программы не осуществлялся. Типизированные датасеты позволяют обращаться к определенным полям определенного типа данных — Dataset[x].ИмяПоля. То есть работает контроль типов во время ввода, автозавершение и т.п.

    Procedure OnCreate; 
    Var
      D : Dataset Of Record 
            Id : Integer;
            CreateDate : DateTime;
            ClientId : Integer;
            CountryName : String; 
          End;
    Begin 
      D := (Select Id, CreateDate, Client, Client.City.Country.Name From Document);
      Warning(D[2].Name); // Обращение к произвольному полю
      Foreach E in D Do // Перебор всех элементов
      Begin
        Warning(E.Id);  // Обращение к полю
        Warning(E.CountryName);  // Обращение к полю
      End;
    End;

    Следует отметить, что типы полей, возвращаемые Select-запросом, результат которого присваивается датасету, должны быть такого же типа, как и поля самого датасета.

    Транзакции

    Язык программирования поддерживает блок Transaction. Куда же без них? Все помнят первый пример в любом учебнике с переводом денег со счета на счет? :)

    Transaction
    Begin
      (Insert Table1 ...)
      (Insert Table2 ...)
    End;

    Этот блок значит, что другие клиенты не смогут увидеть изменения в базе данных, пока не завершится блок Transaction. И наоборот, Вы не сможете увидеть изменения, вносимые другими клиентами. Если в этом блоке происходит исключение, то все изменения, внесенные в базу данных, откатываются.

    Транзакции могут быть вложенными.

    Можно указать уровень изоляции транзакции.

    Transaction Continous Read
    Begin
    End;

    Автоматическое обновление

    При изменении базы данных платформа анализирует запрос и автоматически обновляет интерфейс. Причем, учитываются таблицы, используемые во вьюхах (view) и вычисляемых полях. А обновляются только измененные записи.

    Этот же механизм используется в Select-триггерах и материализованных вьюхах (view), которые реализует платформа, если СУБД их не поддерживает. (Например, MySQL).

    SQL к локальным данным

    SQL-запросы можно писать не только к таблицам базы данных, но и к локальным данным.

    Procedure OnCreate;
    Var
      Data : Dataset Of Record ... End;
      Data1 : Dataset Of Record ... End;
    Begin
      ...      
      Data1 := (Select FirstName+' '+LastName, Age From :Data Where Age>20 Order By -Age, Name);
      ...      
    End;

    При этом в запросах можно использовать любые функции программы.

    Хранимые процедуры.

    Хранимые процедуры, функции и триггеры – программы на процедурном языке СУБД (T-SQL, PL/SQL и т.д.), которые хранятся и выполняются на сервере БД. Платформа предоставляет возможность писать эти программы на своем внутреннем языке для независимости от какой-либо конкретной СУБД (текст процедуры/триггера при этом транслируется).

    Использование одного и того же языка и API во всей программе — это несомненный плюс. К тому же, Similar Pascal с интегрированным языком запросов более удобен, предсказуем и нагляден, чем языки хранимых процедур (например, у MySQL).

    Вы можете просто перенести код из программы в хранимую процедуру и обратно.

    А главный плюс — это то, что один раз написанная хранимая процедура будет работать на всех поддерживаемых серверах баз данных.

    Пример хранимой процедуры:

    Procedure Recalc(Curr, Contragent : Integer);
    Var
      S, CurrRate, NewCurrRate : Currency;
    begin
      Foreach C In (Select Id, DocDate, Sum, Curr, NewSum, NewCurr From Documents Where Curr=:Curr And Contragent=:Contragent) Do
      Begin
        CurrRate := GetCurrRate(C.DocDate, C.Curr);
        NewCurrRate := GetCurrRate(C.DocDate, C.NewCurr);
        S := RoundDiv(RoundMul(C.Sum, CurrRate, 4), NewCurrRate, 2);
        If C.Summa <> S Then
          (Update Documents Set Summa = :S Where Id = :C.Id);
      End;
    End;

    Заключение.

    Все вышеперечисленное повышает скорость разработки, понимания и отладки программы. Эти факторы, естественно, являются основополагающими при выборе среды разработки. Хотите попробовать tmaplatform – записывайтесь на бета-тестирование (кидайте ваш email мне(smirnovss) в личку)
    Полное описание платформы со справкой смотрите тут tmaplatform.ru
    RTIT
    0,00
    Компания
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 38

      –7
      Не в обиду будь сказано, но я не слышал слова Pascal с 7-го класса. Слово Basic (точнее VBA) слышал не так давно, но там было много непечатных слов.
      • НЛО прилетело и опубликовало эту надпись здесь
        –10
        Я конечно извиняюсь, но не совсем понятно для чего нужен этот еще один велосипед. Я прошелся по сайту разработчиков — хорошая дипломная работа начала 2000. Поучились писать анализаторы языков.
        Но практического применения никакого. На обычном Excell можно сделать подобные задачи.
          +4
          Вы прежде чем писать подобные вещи, изучили бы сам вопрос. Ваше поверхностная оценка продукта не дает вам права писать про практическое применение того, что вы даже не щупали :)
            +8
            Сидят два еврея и смотрят анонс новой Ламборджини. Один другому говорит: «Я конечно дико извиняюсь, но я не понимаю зачем изобретать еще один велосипед. Я глянул конструкцию, те же колеса, тот же руль. Я и на тележке из магазина продукты домой могу возить»
              –6
              Тут до Ламборжини как до Луны пешком, хотябы до Запра дотянуть
            • НЛО прилетело и опубликовало эту надпись здесь
                –4
                Я бы не стал смешивать вместе все эти удивительные возможности. А каждый по отдельности возможно сделать используя конвенциональные средства допустим на java. Ну а обилие фреймворков на java и умение их интегрировать решат все эти 5 задач. Я не понимаю зачем надо придумывать свой собственный язык, такие языки типа PowerBuider умерли еще 10 лет назад.
                В какойто степени продукт напоминает Oracle Forms или Oracle Developer если ктото еще помнит что это было. Проблемы работы с разными RDBMS также решаются с помощью класических ORM типа Hibernate.
                • НЛО прилетело и опубликовало эту надпись здесь
              –8
              Во первых сайт разработчика обязан это практические применение продемонстрировать. Этого там нет. Кроме решения проблем 10-15 летней давности, что разные RDBMS имеют чуть разный синтаксис.
              Во вторых к чему это обилие различных синтаксисов полузабытых языков? Кому это надо?
              В третьих — часто достаточно двух трех критериев чтобы определить серьезность продукта ( при достаточное опыте)

              Я повторюсь — хорошая дипломная работа.
              • НЛО прилетело и опубликовало эту надпись здесь
                  0
                  > скоро будет Java
                  Java или Java синтаксис? Как Java можно отделить от API и библиотек? Или я чегото не понимаю. с какими библиотеками я могу интегрироваться?
                  • НЛО прилетело и опубликовало эту надпись здесь
                      –1
                      И желание сразу отпадет
                      Понял
                +8
                Отлично. У меня есть пара мыслей.

                В-нулевых, почему от просмотра демо-видео у меня ощущение, что вы просто взяли MS Access и убрали пару пунктов из меню, и выдаете это за новую платформу???

                Во-первых, почему во всяких программах типа MS Office/Access/1C и вашей используются (или берутся за основу) такие уродливые языки, типа Basic, с учетом того, что сложный, хорошо организованный и поддерживаемый ООП-код на нем по моему просто не написать. В Basic вроде даже нет динамических массивов, очередей, стеков, ассоциативных массивов нет, циклов for ..each, плохо с ООП, нет модулей, наверняка нет TCP/IP, а со структурами работать надо через какие-то костыли. Ладно, без замыканий и генераторов я еще готов прожить. Но как на нем вообще что-то можно написать?

                Во-вторых, по моему, внедряя в эти языки SQL, вы получаете еще более уродливый синтаксис, так как синтаксис SQL и того же паскаля все же разные. Плюс, сам язык SQL для чего-то большего, кроме написания запросов, использовать нельзя, он довольно громоздок и несовременен.

                Кстати, у вас в видео про валюты почему-то не показан код процедуры MetaStockToDataset. Почему??

                В-третьих, объясните, зачем писать «Java-подобный язык», как я понимаю, он будет не совместим с Java и нельзя будет взять свой любимый, годами собираемый 5-мегабайтный фреймворк и импортировать его в проект, так?

                В-четвертых, зачем создавать ЕЩЕ ОДИН диалект Sql, когда в существующих и так можно легко запутаться?

                > Среда разработки tmaplatform позволяет легко (легко – значит без изменения кода) переносить программы между различными серверами баз данных: MySQL (работает), PgSQL (тестирование), MSSQL (тестирование), SQLite(тестирование), в дальнейшем данный перечень будет расширяться.

                Отлично. Расскажите-ка, как можно без изменения кода заставить работать хитрые постгресовские индексы или типы полей на MySQL, или LIMIT M,N на MSSQL? А специфичные особенности работы InnoDb ваша платформа тоже будет сама учитывать? А INSERT… VALUES (row1), (row2), (row3) для SQLite ваша система сама будет разбивать на 3 инсерта и заворачивать их в транзакцию? А INSERT… ON DUPLICATE KEY UPDATE осилит?

                А переносить между разными СУБД запросы типа SELECT WHERE id = 4, я думаю, можно почти в любом фреймворке. И тормозить ваша БД будет так же, как и 1С и иже с ними, так как большинство разработчиков писать нормально запросы не умеют. Тем более с этим вашим автоджойном на 5 таблиц.

                С другой стороны, не спорю, язык/платформа для быстрого написания приложений с БД и GUI, конечно, востребован. Неохота ради простого приложеия лезть в дебри WinAPI/MFC/ATL или тянуть 200 мегабайт виртуальной машины Явы + тяжеленный фреймворк. Но у вас же получается, по моему, еще более невменяемая хрень? Особенно меня добивает вот это:

                > Версия CP1251 значительно экономит память (в наших задачах), поэтому мы будем её поддерживать всегда.

                А так, почитать описание, конечно, интересно, но все равно, ощущение, что это все откуда-то из прошлого, все эти встроенные БД, Паскаль и отчеты с формами.

                • НЛО прилетело и опубликовало эту надпись здесь
                    –5
                    была бы моя карма жива поставил бы большой жирный плюс
                    • НЛО прилетело и опубликовало эту надпись здесь
                        +2
                        Я конечно дико извиняюсь, но минусовая карма обычно у троллей. Уровень ниже нуля предыдущего комментатора просто удивляет. Задача троллей придраться к нормальной статье, чтобы не было видно нормальных комментариев. Жаль. Статья была хорошая. Жаль, что отвечать стали.

                        Я не программист и мало понимаю что написано в этой статье, но я знаю что на программах созданных на этом инструменте работают миллиардные холдинги, решая нетривиальные задачи, обеспечивая собственников достоверной и прозрачной информацией о финансовом состоянии и результат деятельности. Я так же знаю, что до того как они стали использовать эти программы они вложили сотри тысяч долларов в приобретение различных систем их внедрение и разработку.
                        Более того, я знаю, что благодаря этому инструменту студентами выпускниками программерских факультетов создаются в считанные дни программы способные решать сложные бизнес задачи.
                        Обычно, когда мы обращались в софтверные компании, нам говорили, что возможности программистов безграничны и они могут написать все что угодно нам, но на практике мы получали кучу потраченного времени, денег и очень мало результатов из-за той безграничной пропасти в понимании между специалистами в учете и программистами. У меня есть ощущение что платформа позволила построить мост над этой пропастью.
                        Еще я знаю, что вместо больших серверов теперь финансистам стало хватать персональных ноутбуков. Я не понимаю как это получается, но вижу реальные результаты.
                        Уважаемые тролли, я понимаю, что вы хотите по-умничать, но больше мы на ваши комментарии отвечать не будем.
                          0
                          А можно поподробнее про «этот» инструмент и про миллиардные корпорации. Судя по сайту платформа находится в зачаточном состоянии. Сайт составлен не профессионально, по детски.
                          Как то не вяжется это с серьезным продуктом
                            +2
                            Вы уникальный человек
                            • НЛО прилетело и опубликовало эту надпись здесь
                              • НЛО прилетело и опубликовало эту надпись здесь
                                  0
                                  если вы действительно толстый тролль с over 9000 минусовой кармой, то, полагаю, есть немало желающих минусануть вас. Почему сразу мы?
                                  или это просто попытка напомнить миру о своем существовании? )))
                                  • НЛО прилетело и опубликовало эту надпись здесь
                                      0
                                      >>>Вы сократили(гомоморфизм прямо) мир до хабры? =)
                                      нахождение в социуме заставило перейти от регулярных выражений к устойчивым. иногда я ими злоупотребляю ))))

                                      >>>Вы как то адово защищаете свой продукт.
                                      Защищаем — это верно. Насчет адово… со стороны, возможно, виднее, но нам, как людям, делающим серьезный проект, а не сиюминутный продукт, который появился, вызвал всеобщее «Ах!» и тут же пропал в тумане, важны не только (и не столько) восторженные возгласы, но и конструктивная критика. Кстати, коль уж все-таки начал писать вам ответ, то хочу отметить, что ваши слова: «Кто то не понял, зачем это надо, вы объяснили, кто то все равно не понял. И это нормально» абсолютно верны. Всем нравится только червонец )
                                      • НЛО прилетело и опубликовало эту надпись здесь
                                          0
                                          спасибо )
                                          а вам успехов в восстановлении кармы (пару комментов в других тридах прочитал — и правда никакого криминала не вижу )))
                      • НЛО прилетело и опубликовало эту надпись здесь
                          +3
                          Понятно.

                          Уточню по поводу языков. Во-первых, все же Basic и Pascal — в первую очередь учебные языки, хотя. возможно для ваших целей их возможностей вполне хватит. Но все же без словарей и всяких очередей будет тяжко.

                          Во-вторых, создавая «Java-подобные» языки, вы все же поступаете неправильно. Есть язык Java (+ библиотеки на нем), есть программисты, которые умеют на нем писать, есть код, который они когда-то написали и хотят повторно использовать. Теперь смотрите: в вашем «Java-подобном» языке их знания окажутся бесполезными — компилятор перестанет понимать, например, аннотации, или generic classes, которыми они привыкли пользоваться, или начнет в другом порядке инициализировать статические члены класса. Их код, который они раньше писали, тоже бесполезен — его надо переписывать. И OpenSource библиотеки и фреймворки, которыми они привыкли пользоваться, тоже не работают. Ничего не работает.

                          Более того, ваш «Java-подобный» язык не изучают в учебных заведениях.

                          Вопрос, зачем нужен язык, который называется как Java, но в реальности не работает? По моему, вы таким образом только запутываете разработчика. Либо надо поддерживать полностью существующий язык, расширив его своими классами и функциями, либо писать свой собственный.

                          Причем, не очень понятно, во втором случае, что делать если хочется парсить HTML? Работать с регулярками? Разбирать JSON? Форматировать номера телефонов при выводе? Ждать, пока вы реализуете?

                          > Рассмотрели программу? :) Потому что это встроенная в платформу функция.

                          Ага, а если мне надо что-нибудь другое распарсить, то надо видимо на вашем недопаскале без регулярок и Xpath парсить HTML ??? О, это будет особый, извращенный вид развлечения.

                          Еще хуже с Sql. Вы с одной стороны, поддерживаете написание хранимок на вашем псевдопаскале, а с другой, запрещаете использовать переменные и функции из основного кода программы, а также часть возможностей языка. Зачем? Вы же создаете еще большую путаницу.

                          Далее. Все равно, несмотря на громкие заявления, ваш продукт хорош только для создания небольших (простых) оберток для БД, и точно так же ограничен как и MS Access. Только вот для MS Access выпущено кучу учебников, курсов, его изучают в ВУЗах, а вашу платформу — нет.

                          Возьмем, к примеру, масштабируемость. Как я понимаю, при работе нескольких клиентов, их взаимодействие осуществляется через сервер БД — это значит (как я понимаю), нет возможности уведомить другие клиенты об изменениях, пока кто-то не полезет с запросом в БД, он их не увидит.

                          Далее. Вот вы пишете, что это фреймворк для создания приложений для учета. Что делать с программой на вашей платформе, когда внезапно появляется задача экспортировать все данные в 1С бухгалтерам? Я вижу, там есть вроде какой-то Ole-интерфейс, но что-то это не похоже на «простой» способ.

                          А можно ли ваши отчеты экспортировать в Ворд? Видимо, только через PrntScrn / Ctrl + V.

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

                          Ну и пара мелких замечаний еще. У вас там где-то в XML есть функция Childs(), правильно писать children(). Плюс, не очень понятно, зачем дана возможность переименовывать таблицу с юзерами. У вас же все равно ее структура определяется вашей платформой, так пусть и имя определяется так же.

                          • НЛО прилетело и опубликовало эту надпись здесь
                            +3
                            Выглядит достаточно забавно, уверен, будущее у платформы есть, не смотря на то, что пилить и пилить.

                            ЗЫ. Pascal / Basic / Java — я такую связку часто раньше встречал (paxScript-based софт). Связи нет?
                            • НЛО прилетело и опубликовало эту надпись здесь
                          +3
                          Что-то не понял (видимо влияет то, что не спал и мне через два часа уезжать на пол дня): а что писать-то на ней можно?
                          Я бы попробовал, если бы знал что на ней можно сделать, для каких платформ, нагрузка на систему, требования и т.п.
                          • НЛО прилетело и опубликовало эту надпись здесь
                            +3
                            Основное предназначение — это учетные системы для бизнеса. При создании подобных систем очень важны скорость, понятность кода, возможность быстрой и сторонней модификации. А главное при создании программы сосредотачиваться на самой бизнес задаче. Для этих целей tmaplatform действительно очень удобна.
                            В предыдущем топике есть примеры создания простейших программ учета.
                              +2
                              А есть что-то вроде полной спецификации языка?
                              Нашел вот это tmaplatform.ru/page/help/similarpascal
                              Но нет абсолютно никакого понимания что именно я могу на нем сделать, а что нет.
                              Из обсуждения понятно что ООП вроде не будет, хотя вот здесь tmaplatform.ru/page/help/similarpascal/1as упоминается про классы.

                              Какие имеются средства для работы в много поточной среде?
                              Есть ли возможность задавать пользовательские типы данных (классы, структуры, что-то ещё)?

                              • НЛО прилетело и опубликовало эту надпись здесь

                              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                              Самое читаемое