Страница 1 из 2

TxoGetExtAttr и ПК "Галактика" версия 7.12

Добавлено: 15 июн 2005, 17:55
gloomy
Добрый день.
В ПК "Галактика" версия 7.12 появилась возможность выбирать внешний атрибут из таблиц, т.е. вн. атрибут к таблице DOGOVOR ссылается на значение в таблице KATPODR.
В документации описаны функции доступа к простым типам:
sTxoGetExtAttr(TableName, AttrName:string; cRec:comp):string;
doTxoGetExtAttr(TableName, AttrName:string; cRec:comp):double;
dTxoGetExtAttr (TableName, AttrName:string; cRec:comp):date;
tTxoGetExtAttr (TableName, AttrName:string; cRec:comp):time;
ВОПРОС: Как получить значение из привязанной таблицы?

Добавлено: 16 июн 2005, 09:43
Max_Fin
coTxoGetExtAttr появиться в патче, вчера разговаривал с разработчиками примерно через месяц (только 712, естественно)

Давным давно с версии 5.7 есть ф-ции для чтения атрибутов

Добавлено: 01 июл 2005, 06:22
san
cfsExtClassGetVal(word,comp,comp):string;
cfsExtAttrGetVal(word,comp,comp):string;
cfsExtAttrGetVal_S(word,comp,comp):string;
cfsExtAttrGetVal_F(word,comp,comp):double;
cfsExtAttrGetVal_D(word,comp,comp):date;
cfsExtAttrGetVal_T(word,comp,comp):time;
параметры (TableCode: word; NRec, ClassNRec: Comp)

Добавлено: 13 июл 2005, 10:21
Maverick
Не выдумывайте велосипед.

1. заюзать ExtAttr.vih
2. Объявить переменную типа ExtAttr
3. Использовать одну из фи-й нового набора:

Код: Выделить всё

 // Создает внешний аттрибут с типом Comp. Если существует - возвращает ссылку.
  Function CreateAttrComp ( _wTable : word; _Name : string; _Type : word; _SysNumKau : word; _KodKau : word) : comp;
//  параметры:
// *** _SysNumKau  - системный номер аналитики. Доступны константы
//  cgKatKau_Table    = 0;      // системные
//  cgKatKau_User     = 1;      // пользовательские
//  cgKatKau_System   = 100;    // системные каталоги не являющиеся аналитикой (любая таблица Галактики)
// *** _KodKau - код аналитики для _SysNumKau=0 или 1. Или код таблицы для _SysNumKau=100
// Возвращает код КАУ(или код таблицы) по ID атрибута
  Function AttrCompKodKau ( _cAttrNam: comp) : word;
// Возвращает системный номер КАУ по ID атрибута
  Function AttrCompSysNumKau ( _cAttrNam: comp) : word;
// Функции возвращают значение внешнего аттрибута по коду таблицы, имени атрибута и nRec-ку записи
  function coGetAttr(_wTable : word; _cRec : comp; _Name : string) : comp;
// Функции возвращают значение внешнего аттрибута по коду таблицы, коду атрибута и nRec-ку записи
  function coGetAttrID(_wTable : word;  _cRec : comp; _cAttrNam : comp) : comp;
// Функции устанавливает значение внешнего аттрибута по коду таблицы, имени атрибута и nRec-ку записи
  function coSetAttr(_wTable : word; _cRec : comp; _Name : string; _Val : comp; _ValStr : string) : boolean;
// Функции устанавливает значение внешнего аттрибута по коду таблицы, ID атрибута и nRec-ку записи
  function coSetAttrID(_wTable : word; _cRec : comp; _cAttrNam : comp; _Val : comp; _ValStr : string) : boolean;

Добавлено: 20 июл 2005, 12:44
san
ф-ции объявленные через объектный интерфейс тормозят если вы не заметили. у меня была прога которая работала три часа и активно использовала ф-ции объектных интерфейсов, для чтения атрибутов. вот. и когда я переписал фи-ции на паскалевские, прога стала работать 10 мин. вот и думай про велосипед.

