При попытке запустить мобильный клиент 1С на базе старых конфигураций, таких как «Управление торговлей 11.0.4.6», разработчики часто сталкиваются с критической ошибкой на этапе загрузки начального экрана. Система выдает сообщение: {ОбщийМодуль.РегламентныеЗаданияКлиент.Модуль(119,4)}: Процедура или функция с указанным именем не определена (ЗапуститьСистему). Давайте детально разберем природу этой проблемы и пошагово выясним, как адаптировать устаревший код под современные мобильные технологии.
Для начала проанализируем ситуацию: используемая версия конфигурации была выпущена за много лет до появления технологии мобильного клиента 1С. В те времена программный код писался исключительно в расчете на «толстый» и «тонкий» клиенты для операционной системы Windows. Метод ЗапуститьСистему() является специфическим для десктопных платформ и физически отсутствует в ядре мобильного клиента для Android или iOS.
Когда мобильное приложение подключается к базе, оно компилирует модули «на лету». Обнаружив вызов функции, которой нет в его библиотеке исполняемых команд, мобильный клиент немедленно прекращает работу. Наша задача — объяснить системе, что этот код не должен исполняться, если запуск происходит с мобильного устройства.
Рассмотрим основной способ решения проблемы — использование директив препроцессора. Это специальные команды, которые указывают платформе, какие участки кода нужно компилировать для конкретного типа клиента, а какие — игнорировать.
Разберем по шагам процесс правки кода:
ОбщийМодуль.РегламентныеЗаданияКлиент.ЗапуститьСистему().Посмотрим на пример того, как должен выглядеть исправленный код:
#Если Не МобильныйКлиент Тогда
ЗапуститьСистему();
#КонецЕсли
Благодаря этой конструкции, при запуске на смартфоне платформа просто «пролистает» этот блок, не пытаясь вызвать несуществующую функцию, и загрузка приложения продолжится в штатном режиме.
Поскольку конфигурация УТ 11.0 крайне старая, одной правки в модуле регламентных заданий может быть недостаточно. Выясним, какие еще «сюрпризы» могут скрываться в коде. Для этого воспользуемся встроенным инструментом автоматизированной проверки.
Проанализируем конфигурацию следующим образом:
Система сформирует список всех мест, где используются недопустимые методы (например, работа с файловой системой через прямые пути C:\Temp, вызовы COM-объектов или WScript.Shell). Все найденные ошибки в клиентских модулях необходимо обработать аналогично первому решению, используя #Если Не МобильныйКлиент Тогда.
В старых версиях УТ 11 механизмы БСП еще не знали о существовании мобильных платформ. При старте системы часто инициализируются такие подсистемы, как:
Если после исправления ЗапуститьСистему() приложение продолжает падать, следует обратить внимание на модуль РегламентныеЗаданияКлиент и процедуры типа ПриНачалеРаботыСистемы. Часто бывает полезно полностью отключить вызов определенных обработчиков ожидания для мобильного клиента, так как они создают лишнюю нагрузку и могут вызывать ошибки доступа к данным.
Разберем важный нюанс: мобильный клиент на Android очень агрессивно кэширует структуру метаданных и программный код модулей. Если вы внесли исправления в конфигураторе и обновили базу (F7), но телефон продолжает выдавать старую ошибку — не паникуйте. Это происходит потому, что мобильное устройство использует старую копию модуля из своего локального кэша.
Для применения изменений выполните следующие действия:
Также проверим свойства корня конфигурации. Нажмем правой кнопкой мыши на названии конфигурации в дереве, выберем «Свойства» и прокрутим список до раздела «Использование мобильного приложения и мобильного клиента». Убедимся, что для вашей версии платформы (в данном случае 8.3.17) установлены соответствующие разрешения для работы мобильного клиента.
Соблюдение этих шагов позволит вам запустить даже очень старую конфигурацию на современном мобильном устройстве, обеспечив необходимую мобильность сотрудников без необходимости полной переработки системы.