Текущее время: Вс, июл 20 2025, 07:20

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 54 ]  На страницу Пред.  1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Пт, дек 05 2008, 13:26 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, сен 23 2004, 18:43
Сообщения: 1556
Откуда: Москва
А я в фоне веду собственные разработки и на Дельфи.
И очень не хватало компонента-ITAB, подобного АВАРовскому.
Совместно с удаленцами, сделали компонент TDataTable, подобный SAPовскому, но с более навороченными фичами. Не в виде компонента, а в виде класса.
То, что нравилось - позаимствовали. То, что не нравилось - исправили/доработали.

Причем, когда только задумывал - другие разработчики, которые узнавали о идее, пугали, что мол это будет очень сложно, разработка займет годы, даже что это невозможно, и т.п. ерунду.
Чушь. Месяца за 3-4 слепили, используется уже не меньше года.
Глаза боятся - руки делают.

От SAP'а взял: хередлайны, loop, at NEW/END, Ranges (для WHERE) .
Code:
    TComparisonType = (
       ctLessThan,
       ctLessEqualThan,
       ctEqual,
       ctBetween,
       ctGreaterEqual,
       ctGreaterThan,
       ctMask
    );

    TIncludeType = (itInclude, itExclude);

    TRangesItem = record
       FieldName: String;
       Low, High: Variant;
       Option: TComparisonType;
       Sign: TIncludeType;
        CRegExpr: TRegExpr;
    end;

    TRanges = array of TRangesItem;


Дополнительные навороты:
1.) Вторичные индексы (любое количество для одной таблицы) и возможность производить над таблицей сразу несколько лупов одновременно (без передергиваний-восстановлений курсора, по индексам - у каждого индекса свой, независимый "sy-tabix").
Code:
     
      procedure BeginLoop(ARanges: TRanges; LoopName: String; StartIndex: Integer = 0; AnIndexName: String = '');
      function NextLoop(LoopName: String): Boolean;
      procedure EndLoop(LoopName: String);

      function IsNew(ALoopName, AFieldNames: String): Boolean;
      function IsEnd(ALoopName, AFieldNames: String): Boolean;
      function IsLast(ALoopName: String): Boolean;


2.) Записи-ссылки. Т.е. данные не копируются из одной таблицы в другую, а просто создается ссылка. Можно строить целые "гирлянды" из этих таблиц (т.е. корневая таблица содержит все записи, а последующие - некоторое подмножество; например, для апдейта);
3.) Загрузка/Выгрузка из/в XML;
Code:
     
function PackToString: String; override;
procedure UnpackFromString(ASource: String); override;


4.) Блокировка записей;
5.) По запросу выдает измененные, добавленные и удаленные записи. Отдельным методом версия блокируется (флажки изменений сбрасываются);
6.) Разумеется, динамические структуры;
7.) Результаты Collect и Sum складываются в отдельную таблицу/структуру, которую не надо создавать специально:

Code:

function Collect(ARanges: TRanges; const AKeyFields, ASumFields, ACountFields: String): TDataTable;
function SumBy(ARanges: TRanges; const AKeyFields, ASumFields, ACountFields: String): TDataStructure;


И прочие, прочие навороты... Сейчас слишком долго описывать.

Это я все к чему? Странно, что SAP сам до сих пор не додумался до подобных штук.

ЗЫ. На очереди собственный внутренний язык.

_________________
Hе иди по течению, не иди против течения - иди поперек него, если хочешь достичь берега.
Слова Ванталы. Дела Ванталы


Последний раз редактировалось 111 Пт, дек 05 2008, 13:36, всего редактировалось 1 раз.

Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, дек 05 2008, 13:35 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
111, отчасти велосипед. Например:
Цитата:
TMemTableEh - dataset, which hold data in memory. Its possible consider as an array of records.
Besides, it:
Supports a special interface, which allows DBGridEh component to view all data without moving active record.
Allows fetch data from TDataDriverEh object (DataDriver property).
Allows unload change back in DataDriver, operative or postponed (in dependencies of the CachedUpdates property).
Allows to create a master/detail relations on the client (filtering record) or on the external source (updating parameters [Params] and requiring data from DataDriver).
Allows once-only (without the dynamic support) sort data, including Calculated and Lookup field.
Allows create and fill data in design-time and save data in dfm file of the Form.
Allows keep record in the manner of trees. Each record can have record elements-branches and itself be an element to other parental record. Component TDBGridEh supports to show the tree-type structure of these records.
Allows to connect to the internal array of other TMemTableEh (via ExternalMemData property) and work with its data: sort, filter, edit.
Has interface for requesting list of all unique values in one column of records array, ignoring local filter of the DataSet. TDBGridEh uses this property for automatic filling a list in DropDownBox of the subtitle filter cell.

