Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.10.31;
Скачать: [xml.tar.bz2];

Вниз

1С на Delphi   Найти похожие ветки 

 
Serginio   (2002-10-11 12:29) [0]

1С на Delphi.
Уважаемые Мастера хочу предостваить вам на обсуждение такую вещь.
Обсуждение этой темы 1С программистов на http://www.kuban.ru/cgi-bin/forum/forum9.cgi за 10,10
Очень хотелосьбы узнать насколько это нужно. И еще, что такой подход применим не только к 1С но и с любой базой дающей прямой доступ к файлу.
Почти 6 лет занимаюсь 1С FoxPro версии и столько же занимаюсь ее ускорением с помощью BDE, и столько же пытался строить объекты на таблицах. Идея 1С очень понравилась, но очень хотелось настоящих объектов, а не диспачных. Плоское программирование реляционных баз утомительно, а описание вручную всех объектов базы проблематично. Но с помощью Rainbow все проблемы решаемы.
С ее помощью можно выдрать Id объектов базы, а с помощью метаданных их описание и тип.
Автоматическое Описание объектов выглядит примерно так:
//--------------------------------------------------
TKomplektaciyarec=record
deleted:char;
SpId: TIDField;//ID
Code: array[0..4] of char;//CODE
Descr: array[0..24] of char;//DESCR
Owner: TIDField;//PARENTEXT
IsMark: char;//ISMARK
VERSTAMP: array[0..5] of char;
Tovar: TIDField;//SP683
Kolichestvo: array[0..10] of char;//SP684
end;
//---------------------------------------------------
TSpKomplektaciya=Class(TSptCastomObj) //Комплектация
SpRecord:TKomplektaciyarec;
Private
FOwner:TSpNomenklatura;
FTovar:TSpNomenklatura;
Protected
Function getSpId:String;
Function getOwner:TSpNomenklatura;
Function getCode:Integer;
Function getKolichestvo:Integer;
Function getDescr:String;
Function getIsMark:Boolean;
Function getTovar:TSpNomenklatura;
Public
Constructor Create;
Property SpId:String read getSpId;
Property Owner:TSpNomenklatura read getOwner;
Property Code:Integer read getCode;
Property Kolichestvo:Integer read getKolichestvo;
Property Descr:String read getDescr;
Property IsMark:Boolean read getIsMark;
Property Tovar:TSpNomenklatura read getTovar;
end;//TSpKomplektaciya
а доступ к полям:

function TSpKomplektaciya.getTovar:TSpNomenklatura;
begin
If Not Assigned(FTovar) Then FTovar:=TSpNomenklatura.Create;
FTovar.PID:=@SpRecord.Tovar;
result:=FTovar;
end;

и на более низком:
procedure TSptCastomObj.SetId(newId: PIdField);
begin
If not (Selected and (FPID^=NewID^)) Then
Selected:=DbiGetRecordForKey(SpCursor,True,0,0,NewID,ActiveBuffer)=0
// ActiveBuffer:=@SpRecord определяется в конструкторе
end;

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

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


 
Alexandr   (2002-10-11 12:37) [1]

ну ничего не понятно.
Но могу предложить вопрос.
А на больших объемах данных проверяли быстродействие?
Ведь запросы в базу будут очень сложными и далеко не оптимальными а отсюда тормоза пойдут нешуточные на больших объемах. Вот эта проблема выходит на первое место по построении ОО-надстроек над реляционными базами данных.


 
Нуралиев   (2002-10-11 12:43) [2]

Не лезь в мои базы!
Слышишь? Не влезай, убьет!

P.S. Извини, отвечаю так, как принято
в большинстве случаев отвечать на том
форуме, что ты указал...


 
Serginio   (2002-10-11 12:46) [3]

Для примера Отчет движения товаров и продаж по дням с условием (для оптимизации торговли) обрабатывающий порядка 500 000 записей и на выходе содержащий порядка 300 000 записей на Athlon 900 формируется за 6-12 сек.
А после полной обработке 10 000 записей которые и отправляются клиенту Скорость очень высокая.
В SQL без ХП нужно тащить более 100 МБ на клиента. А затем еще и обрабатывать. Интересно за какое время такого типа запрос пройдет на SQL


 
Alexandr   (2002-10-11 13:04) [4]

ты про что?
Ты что, сам с собой разговариваешь?
А нормальные программисты и огранизации на 1С, тем более FoxPro версии НЕ РАБОТАЮТ.
Постольку это тормоз.
А про клиент-серверные базы данных ты слышал? Ну так вот реальные программисты только их и используют.
И никаких 100МБ на клиента тащить не нужно.
И обрабатывать там уже ничего не нужно.


 
Serginio   (2002-10-11 13:16) [5]

Alexandr прочитай пожалуйста получше.
На Sql это приблизительно выглядит так
Select TovId,Date,Sum(Kolichestvo) From Rg99
Group by TovId,Date
Кроме того нужно получить остатки и получить продажи
Select TovId,Date,Sum(ProdKolichestvo) From Rg99
Where PriznakProd=1
Group by TovId,Date

обрабатывающий порядка 500 000 записей и на выходе содержащий порядка 300 000 записей

Еслиже через BDE напрямую без TField работать с записью,
то FoxPro оказывается очень быстрым.


 
Alexandr   (2002-10-11 13:23) [6]

как это через BDE напрямую без Tfield?


 
Serginio   (2002-10-11 13:31) [7]

Selected:=DbiGetRecordForKey(SpCursor,True,0,0,NewID,ActiveBuffer)=0
Через курсоры BDE


 
Johnmen   (2002-10-11 13:33) [8]

>Alexandr ©

Ты зачем вклиниваешься в монолог чела ? Дай ему выговориться !


 
Mick   (2002-10-11 13:33) [9]

Знаешь, Sergino, идея-то у тебя бредовая, извини. Прежде всего, вопросик: ты реально написал хоть одну внешнюю компоненту?


 
Alexandr   (2002-10-11 13:37) [10]

просто 1С в качестве ОСНОВНОЙ программы на предприятии у меня вызывает улыбку и мысли об скором банкротстве этого предприятия.


 
Serginio   (2002-10-11 13:40) [11]

Все это работает у меня на фирме и люди очень довольны.
Любой отчет компоненты Торговля и склад сделать без проблем. При применении клиент серверного приложения немного нужно попотеть над передачей данных неоднородных данных.


 
Jeer   (2002-10-11 13:43) [12]

Не хочу касаться 1С, т.к. меня она мало волнует, но технология объектного доступа из Дельфи к реляционным базам имеет право на жизнь и живет.
Достаточно долго для работы с DBISAM мной используется, в том числе, и такой путь.
Описание классов генериться из CASE, где моделирование таблиц ведется исходя из их иерархического(объектного) описания.
Примерно так:
// Base Tables
TIdTable = class;
TZeroTable = class;
TChildTable = class;
TChildNameTable = class;
TNameTable = class;
TTreeTable = class;
TTreeChildTable = class;
//********
TIdTable=class(TObject)
private
tmpSQL: TStringList;
protected
fID: integer;
//
fLocateFieldName: string;
fDBName: string;
fTbName: string;
fQuery: TDBISAMQuery;
procedure SetDBName(dbN: string);

public
constructor Create( AOwner: TObject ); virtual;
destructor Destroy; override;
procedure PreSetSQL(ins: boolean); dynamic;
procedure pushSQL;
procedure popSQL;
function PostSetAndExecSQL: boolean; dynamic;

Дело не в этом, а в том, что заниматься подобными вещами далеко не все хотят. За что же деньги брать как не за Оракл ?
А то, что собственно SQL или ХП - это своего рода ассемблер - привыкли.
Давно и хорошо известно, что клиент-сервер вовсе не панацея.
В моем случае, используя терминальный режим проблема трафика снимается. (сервер-приложений).
И подавляющее большинство потребителей - это вовсе не терабайтные базы и 200 users.


 
Serginio   (2002-10-11 13:43) [13]

Alexandr таких предприятий оссобенно малых и средних к твоему сожалению очень много и живут. Но я веду речь немного о другом
На сколько нужно ООП баз данных 1С это 1 из примеров.


 
Alexandr   (2002-10-11 13:44) [14]

достало


 
Serginio   (2002-10-11 13:49) [15]

Jeer При моем подходе зная правильно составленный словарь БД можно легко построить объектную модель. Единственный минус из за реляционности нужно посылать кучу маленьких запросов. Терминал сервер тоже не выход


 
Jeer   (2002-10-11 13:54) [16]

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


 
Serginio   (2002-10-11 14:00) [17]

Передавая не структурированные данные мкжду Сервером и Клиентом,
начинаешь строить объекты которые записывают и читают себя в Stream и приходишь к выводу
, что не так уж сложно сделать свою ООП БАЗУ ДАННЫХ с ранним связыванием, например вместо ID (если не нужен обмен между базами) прописовать смещение в файле объекта (очень сильно тормозят индесы не только поиск, но и его перестроение). Например строчная часть документа может сохраняться как список и не нужен огромный индес на всю строчную часть документов. Транзакции и блокировки тоже не такая большая проблема. Научить базовые объекты записывать, проводить, и считывать себя, обмениваться между клиентом и сервером только измененные части объекта.И все это делать как Клиент - Серверное приложение. Только так можно сделать корпоративное решение и скорость будет просто бешенная. А то в 1С думаешь кто быстрее посчитает я на счетах или она.


 
Alexandr   (2002-10-11 14:02) [18]

это мне чертовски напоминает COM...


 
Jeer   (2002-10-11 14:12) [19]

Ну, я думаю, что индекс на длиннострочные поля никто и не делает:))
Технология ISAM(index search..), применяемая в подавляющем большинстве СУБД пока себя еще оправдывает.
Транзакции и блокировки обеспечиваются СУБД.
Обсуждать создание своих СУБД вряд ли здесь целесообразно:))


 
Serginio   (2002-10-11 14:12) [20]

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

Вот Я и хотел узнать Нужнали скорость и облегчение ООП программирования или это очень сложно и пусть каждый занимается теми средствами которые дают производители.


 
LordOfSilence   (2002-10-11 14:17) [21]

http://www.kuban.ru/cgi-bin/forum/forum9.cgi?page=3&ask=68618

Да, уж...
"А программистов на Delphi думаю будет побольше, чем "программистов" 1С". - Ваши слова.
Однако, на "Кубани" дискуссия как-то оживленнее была.
Да и поглубже, повыше уровнем, пожалуй... Возможно, пока!
Не стал Вам отвечать на форуме Территории 1С, но раз Вы
сюда пожаловали:
Serginio, дело не в моих личных симпатиях или антипатиях
(в смысле к софту и программированию), но там, на Территории 1С,
эта тема, думаю, актуальнее.
И дело не в том, что Вы сделали что-то не так или плохо.
Просто идея все-таки довольно туманна, и, пока, сыровата,
на мой взгляд. Именно идея, а не ее реализация (это дело
будущего и это дело далеко не одного дня).
Видимо, не находит она еще отклика в умах и сердцах
Ваших слушателей. Думаю, Вы пытаетесь замахнуться на довольно
серьезную разработку, а ее необходимо продвигать
аккуратно и нежно, а не выкладками исходного текста как
обухом по голове.
Прислушайтесь к словам toypaul об инертности и т.п.
Примерно это я и хочу сказать. До того, что Вы предлагаете
необходимо созреть, дойти до необходимости подобного подхода
самому, или многим из нас. Чтобы он де-факто становился
потихоньку подобием стандарта, "средством выживания", как
пишут в "умных книжках", которые все мы читаем.

Бессмысленно человеку из средневековья, размахивающему
двуручным мечом предлагать пользоваться банкоматами и
кредитными карточками. Ну, тут я краски сгустил, признаю,
но что-то в этом духе.

Прошу не принимать мои слова как критику, в штыки,
это просто попытка порассуждать вместе с Вами на эту тему.


 
Jeer   (2002-10-11 14:26) [22]

Если говорить о Дельфи, то вот это
Jeer © (11.10.02 13:43)
позволяет создавать готовые структуры и классы из нескольких десятков таблиц за 1 день.


 
Serginio   (2002-10-11 14:28) [23]

LordOfSilence Большое спасибо все о чем ты сказал првда на 80 процентов. Тогда другой ворос 1С создала свой язык доступа к БД и открыла к себе доступ и люди потянулись. Я предлагаю по сути тоже самое но завернутое в Delphi с полным отходом от IDispatch.
И получать имена процедур и объектов через точечку. Многие пользуются объектами абсолютно не зная их начинки


 
Serginio   (2002-10-11 14:36) [24]

Jeer © (11.10.02 14:12) Я с тобой полностью согласен. Но из 1С я получаю описание объектов за 1 сек через их метаданные и зная наперед структуру легко с ними работать.
А создание ООП базы давно назрел, но только ввиде DLL.


 
jonik pegas   (2002-10-11 14:57) [25]

Есть такой обьектно-ориентированая СУБД Cаche так там примерно все так и реализовано. Создаешь класс в его обьект инспекторе, при этом он позволет обращатся и через SQL в табличном виде при этом описание класса он умеет экспортировать в tlb (или можно обращатся через позднее связывание) и с CASE средствами интерфей есть. Сам только начинаю разбиратся в нем (хорошая книга изд Питер "Cache чего то там" (название не помню) с ней и диск с 1-пользовательской версией)).
А попытки работать с табличной реляционной СУБД с собиранием в своей клиентской программе обьектов сильно напоминает способ парковки автомобиля когда в гараже он разбирается по винтикам и убирается в ящички, затем когда возникает необходимость ехать он собирается снова. Такой способ имеет право на жизнь, но эффективность его вызывает большие сомнения (это цитата из руководства по Cache)


 
Serginio   (2002-10-11 15:07) [26]

По СУБД Cаche первый вопрос в tlb он предоставляет COM объекты или dispinterface. Второе она компилирует исходный код или работает с поздним связыванием. А на счет "А попытки работать с табличной реляционной СУБД " если создал структуру то изменять надо только после реструктуризации БД



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2002.10.31;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.009 c
1-101226
stany
2002-10-18 23:11
2002.10.31
Нужен компонент типа StringGrid выводить заголовки полей...


14-101492
Николай Быков
2002-10-11 16:11
2002.10.31
Си плюс плюсы


3-101067
AlGin
2002-10-11 22:36
2002.10.31
ROLE+BDE+InterBase


1-101201
Демонов Е.В.
2002-10-21 14:14
2002.10.31
Вопрос про Реестр ?


7-101543
max2057
2002-08-27 15:46
2002.10.31
Privasy Protection Software





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский