Как автоматизировать загрузку XML-файлов УПД в личный кабинет Диадок без использования платного API

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

При работе с электронным документооборотом (ЭДО), в частности с системой Диадок, многие компании сталкиваются с существенными затратами на приобретение официального API-доступа. На текущий момент стоимость ключа интеграции может составлять значительную сумму в год за каждый ИНН. Если объем документов невелик или бюджет ограничен, возникает резонный вопрос: как автоматизировать процесс отправки сформированных в 1С (особенно в версии 7.7) файлов УПД, не прибегая к покупке дорогостоящего токена? Рассмотрим подробнее технические возможности эмуляции ручной загрузки через веб-интерфейс.

Анализ ситуации: почему API стоит дорого и какие есть лазейки

Официальное API Диадока — это мощный инструмент, обеспечивающий стабильную интеграцию. Однако Контур часто привязывает покупку API к приобретению своих готовых обработок для 1С. Если ваша задача — просто «забросить» готовый XML-файл в систему, вы можете пойти путем эмуляции действий пользователя в браузере. Разберем по шагам, как это можно реализовать программно.

Важно понимать, что веб-интерфейс Диадока сам по себе является клиентом, который общается с сервером через набор HTTP-запросов. Эти запросы бесплатны для пользователя. Наша задача — заставить браузер выполнить эти действия автоматически под управлением кода 1С.

Способ 1. Использование систем автоматизированного тестирования (Playwright или Selenium)

Это наиболее надежный метод эмуляции. Мы используем программный движок браузера (Chromium, Firefox), который открывает страницу личного кабинета, авторизуется и выполняет команды загрузки. Проанализируем, как это работает технически.

Для реализации этого метода нам понадобится промежуточный слой. Поскольку 1С 7.7 напрямую не умеет работать с современными веб-библиотеками, мы можем использовать COM-объект или внешнюю компоненту. Рассмотрим алгоритм действий:

  1. Запускаем браузер в режиме управления (Headless или обычный).
  2. Программно переходим по адресу личного кабинета.
  3. Осуществляем поиск элементов управления (кнопок, полей ввода) по их селекторам (ID, Class или XPath).
  4. Инициируем выбор файла в скрытом поле типа input type="file".
  5. Нажимаем кнопку «Подписать и отправить».

Посмотрим на пример логики скрипта (на языке JavaScript, который может вызываться из оболочки автоматизации):


const { chromium } = require('playwright');

(async () => {
  const browser = await chromium.launch({ headless: false });
  const context = await browser.newContext();
  const page = await context.newPage();
  
  // Переход в личный кабинет
  await page.goto('https://diadoc.kontur.ru');
  
  // Ожидание загрузки кнопки выбора файла
  await page.waitForSelector('input[type="file"]');
  
  // Выбор сформированного в 1С файла
  const fileInput = await page.$('input[type="file"]');
  await fileInput.setInputFiles('C:/1C_Base/Export/UPD_2023_01.xml');
  
  // Нажатие кнопки загрузки
  await page.click('button:has-text("Загрузить")');
  
  console.log('Файл успешно передан в очередь на подпись');
})();

Способ 2. Реверс-инжиниринг HTTP-запросов (Внутреннее API)

Если мы проанализируем вкладку "Network" в консоли разработчика (F12) при ручной загрузке файла, мы увидим POST-запрос к определенному URL. Этот запрос содержит токен авторизации и само тело файла в формате multipart/form-data. Выясним причину, почему этот способ сложнее в поддержке.

Основная проблема здесь — авторизация. Диадок использует сложные механизмы сессий и заголовки типа X-Diadoc-AuthToken. Если вы сможете программно извлекать этот токен из текущей сессии браузера, вы сможете отправлять файлы обычным HTTP-запросом из 1С, используя объект WinHttp.WinHttpRequest.5.1.

Рассмотрим пример формирования такого запроса в 1С 7.7:


Процедура ОтправитьФайлВДиадок(ПутьКФайлу, Токен)
    HttpЗапрос = СоздатьОбъект("WinHttp.WinHttpRequest.5.1");
    URL = "https://diadoc.kontur.ru/api/Internal/UploadFile"; // URL примерный
    
    HttpЗапрос.Open("POST", URL, 0);
    HttpЗапрос.SetRequestHeader("Authorization", "DiadocAuth ddauth_token=" + Токен);
    HttpЗапрос.SetRequestHeader("Content-Type", "multipart/form-data; boundary=----WebKitFormBoundary");
    
    // Здесь необходимо сформировать тело запроса с бинарными данными файла
    // Для 7.7 это потребует использования ADODB.Stream для чтения файла в Binary
    ТелоЗапроса = СформироватьMultipartТело(ПутьКФайлу);
    
    HttpЗапрос.Send(ТелоЗапроса);
    Если HttpЗапрос.Status = 200 Тогда
        Сообщить("Файл успешно загружен!");
    КонецЕсли;
КонецПроцедуры

Способ 3. Эмуляция кликов через «автокликеры» или скрипты на стороне браузера

Разберем самый простой, «партизанский» метод. Если в компании постоянно открыт браузер с ЛК Диадок, мы можем использовать JS-инъекции. С помощью расширений типа Tampermonkey можно добавить на страницу Диадока кнопку «Загрузить пакет из 1С».

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

Возможные риски и нюансы реализации

Проанализируем ситуацию с точки зрения безопасности и стабильности. Контур активно борется с подобными методами автоматизации. Рассмотрим основные сложности, с которыми вы можете столкнуться:

Практические рекомендации по выбору решения

Выясним, какой путь лучше выбрать в зависимости от ваших условий:

Для малого бизнеса (до 10 документов в день): Проще всего формировать пакеты файлов в 1С в определенную папку, а затем один раз в день загружать их «пешком» через веб-интерфейс Диадока. Это бесплатно и надежно.

Для среднего бизнеса (десятки документов): Оптимальным будет использование связки 1С + Playwright. Это потребует некоторых знаний программирования, но обеспечит автоматизацию без ежегодных платежей за API.

Для крупного бизнеса: Настоятельно рекомендуем приобрести официальное API. Риск остановки отгрузок из-за изменения дизайна сайта Диадока обойдется дороже, чем 17 000 рублей в год. Стабильность обмена данными в данном случае является критическим фактором.

В качестве альтернативы также стоит рассмотреть переход на другие системы ЭДО (например, СБИС или ЭДО Лайт от Честного Знака), где доступ к API может быть бесплатным или включенным в базовые тарифы. Это создаст здоровую конкуренцию и позволит вам выбрать наиболее выгодное решение для вашего бизнеса.

← На главную