Как настроить оперативную синхронизацию 1С 7.7 с мобильным приложением на платформе 1С 8.3

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

Автоматизация складской логистики часто сталкивается с проблемой объединения разных поколений программных продуктов. Типичный сценарий: основной учет ведется в исторически сложившейся базе 1С 7.7, а мобильные рабочие места кладовщиков реализуются на современной платформе 1С 8.3. Основная сложность заключается в том, что "семерка" не обладает встроенными механизмами Web-сервисов и полноценным REST API, что затрудняет мгновенную передачу данных. Рассмотрим подробно, как преодолеть этот технологический разрыв и обеспечить оперативную синхронизацию документов.

Решение 1: Файловый обмен через промежуточный ресурс с мониторингом папки

Это классический метод, который основывается на использовании общей папки (сетевого диска или FTP-ресурса). Процесс выглядит следующим образом: мобильное приложение выгружает результат сборки товара в файл (XML или JSON), а 1С 7.7 должна "увидеть" этот файл и загрузить его. Разберем, как заставить 1С 7.7 автоматически отслеживать появление новых данных.

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


// В теле основной обработки или при старте системы
Процедура ПриОткрытии()
    Форма.ОбработкаОжидания("ПроверитьПапкуВходящихДанных", 5); // Проверка каждые 5 секунд
КонецПроцедуры

Процедура ПроверитьПапкуВходящихДанных()
    ПутьКФайлу = "C:\Exchange\FromMobile\result.xml";
    Если ФС.СуществуетФайл(ПутьКФайлу) = 1 Тогда
        // Запускаем алгоритм загрузки данных
        ЗагрузитьДанныеИзМобильного(ПутьКФайлу);
        // После успешной загрузки удаляем файл или переносим в архив
        ФС.УдалитьФайл(ПутьКФайлу);
    КонецЕсли;
КонецПроцедуры

Важный нюанс: Чтобы не нагружать интерфейс диспетчера, такую обработку лучше запускать в отдельном "техническом" сеансе 1С 7.7 на сервере. Это позволит основной базе работать в фоновом режиме, выполняя роль "робота-обработчика".

Решение 2: Использование 1С 7.7 в качестве HTTP-клиента

Более современный и быстрый подход — заставить 1С 7.7 самостоятельно обращаться к Web-сервисам промежуточной базы 1С 8.3. Хотя в платформе нет встроенного объекта HTTPСоединение, мы можем воспользоваться системным объектом WinHttp.WinHttpRequest.5.1.

Выясним, как отправить POST-запрос с данными прямо из кода "семерки". Это позволит передавать информацию в оперативной памяти, минуя запись на жесткий диск, что исключает задержки файловой системы. Рассмотрим пример реализации:


// Создаем объект для отправки HTTP-запроса
WinHttp = СоздатьОбъект("WinHttp.WinHttpRequest.5.1");
WinHttp.Open("POST", "http://server/base8/hs/exchange/update_doc", 0);
WinHttp.SetRequestHeader("Content-Type", "application/json");

// Подготавливаем JSON с данными реализации
ТекстЗапроса = "{ ""ID"": ""123"", ""Status"": ""Collected"", ""Items"": [...] }";

Попытка
    WinHttp.Send(ТекстЗапроса);
    Если WinHttp.Status = 200 Тогда
        Сообщить("Данные успешно отправлены в мобильное приложение");
        Ответ = WinHttp.ResponseText;
    КонецЕсли;
Исключение
    Предупреждение("Ошибка связи с сервером 1С 8: " + ОписаниеОшибки());
КонецПопытки;

Этот метод позволяет реализовать двусторонний обмен. Когда диспетчер проводит документ в 7.7, код сразу "пуляет" уведомление в 1С 8.3, которая, в свою очередь, через Push-уведомление оповещает кладовщика.

Решение 3: Прямое взаимодействие через COM-соединение

Если базы находятся в одной локальной сети, можно использовать COM-технологию. Проанализируем ситуацию: кладовщик в мобильном приложении нажимает кнопку "Завершить сборку". В этот момент серверная часть 1С 8.3 инициирует COM-соединение с базой 1С 7.7, находит нужный документ и перезаписывает его.

Для реализации этого метода в 1С 8.3 используется следующий подход:


// Пример кода в 1С 8.3 для подключения к 7.7
V7 = Новый COMОбъект("V77.Application");
Открыта = V7.Initialize(V7.RMTrade, "/D""C:\Bases\1C77Base"" /N""Robot"" /P""Password""", "NO_SPLASH_SHOW");

Если Открыта Тогда
    Док77 = V7.CreateObject("Документ.Реализация");
    Если Док77.НайтиПоНомеру("0001", ТекущаяДата()) = 1 Тогда
        // Изменяем количество товара, пришедшее из мобильного приложения
        Док77.ВыбратьСтроки();
        Пока Док77.ПолучитьСтроку() = 1 Цикл
             // Поиск и обновление строк
        КонецЦикла;
        Док77.Записать();
        Док77.Провести();
    КонецЕсли;
КонецЕсли;

Преимущество: Это самый надежный способ с точки зрения контроля транзакций, так как данные меняются непосредственно в базе-приемнике без промежуточных файлов.

Решение 4: Прямая запись в SQL-таблицы (для экспертов)

Если ваша 1С 7.7 работает на MS SQL Server, можно рассмотреть вариант прямой модификации таблиц. Это самый производительный метод, исключающий запуск тяжеловесного COM-объекта.

Разберем структуру: данные документов в 7.7 хранятся в таблицах DHxxxx (шапка) и DTxxxx (табличная часть), где xxxx — это внутренний идентификатор объекта. Посмотрим на алгоритм действий:

  1. Промежуточная база 1С 8.3 подключается к SQL-серверу "семерки" через ADO или внешние источники данных.
  2. Выполняется SQL-запрос UPDATE для изменения количества в строках документа.
  3. Обновляется статус в журнале документов _1SJOURN для того, чтобы диспетчер увидел изменения.

Внимание: Этот метод требует ювелирной точности. Неправильное изменение индексов или отсутствие блокировок может привести к повреждению базы данных. Используйте его только в крайних случаях, когда объем транзакций очень велик.

Решение 5: Использование внешних компонент (FormEx и 1C++)

Для тех, кто хочет сделать работу в 1С 7.7 максимально плавной, рекомендуем обратить внимание на компоненты FormEx или 1C++. Они позволяют расширить возможности старой платформы:

Проанализировав все варианты, мы видим, что наиболее сбалансированным решением для оперативного обмена является комбинация HTTP-запросов из 7.7 и Web-сервисов в 8.3. Это обеспечивает высокую скорость, отсутствие файлового мусора и относительную простоту отладки кода.

← На главную