适用于Google表格和文档的通用1C扩展程序-使用和使用

本文适用于使用G Suite和1C的用户。

PIK Digital是一家从事建筑技术开发的IT公司。 去年,我们将PIK集团公司转移到了G Suite 。 为了与Google表格和文档完全兼容,有必要完善我们的系统。

其中一项改进是对扩展程序的扩展,该扩展程序可将1C中的报告和表格以Google表格Google Docs的格式上传到Google云端硬盘。 在本文中,我们将分享现成的解决方案以及有关其实现的有用信息。 该扩展是免费的。 取用。

下载扩展
在GitHub上查看代码



为了使扩展正常工作,您将需要:

  1. 注册一个Google帐号
  2. 在Google Cloud Platform上建立专案
  3. 创建OAuth客户端
  4. 配置对Google Drive API的访问权限
  5. 安装扩展1C
  6. 在1C中配置与Google API的连接

接下来,我们分别考虑每个阶段并给出代码示例。

Google帐户注册


要工作,您需要一个Google帐户 。 没有它,扩展将无法与G Suite服务进行交互。 已经有一个现有帐户-使用它。

在GCP中创建项目


要激活对Google Drive API的访问,您必须在Google Cloud Platform (GCP)中创建一个项目。 免费使用GCP有两种选择

  • 试用期为12个月,预算为300美元。
  • 始终免费-访问大多数GCP资源。

两种方法都有局限性, 这里将详细介绍。 我们建议选择12个月的试用期。 试用期过后,如果您不开始使用付费服务,则不会从您的帐户中扣除任何款项。 集成工作所需的一切都是免费的。

我们在链接console.cloud.google.com上注册该项目,单击“选择项目”,然后单击“创建项目”。 创建项目后,再次按“选择项目”按钮将其选中。



创建一个OAuth客户端


创建用于使用OAUth 2.0协议连接到G Suite的凭据。 在GCP中,转到菜单项“ API和服务”-“凭据”-“创建凭据”-“ OAUth密钥标识符”。

出现提示以创建访问请求窗口。 当要求用户授予访问其数据的权限时,将形成此窗口。



将访问类型保留为“开放访问”,然后输入当员工启动项目并需要同意访问数据时将显示的应用程序的名称。 点击“保存”。

之后,设置“应用程序类型”。 选择其他类型,然后输入OAuth客户端ID。 请注意,这与应用程序的显示名称不同。 结果,将打开一个窗口,其中包含客户端的标识符和密码。 保存它们,这很重要。

连接Google Drive API库


要访问API功能,请转到菜单项“ API库”,找到所需的库并将其连接。



由于我们要使用G Suite格式,因此需要将Google Drive API库连接到项目。 此外,我们将需要Google Sheets API库,Google Docs API。 以相同的方式查找并连接它。

在用户模式下安装扩展


现在,您可以制定对API的请求。 回想一下:我们的任务是将数据从标准表单的1C报告上载到Google表格或Google文档。

下载扩展1C。

在1C中,可以独立安装配置扩展。 如果这是您第一次遇到此问题,请观看我们的简短视频 ,了解如何执行此操作。

我们的扩展程序可在BP配置(从3.0.65和更高版本开始),ERP(从2.4.6和更高版本开始)和UT(从11.4.6和更高版本开始)上,从8.3.10版本开始的平台上运行。

如果在安装扩展时看到安全警告,请单击“是”。 您将看到一条消息,指出“当前操作已中断,无法发出警告。” 这意味着您已启用安全模式,因此您需要重复添加扩展名的过程并禁用安全模式。 添加后,重新启动1C。

如果安装成功,则您将在报告和打印表单中看到“保存到Google云端硬盘”按钮。



设置参数以1C连接到Google API


剩下的工作就是配置用于连接到Google API的设置,您就可以工作。 再次,选择菜单中的“所有功能”项,然后在“处理”部分中寻找“ Google API连接设置”项。



我们使用在GCP中创建项目时获得的值填写Clientid,Clientsecret和“端口”字段。 默认情况下,将使用文件和文件夹的名称替换保存用于连接的临时密钥的位置。 出于安全原因,用户的密钥数据(刷新和访问令牌)存储在当前用户的临时文件目录,文件夹<文件夹名称>和文件<文件名称>中。 如果使用不同的配置创建了相同的Google项目,则可以使所有文件的文件名相同,以免创建具有相同信息的多个文件。 保存时,连接设置将保存在常规设置存储库中。

保存报告


现在,您可以将Google表格和Google Docs格式的报告保存在Google云端硬盘中

首次尝试保存报告时,您将需要在每个配置中执行一次一次性用户授权过程,以便该服务获得访问权限以保存数据。



