Простой Учет
От: vinx  
Дата: 09.10.08 18:40
Оценка:
Привет всем...

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

И почти никому не показывал, так как хотел сначала все закончить. Но мне настолько это надоело (в особенности переделывать 20 раз одно и тоже), что собираюсь за месяц выпустить BETA-версию в течении месяца.

Я преследовал две цели при написании этой среды:

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

2) И последующее простое сопровождение и доработка программы (другими) программистами.

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

Программа содержит в себе:

Проработанный, мощный и простой набор компонент

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

Все компоненты полностью на скинах (кроме скролл-бара, руки не добрались).

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

Экранные формы содержат ограниченный (но достаточный) набор компонент.
Благодаря этому становится проще поддержка чужого кода, а также позволило
организовать WEB-интерфейс и переносимость без модификации программ.

Но скорее всего я добавлю ActiveX компоненты, потому что пользователи
требуют работу с документами MS Word в форме, и компоненты просмотра чертежей
для станков с ЧПУ.

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

Транслятор SQL диалектов.

Для обеспечения переносимости программ между любыми
SQL-серверами (возможна также работа с сервером имеющим
язык запросов отличный от SQL) программа использует язык запросов
максимально похожий на SQL92.

Только имеющий одно понятное и простое дополнение к
стандартному синтаксису SQL

select customer.filial.town.name, code from orders

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

Типов данных в SQL столько же, сколько и в Паскале. Только есть
две разновидности строк STRING и MEMO. STRING имеет ограниченную
длину, а MEMO не может участвовать в арифметических операциях
при выполнении запроса.

В бета версии будет поддерживаться MySQL, MySQL Embedded,
MS SQL Server, JetDB (MS Access), Firebird и встроенная
локальная однопользовательская БД, не претендующая пока
на скорость.

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

Редактор SQL-запросов и исходного кода

В программе используется редактор очень похожий на MS Visual Studio 2005
(с фоновой проверкой, подсказкой и авто дописываем в любом месте программы,
сворачиванием кода, перехода по функциях по CTRL).

Редактор экранных и печатных форм (по моему единственный Wysiwyg)

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

Языки программирования PASCAL, JAVA, BASIC

Изначально был взят Delphi ® (да простят за копирайт), из которого было убрано все
лишнее и добавлены возможности современных языков. (Я пишу в основном на C++)

Компилируют в байт-код, который интерпретируется либо
компилируется в машинный код, который записывается DLL.

Язык использует сборщик мусора.

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

Скорость работы программ принесена в жертву кроссплатформенности,
простоты разработки и сопровождения. Но при этом цикл вычисляющий
сумму элементов массива выполняется не существенно медленнее C#.
И у массива/датасета есть метод Sum(), написан с учетом
многопоточности и MMX (что б было)

Пока меня ограничивает лишь медленный граф. вывод через GDI.

Набор утилит

Анализатор запросов
ER-диаграммы
Система обновления программ (загрузка обновлений в интернет, блокировка и перезагрузка программ в локальной сети)
Многомерный и графический анализ.
Архивирование баз данных
Перенос баз данных между серверами
Отладчик
Конроль прав доступа
Системный монитор
Профилер
Встроенная база данных


Ответы на вопросы — А почему? (еще раз в другой проекции)

Delphi / C# + FastReport + SQL Server+ плюс компоненты интерфейса EhLib,
ElPack, Component One Studio. Вот от этого я шел, только объединил
все эти продукты в одно целое.

Еще раз повторюсь, в отличии от отдаленно программ (Clarion и 1С
например). Я использовал СТАНДАРТНЫЙ СИНТАКСИС языков программирования
и SQL. Я тут упомянул не раз 1С в основном, что бы подчеркнуть отличия.

Почти любая команда знает — SQL92, BASIC/PASCAL/JAVA, положительные
отличия узнаются за день. Поэтому учится не надо, а учится никого не
заставишь — все пишут на том, что знают.

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

Быстро пишите программу и отдаете клиенту, возможно даже с исходниками.
Когда потребуется доработать программу, то можно привлечь любого
программиста с минимальными проблемами.

Возможно раздадутся крики — Oracle, C++, Assembler! (раздавались)
Но выбор среды, в которой разработка программы займет больше времени, а её
дальнейшее сопровождение будет сложнее и дороже — это признак интеллекта?

Тут я не сказал, что сама среда нужна для работы программы.

Я собираюсь зарабатывать на продаже самой среды клиентам (подобно
1С, или фирмам продающим SQL-сервера), а программистам раздавать
их бесплатно, а так же помогать им и дорабатывать под них среду.

