Формирование документа Google Docs из шаблона используя Google Apps Script

Публикация № 1283766 25.08.20

Интеграция с оборудованием и сервисами - WEB-интеграция

Google

В статье опишу работу скрипта для формирования документа с публикацией по HTTP.

Вводные

  • Нужно сформировать документ со сложной версткой на основе шаблона.
  • Нужно дать возможность пользователям самим менять шаблоны
  • При возможности на использовать локально установленные программы

К написанию статьи подтолкнула статья по формированию договоров //infostart.ru/public/1132491/, в которой отсутствовал код скрипта и в самой обработке присутствовали ключи аутентификации "по умолчанию".

 

Решение

Общая схема

В качестве платформы использовал Google Docs потому что он доступен бесплатно для пользователей и у него есть API. Локальной альтернативой является ONLYOFFICE + OwnCloud, но в их API не разбирался.

 

Функциональное решение

Формирование документа по шаблону может быть реализовано вариантами

  • Копированием шаблона и замены строк (replace) определенного формата например {v8 ...} на нужные значения. В рамках Google Doc разобрался как менять на текст и на картинки.
  • Созданием пустого файла и объединением в нем элементов взятых из шаблона (merge), с дальнейшей заменой строк. Применяется если присутствует составные элементы таблицы и списки. В рамках Google Doc разобрался с таблицами, списки для первой версии реализации не критичны.
    • В рамках анализа решений просматривал вариант реализованный для word с применением переменных (1С:УНФ), но как выделяются области не вникал, если знаете как работает - пишите в комментарии, дополню статью для полноты картины.
  • Собрать кодом из элементов, но даже в документации рекомендуют собирать из элементов шаблона.

Запрос отправляю на фиксированный URL, POST запросом со списком замен или списком элементов и замен. Для получения структуры шаблона отправляю GET запрос на тот же URL.

Результатом работы будет на выбор:

  • индентификатор объекта с которым дальше взаимодействую через REST API
  • base64 кодированные бинарные данные PDF формата. Он нормально открывается MS Word и преобразуется в DOCX.

 

Описание работы со стороны Google

Документы Google Docs (как и скрипты) являются объектами в Google Drive, часть операций производятся через его API.

Нужно различать REST API к сервису и API предоставляемое сервисом для Google Script App, у второго функционал существенно шире.

Google Script App можно опубликовать в качестве web приложения или в рамках Google Cloud Platform (GCP), после неудачных попыток вызвать скрипт через Google Script App REST API (на сколько понял для нормальной работы нужно GSuite которого у меня нет) остановился на варианте с web приложением.

Публикуется версия приложения, если после публикации изменен код то он доступен только в dev режиме. Для публикации измененного кода формируется новая версия и публикуется она. Требуемые права доступа (scopes) приложения анализируются при публикации и устанавливаются в её свойствах. При публикации скрипта указываю что он запускается от имени пользователя запускающего скрипт и доступен для всех пользователей на запуск, в скрипте использую только данные полученные из запроса.

 

Права доступа

Работа со скриптом ведется под правами пользователя Google. Аутентификация может пройти через cookie или через токен доступа который формируется через Oauth запрос.  Для использования приложения нужно делегировать права пользователя web-приложению и Oauth приложению от которого выдан ключ на формирование токена.

Получение Auth0 токена описано в документации к УНФ https://its.1c.ru/db/metod81#content:7551:hdoc техническая составляющая в статье //infostart.ru/1c/articles/1247448/, для делегирования прав web приложению нужно запустить из браузера GET https://script.google.com/macros/s/{{script_id}}/exec и пройти процесс делегирования.

 
 Скриншот результата делегирования прав

 

В рабочих запросах указываю Bearer токен, полученный при POST https://www.googleapis.com//oauth2/v4/token c grant_type=authorization_code

 

Инструменты

  • Консоль управления скриптами с возможностью редактировать код https://script.google.com/
  • Тестировал с помощью Postman

 

Реализация скрипта

 
 Код скрипта

 

При публикации скрипта как web приложения можно использовать две точки входа, функции doGet и doPost  (документация), doGet отвечает за получение структуры шаблона по id, doPost за формирование файла из шаблона.

Ответ формируется через "ContentService.createTextOutput", он не поддерживает коды состояния HTTP, поэтому они вынесены в тело запроса, реализовано в обертке createResponse().