在出现的窗口中,输入您的Gmail电子邮件地址和密码。 下一个
在打开的窗口中,单击“允许”。 因此,您提供了将应用程序保存在Google云端硬盘中的信息。



您将需要输入文件名,选择其类型和目录以保存到共享或个人驱动器。 点击“保存”。 保存后,报告将在浏览器中打开。 观赏愉快。

问题的技术方面


现在,让我们看看它在1C平台内如何工作。
要进行连接,将生成以下查询行到Google服务:

="https://accounts.google.com/o/oauth2/auth"+"?" + "response_type=code" + "&client_id=" + _ + "&redirect_uri=http://localhost" + "&access_type=offline" + "&scope=https://www.googleapis.com/auth/drive https://www.googleapis.com/auth/spreadsheets https://www.googleapis.com/auth/drive.apps.readonly https://www.googleapis.com/auth/drive.file https://www.googleapis.com/auth/drive.appdata https://www.googleapis.com/auth/drive.metadata; 

client_id是我们之前在其中保存变量值的客户端的标识符。
scope-我们将使用的API库的地址。 如果需要连接多个库,请在它们的前面加一个空格。

客户端应用程序与Google服务的一次性连接需要此查询字符串。 您可以在浏览器中输入查询字符串,作为响应,服务将返回带有以下内容的URL:

 http://localhost/?code=<>&scope=https://www.googleapis.com/auth/admin.directory.user%20https://www.googleapis.com/auth/admin.directory.orgunit 

您可以在1C表单设计器中添加HTML数据字段,并通过该字段执行请求。 我们需要从该URL获取值<CODE>-服务的访问代码。

仍然需要通过发出HTTP请求来获得两个令牌。 结果,请求将以JSON格式返回带有访问和刷新值的字符串。 刷新令牌不会随着时间的流逝而失去相关性,并且访问令牌的生存时间为60分钟,然后需要进行更新。 要接收这些令牌,我们需要刚刚收到的<CODE>,以及我们之前保存的客户端标识符和机密。

代码可能是这样的:

  = "accounts.google.com";  = "/o/oauth2/token";  = ("client_id=%1&client_secret=%2&grant_type=authorization_code&code=%3&redirect_uri=http://localhost", _, _, );  =  HTTP(,443,,,,, OpenSSL);  =  ; .("Content-Type","application/x-www-form-urlencoded”) HTTP =  HTTP(,); HTTP.();  = .HTTP("POST", HTTP);   . = 200  .(("   : %1", .())); ; ;  = .();  =  JSON(); .();  = XDTO.JSON(); .();  = .access_token;  = .refresh_token;  = .expires_in; 

变量expires_in包含访问令牌的生存期。
以下是更新令牌的请求:

  = "accounts.google.com";  = "/o/oauth2/token";  = Google.refresh_token; _ = Google.client_id; _ = Google.client_secret;  = "grant_type=refresh_token" + "&client_id=" + _ + "&client_secret=" + _ + "&refresh_token=" + ; 

将电子表格文档保存到Google云端硬盘


现在,让我们看看如何将电子表格文档保存在Google云端硬盘上,然后将其转换为Google表格。

 //  HTTP   = "file_for_drive"; // HTTP      = Google()[]; .("Content-Type", "multipart/related; boundary=" + ); //----- //  //----- //  =  ; .("Content-Type: application/json; charset=UTF-8"); //  // json    ,     = GSs(, , id_);  = GoogleAPI_._(, ); //----- //   //----- //----- //  //----- // .(); .("Content-Type: " + ); .("uploadType: media"); //   = (); .(, ()[]);  = GoogleAPI_._(,  ()); //----- //   //----- //----- //    .  =  ; .(); .();  = GoogleAPI_.HTTP(, ); //----- HTTP =  HTTP("/upload/drive/v2/files" + "?uploadType=multipart&convert=true",); HTTP.();  =.HTTP("POST", HTTP);   . = 200   = " HTTP  " + .() + ",   " + .; GoogleAPI_.GS(, ".  ");  ""; ; HTTP = ; HTTP = ;  ();  (" ",.,,,()); ; HTTP = .(); JSON = GoogleAPI_GSheets.JSON(HTTP); //     google drive  GoogleAPI_GSheets.JSON(JSON, "alternateLink"); 

此代码使用分段上传方法来上传文件。
我们从两个数据块形成一个POST请求。 在第一个块中,我们编写文件的标题和mimeType。 第二个块传输文件的内容。 块由定界符定义,定界符在块的末尾和开始处指示。

在我们有关插入Google Drive知识库文件的文章中了解有关此内容的更多信息。

这就是它的工作方式。 我们希望现在您不要浪费时间转换从1C下载的数据。

我们扩展的作者是PIK Digital Brazhnikova Maria mbrazh的主要开发人员

Source: https://habr.com/ru/post/zh-CN437824/


All Articles