Добавлено: 20 июл 2005, 13:19
Max_Fin
Да, согласен, что объектные интерфейсы тормозят процесс. Особенно это заметно на Галактике 7.12, где особенно проявилось смещение приоритетов в сторону использования объектных интерфейсов.
Но огромный плюс использования объектных интерфейсов в их "модульности" и унифицированности , т.е. написал раз и используй их в своих нуждах.

Что касается данного конкретного вопроса, то не верю в такой прирост с 3 часов до 10 минут! Не верю!

Добавлено: 20 июл 2005, 14:00
WiRuc
Max_Fin писал(а):Что касается данного конкретного вопроса, то не верю в такой прирост с 3 часов до 10 минут! Не верю!
Почему нет? Даже в компиляторах типа С++ ООП медленнее, чем процедурный язык, а уж в таком отстойном, коим является Атлантис, все возможно. Ведь уже проскальзывала инфа о том, что одна и та же функция, написанная на Атлантисе и на Паскале, работает гораздо медленнее в первом случае. Плюс сюда еще накладывается ООП.

Добавлено: 20 июл 2005, 14:13
Max_Fin
По поводу медленности, говорю же не спорю, но не настолько.
Пугают тут...

Добавлено: 29 июл 2005, 10:34
san
Max_Fin писал(а):По поводу медленности, говорю же не спорю, но не настолько.
Пугают тут...
Предлагаю тему быстродействия обсудить новой темой.

Добавлено: 28 янв 2010, 06:52
Алексей
подниму тему! :)
брать атрибуты функцией - возможно. а есть ли возможность устанавливать атрибуты функцией?

Добавлено: 28 янв 2010, 10:26
edward_K
ExtAttr.vih смотрите внимательно. При том атрибут даже сам создается. Функция для установки дависит от типа требуемого.

Добавлено: 28 янв 2010, 10:57
Алексей
я пока и так через объектный интерфейс сделал.
имел в виду паскалевскую функцию, без объявления переменных, наподобие sTxoGetExtAttr есть что-то подобное?
хотя навряд ли.

Добавлено: 28 янв 2010, 10:58
galover
кстати по поводу тормозов, кто-нибудь мерил затраты на вызов функции объектного фейса. На глаз скорость вызова вроде приемлимая. Заметил что тормоза появляются на циклах, особенно если есть вложенные, компилятор Атлантиса такие вещи вообще никак похоже не оптимизирует, тот же С++ умеет разворачивать циклы в линейные конструкции

Добавлено: 29 янв 2010, 12:00
LaaLaa
galover писал(а):кстати по поводу тормозов, кто-нибудь мерил затраты на вызов функции объектного фейса. На глаз скорость вызова вроде приемлимая. Заметил что тормоза появляются на циклах, особенно если есть вложенные, компилятор Атлантиса такие вещи вообще никак похоже не оптимизирует, тот же С++ умеет разворачивать циклы в линейные конструкции
Я мерял. Сами по себе вызовы функций объектов по скорости не отличаются от вызовов локальных функций интерфейсов. В отношении объектов могу только отметить, что загрузка объектов (объектных интерфейсов) немного долгая. По этому если в цикле загружать, вызвать функцию, выгружать объект то будут накладки по времени. Желательно выносить инициализацию объектов (каскада связанных объектов) за пределы циклов расчета.

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

Единственный совет: Для своих разработок проводите собственные измерения. Не важно на каком языке делаете разработку на С++ или на Атлантисе.

Re: TxoGetExtAttr и ПК "Галактика" версия 7.12

Добавлено: 18 ноя 2011, 08:21
Senkrid
Подскажите, как работает sTxoGetExtAttr?

Пример: есть два заполненых атрибута для KatSopr
  • 'Атр1' - тип Строка
    'Атр2' - тип Ссылка на аналитику (пользовательскую)
sTxoGetExtAttr('KATSOPR','Атр1', KatSopr.NRec) - возвращает корректное значение,
sTxoGetExtAttr('KATSOPR','Атр2', KatSopr.NRec) - возвращает"" (пусто), причем поле vString заполнено. Это связано с типом атрибута?

PS
Значение выбранной аналитики пока получил так:
if(GetAnyKau(0, код_аналитики,coTxoGetExtAttr('KATSOPR','Атр2', KatSopr.NRec)),GivenAnName(cgAnStrKod),'')