代码之家  ›  专栏  ›  技术社区  ›  Jerry Welliver

打开QB时出现问题

  •  0
  • Jerry Welliver  · 技术社区  · 6 年前

    我是一个长期的C开发商,但全新的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");
            }
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Hpjchobbes    6 年前

    有两件事你需要这样才能工作。第一次请求访问公司文件时,必须打开QuickBooks并登录管理员。然后将向管理员提供一个对话框,授予您的应用程序访问QuickBooks的权限。在“权限”对话框中,它将询问管理员是否允许应用程序使用四个选项读取和修改公司文件:

    • 是的,每次提示
    • 是的,每当这个QuickBooks公司文件打开时
    • 是,始终;即使QuickBooks未运行,也允许访问

    管理员必须选择第四个选项,才能允许应用程序在不运行的情况下启动QuickBooks。

    我也建议你用 OpenConnection2 而不是 OpenConnection ,并使用唯一ID作为第一个参数。您还需要指定连接类型,它应该是 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();
        }
    }