В современной практике автоматизации торговли часто возникает задача: предоставить мобильным сотрудникам (кассирам, кладовщикам, торговым представителям) удобный доступ к учетной системе со смартфонов или планшетов. Если компания использует современную конфигурацию на управляемых формах (например, УТ 11, УНФ или ERP), задача решается развертыванием мобильного клиента относительно быстро. Но как быть, если учет ведется в старой, проверенной годами и глубоко кастомизированной 1С:Управление торговлей ред. 10.3, которая построена на обычных формах?
В рамках этой статьи мы детально проанализируем технические ограничения платформы, разберем подводные камни режима совместимости, выясним, почему прямая работа «из коробки» невозможна, и рассмотрим три жизнеспособных сценария реализации мобильного рабочего места для УТ 10.3.
---
Давайте сразу определим главное техническое ограничение: мобильный клиент, мобильное приложение и веб-клиент 1С физически не умеют отображать обычные (толстые) формы. Платформа 1С спроектирована так, что транслировать интерфейс на мобильные устройства или в браузер могут исключительно управляемые формы.
Если мы попытаемся подключить мобильный клиент напрямую к базе УТ 10.3, мы столкнемся со следующими непреодолимыми препятствиями:
глЗначениеПеременной()), которые прописаны в общих модулях без разделения на клиентский и серверный контекст. При попытке запустить управляемую форму в тонком или мобильном клиенте система будет аварийно завершать работу из-за ошибок компиляции кода, предназначенного исключительно для толстого клиента.---
Еще одна критическая проблема кроется в режиме совместимости конфигурации УТ 10.3. Типовая база работает в режиме совместимости с версией платформы 8.2. Современный функционал мобильного клиента требует актуальных версий платформы (8.3.12 и выше).
Если мы решим перевести конфигурацию УТ 10.3 на современную версию платформы и отключим режим совместимости, база мгновенно перестанет работать. Причина кроется в модальных вызовах. В современных версиях платформы (особенно на мобильных устройствах) полностью запрещены модальные окна и синхронные вызовы вроде:
Предупреждение()Вопрос()ОткрытьФормуМодально()ВвестиЗначение()При отключении совместимости любой такой вызов в коде приведет к генерации неустранимой ошибки. Переписать тысячи модальных вызовов в сильно доработанной конфигурации — это задача, требующая колоссальных человеко-часов, сопоставимых с переходом на УТ 11.
Давайте посмотрим наглядный пример. В старой конфигурации код проверки проведения выглядит так:
Если Вопрос("Провести документ?", РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Да Тогда
ЭтотОбъект.Записать(РежимЗаписиДокумента.Проведение);
КонецЕсли;
Для корректной работы на мобильном клиенте без режима совместимости нам придется переписать этот фрагмент с использованием асинхронного вызова и специального обработчика:
&НаКлиенте
Процедура ЗапроситьПроведениеДокумента()
ОписаниеОповещения = Новый ОписаниеОповещения("ПослеВопросаОПроведении", ЭтотОбъект);
ПоказатьВопрос(ОписаниеОповещения, "Провести документ?", РежимДиалогаВопрос.ДаНет);
КонецПроцедуры
&НаКлиенте
Процедура ПослеВопросаОПроведении(Результат, ДополнительныеПараметры) Экспорт
Если Результат = КодВозвратаДиалога.Да Тогда
ПровестиДокументНаСервере();
КонецЕсли;
КонецПроцедуры
Такой рефакторинг придется провести по всей конфигурации, что экономически и технически нецелесообразно ради одной-двух мобильных форм.
---
Это наиболее надежный, безопасный и профессиональный архитектурный подход. Вместо попыток запустить мобильный клиент напрямую в старой базе, мы разрабатываем легкую, отдельную конфигурацию для мобильных устройств, которая обменивается данными с основной УТ 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");
Возврат Ответ;
КонецФункции
Такой подход изолирует мобильную разработку от «ужасно допиленной» основной конфигурации. Основная база остается стабильной, а мобильное приложение получает строго необходимые ему данные.
---
Если бюджет крайне ограничен, а реализовать мобильный доступ нужно «вчера», можно прибегнуть к терминальному доступу. Для этого на сервере разворачивается RDP-сессия, к которой сотрудники подключаются через мобильные клиенты удаленного рабочего стола (например, Microsoft Remote Desktop).
Особенности этого метода:
---
Не стоит изобретать велосипед, если на рынке существуют готовые решения, поддерживающие обмен с УТ 10.3. Проанализируйте следующие программные продукты:
---
Подводя итог, ответим на исходный вопрос: запустится ли Мобильный клиент напрямую в УТ 10.3? Нет, без колоссальных затрат на переписывание конфигурации под управляемые формы и снятия режима совместимости это работать не будет. Пытаться сделать это «в лоб» — нерационально.
Мы рекомендуем действовать по следующему плану: