TxoGetExtAttr и ПК "Галактика" версия 7.12
Модераторы: m0p3e, edward_K, Модераторы
-
- Посетитель
- Сообщения: 39
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Архангельская область ООО "Фалькон плюс"
- Контактная информация:
TxoGetExtAttr и ПК "Галактика" версия 7.12
Добрый день.
В ПК "Галактика" версия 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;
ВОПРОС: Как получить значение из привязанной таблицы?
В ПК "Галактика" версия 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;
ВОПРОС: Как получить значение из привязанной таблицы?
-
- Местный житель
- Сообщения: 412
- Зарегистрирован: 28 апр 2005, 11:34
- Откуда: Галактика Млечный Путь
Давным давно с версии 5.7 есть ф-ции для чтения атрибутов
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)
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)
-
- Абориген
- Сообщения: 943
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: External Developer
- Контактная информация:
Не выдумывайте велосипед.
1. заюзать ExtAttr.vih
2. Объявить переменную типа ExtAttr
3. Использовать одну из фи-й нового набора:
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;
-
- На пенсии
- Сообщения: 797
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: г. Тюмень
- Контактная информация:
Да, согласен, что объектные интерфейсы тормозят процесс. Особенно это заметно на Галактике 7.12, где особенно проявилось смещение приоритетов в сторону использования объектных интерфейсов.
Но огромный плюс использования объектных интерфейсов в их "модульности" и унифицированности , т.е. написал раз и используй их в своих нуждах.
Что касается данного конкретного вопроса, то не верю в такой прирост с 3 часов до 10 минут! Не верю!
Но огромный плюс использования объектных интерфейсов в их "модульности" и унифицированности , т.е. написал раз и используй их в своих нуждах.
Что касается данного конкретного вопроса, то не верю в такой прирост с 3 часов до 10 минут! Не верю!
Почему нет? Даже в компиляторах типа С++ ООП медленнее, чем процедурный язык, а уж в таком отстойном, коим является Атлантис, все возможно. Ведь уже проскальзывала инфа о том, что одна и та же функция, написанная на Атлантисе и на Паскале, работает гораздо медленнее в первом случае. Плюс сюда еще накладывается ООП.Max_Fin писал(а):Что касается данного конкретного вопроса, то не верю в такой прирост с 3 часов до 10 минут! Не верю!
кстати по поводу тормозов, кто-нибудь мерил затраты на вызов функции объектного фейса. На глаз скорость вызова вроде приемлимая. Заметил что тормоза появляются на циклах, особенно если есть вложенные, компилятор Атлантиса такие вещи вообще никак похоже не оптимизирует, тот же С++ умеет разворачивать циклы в линейные конструкции
Я мерял. Сами по себе вызовы функций объектов по скорости не отличаются от вызовов локальных функций интерфейсов. В отношении объектов могу только отметить, что загрузка объектов (объектных интерфейсов) немного долгая. По этому если в цикле загружать, вызвать функцию, выгружать объект то будут накладки по времени. Желательно выносить инициализацию объектов (каскада связанных объектов) за пределы циклов расчета.galover писал(а):кстати по поводу тормозов, кто-нибудь мерил затраты на вызов функции объектного фейса. На глаз скорость вызова вроде приемлимая. Заметил что тормоза появляются на циклах, особенно если есть вложенные, компилятор Атлантиса такие вещи вообще никак похоже не оптимизирует, тот же С++ умеет разворачивать циклы в линейные конструкции
В отношении того, что тормоза появляются на циклах, то это естественно чем больше повторений тем больше времени. Тут все зависит от качества вашего алгоритма, а не от языка программирования. Слишком мало информации чтобы дать комментарий. Адекватное сужденние о скорости можно дать только для конкретного экземпляра программы на конкретном наборе данных.
Единственный совет: Для своих разработок проводите собственные измерения. Не важно на каком языке делаете разработку на С++ или на Атлантисе.
-
- Постоянный гость
- Сообщения: 74
- Зарегистрирован: 10 ноя 2009, 07:08
- Откуда: Ангарск
- Контактная информация:
Re: TxoGetExtAttr и ПК "Галактика" версия 7.12
Подскажите, как работает sTxoGetExtAttr?
Пример: есть два заполненых атрибута для KatSopr
sTxoGetExtAttr('KATSOPR','Атр2', KatSopr.NRec) - возвращает"" (пусто), причем поле vString заполнено. Это связано с типом атрибута?
PS
Значение выбранной аналитики пока получил так:
if(GetAnyKau(0, код_аналитики,coTxoGetExtAttr('KATSOPR','Атр2', KatSopr.NRec)),GivenAnName(cgAnStrKod),'')
Пример: есть два заполненых атрибута для KatSopr
- 'Атр1' - тип Строка
'Атр2' - тип Ссылка на аналитику (пользовательскую)
sTxoGetExtAttr('KATSOPR','Атр2', KatSopr.NRec) - возвращает"" (пусто), причем поле vString заполнено. Это связано с типом атрибута?
PS
Значение выбранной аналитики пока получил так:
if(GetAnyKau(0, код_аналитики,coTxoGetExtAttr('KATSOPR','Атр2', KatSopr.NRec)),GivenAnName(cgAnStrKod),'')