Переход на электронный документооборот (ЭДО) для конфигураций на платформе 1С:Предприятие 7.7 — задача частая, но осложненная возрастом самой платформы. Семерка не обладает встроенными современными средствами работы с веб-сервисами, XML-схемами новых форматов и криптографией. Тем не менее, настроить обмен электронными УПД (универсальными передаточными документами) из самописной или типовой конфигурации 1С 7.7 вполне реально.
В этой статье мы подробно разберем все возможные архитектурные варианты интеграции, проанализируем критические изменения в политике СКБ Контур относительно поддержки платформы 7.7, а также рассмотрим техническую реализацию каждого метода.
Прежде чем планировать покупку стандартного интеграционного модуля Диадок для 1С 7.7, необходимо учесть официальную позицию СКБ Контур. С декабря 2024 года Контур полностью прекратил продажи модуля Диадок для 1С 7.7 новым клиентам. Более того, с 1 сентября 2026 года полностью прекращается поддержка этого модуля для старых клиентов. Это означает, что модуль не будет обновляться под новые требования законодательства (включая машиночитаемые доверенности — МЧД, новые форматы УПД и т.д.).
Поэтому ориентироваться на покупку стандартной обработки от Контура и ее «допиливание» в долгосрочной перспективе не имеет смысла. Нам необходимо рассматривать альтернативные, более жизнеспособные варианты.
Диадок.Коннектор — это специализированное программное обеспечение от Контура, которое устанавливается локально на сервере или компьютере организации как служба. Оно позволяет полностью исключить прямое взаимодействие 1С 7.7 с интернетом и криптографией, что идеально решает проблему работы менеджеров в закрытом терминальном контуре (без прямого доступа к внешней сети).
Рассмотрим по шагам, как работает эта схема:
\\server\diadoc\out\) или отправляет по протоколу FTP на локальный сервер обмена.\\server\diadoc\in\).Преимущества решения: высокая надежность, независимость от обновлений платформы 1С 7.7, отсутствие необходимости настраивать сложные библиотеки шифрования в семерке. Менеджерам вообще не нужен доступ в интернет — они работают исключительно с локальной файловой системой.
Если объем документооборота небольшой (до 50-100 документов в день), самым простым, прозрачным и бесплатным (в плане стоимости интеграции) решением является полуручной режим.
Разберем логику процесса:
Для генерации 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.Записать(ПутьФайла);
Сообщить("Файл успешно сформирован: " + ПутьФайла);
КонецПроцедуры
Для разработчиков, которые хотят полностью автоматизировать процесс без использования сторонних утилит-коннекторов, СКБ Контур предоставляет специальную 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 Диадока.
Если вы хотите уйти от необходимости поддерживать сложную криптографию на устаревшей платформе 1С 7.7, отличным решением станет использование бесплатного программного продукта «1С:Клиент ЭДО 8».
Проанализируем архитектуру этой связки:
Почему это выгодно: вы получаете современный, постоянно обновляемый функционал ЭДО (с поддержкой всех новых законов, форматов маркировки "Честный Знак", прослеживаемости и МЧД), но при этом сама рабочая база остается на 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 мы рекомендуем придерживаться следующих правил: