BEST logo логотип компании БЭСТ - программы для бизнеса ПРОДАЖИ
+7 (991) 312-04-37
trade@bestnet.ru
ПОДДЕРЖКА
+7 (495) 775-66-76
consult@bestnet.ru
СКАЧАТЬ
Обновления
Дистрибутивы
Авторизация

Логин:
Пароль:
Забыли свой пароль?
Регистрация
ВАШ ВОПРОС

Доступ к Личному кабинету закрыт!
Как получить доступ?


Главная  / Поддержка  / Форум  / Публичные форумы  / Программирование приложений  / Отличия запуска из главного меню от запуска из реестров

Форум

Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Отличия запуска из главного меню от запуска из реестров
 
Не хватает переменной для использования функция S_TS() при запуске из главного меню.

Вот такой код работает из реестра ЗП:
Код
Local aSetKey
Local nSum
aSetKey:=SaveSetKey()
DBPUSH()
LoadLibrary("salary.bdll")

  NetUse("F_CardSpri",LoadPath() + "salary\cardspri.dbf")
  F_CardSpri->(ORDSETFOCUS("_01"))
  F_CardSpri->(dbGoTop())

    nSum := F_CardSpri->(S_TS("САЛЬДО", "2008.01", "КАРТ"))
    SayAndWait(Str(nSum))

  F_CardSpri->(DBCLOSEAREA())

DbPop()
RestSetKey(aSetkey)


Для использовая функции из ЗП при запуске из главного меню использую LoadLibrary("salary.bdll"). Но при запуске из главного меню ругается на переменную S_Period. В моем коде эта переменная не используется, но видимо она используется функцией S_TS()
 
Как определить, что программа была запущена из главного меню?
 
Хе-хе. Вы, лично, уже столько отличий нашли.
К чему подобные Вопросы? :-)
С уважением, Новиков Алексей.
 
Мне тоже непоняnно - что Вам мешает ее определить в Вашем коде ? Или может ее просто объявить надо, а ее определит используемая функция в библиотеке...

Я примерно так поступаю когда ругается на отсутствие каких-либо переменных...

Код S_TS

Цитата
Function S_TS(cType, cPer, xCombi)

MemVar cEPeriod, cCombi

Local cTNum, cField, _Combi, nRet

Local aType := {;
"САЛЬДО", "НАЧИСЛЕНО", "УДЕРЖАНО", "КВЫДАЧЕ","ДОХОД";
}

Local aTran := {;
"SALDO", "SUMIN", "SUMOUT", "ENDSUM","SUMIN";
}

If Y_Nil(cPer) .And. Y_Type(MemVarBlock("cAPeriod"), "B")
cPer := m->cAPeriod
EndIf

Private cAPeriod

If Y_Type(MemVarBlock("NFLAG"), "B")
Return (1)
EndIf

If Y_Nil(cType) .Or. AScan(aType, cType) == 0
Return (0)
EndIf

PV_Init(, @cPer)

cTNum := GetTNum()

cField := aTran[AScan(aType, cType)]

_Combi := If(Y_Type(xCombi, "C") .And. xCombi $ "СОТР.КАРТ",;
xCombi,;
cCombi) == "СОТР"

cAPeriod := cPer

If cPer == S_PERIOD

If _Combi
DBPush(,If(Alias() == "CARDSPRI","_17",))
DBSeek(Upper(cTNum))
nRet := TSum(cField)
DBPop()
else
nRet := Any("Cardspri", "_17", Upper(FiGet(TNUM)), cField)
ENDIF
ELSE
If _Combi
DBPush("Arc_crd", "_01")
DBSeek(Upper(cPer + cTNum))
nRet := TSum(cField)
DBPop()
else
nRet := Any("Arc_crd", "_01", Upper(cPer + FiGet(TNUM)), cField)
ENDIF
ENDIF

Return (nRet)
Изменено: nordk - 25.08.2008 14:00:25
 
Цитата
nordk пишет:
Мне тоже непоняnно - что Вам мешает ее определить в Вашем коде ?


Определил эту переменную в своем коде. Потом еще понадобилось определить алиас. Определил и его. Работает.

Но это все мелочи, главная проблема может возникнуть в будущем, если в одном из пакетов эта функция измениться и ей потребуется еще какая-та переменная. Поэтому в идеале должно быть, что написал LoadLibrary("приложение") и пользуйся функциями из этого приложения без объявления дополнительных вещей.

А иначе не стоит запускать из главного меню и морочить голову (себе и пользователям). Но запуск из главного меню в некоторых случаях выглядит красивей и логичней.

P.S. Спасибо за код функции S_TS
 
Запуск библиотеки не означает, что она была написана для применения при программирования пользователем и уж тем более не означает что она должна для этого поддерживаться... И тем более тут нет никакого логического перехода на возможность запуска из главного меню. Такую возможность сделали в принципе, а где Вы будете запускать свой плагин - Вы должны сами для себя решить.
Механизмы, которые поддерживаются и на которые можно или стоит опираться, документируются в Help. Конкретно по этой функции очень маловероятно что она будет изменена, но если будет - значит на сообщение об ошибке проконсультируем. Пока так.
Поддержка любых пользовательских решений задача ОЧЕНЬ не простая и над ней идут размышления.

Для решения подобных вопросов существует этот форум и по их статистике также делаются выводы...
Так что спрашивайте: всегда постарается тут кто-то Вам подсказать.
Страницы: 1
Читают тему (гостей: 1)