При работе с электронным документооборотом (ЭДО), в частности с системой Диадок, многие компании сталкиваются с существенными затратами на приобретение официального API-доступа. На текущий момент стоимость ключа интеграции может составлять значительную сумму в год за каждый ИНН. Если объем документов невелик или бюджет ограничен, возникает резонный вопрос: как автоматизировать процесс отправки сформированных в 1С (особенно в версии 7.7) файлов УПД, не прибегая к покупке дорогостоящего токена? Рассмотрим подробнее технические возможности эмуляции ручной загрузки через веб-интерфейс.
Официальное API Диадока — это мощный инструмент, обеспечивающий стабильную интеграцию. Однако Контур часто привязывает покупку API к приобретению своих готовых обработок для 1С. Если ваша задача — просто «забросить» готовый XML-файл в систему, вы можете пойти путем эмуляции действий пользователя в браузере. Разберем по шагам, как это можно реализовать программно.
Важно понимать, что веб-интерфейс Диадока сам по себе является клиентом, который общается с сервером через набор HTTP-запросов. Эти запросы бесплатны для пользователя. Наша задача — заставить браузер выполнить эти действия автоматически под управлением кода 1С.
Это наиболее надежный метод эмуляции. Мы используем программный движок браузера (Chromium, Firefox), который открывает страницу личного кабинета, авторизуется и выполняет команды загрузки. Проанализируем, как это работает технически.
Для реализации этого метода нам понадобится промежуточный слой. Поскольку 1С 7.7 напрямую не умеет работать с современными веб-библиотеками, мы можем использовать COM-объект или внешнюю компоненту. Рассмотрим алгоритм действий:
input type="file".Посмотрим на пример логики скрипта (на языке 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('Файл успешно передан в очередь на подпись');
})();
Если мы проанализируем вкладку "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 Тогда
Сообщить("Файл успешно загружен!");
КонецЕсли;
КонецПроцедуры
Разберем самый простой, «партизанский» метод. Если в компании постоянно открыт браузер с ЛК Диадок, мы можем использовать JS-инъекции. С помощью расширений типа Tampermonkey можно добавить на страницу Диадока кнопку «Загрузить пакет из 1С».
Этот скрипт будет обращаться к локальному веб-серверу (который может быть поднят прямо из 1С или на Python), забирать список готовых XML и программно имитировать нажатие на стандартные элементы загрузки самого сайта. Это позволяет обойти проблему авторизации, так как пользователь уже вошел в систему вручную.
Проанализируем ситуацию с точки зрения безопасности и стабильности. Контур активно борется с подобными методами автоматизации. Рассмотрим основные сложности, с которыми вы можете столкнуться:
class="upload-button" завтра может быть class="sc-1abcde-0"). Это «ломает» скрипты, основанные на жестких селекторах.Выясним, какой путь лучше выбрать в зависимости от ваших условий:
Для малого бизнеса (до 10 документов в день): Проще всего формировать пакеты файлов в 1С в определенную папку, а затем один раз в день загружать их «пешком» через веб-интерфейс Диадока. Это бесплатно и надежно.
Для среднего бизнеса (десятки документов): Оптимальным будет использование связки 1С + Playwright. Это потребует некоторых знаний программирования, но обеспечит автоматизацию без ежегодных платежей за API.
Для крупного бизнеса: Настоятельно рекомендуем приобрести официальное API. Риск остановки отгрузок из-за изменения дизайна сайта Диадока обойдется дороже, чем 17 000 рублей в год. Стабильность обмена данными в данном случае является критическим фактором.
В качестве альтернативы также стоит рассмотреть переход на другие системы ЭДО (например, СБИС или ЭДО Лайт от Честного Знака), где доступ к API может быть бесплатным или включенным в базовые тарифы. Это создаст здоровую конкуренцию и позволит вам выбрать наиболее выгодное решение для вашего бизнеса.