====== Получение онлайн-данных из ADVANTA в таблице Excel ====== Инструкция подходит только для MS EXCEL 2021 и новее. Описывает прямой доступ к данным из LINQ-источников ADVANTA в EXCEL через PowerQuery. ===== Предварительные действия ===== **1.** Настройте LINQ-запрос в ADVANTA. Запишите его UID. {{ :product:api:integration_examples:excel-power-query:image1.png?800 |}} **2.** В настройках PowerQuery потребуется указать количество строк, возвращаемых запросом. Для первого, тестового запуска можно принять, например, 20. Для полной выгрузки потребуется указать значение чуть больше числа строк, возвращаемых запросом. Например, если LINQ-запрос возвращает 878 строк, можно взять количество с запасом – 1000 или более. {{ :product:api:integration_examples:excel-power-query:image2.png?700 |}} **3.** Определите логин и пароль пользователя, от имени которого будет выполняться LINQ-запрос. В результат запроса попадут только те объекты, к которым имеет доступ данный пользователь. ===== Действия в EXCEL ===== **1.** Создать новый файл Excel. На закладке «Данные» выполнить команду: «Получить данные / Из других источников / Пустой запрос»: {{ :product:api:integration_examples:excel-power-query:image3.png?900 |}} **2.** Появится окно PowerQuery. В нём нажать кнопку «Расширенный редактор»: {{ :product:api:integration_examples:excel-power-query:image4.png?800 |}} **3.** Появится окно редактора запроса: {{ :product:api:integration_examples:excel-power-query:image5.png?600 |}} **4.** В нём вставить код (текст кода ниже): {{ :product:api:integration_examples:excel-power-query:image6.png?900 |}} let // Переменные servername = "your_sitename.ru", login = "your_login", password = "your_password", dataSourceId = "your_linq_uid", pageSize = 20, // Этап 1: Авторизация и сохранение токена loginUrl = "https://" & servername & "/api/auth/login", loginData = "{""Login"": """ & login & """, ""Password"": """ & password & """}", // Отправка запроса на авторизацию и получение токена authResponse = Web.Contents( loginUrl, [ Headers = [ #"Content-Type" = "application/json", #"Accept" = "application/json" ], Content = Text.ToBinary(loginData) ] ), token = Json.Document(authResponse), // Сохранение токена в переменную для использования в следующем запросе tokenCookie = "token=" & token & "; expires=Thu, 31 Dec 2099 23:59:59 UTC; path=/", // Этап 2: Получение данных с использованием сохраненного токена getDataUrl = "https://" & servername & "/api/queries/get", queryData = "{""DataSourceId"": """ & dataSourceId & """, ""PageSize"": " & Number.ToText(pageSize) & "}", // Отправка запроса на получение данных из LINQ answer = Web.Contents( getDataUrl, [ Headers = [ #"Content-Type" = "application/json", #"Accept" = "application/json", #"Authorization" = "Bearer " & token ], Content = Text.ToBinary(queryData) ] ), dataResponse = Json.Document(answer) in dataResponse В коде заменить значения переменных: * В переменной «servername» указать адрес сайта системы ADVANTA (он может быть вида «sitename.ru» или «sitename.ru/streamline»). * Логин и пароль пользователя, с правами которого будет выполняться запрос. * DataSourceId – идентификатор linq-запроса (его UID). * PageSize – количество строк, которое будет возвращено с сервера. Посмотрите в панели управления ADVANTA сколько строк возвращает LINQ-запрос и укажите значение PageSize чуть больше. При первом подключении, чтобы проверить правильность работы скрипта, укажите небольшое количество строк, например 20. Нажать «Готово». Возможно, появится предупреждение, что необходимо настроить способ подключения. Если появилось, нажать «Изменить учётные данные»: {{ :product:api:integration_examples:excel-power-query:image7.png?800 |}} Проверить, что выбран способ подключения «Анонимно» и нажать «Подключение»: {{ :product:api:integration_examples:excel-power-query:image8.png?900 |}} **5.** Появится предупреждение, что требуются сведения о конфиденциальности. Нажать «Продолжить»: {{ :product:api:integration_examples:excel-power-query:image9.png?700 |}} **6.** Появится запрос уровня конфиденциальности. Поставить переключатель в поле «Пропускать проверки…» и нажать «Сохранить»: {{ :product:api:integration_examples:excel-power-query:image10.png?700 |}} **7.** Появится список записей, загруженных из запроса. Нажать кнопку «В таблицу»: {{ :product:api:integration_examples:excel-power-query:image11.png?900 |}} **8.** Появится запрос подтверждения создания таблицы. Нажать «ОК»: {{ :product:api:integration_examples:excel-power-query:image12.png?900 |}} **9.** Появится элемент управления для настройки колонок. Нажать на кнопку справа от списка заголовка колонки: {{ :product:api:integration_examples:excel-power-query:image13.png?900 |}} **Примечание:** обратите внимание, что справа, в окне со списком шагов, появился автоматически созданный шаг «Преобразовано в таблицу». Далее появится ещё несколько подобных автоматических шагов. Если в будущем потребуется заменить запрос на другой, или если изменится структура полей, передаваемых linq-запросом, автоматически созданные шаги надо будет удалить: {{ :product:api:integration_examples:excel-power-query:image14.png?400 |}} **10.** Появится перечень элементов JSON-файла, который передаёт linq-запрос. Выбрать нужные и нажать «Ок»: {{ :product:api:integration_examples:excel-power-query:image15.png?900 |}} **11.** Строки загрузятся в редактор PowerQuery. Нажать «Закрыть и загрузить»: {{ :product:api:integration_examples:excel-power-query:image16.png?700 |}} **12.** Начнётся загрузка. Продолжительность зависит от объёма данных. Процесс виден справа от таблицы: {{ :product:api:integration_examples:excel-power-query:image17.png?500 |}} **13.** После загрузки данные появятся в Excel: {{ :product:api:integration_examples:excel-power-query:image18.png?800 |}} **14.** Если данные в ADVANTA изменились, чтобы обновить отчёт в Excel, нажать «Обновить»: {{ :product:api:integration_examples:excel-power-query:image19.png?700 |}} Процесс обновления также виден справа, в окне «Запросы и подключения»: {{ :product:api:integration_examples:excel-power-query:image20.png?500 |}} {{ :product:api:integration_examples:excel-power-query:image21.png?500 |}}