Написанная в этой среде программа может поставляться в исходных
кодах (программа при запуске скомпилируется в байт-код, либо в
исполняемый код) и при этом программу можно будет редактировать,
дописывать и отлаживать во время работы многих пользователей в
сетевом режиме.

Кстати еще, в отличии от Delphi, 1С, программировать и исправлять ошибки
можно прямо во время работы кучи народа по сети.

А написал я это потому, что такой программы нет. По крайней мере в России.

Еще немного про язык

Набор типов:
boolean, integer, float, string, datetime, currency, variant, array of, dataset of, (обьекты)

Нет ассемблера

Нет заголовков (IMPLEMENTATION, INTERFACE, UNIT, USES...)

Нет фишек дельфи (FILE, PACKED, THREADVAR, OBJECT)

Функции не требуют предварительного описания. (FORWARD)

Статических строк нет (STRING[1]).

Указателей нет, для объектов вместо NIL используется NULL (NIL)

Нет классов ошибок. Используется RAISE со строкой ''. (Exception)

Нет вложенных функций в функции

Нет (непосредственно) описания классов.

Каждый модуль (кроме GLOBAL) является классом, а
вложенных классов нет. Есть структуры, которые не
могут содержать методов.

Нет процедурных типов (OF OBJECT, ASSIGNED)
Объекты на форме связываются жестко по имени.

Нельзя выводить своих собственных типов данных (type my = integer)

Все массивы начинаются с нуля.

И доработал:

Добавил сборку мусора

Все типы данных (втч ARRAY OF, RECORD) можно привести к VARIANT

Добавил свойства по умолчанию, как в Visual Basic
Edit1.Text = 'A'
Edit1 = 'A'

Добавил встроенный SQL
D : Dataset;
D := (select code,name from clients)

N : string;
C : integer;
N := (single name from clients where code=:C);

Добавил блок TRANSACTION END. Если внутри происходит исключение, БД изменения откатывается назад и во время действия блока TRANSACTION база данных _как_бы_ переходит в монопольный режим.

TRANSACTION
A := (single max(code) from clients);
B := (single max(code) from clients);
IF A<>B THEN Raise('Никогда не выполнится');
END

Еще добавил класс DАТАSET OF X, почти полностью аналогичный ARRAY OF X. Как и у массивов OF — это аналог шаблонов С++ (ARRAY OF INTEGER = vector<int>), но пользователь не может описывать собственные шаблоны, так как это лишь усложнит программу.

Остальные языки (JAVA (или С#, только он (r)), BASIC) отличаются лишь синтаксисом, возможности те же.

Еще немного про SQL

Простой запрос:
SELECT var {,var}

Запрос из таблицы:
SELECT [DISTINCT] var {,var} FROM TABLE [WHERE var]

Запрос из таблицы с группировкой:
SELECT [DISTINCT] gvar {,gvar} FROM TABLE [WHERE var] GROUP BY var {,var} [HAVIG BY gvar]

var — это выражение типа (var+var)-var/var+1+'a'+true+null
var — может быть поле таблицы CODE
var — может быть fn([var {,var}]), cast(var as type), case...
var — может быть реляцией CLIENT.CITY.NAME
var — может быть функцией

gvar — это выражение типа (gvar+gvar)-gvar/gvar+1+'a'+true+null
gvar — может быть SUM(var), AVG(var)...
gvar — может быть fn([gvar {,gvar}]), cast(gvar as type), case...
gvar — может быть запрос использованный в GROUP BY

Эта запросы могут быть объединены

<SELECT> { UNION ALL <SELECT> } [ORDER BY var [DESC] {, var [DESC]]

Так же поддерживаются

UPDАTЕ table SET field=var {,field=var} WHERE var
DELЕTЕ FROM table WHERE var
INSERT INTO table(field {,field} ) values ( var {,var} )

Служебные слова:
"select","as","from","where","group","by","order","desc","having",
"union","all","update", "set","delete","insert","into",
"values","and","or","not","xor","like","in","sum","avg",
"min","max","count","cast","in","integer","string","when",
"datetime","float","currency","case","when","then","else",
"end","ifnull","is","null"

Это в общем, в отличии от стандарта нет JOIN Есть
скрытый LEFT OUTER JOIN по первичному ключу, хоть убейте
остальные они не нужны в 99.9% случаев.

Опять я

Скриншоты:
http://vkontakte.ru/photos.php?gid=4922029

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