Как связать 1С 7.7 и Диадок от Контура для отправки УПД?

Программист 1С v7.7 Управленческий учет Торговля и дистрибуция
← На главную

Переход на электронный документооборот (ЭДО) для конфигураций на платформе 1С:Предприятие 7.7 — задача частая, но осложненная возрастом самой платформы. Семерка не обладает встроенными современными средствами работы с веб-сервисами, XML-схемами новых форматов и криптографией. Тем не менее, настроить обмен электронными УПД (универсальными передаточными документами) из самописной или типовой конфигурации 1С 7.7 вполне реально.

В этой статье мы подробно разберем все возможные архитектурные варианты интеграции, проанализируем критические изменения в политике СКБ Контур относительно поддержки платформы 7.7, а также рассмотрим техническую реализацию каждого метода.

Важное предупреждение: Прекращение поддержки официального модуля 1С 7.7

Прежде чем планировать покупку стандартного интеграционного модуля Диадок для 1С 7.7, необходимо учесть официальную позицию СКБ Контур. С декабря 2024 года Контур полностью прекратил продажи модуля Диадок для 1С 7.7 новым клиентам. Более того, с 1 сентября 2026 года полностью прекращается поддержка этого модуля для старых клиентов. Это означает, что модуль не будет обновляться под новые требования законодательства (включая машиночитаемые доверенности — МЧД, новые форматы УПД и т.д.).

Поэтому ориентироваться на покупку стандартной обработки от Контура и ее «допиливание» в долгосрочной перспективе не имеет смысла. Нам необходимо рассматривать альтернативные, более жизнеспособные варианты.

Вариант 1. Использование «Диадок.Коннектора» (Рекомендуемый способ)

Диадок.Коннектор — это специализированное программное обеспечение от Контура, которое устанавливается локально на сервере или компьютере организации как служба. Оно позволяет полностью исключить прямое взаимодействие 1С 7.7 с интернетом и криптографией, что идеально решает проблему работы менеджеров в закрытом терминальном контуре (без прямого доступа к внешней сети).

Рассмотрим по шагам, как работает эта схема:

  1. Менеджер в 1С 7.7 проводит документ реализации.
  2. 1С 7.7 формирует регламентированный XML-файл УПД (по действующему формату ФНС) и сохраняет его в определенную сетевую папку (например, \\server\diadoc\out\) или отправляет по протоколу FTP на локальный сервер обмена.
  3. Служба «Диадок.Коннектор», развернутая на сервере, имеющем доступ к интернету и к криптографическому ключу (КЭП), постоянно сканирует эту папку.
  4. При появлении нового файла Коннектор автоматически подписывает его электронной подписью и отправляет в Диадок.
  5. Входящие документы и технологические квитанции (статусы доставки, подписи контрагента, отказы) Коннектор забирает из Диадока и сохраняет в виде XML-файлов в папку входящих (например, \\server\diadoc\in\).
  6. Периодическая регламентная задача в 1С 7.7 считывает эти файлы, парсит их и обновляет статусы документов в информационной базе.

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

Вариант 2. Выгрузка XML-файлов из 1С 7.7 с ручным подписанием в веб-портале Диадока

Если объем документооборота небольшой (до 50-100 документов в день), самым простым, прозрачным и бесплатным (в плане стоимости интеграции) решением является полуручной режим.

Разберем логику процесса:

  1. В 1С 7.7 пишется обработка выгрузки, которая генерирует стандартный файл УПД (в кодировке Windows-1251 или UTF-8, в зависимости от требований Диадока).
  2. Пользователь выгружает пачку XML-файлов на свой локальный компьютер.
  3. Пользователь открывает обычный браузер, заходит в личный кабинет Диадока, нажимает кнопку «Загрузить» и выбирает сформированные файлы.
  4. Диадок производит проверку структуры файлов. Пользователь нажимает кнопку «Подписать и отправить».

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


