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

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

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


Форум

Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Закрытие файлов в Б5 3.4
 
БЭСТ5 3.4 СП8. Вызов плагина из ЗП. Ввод и компиляция плагина через редактор XBA.

Столкнулся с проблемой закрытия файлов. Максимально упростил пример.

Если пишу:
Код
  NetUse("F_Accounts", LoadPath() + "salary\accounts.dbf")
  F_Accounts->(dbGoTop())
  SayAndWait(F_Accounts->TNum)
  altd()
  F_Accounts->(DBCLOSEAREA())

То после выполнения плагина вылетает ошибка (см. скриншот).

Если в плагине открыть еще один алиас и не закрывать его. Вот так:
Код
  NetUse("F_Accounts", LoadPath() + "salary\accounts.dbf")
  NetUse("F_cardspri", LoadPath() + "salary\cardspri.dbf")
  F_Accounts->(dbGoTop())
  SayAndWait(F_Accounts->TNum)
  altd()
  F_Accounts->(DBCLOSEAREA())

То ошибки после выполнения плагина не будет, а открытый алиас останется. Другими словами ошибка происходит, если закрывать все созданные алиасы.

Что я делаю не так? Такая ошибка только у меня?
 
Добрый день.

Ошибка в том, что на момент запуска плагина в текущей рабочей области открыта база, по которой работает Initlist. Плагин открывает свои базы, меняя рабочую область. Функция dbclosearea() закрывает файл в текущей области, не меняя области. Поэтому когда плагин возвращает управление в БЭСТ, initilist пытается работать на закрытой области. Отсюда ошибка.

Самое простое решение - это заключить тело плагина между парой функций dbpush() - dbpop(), которые сохраняют и восстанавливают состояние рабочей области, соответственно.
Также, можно запоминать установленную рабочую область при входе в плагин, получив её с помощью alias() и восстановить её в конце плагина с помощью dbselectarea().
С уважением, Новиков Алексей.
 
Цитата
Алексей Новиков пишет:
Самое простое решение - это заключить тело плагина между парой функций dbpush() - dbpop(), которые сохраняют и восстанавливают состояние рабочей области, соответственно.


Спасибо! Похоже помогло.
Страницы: 1
Читают тему (гостей: 1)