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

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

gloomy
Посетитель
Сообщения: 39
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Архангельская область ООО "Фалькон плюс"
Контактная информация:

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

Сообщение 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;
ВОПРОС: Как получить значение из привязанной таблицы?
Max_Fin
На пенсии
Сообщения: 797
Зарегистрирован: 29 мар 2005, 17:49
Откуда: г. Тюмень
Контактная информация:

Сообщение Max_Fin »

coTxoGetExtAttr появиться в патче, вчера разговаривал с разработчиками примерно через месяц (только 712, естественно)
san
Местный житель
Сообщения: 412
Зарегистрирован: 28 апр 2005, 11:34
Откуда: Галактика Млечный Путь

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

Сообщение 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)
Maverick
Абориген
Сообщения: 943
Зарегистрирован: 29 мар 2005, 17:49
Откуда: External Developer
Контактная информация:

Сообщение 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;
Изображение
Знающий людей разумен.
Знающий себя просветлён.
Побеждающий людей силен.
Побеждающий самого себя могущественнен
san
Местный житель
Сообщения: 412
Зарегистрирован: 28 апр 2005, 11:34
Откуда: Галактика Млечный Путь

Сообщение san »

ф-ции объявленные через объектный интерфейс тормозят если вы не заметили. у меня была прога которая работала три часа и активно использовала ф-ции объектных интерфейсов, для чтения атрибутов. вот. и когда я переписал фи-ции на паскалевские, прога стала работать 10 мин. вот и думай про велосипед.
Max_Fin
На пенсии
Сообщения: 797
Зарегистрирован: 29 мар 2005, 17:49
Откуда: г. Тюмень
Контактная информация:

Сообщение Max_Fin »

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

Что касается данного конкретного вопроса, то не верю в такой прирост с 3 часов до 10 минут! Не верю!
WiRuc
Местный житель
Сообщения: 414
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Воронеж

Сообщение WiRuc »

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

Сообщение Max_Fin »

По поводу медленности, говорю же не спорю, но не настолько.
Пугают тут...
san
Местный житель
Сообщения: 412
Зарегистрирован: 28 апр 2005, 11:34
Откуда: Галактика Млечный Путь

Сообщение san »

Max_Fin писал(а):По поводу медленности, говорю же не спорю, но не настолько.
Пугают тут...
Предлагаю тему быстродействия обсудить новой темой.
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Сообщение Алексей »

подниму тему! :)
брать атрибуты функцией - возможно. а есть ли возможность устанавливать атрибуты функцией?
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

ExtAttr.vih смотрите внимательно. При том атрибут даже сам создается. Функция для установки дависит от типа требуемого.
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Сообщение Алексей »

я пока и так через объектный интерфейс сделал.
имел в виду паскалевскую функцию, без объявления переменных, наподобие sTxoGetExtAttr есть что-то подобное?
хотя навряд ли.
galover
Местный житель
Сообщения: 794
Зарегистрирован: 16 ноя 2007, 13:52

Сообщение galover »

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

Сообщение LaaLaa »

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

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

Единственный совет: Для своих разработок проводите собственные измерения. Не важно на каком языке делаете разработку на С++ или на Атлантисе.
Senkrid
Постоянный гость
Сообщения: 74
Зарегистрирован: 10 ноя 2009, 07:08
Откуда: Ангарск
Контактная информация:

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

Сообщение 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),'')
Ответить