// Пример формирования структуры файла выгрузки в 1С 7.7
Процедура ВыгрузитьУПДВФайл(ДокРеализация, ПутьФайла)
    ТекстXML = СоздатьОбъект("Текст");
    ТекстXML.ДобавитьСтроку("<?xml version=""1.0"" encoding=""windows-1251""?>");
    ТекстXML.ДобавитьСтроку("<Файл ИдФайл=""ON_NSCHFDOPPR_" + ДокРеализация.НомерДок + """ ВерсФорм=""5.01"">");
    
    // Формируем сведения о продавце, покупателе и табличную часть
    ТекстXML.ДобавитьСтроку("  <СвДТ УчрДок=""" + СокрЛП(ДокРеализация.Контрагент.Наименование) + """/>");
    
    // Закрываем структуру документа
    ТекстXML.ДобавитьСтроку("</Файл>");
    
    // Записываем файл на диск
    ТекстXML.Записать(ПутьФайла);
    Сообщить("Файл успешно сформирован: " + ПутьФайла);
КонецПроцедуры

Вариант 3. Прямая интеграция через API с использованием компоненты AddInDiadocAPI.dll

Для разработчиков, которые хотят полностью автоматизировать процесс без использования сторонних утилит-коннекторов, СКБ Контур предоставляет специальную C++ библиотеку AddInDiadocAPI.dll. Она позволяет вызывать методы HTTP API Диадока непосредственно из кода 1С 7.7.

Выясним особенности этого подхода:

Рассмотрим пример подключения внешней компоненты Диадока в коде 1С 7.7:


Попытка
    // Загружаем внешнюю компоненту
    ЗагрузитьВнешнююКомпоненту("AddInDiadocAPI.dll");
    ДиадокAPI = СоздатьОбъект("AddIn.DiadocAPI");
Исключение
    // Альтернативный вариант обращения через COM
    Попытка
        ДиадокAPI = СоздатьОбъект("Diadoc.Api.InvoiceApi");
    Исключение
        Предупреждение("Компонента Диадок API не зарегистрирована в системе!");
        Возврат;
    КонецПопытки;
КонецПопытки;

// Авторизация и инициализация соединения
ДиадокAPI.Initialize("Ваш_ApiClientId");

Этот способ требует высокой квалификации программиста 1С 7.7, так как придется вручную описывать передачу параметров, обработку ошибок сети и методов API Диадока.

Вариант 4. Использование промежуточного решения «1С:Клиент ЭДО 8»

Если вы хотите уйти от необходимости поддерживать сложную криптографию на устаревшей платформе 1С 7.7, отличным решением станет использование бесплатного программного продукта «1С:Клиент ЭДО 8».

Проанализируем архитектуру этой связки:

  1. «1С:Клиент ЭДО 8» — это легкое самостоятельное приложение на платформе 1С 8.3, предназначенное исключительно для обмена электронными документами. Оно легко интегрируется с любыми операторами ЭДО, включая Диадок.
  2. В вашей базе 1С 7.7 пишется простая обработка, которая выгружает данные о реализациях во внешний файл (это может быть DBF, простой XML или даже JSON).
  3. В «1С:Клиент ЭДО 8» настраивается автоматическое регламентное задание, которое импортирует эти файлы, создает на их основе электронные документы, подписывает их установленным на этом же компьютере сертификатом КЭП и отправляет контрагентам через Диадок.

Почему это выгодно: вы получаете современный, постоянно обновляемый функционал ЭДО (с поддержкой всех новых законов, форматов маркировки "Честный Знак", прослеживаемости и МЧД), но при этом сама рабочая база остается на 1С 7.7 и не требует дорогостоящего перевода на восьмерку.

Вариант 5. Собственный скрипт подписания через CADESCOM (КриптоПро) из 1С 7.7

Если перед вами стоит задача полностью автоматизировать процесс подписания локально в 1С 7.7 без использования платных коннекторов, можно реализовать подписание файлов через системную библиотеку CAdESCOM с помощью сценариев Windows Script Control.

Дело в том, что 1С 7.7 является 32-битным приложением и напрямую работать с объектами CAdESCOM.Store в современных 64-битных операционных системах может со значительными ошибками. Чтобы обойти это ограничение, мы можем использовать JScript-обертку. Для этой задачи можно использовать готовое решение для криптографической подписи CAdESCOM в 1С 7.7 под 64-битными ОС.

Рассмотрим пример реализации такого метода:


// Функция подписи файла средствами Windows Script Control
Функция ПодписатьФайлКЭП(СодержимоеФайла, ОтпечатокСертификата)
    Скрипт = СоздатьОбъект("MSScriptControl.ScriptControl");
    Скрипт.Language = "JScript";
    
    КодJS = "
    |function SignData(data, thumbprint) {
    |    var oStore = new ActiveXObject('CAdESCOM.Store');
    |    oStore.Open(2, 'My', 0); // Открываем личное хранилище сертификатов
    |    var oCerts = oStore.Certificates.Find(0, thumbprint); // Находим нужный сертификат по отпечатку
    |    if (oCerts.Count == 0) {
    |        return 'Ошибка: Сертификат не найден';
    |    }
    |    var oSigner = new ActiveXObject('CAdESCOM.CPSigner');
    |    oSigner.Certificate = oCerts.Item(1);
    |    var oSignedData = new ActiveXObject('CAdESCOM.CadesSignedData');
    |    oSignedData.Content = data;
    |    // Формируем отсоединенную подпись в формате Base64
    |    var sSignature = oSignedData.SignCades(oSigner, 1, true);
    |    return sSignature;
    |}";
    
    Скрипт.AddCode(КодJS);
    Попытка
        ПодписьBase64 = Скрипт.Run("SignData", СодержимоеФайла, ОтпечатокСертификата);
        Возврат ПодписьBase64;
    Исключение
        Сообщить("Ошибка при вызове криптографии: " + ОписаниеОшибки());
        Возврат "";
    КонецПопытки;
КонецФункции

После получения подписанной строки (сигнатуры) 1С 7.7 может отправить сам XML-файл и полученный файл подписи (с расширением .sig или .sgn) на FTP-сервер Контура или через API Диадока. Для передачи файлов по FTP можно использовать инструмент для отправки данных на FTP-сервер из 1С 7.7.

Резюме и выводы

Для реализации обмена УПД через Диадок из самописной конфигурации 1С 7.7 мы рекомендуем придерживаться следующих правил:

  1. Не пытайтесь купить стандартный модуль Диадока для 7.7. Его жизненный цикл подходит к концу, и вы зря потратите деньги на лицензии, которые скоро перестанут работать.
  2. Если у вас крупная организация, менеджеры работают на терминале без интернета, а объемы документов превышают 100 в день — внедряйте Диадок.Коннектор через файловый обмен. Это самый стабильный «промышленный» вариант.
  3. Если у вас небольшой объем документов (до 50-100 в день) — настройте простую выгрузку регламентированных XML-файлов из 1С 7.7 в папку на рабочем столе пользователя, чтобы он вручную загружал и подписывал их через браузер в личном кабинете Диадока.
  4. Если вам нужна полная автоматизация без лишних затрат и с запасом на будущее — используйте бесплатную конфигурацию «1С:Клиент ЭДО 8» как транспортный шлюз между вашей 1С 7.7 и Диадоком.
← На главную