Создание файлов реализовано в

  • createDocFromTemplate() - создание через копию и замену
  • mergeDocFromTemplate() - создание нового и объединение

Замена реализована в функции replacesInElement(), .replaceText() и .findText() применим как к всему телу документа, так и к его элементам.

Масштабирование картинки под нужный размер реализовано в функции replaceTextToImageInElement(), картинка вставляется как addPositionedImage, есть вариант (не реализовывал) с вставкой в отдельную линию.

Для вставки картинок используется тип Blob для которого указывается MIMEType двоичных данных.

Объединение элементов реализовано в mergeElementsFromTemplate(), ограничения:

  • не реализовывал работу со списками и разделителями строк
  • не реализовывал работу с заголовком и подвалом

Для экспорта документа в PDF используется doc.getAs("application/pdf"), реализовано в base64ToBlob().

 

Варианты использования

Для формирования через копирование и замену:

Отправляю запрос POST https://script.google.com/macros/s/{{script_id}}/exec

 
 Пример тела запроса, в {{}} переменные Postman

 

Для формирования через объединение и замену:

Получаю структуру документа через GET https://script.google.com/macros/s/{{script_id}}/exec?templateDocId={{template_doc_id}}

 
 Пример ответа

 

Отправляю запрос POST https://script.google.com/macros/s/{{script_id}}/exec

 
 Пример тела запроса

 

При формировании списка идентификаторов элементов беру идентификаторы между элементами с "match": ["{v8 Область ..., подход аналогичен формированию по шаблону Word из УТ 11.

 

Итог

Получился универсальный с точки зрения места запуска и вариантов использования инструмент.

Репозиторий на GitHub (ссылка) \scripts\ReplaceDoc.js

Благодарю за внимание.

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. OpenWay 14.05.21 17:51 Сейчас в теме
Пожалуйста исправьте ошибку в заголовке на Google Docs
2. malikov_pro 967 14.05.21 19:54 Сейчас в теме
3. xlmel 20.07.21 15:34 Сейчас в теме
Оставьте свое сообщение

См. также

.Net в 1С. На примере использования HTTPClient, AngleSharp. Удобный парсинг сайтов с помощью библиотеки AngleSharp, в том числе с авторизацией аля JQuery с использованием CSS селекторов. Динамическая компиляция Промо

WEB v7.7 v8 Бесплатно (free)

Часто приходится парсить сайты, в том числе с авторизацией, перескакивая со страницы на страницу по ссылкам. Тот, кто занимался вэб программированием, знает, как удобно использовать JQuery и CSS селекторы. На .Net написана очень удобная библиотека AngleSharp. Я покажу, как с её помощью можно значительно облегчить себе труд.

10.03.2016    58636    Serginio    33    

Тонкости и подводные камни работы типового модуля интеграции Битрикс24 и 1С (Часть 2)

WEB Интеграция с сервисами v8 1cv8.cf Россия Бесплатно (free)

Это вторая часть цикла статей, посвящённых типовому модулю интеграции 1С Предприятия и Битрикс24. Цель данной части: рассмотреть тонкости, связанные с обменом товарами и сопутствующими сущностями (спойлер - единицы измерения и свойства товаров). Также затронем некоторые нюансы связи сущностей 1С и Б24 (относящиеся не только к товарам) и их побочное влияние при переносе данных из модуля в модуль (при смене конфигурации, переустановки или обновлении модуля).

27.11.2021    387    freegman74    3    

Web консоль управления сеансами 1С

WEB v8 1cv8.cf Бесплатно (free)

Мы дали ему название adm1c, он позволяет посредством веб доступа удалять или смотреть на сеансы в 1С базах и при необходимости удалять их. Да и что тут такого, сказали бы, есть же консоль на win, с нее же это можно делать, и все верно, но есть пара но.

26.11.2021    1793    4ernuy    5    

Безголовая (Headless) архитектура построения eCommerce

WEB Бесплатно (free)

Обобщение материалов по безголовой архитектуре построения eCommerce.

10.11.2021    457    malikov_pro    9    

Online телефонный справочник из 1С: Зарплата и управление персоналом Промо

WEB Управление персоналом (HRM) Управление персоналом (HRM) v8 ЗУП3.x Россия Бесплатно (free)

В интернете представлено много реализаций online телефонных справочников организаций. Есть справочники, которые использует для хранения информации базу Active Directory (LDAP), есть справочники, которые реализованы с использованием СУБД (например, MySQL). Но я не нашел справочника, который использует информацию из базы 1С. Далее я рассмотрю данную разработку.

10.03.2017    27445    ruha    21    

Понимание схемы JSON (JSON Schema), часть 2

WEB Бесплатно (free)

Перевод книги https://json-schema.org/understanding-json-schema/

09.11.2021    958    malikov_pro    0    

Примеры тестовых сценариев Postman

WEB Бесплатно (free)

Перевод статьи https://learning.postman.com/docs/writing-scripts/script-references/test-examples/

08.11.2021    1608    malikov_pro    0    

Тонкости и подводные камни работы типового модуля интеграции Битрикс24 и 1С

WEB Интеграция с сервисами v8 1cv8.cf Россия Бесплатно (free)

Цель статьи - указать на подводные камни и нюансы, о которых “не пишут на заборах” и которые встретились мне за время внедрения типового модуля интеграции 1С и Битрикс24. Будет интересна для людей, кто подумывает о том, чтобы настроить интеграцию, и хотят понять, с чем столкнутся. А также для тех, кто уже работает с подобным обменом, столкнулся с какими-то из описанных ситуаций и хочет понять, что пошло не так и “как жить дальше”. Постараюсь все описать “человеческим” языком с минимальной долей терминов, так как статья, надеюсь, будет полезна не только программистам.

07.11.2021    1303    freegman74    10    

Информер для сайта , актуальные релизы 1С + Проверка подписки ИТС. Промо

WEB Инструменты администратора БД Сервисные утилиты Бесплатно (free)

Небольшой код который встраивается на сайт и выводит информацию о последних релизах конфигураций 1С

12.09.2014    41250    Malfarion    34    

Внешняя компонента как REST-API-компонента...

Разработка внешних компонент WEB Linux v8 Бесплатно (free)

...и совсем немного кода на С[++]...

01.11.2021    1170    starik-2005    10    

Телеграм, 1С http-сервис, webhook по SSL

WEB Бесплатно (free)

Как установить Телеграм webhook по HTTPS на 1С http-сервис используя самоподписанный (self signed) сертификат на IP адрес. Личный опыт.

31.10.2021    1985    Goody    16    

Использование Gatekeeper для авторизации доступа к HTTP публикации сервера 1С

Администрирование ИТ-инфраструктуры Информационная безопасность WEB v8 Бесплатно (free)

В статье опишу вариант настройки Keycloack и GoGatekepper для авторизации доступа к HTTP публикации сервера 1С

22.10.2021    625    malikov_pro    0    

Кэширование COM-соединения. Три способа Промо

Перенос данных из 1С7.7 в 1C8.X Внешние источники данных WEB Практика программирования v8 Россия Бесплатно (free)

Статья о трех способах кэширования COM-соединения в 1С:Предприятии 8.x.

11.04.2013    43200    YPermitin    42    

Повышение производительности веб-сервисов. Переиспользование сеансов

WEB HighLoad оптимизация v8 Бесплатно (free)

Повышение производительности веб-сервисов. Переиспользование сеансов. Практическая реализация.

20.10.2021    1711    sorter1    2    

Когда интерфейсам 1С нужны веб-технологии

WEB Работа с интерфейсом Бесплатно (free)

Есть несколько способов сделать интерфейс в 1С богаче и оптимальнее с помощью веб-технологий. О том, какие практические приемы помогут в этой задаче, на митапе «Интерфейс в 1С» рассказали руководители разработки в компании «Арбис» Матвей Серегин и Анна Гнатюк.

15.10.2021    2678    Akcium    10    

WEB/HTTP сервисы. Базовые отличия и применение на практике

WEB Практика программирования v8 Бесплатно (free)

Рассказываем о WEB и HTTP сервисах, их практическом применении, о шишках, которые мы набили, и о выводах, которые сделали. Спойлер: тех, кто дочитает статью до конца, ждет бонус от автора.

04.10.2021    5988    Neti    14    

Заготовка для загрузки файлов по ftp Промо

WEB Перенос данных из 1C8 в 1C8 v8 1cv8.cf Бесплатно (free)

3 процедуры и 1 макет

03.06.2013    31341    anig99    6    

Swagger для 1С. Описание сложной структуры входящих и исходящих данных

WEB OneScript Россия Бесплатно (free)

Анонс нового функционала 1Script пакета swagger версии 0.5.0.

04.10.2021    2170    kuleshov.x    7    

Интеграция 1С с ГИИС ДМДК

Обмен через XML WEB v8 ERP2 Ювелирная промышленность и торговля Россия Бесплатно (free)

ГИИС ДМДК - единая информационная платформа для взаимодействия участников рынка драгоценных металлов и драгоценных камней. с 01.09.21 стартовал обязательный обмен данными с Федеральной пробирной палатой (ФПП) исключительно через ГИИС. А постепенно - с 01.01.2022 и с 01.03.2022 - все данные о продаже драгоценных металлов и камней должны быть интегрированы с ГИИС. У многих пользователей возникает вопрос как автоматизировать обмен между программой 1С и ГИИС ДМДК. В настоящей статье ВЦ Раздолье поделится своим опытом о реализации такого обмена. Автор статьи - Мордовин Антон - архитектор систем на базе 1С Внедренческого центра "Раздолье".

30.09.2021    4844    1СERP    35    

Интеграция 1С с Битрикс24 через вебхуки

WEB v8 1cv8.cf Россия Бесплатно (free)

Пример получения токена и http запрос к API битрикса.

15.09.2021    1795    TyurinArt    8    

Организация удаленного доступа к корпоративной информационной системе — это просто ! Промо

Внешние источники данных Монитор заказов WEB Монитор заказов Бесплатно (free)

Хочу поделиться своим опытом создания web морды к корпоративной информационной системе на базе 1С. Необходимо организовать сбор заказов от удаленных пользователей. - Каждый пользователь видит свой набор данных, и работает со своими документами. - Доступ по логину/паролю, работа в основном с планшетов (iPad) или с десктопа. - Сервер должен находиться за пределами организации. - Себестоимость 1 пользователя не более 10$ за месяц. - Использование в основном мобильного канала связи GPRS (~100 КБ/с).

31.08.2012    29119    avhrst    13    

Бесплатный сертификационный курс Интеграция API Яндекс.Маршрутизации и программных продуктов на базе 1С (22 сентября - 5 октября 2021 года)

WEB Бесплатно (free)

Курс позволит получить востребованную квалификацию по работе с API Яндекс.Маршрутизации, поможет разобраться с особенностями настройки сервиса и научит реализовывать сложные операционные бизнес-схемы, чтобы быстрее интегрировать его в своей компании или на стороне клиента, снижая затраты на логистику на 10-20% и повышая маржинальность организации до 2х раз. Сертифицированные специалисты также смогут присоединиться к агентской программе Яндекс.Маршрутизации и получать дополнительный доход от продажи лицензий и проведения работ по интеграции сервиса.

13.09.2021    1342    routing    0    

Внедрение веб-клиента – взгляд изнутри программиста 1С со стороны заказчика

WEB Бесплатно (free)

Программист 1С в компании TELS Виталий Ильинчик выступил на онлайн-митапе «Web-клиент для 1С». Он рассказал о том, с какими проблемами столкнется ИТ-отдел заказчика и как их можно предупредить. За основу взят опыт внедрения веб-кабинета поставщика на платформе vCan-Site.

10.09.2021    1080    wtlz    0    

Обмен с HTTP сервисом файлами по формату multipart/form-data

WEB v8 1cv8.cf Россия Бесплатно (free)

Потребовалось отправить картинку в теле запроса в HTTP сервис методом POST, куча реализаций, но есть маленькие нюансы, если хотя бы кому-то поможет, то уже это было не напрасно.

07.09.2021    2779    ix5s    21    

Разработка гибридного web-приложения на 1С, возможности и ограничения

WEB v8 Бесплатно (free)

Все чаще разработчики склоняются к использованию 1C в качестве бэкенда при разработке веб-приложений. Но благодаря встраиванию веб-клиента 1С в сайт можно получить еще больше готовой функциональности. О том, как реализовать гибридное приложение за счет связки 1С с другими веб-технологиями, рассказал разработчик компании Neti Эльдар Мингалиев.

06.09.2021    2774    Бэнни    11    

Работа с WEB-сервисами под HTTPS на примере прямого обмена между базами (1С – 1С) 

Обмен данными и распределенная БД WEB v8 Россия Бесплатно (free)

Использование веб-сервисов 1С при обмене 1С – 1С позволяет быстро передавать достаточно большие объемы данных из базы-источника в базу-приемник в объектах языка 1С. Данный метод обмена может применяться при бесшовной интеграции между двумя базами 1С, но требует определенной серверной инфраструктуры (установленного и настроенного WEB-сервера).

03.09.2021    6256    UltraUnion2005    8    

Глава 2. Как я написал (собрал с инфостарта) свой парсер сайта 1С Releases

WEB Практика программирования v8 1cv8.cf 1С:Франчайзи, автоматизация бизнеса Россия Бесплатно (free)

Путешествие начинающего программиста 1С. Глава вторая. Призываем экспертов в комментарии, оптимизируем код, ругаемся на кривые руки автора. Автор же, в свою очередь, делится своим опытом, читает умные комментарии, стремится дать те знания, за которыми он сидел ночами тем, кто их хочет найти.

31.08.2021    920    ldmonster    4    

Взаимодействие с api Честный знак (Молочная продукция)

WEB Универсальные функции Практика программирования v8 1cv8.cf Бесплатно (free)

Обзор основных примеров взаимодействия с Честным знаком по api для нетиповых конфигураций.

30.08.2021    2150    user5300    45    

Умная маршрутизация: о сложностях интеграции с 1С (часть 2)

WEB v8 УТ11 Бесплатно (free)

В статье будет много примеров кода с комментариями работы расширения для обмена данными УТ11.4 с Яндекс.Маршрутизацией через выгрузку/загрузку EXCEL файла.

27.08.2021    1970    greencactus    6    

Встраивание форм 1С на страницы сайта

WEB v8 1cv8.cf Бесплатно (free)

В платформе 8.3.16 появилась возможность выводить на страницах сайта информацию из веб-клиента 1С так, что пользователь даже не заметит, что работает с платформой. Руководитель компании Айтон Михаил Пинягин на онлайн-митапе «Web-клиенты для 1С» рассказал о том, какие особенности нужно учесть при настройке встраиваемого веб-клиента, и какие возможности он дает.

27.08.2021    2817    mikepin    9    

WEB-интерфейсы как механизм сбора и контроля данных в розничной сети. Инструменты и наработки

WEB 1cv8.cf Бесплатно (free)

Веб-интерфейсы упрощают сбор информации и помогают оперативно контролировать процессы на предприятии. О том, как реализовать сервис, собирающий данные от управляющих розничных точек через веб-интерфейс, и какие инструменты для построения такого сервиса можно использовать, на онлайн-митапе «Web-клиенты для 1С» рассказал ИТ-директор компании ИТВОРКС Антон Шаганов.

24.08.2021    1289    itworks    3    

Гарри Поттер и подкапотное пространство веб-клиента

WEB v8 Бесплатно (free)

При разработке сайтов, интегрированных с 1С через HTTP-сервисы, приходится бороться с кодировками, искать производительные интерфейсные решения и задумываться над безопасностью. В ходе онлайн-митапа «Web-клиенты для 1С» Юрий Лазаренко показал на практике, как работает магия самодельного веб-клиента и как решать проблемы, возникающие при интеграции.

20.08.2021    2946    TitanLuchs    19    

Умная маршрутизация: кейс интеграции с 1С (часть 1)

WEB v8 Бесплатно (free)

Как мы решали проблемы с доставкой в нашем интернет-магазине, внедрили новый бизнес-процесс за 3 месяца и научились меньшим количеством машин привозить больше заказов клиентам.

18.08.2021    4369    greencactus    40    

Девопсы в 1С: микросервис распознавания штрихкодов

WEB Git (GitHub, GitLab, BitBucket) DevOps Практика программирования Бесплатно (free)

Распознавание штрихкода из сканированного документа в PDF.

09.08.2021    1591    alexey_kurdyukov    8    

Примеры вызова в 1С методов API до реестров открытой части Электронного кабинета налогоплательщика (Украина)

WEB v8 Украина Бесплатно (free)

Примеры вызова в 1С методов API до реестров открытой части Электронного кабинета налогоплательщика, Украина. Тестирование проводил на 1С:Предприятие 8.3 (8.3.10.2561).

28.07.2021    892    Pervuy    4    

Телеграм-бот как инструмент

WEB v8 1cv8.cf Бесплатно (free)

Статья больше для начинающих программистов о том, как можно помочь самому себе при доработке 1С или при разработке собственных решений.

21.07.2021    4224    M_A_D    19    

FastAPI (python) - инструмент для быстрого создания Веб сервиса (WSGI) с REST api

WEB Бесплатно (free)

Ознакомительная статья по FastAPI (python) - инструменту быстрого создания Веб сервиса (WSGI) с REST api.

19.04.2021    7806    Идальго    25    

Wildberries. Заполнение карточек товаров. Как получить значение справочников?

WEB Бесплатно (free)

Wildberries. Заполнение карточек товаров. Как получить значение справочников? в документации это описано очень скромно, пытаюсь рассказать на основании своего опыта.

31.03.2021    2485    sergeyisa    1    

Как получить ключ поставщика Wildberries (uuID), supplierID, Идентификатор поставщика

WEB Бесплатно (free)

Как получить ключ поставщика Wildberries (uuID), supplierID, Идентификатор поставщика, для работы с карточками товара.

18.03.2021    6252    sergeyisa    9    

Правила обмена больше не нужны

Внешние источники данных Обмен через XML Перенос данных из 1C8 в 1C8 Распределенная БД (УРИБ, УРБД) WEB v8 Бесплатно (free)

Есть несколько общепринятых подходов к написанию обмена между 1С-системами, каждый из которых упирается в длительное изучение технологии, мучительную отладку правил конвертации и написание большого количества сервисного кода, в котором потом тяжело разобраться. О принципах работы универсального фреймворка liteExchange, который реализует быстрые обмены между 1С и внешними системами, и берет на себя всю техническую обвязку по стандартному преобразованию данных, на INFOSTART MEETUP Saint Petersburg.Online рассказал Николай Крылов.

17.03.2021    12438    Nikola23    40    

Интеграция "1С:Управление торговлей 10.3" с Yandex SpeechKit для распознавания телефонных звонков

WEB Интеграция с сервисами Телефония, SIP Бесплатно (free)

Распознавание телефонных звонков позволяет контролировать работу менеджеров, организовать для них дополнительный KPI, помогает разбирать конфликты и категоризировать звонки по вхождению слов. О своем опыте интеграции «1С:Управления торговлей 10.3» и сервиса Yandex SpeechKit на INFOSTART MEETUP Saint Petersburg.Online рассказал ИТ-директор компании «Умный дом» Федор Рыжков.

12.03.2021    1319    zzhiraf_    0    

Как отправить сообщение Telegram в группу?

WEB v8 Россия Бесплатно (free)

Отправка сообщения в группу Telegram.

01.03.2021    3668    kite2    2    

Доступ из базы 1С к стандартному интерфейсу Odata базы 1С, в которой заведен пользователь

WEB v8 Россия Бесплатно (free)

Есть база, с пользователем/паролем, нужно подключиться к Odata из другой базы 1С, получить элементы справочника.

24.02.2021    1047    user823999    6    

Бот Telegram и HTTP сервис в 1С

WEB 8.3.8 Бесплатно (free)

Настройка рабочего вебхука telegram для 1С используя IIS (Internet Information Services - встроенный в windows веб-сервер). Мой опыт.

26.01.2021    9118    solidsun    13    

Интеграция с API WB (Wildberries). Создание карточки товара (спецификации)

WEB v8 1cv8.cf ИТ-компания Россия Бесплатно (free)

Опыт интеграции с API WB (Wildberries), опыт создания карточки товара, получение токенов API WB.

18.01.2021    34294    jenyavp    59    

1С и Умный Дом. Управление голосом

WEB Интернет вещей (IIoT) 8.3.6 Бесплатно (free)

Возможно ли управление устройствами умного дома из 1С, да ещё и голосом? Можно ли без умных колонок Google Home, Alexa, Алиса и иных платформ, а также без приложений от Google, Amazon и других управлять этими устройствами? Мой ответ – ДА, можно, нужно просто иметь умное устройство, имеющее возможность работы в DIY, 1С и программу распознавания голоса и взаимодействия с 1С.

04.01.2021    2640    osivv    15