Как запустить мобильный клиент 1С для работы с УТ 10.3 и стоит ли это делать?

Программист 1С v8.3 (Обычные формы) Управленческий учет Торговля и дистрибуция
← На главную

В современной практике автоматизации торговли часто возникает задача: предоставить мобильным сотрудникам (кассирам, кладовщикам, торговым представителям) удобный доступ к учетной системе со смартфонов или планшетов. Если компания использует современную конфигурацию на управляемых формах (например, УТ 11, УНФ или ERP), задача решается развертыванием мобильного клиента относительно быстро. Но как быть, если учет ведется в старой, проверенной годами и глубоко кастомизированной 1С:Управление торговлей ред. 10.3, которая построена на обычных формах?

В рамках этой статьи мы детально проанализируем технические ограничения платформы, разберем подводные камни режима совместимости, выясним, почему прямая работа «из коробки» невозможна, и рассмотрим три жизнеспособных сценария реализации мобильного рабочего места для УТ 10.3.

---

Архитектурный барьер: Обычные формы против Мобильного клиента

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

Если мы попытаемся подключить мобильный клиент напрямую к базе УТ 10.3, мы столкнемся со следующими непреодолимыми препятствиями:

  1. Отсутствие автогенерации интерфейса. Если для документа, справочника или отчета в конфигураторе не создана управляемая форма, мобильное устройство отобразит пустой экран или откроет форму в режиме «Только просмотр» без возможности редактирования данных. Динамические списки потеряют кнопки добавления, копирования и проведения.
  2. Несовместимость глобального кода. Конфигурация УТ 10.3 изобилует глобальными процедурами и функциями (например, обращениями к функции глЗначениеПеременной()), которые прописаны в общих модулях без разделения на клиентский и серверный контекст. При попытке запустить управляемую форму в тонком или мобильном клиенте система будет аварийно завершать работу из-за ошибок компиляции кода, предназначенного исключительно для толстого клиента.
  3. Отсутствие директив компиляции. Старый код не оптимизирован под клиент-серверное взаимодействие. Переменные и методы, выполняемые на сервере, будут вызываться напрямую с клиента, что приведет к падению платформы.

---

Капкан режима совместимости и асинхронности

Еще одна критическая проблема кроется в режиме совместимости конфигурации УТ 10.3. Типовая база работает в режиме совместимости с версией платформы 8.2. Современный функционал мобильного клиента требует актуальных версий платформы (8.3.12 и выше).

Если мы решим перевести конфигурацию УТ 10.3 на современную версию платформы и отключим режим совместимости, база мгновенно перестанет работать. Причина кроется в модальных вызовах. В современных версиях платформы (особенно на мобильных устройствах) полностью запрещены модальные окна и синхронные вызовы вроде:

При отключении совместимости любой такой вызов в коде приведет к генерации неустранимой ошибки. Переписать тысячи модальных вызовов в сильно доработанной конфигурации — это задача, требующая колоссальных человеко-часов, сопоставимых с переходом на УТ 11.

Давайте посмотрим наглядный пример. В старой конфигурации код проверки проведения выглядит так:


Если Вопрос("Провести документ?", РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Да Тогда
    ЭтотОбъект.Записать(РежимЗаписиДокумента.Проведение);
КонецЕсли;

Для корректной работы на мобильном клиенте без режима совместимости нам придется переписать этот фрагмент с использованием асинхронного вызова и специального обработчика:


&НаКлиенте
Процедура ЗапроситьПроведениеДокумента()
    ОписаниеОповещения = Новый ОписаниеОповещения("ПослеВопросаОПроведении", ЭтотОбъект);
    ПоказатьВопрос(ОписаниеОповещения, "Провести документ?", РежимДиалогаВопрос.ДаНет);
КонецПроцедуры

&НаКлиенте
Процедура ПослеВопросаОПроведении(Результат, ДополнительныеПараметры) Экспорт
    Если Результат = КодВозвратаДиалога.Да Тогда
        ПровестиДокументНаСервере();
    КонецЕсли;
КонецПроцедуры

Такой рефакторинг придется провести по всей конфигурации, что экономически и технически нецелесообразно ради одной-двух мобильных форм.

---

Альтернатива №1: Отдельное мобильное приложение на Мобильной платформе с обменом через HTTP/Web-сервисы

Это наиболее надежный, безопасный и профессиональный архитектурный подход. Вместо попыток запустить мобильный клиент напрямую в старой базе, мы разрабатываем легкую, отдельную конфигурацию для мобильных устройств, которая обменивается данными с основной УТ 10.3 в фоновом режиме.

Преимущества подхода:

Давайте разберем, как организовать такой обмен по шагам. На стороне УТ 10.3 мы создаем простой HTTP-сервис. Например, для создания документа «Заказ покупателя» напишем обработчик POST-запроса, который принимает JSON с мобильного устройства:


Функция СоздатьЗаказПокупателя(Запрос)
    
    Ответ = Новый HTTPСервисОтвет(200);
    Ответ.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
    
    // Получаем тело запроса в формате JSON
    СтрокаJSON = Запрос.ПолучитьТелоКакСтроку("UTF-8");
    Чтение = Новый ЧтениеJSON;
    Чтение.УстановитьСтроку(СтрокаJSON);
    ДанныеЗаказа = ПрочитатьJSON(Чтение);
    Чтение.Закрыть();
    
    НачатьТранзакцию();
    Попытка
        НовыйЗаказ = Документы.ЗаказПокупателя.СоздатьДокумент();
        НовыйЗаказ.Дата = ТекущаяДата();
        НовыйЗаказ.Организация = Справочники.Организации.НайтиПоКоду(ДанныеЗаказа.КодОрганизации);
        НовыйЗаказ.Контрагент = Справочники.Контрагенты.НайтиПоКоду(ДанныеЗаказа.КодКонтрагента);
        
        // Заполняем табличную часть товары
        Для Каждого СтрокаТовара Из ДанныеЗаказа.Товары Цикл
            НоваяСтрока = НовыйЗаказ.Товары.Добавить();
            НоваяСтрока.Номенклатура = Справочники.Номенклатура.НайтиПоКоду(СтрокаТовара.КодНоменклатуры);
            НоваяСтрока.Количество = СтрокаТовара.Количество;
            НоваяСтрока.Цена = СтрокаТовара.Цена;
            НоваяСтрока.Сумма = СтрокаТовара.Количество * СтрокаТовара.Цена;
        КонецЦикла;
        
        НовыйЗаказ.Записать(РежимЗаписиДокумента.Проведение);
        ЗафиксироватьТранзакцию();
        
        СтруктураОтвета = Новый Структура("Успех, Ссылка", Истина, Строка(НовыйЗаказ.Ссылка));
    Исключение
        ОтменитьТранзакцию();
        СтруктураОтвета = Новый Структура("Успех, ОписаниеОшибки", Ложь, ОписаниеОшибки());
    КонецПопытки;
    
    // Записываем ответ в поток JSON
    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.УстановитьСтроку();
    ЗаписатьJSON(ЗаписьJSON, СтруктураОтвета);
    Ответ.УстановитьТелоИзСтроки(ЗаписьJSON.Закрыть(), "UTF-8");
    
    Возврат Ответ;
    
КонецФункции

Такой подход изолирует мобильную разработку от «ужасно допиленной» основной конфигурации. Основная база остается стабильной, а мобильное приложение получает строго необходимые ему данные.

---

Альтернатива №2: Терминальный доступ (RDP) через мобильное устройство

Если бюджет крайне ограничен, а реализовать мобильный доступ нужно «вчера», можно прибегнуть к терминальному доступу. Для этого на сервере разворачивается RDP-сессия, к которой сотрудники подключаются через мобильные клиенты удаленного рабочего стола (например, Microsoft Remote Desktop).

Особенности этого метода:

---

Альтернатива №3: Использование готовых интеграционных решений

Не стоит изобретать велосипед, если на рынке существуют готовые решения, поддерживающие обмен с УТ 10.3. Проанализируйте следующие программные продукты:

---

Резюме и план действий

Подводя итог, ответим на исходный вопрос: запустится ли Мобильный клиент напрямую в УТ 10.3? Нет, без колоссальных затрат на переписывание конфигурации под управляемые формы и снятия режима совместимости это работать не будет. Пытаться сделать это «в лоб» — нерационально.

Мы рекомендуем действовать по следующему плану:

  1. Если нужен быстрый и дешевый результат — настройте RDP-доступ и сделайте упрощенный интерфейс кассира на обычных формах с большими экранными кнопками.
  2. Если требуется надежное масштабируемое решение — разработайте отдельное мобильное приложение на мобильной платформе 1С и свяжите его с УТ 10.3 посредством HTTP-сервисов по схеме, которую мы разобрали выше.
  3. Если задача типовая (касса, инвентаризация) — приобретите готовое мобильное приложение с отлаженным обменом, сэкономив недели работы разработчиков.
← На главную