ehlib


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, дек 05 2008, 13:39 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, сен 23 2004, 18:43
Сообщения: 1556
Откуда: Москва
Пономарев Артем написал:
111, отчасти велосипед. Например:
Цитата:
TMemTableEh - dataset, which hold data in memory. Its possible consider as an array of records.
Besides, it:
Supports a special interface, which allows DBGridEh component to view all data without moving active record.
Allows fetch data from TDataDriverEh object (DataDriver property).
Allows unload change back in DataDriver, operative or postponed (in dependencies of the CachedUpdates property).
Allows to create a master/detail relations on the client (filtering record) or on the external source (updating parameters [Params] and requiring data from DataDriver).
Allows once-only (without the dynamic support) sort data, including Calculated and Lookup field.
Allows create and fill data in design-time and save data in dfm file of the Form.
Allows keep record in the manner of trees. Each record can have record elements-branches and itself be an element to other parental record. Component TDBGridEh supports to show the tree-type structure of these records.
Allows to connect to the internal array of other TMemTableEh (via ExternalMemData property) and work with its data: sort, filter, edit.
Has interface for requesting list of all unique values in one column of records array, ignoring local filter of the DataSet. TDBGridEh uses this property for automatic filling a list in DropDownBox of the subtitle filter cell.

ehlib


Сколько ни смотрел этих компонент (как правило, индусских - они пачками лепят всякие красивые петушки из г...на) - по описанию и демкам все здорово и круто. А как начинаешь использовать и вплотную разбираться... Тут не то, там не так.
Разочаровался и решил сделать именно так, как сам хочу.

У меня это - 1 самодостаточный юнит (которому больше ничего не нужно, кроме разве что стандартных Дельфийских юнитов).
Иерархия:
TObject->TDataCompositeObject->TDataStructure->TDataTable .
Никаких инсталляций, Run-time паккэйджей и пр. чешуи не нужно. Подцепляешь юнит, и вперед.
Критичные методы написаны на Assembler.
Скорость работы - охренительная.
Функциональность - исчерпывающая (даже и не знаю, что еще можно придумать).

_________________
Hе иди по течению, не иди против течения - иди поперек него, если хочешь достичь берега.
Слова Ванталы. Дела Ванталы


Последний раз редактировалось 111 Пт, дек 05 2008, 13:50, всего редактировалось 3 раз(а).

Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, дек 05 2008, 13:48 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
Кхм, Delphi как среда RAD разработки интересна как раз большим количеством сторонних компонент.
А касательно библиотек EhLib и DevExpress - то они уже стали стандартом de facto. Кстати, индусов ни там ни там замечено не было. EhLib так вообще нашего соотечественника продукт.
Если писать для себя - то можно и свои реализации пользовать, конечно.

Но это злостный оффтоп :)

З.Ы.:
Цитата:
Критичные методы написаны на Assembler.

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


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, дек 05 2008, 13:53 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, сен 23 2004, 18:43
Сообщения: 1556
Откуда: Москва
Пономарев Артем написал:
Но это злостный оффтоп :)

Ну я-то об этом упомянул только к тому, что странно, что SAP до подобного не додумался. Вроде достаточно естественные хотелки.
Это в тему про достоинства и недостатки LOOP... AT NEW... и т.д.

_________________
Hе иди по течению, не иди против течения - иди поперек него, если хочешь достичь берега.
Слова Ванталы. Дела Ванталы


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, дек 05 2008, 14:32 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Сб, сен 25 2004, 16:30
Сообщения: 1368
Откуда: Москва
Пол: Мужской
111 написал(а):
странно, что SAP до подобного не додумался. Вроде достаточно естественные хотелки.

Если еще вспомнить, что в ABAPе нельзя юзать арифметических выражений в условиях и нет булевых значений...

_________________
С уважением, Сергей Королев


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, дек 05 2008, 14:35 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, сен 23 2004, 18:43
Сообщения: 1556
Откуда: Москва
Сергей Королев написал:
111 написал(а):
странно, что SAP до подобного не додумался. Вроде достаточно естественные хотелки.

Если еще вспомнить, что в ABAPе нельзя юзать арифметических выражений в условиях и нет булевых значений...

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

Что-нибудь вроде,
COLLECT itab INTO ctab KEYS ...,
SUM itab INTO ls_SUM FIELDS ....,
AT NEW field field2 field3 ...,
LOOP at itab AS loopname .

И т.д., и т.п.

_________________
Hе иди по течению, не иди против течения - иди поперек него, если хочешь достичь берега.
Слова Ванталы. Дела Ванталы


Последний раз редактировалось 111 Пт, дек 05 2008, 15:23, всего редактировалось 1 раз.

Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, дек 05 2008, 15:18 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
111 написал(а):
Сергей Королев написал:
111 написал(а):
странно, что SAP до подобного не додумался. Вроде достаточно естественные хотелки.

Если еще вспомнить, что в ABAPе нельзя юзать арифметических выражений в условиях и нет булевых значений...

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

Что-нибудь вроде,
COLLECT itab INTO ctab KEYS ...,
SUM itab INTO ls_SUM FIELDS ....,
AT NEW field, field2, field3 , ....
LOOP at itab AS loopname .

И т.д., и т.п.

Извините, Вы не могли бы объяснить как это сделать?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, дек 05 2008, 15:22 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, сен 23 2004, 18:43
Сообщения: 1556
Откуда: Москва
Besa написал:
Извините, Вы не могли бы объяснить как это сделать?

То есть? :) Это были просто мои фантазии.
"Вот бы SAP так реализовал...". :roll:

_________________
Hе иди по течению, не иди против течения - иди поперек него, если хочешь достичь берега.
Слова Ванталы. Дела Ванталы


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, дек 05 2008, 15:47 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
Сергей Королев написал:
Если еще вспомнить, что в ABAPе нельзя юзать арифметических выражений в условиях

Ну костыль есть. В виде методов с Returning параметром.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, дек 05 2008, 16:17 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Сб, сен 25 2004, 16:30
Сообщения: 1368
Откуда: Москва
Пол: Мужской
Пономарев Артем написал:
Ну костыль есть. В виде методов с Returning параметром.

Это конечно, да и вообще в след версии таки будут выражения.

_________________
С уважением, Сергей Королев


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, дек 05 2008, 16:22 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, янв 25 2005, 19:26
Сообщения: 67
Пол: Мужской
Ну кое-что уже есть или скоро будет. :)

Много вкусностей описано тут:
COMP209 News In ABAP –Concepts to Further Increase the Power of ABAP Development

http://www.vadoid.com/sap/teched08/COMP209_v2.pdf

_________________
Come to Cookies! We Have Dark Sides!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, дек 08 2008, 16:34 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Чт, мар 09 2006, 10:12
Сообщения: 565
Откуда: Волгодонск
Пол: Мужской
FOR ALL ENTERIES
тоже иногда приводит к весьма неожиданным последствиям
1. надо обязательно проверять что табличка не пустая
2. эта команда делает distinct над выбранными записями

но ведь это не значит что ей нельзя пользоваться
также и с AT NEW... просто надо помнить некоторые особенноси операторов.

Хотя соглашусь комбинацию where и at надо было запретить на уровне синтаксиса.

Про Delphi
тоже когда столкнулся ABAP-ом концепция внутренних таблиц меня просто восхитила и не недоумевал почему в Delphi и прочих.. работа с массивами столь примитивна, да и в ABAP-e из неё выжали гораздо меньше чем можно было бы
так что полностью согласен с 111
к стати интересно былобы взглянуть на сей труд


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, дек 08 2008, 16:47 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
DKiyanov,
внтуренние таблицы в ABAP - от безысходности.
Вернее от того, что SQL поддерживается на зачаточном уровне.

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

Что каксается прочих: Ну посмотрите список контейнеров в STL (С++).
Про boost я даже молчу.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, дек 08 2008, 19:52 
Президент
Президент

Зарегистрирован:
Пт, апр 28 2006, 22:39
Сообщения: 2514
Откуда: North Taxolina, USA
Пол: Женский
Да будет вам жаловаться уже - скажите спасибо, что операторы хоть не на немецком. Попрограммировали бы на mainframe чуток , после этого ABAP как манна небесная. 8)

_________________
"One of the symptoms of an approaching nervous breakdown is the belief that one's work is terribly important." Bertrand Russell


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 54 ]  На страницу Пред.  1, 2, 3, 4  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB