Не удалось открыть QB

Я давний разработчик С#, но новичок в QBFC. Я загрузил образцы и действительно смог добавить счет-фактуру в свой файл, но я немного запутался. У меня проблемы с подключением, если QB не запущен и не работает. Я пытался следовать коду в образце, но это сложно. Мне нужно это приложение, чтобы добавлять счета и счета в файл, даже если QB не открыт. У них есть только один файл, поэтому не будет случая, когда другой файл уже открыт. Кроме того, среда проста, так как все работает на одном компьютере.

Мои основные вопросы:

  1. Как выбрать правильный файл QB и предоставить учетные данные для доступа?
  2. Есть ли достойный простой пример с использованием QBFC? Все, что я нашел, использует XML, который кажется слишком сложным по сравнению с QBFC.
  3. Кажется, я не могу заставить QB открываться автоматически. Я попробовал код ниже, и я получаю сообщение об ошибке «Не удалось запустить QuickBooks».

Любые указатели приветствуются.

        QBSessionManager qbSession = new QBSessionManager();
        qbSession.OpenConnection("", "Lumber Management System");
        try
        {
            qbSession.BeginSession("C:\\Users\\Jerry\\Documents\\QuickBooks\\Company Files\\MRJ Tecnology, LLC", ENOpenMode.omDontCare);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message + '\n' + ex.StackTrace, "Error opening QB");
        }

person Jerry Welliver    schedule 09.07.2018    source источник


Ответы (1)


Есть несколько вещей, которые вам нужны, чтобы это работало. В первый раз, когда вы запрашиваете доступ к файлу компании, QuickBooks должен быть открыт, а администратор должен войти в систему. Затем администратору будет предоставлено диалоговое окно для предоставления вашему приложению разрешения на доступ к QuickBooks. В диалоговом окне разрешений он спросит администратора, хотят ли они разрешить приложению читать и изменять файл компании с четырьмя вариантами:

  • No
  • Да, подсказывать каждый раз
  • Да, когда этот файл компании QuickBooks открыт
  • Да всегда; разрешить доступ, даже если QuickBooks не запущен

Администратор должен выбрать четвертый вариант, чтобы ваше приложение могло запускать QuickBooks без запуска.

Я также предлагаю вам использовать OpenConnection2 вместо OpenConnection и использовать уникальный идентификатор в качестве первого параметра. Вам также нужно будет указать тип подключения, который должен быть ENConnectionType.ctLocalQBD. Также кажется, что имя файла, которое вы передаете в вызове BeginSession, не включает расширение .qbw. Вот базовый образец:

QBSessionManager SessionManager = null;
try
{
    SessionManager = new QBSessionManager();
    SessionManager.OpenConnection2("UniqueAppID", "Lumber Management System", ENConnectionType.ctLocalQBD);
    SessionManager.BeginSession("C:\\Users\\Jerry\\Documents\\QuickBooks\\Company Files\\MRJ Tecnology, LLC.qbw", ENOpenMode.omSingleUser);

    // CODE TO SEND TO QB GOES HERE
}
catch(Exception ex)
{
    MessageBox.Show("Error opening QB:" + ex.ToString());
}
finally
{
    if(SessionManager != null)
    {
        SessionManager.EndSession();
        SessionManager.CloseConnection();
    }
}
person TravestyOfCode    schedule 09.07.2018
comment
Спасибо за ответ! Я видел эти варианты в документации. 1) во всей документации, которую я видел, говорится, что уникальный идентификатор приложения предоставляется только в том случае, если приложение зарегистрировано в Intuit, и они предоставляют вам идентификатор. Должен ли я просто сделать один? Что это покупает мне? 2) Помогает ли тип соединения ctLocalQBD с производительностью? Даже на локальном компьютере открытие и обработка файла занимает несколько секунд — целая вечность для пользователя, уставившегося в экран. Я на самом деле переместил имя файла в настройки, и сейчас он работает нормально. Я рассмотрю предложенные вами изменения. - person Jerry Welliver; 10.07.2018
comment
Насколько я понимаю, AppID не имеет большого значения, я просто добавляю его по привычке. OpenConnection2 требует параметр connPref. Это не улучшает производительность, поскольку QB по-прежнему открывается в фоновом режиме, просто не отображая пользовательский интерфейс для пользователя. Это позволяет вам указать ctLocalQBDLaunchUI, если вы хотите показать пользовательский интерфейс пользователю. - person TravestyOfCode; 11.07.2018