Как исправить ошибку «Неизвестный идентификатор формы» при запуске мобильного приложения 1С с Библиотекой подключаемого оборудования?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При работе с мобильными приложениями на платформе 1С:Предприятие 8, особенно при использовании специализированных библиотек, таких как Библиотека подключаемого оборудования (БПО), мы можем столкнуться с различными сложностями. Одной из таких распространенных проблем является ошибка «Неизвестный идентификатор формы», которая возникает при попытке запуска конфигурации на мобильном устройстве, хотя на стационарном компьютере та же конфигурация работает без проблем. Давайте подробно разберем эту проблему и рассмотрим методы её решения, основываясь на опыте разработчиков и дополнительной информации.

Анализ исходной проблемы и первоначальные гипотезы

Представим ситуацию: вы скачали актуальную версию Библиотеки подключаемого оборудования (например, 3.2.734), опубликовали её на веб-сервере (Apache) и установили на Android-телефон платформу разработчика 8.3.26. При попытке открытия конфигурации на телефоне вы получаете ошибку «Неизвестный идентификатор формы». Что мы могли бы предпринять в первую очередь?

Как показывает опыт, стандартные попытки устранения проблемы, такие как комментирование всех вызовов из модулей приложения (ПередНачаломРаботыСистемы, ПриНачалеРаботыСистемы) и модуля сеанса, а также проверка отсутствия установки какой-либо формы в Рабочей области начальной страницы, часто не приводят к успеху. На ПК конфигурация запускается без ошибок, что указывает на специфику поведения именно мобильной платформы или взаимодействия с ней.

Первоначальные гипотезы, возникающие при таком поведении:

  1. Проблемы с передачей конфигурации. Библиотека подключаемого оборудования может содержать бинарные драйверы, что делает её «увесистой». При передаче такой объемной конфигурации через встроенный в EDT сервер или при некорректной настройке веб-сервера могут происходить сбои, приводящие к неполной или поврежденной загрузке конфигурации на мобильное устройство.
  2. Некорректная публикация. Проблема может быть связана с файлами публикации, такими как default.vrd, если он лежит в одной папке с файлом конфигурации, когда веб-сервер настроен на работу веб-клиента. Для мобильных приложений конфигурация должна быть отдана веб-сервером «как есть», без дополнительных обработок, которые могут нарушить целостность файла.
  3. Инициализация интерфейса. Если конфигурация загружается, но ошибка возникает при запуске, это может означать, что мобильное приложение пытается открыть какую-то несуществующую или некорректно описанную форму при инициализации пользовательского интерфейса. Возможно, сама конфигурация загрузилась не полностью или её метаданные, описывающие формы, были повреждены.

Давайте теперь рассмотрим проверенные и рабочие решения, которые помогли решить эту проблему.

Решение 1: Обновление платформы и упрощение интерфейса

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

Шаг 1: Обновите платформу на сервере

Мы настоятельно рекомендуем убедиться, что ваша платформа 1С:Предприятие на сервере обновлена до самой актуальной стабильной версии. В одном из случаев, описанных в теме, обновление платформы с версии 8.3.26 до 8.3.27 оказалось решающим. Мы можем предположить, что в новых версиях платформы разработчики 1С исправляют ошибки, связанные с публикацией мобильных приложений, работой с интерфейсом или спецификой взаимодействия с Библиотекой подключаемого оборудования.

Для обновления платформы необходимо:

  1. Скачать дистрибутив новой версии платформы с портала 1С:ИТС.
  2. Произвести установку новой версии платформы на сервер, где выполняется публикация конфигурации.
  3. Убедиться, что используемые информационные базы переведены на работу с новой версией платформы.

Важно: Перед обновлением всегда создавайте резервные копии ваших информационных баз и конфигураций.

Шаг 2: Упростите интерфейс клиентского приложения

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

Мы должны временно удалить все группы и разделы из интерфейса клиентского приложения. Это можно сделать следующим образом:

  1. Откройте конфигурацию в режиме конфигуратора.
  2. Перейдите к объектам метаданных, связанным с интерфейсом (например, "Общие - Командный интерфейс").
  3. Временно удалите или деактивируйте все разделы и группы, чтобы конфигурация запускалась практически без интерфейса. Это не означает полное удаление объектов метаданных, а скорее отключение их отображения и использования на старте.

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

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

Анализ причин, по которым это работает:

Такой подход может решить проблему по нескольким причинам:

  1. Очистка кэша интерфейса: При изменении и перепубликации интерфейса происходит его перестройка и, возможно, очистка внутреннего кэша, который мог содержать некорректные или устаревшие данные.
  2. Исправления платформы: Обновление платформы может включать исправления ошибок в механизмах работы с командным интерфейсом и мобильными приложениями, устраняя тем самым саму причину некорректного построения форм.
  3. Проблемы с метаданными: В редких случаях метаданные, отвечающие за структуру интерфейса, могли быть повреждены или иметь несоответствия, особенно при обновлении конфигурации со старых версий. Упрощение интерфейса заставляет платформу перестроить его с нуля, используя корректные данные.

Решение 2: Сравнение и объединение с пустой конфигурацией

Если первое решение не принесло желаемого результата или обновление платформы по каким-либо причинам невозможно, мы можем прибегнуть к другому, более «хирургическому» методу — сравнению и объединению конфигурации с пустой базой. Этот способ часто помогает при проблемах с метаданными, особенно затрагивающими интерфейс.

Шаг 1: Создайте пустую информационную базу

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

Шаг 2: Выгрузите пустую конфигурацию в файл CF

Далее, мы должны открыть эту новую пустую базу в режиме конфигуратора и выгрузить её конфигурацию в файл формата .cf. Для этого:

  1. В конфигураторе перейдите в меню «Конфигурация».
  2. Выберите пункт «Сохранить конфигурацию в файл...».
  3. Укажите имя файла (например, EmptyConfig.cf) и место сохранения.

Этот файл будет содержать минимально необходимую структуру метаданных, без каких-либо пользовательских объектов.

Шаг 3: Выполните сравнение и объединение в целевой базе

Теперь мы переходим к вашей проблемной информационной базе, где возникает ошибка «Неизвестный идентификатор формы». Мы должны выполнить сравнение и объединение её конфигурации с нашим файлом EmptyConfig.cf. Особое внимание уделите выбору объектов для объединения:

  1. Откройте конфигурацию проблемной базы в режиме конфигуратора.
  2. Перейдите в меню «Конфигурация» -> «Сравнить, объединить с конфигурацией из файла...».
  3. Выберите созданный нами ранее файл EmptyConfig.cf.
  4. В окне сравнения и объединения, которое откроется, очистите все флажки, кроме следующих пунктов:
    • КомандныйИнтерфейс
    • РабочаяОбланостьНачальнойСтраницы

    Эти объекты отвечают за глобальный командный интерфейс и структуру начальной страницы, которые являются ключевыми при инициализации любого приложения 1С, включая мобильное.

  5. Запустите процесс объединения.

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

Шаг 4: Вручную восстановите изменения

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

Анализ причин, по которым это работает:

Этот метод эффективен, когда проблема связана с:

  1. Некорректным обновлением: При обновлении конфигурации со старых версий платформы иногда возникают ошибки, которые приводят к повреждению структуры метаданных, особенно тех, что отвечают за интерфейс. «Перезапись» этих структур чистой конфигурацией устраняет эти повреждения.
  2. «Битые» метаданные: Даже без явных ошибок обновления, метаданные могли быть повреждены. Сравнение и объединение выступает как механизм их «восстановления» до корректного состояния.
  3. Несоответствие версий: Хотя сама проблема «Неизвестный идентификатор формы» может быть связана с платформой, некорректное отображение формы может быть вызвано несовместимостью метаданных интерфейса между разными версиями платформы.

Дополнительные методы диагностики и устранения проблемы

Помимо основных решений, мы рассмотрим ряд дополнительных шагов, которые могут помочь в диагностике и устранении ошибки «Неизвестный идентификатор формы».

1. Очистка кэша

Мы знаем, что проблемы с кэшем являются одной из самых частых причин необъяснимых ошибок в 1С. Важно очищать не только клиентский, но и серверный кэш.

  1. Очистка серверного кэша:

    Мы должны остановить службу «Агент сервера 1С:Предприятие». После этого перейдите по следующим путям и удалите содержимое (кроме каталога Logs, если он там есть):

    • C:\Program Files\1cv8\srvinfo\reg_XXXX\ (где XXXX — это идентификатор вашего рабочего сервера).
    • C:\Users\USR1CV8\AppData\Local\1C\1cv8\* (кроме папки Logs).
    • C:\Users\USR1CV8\AppData\Roaming\1C\1cv8\* (кроме файла 1cv8u.pfl).

    После очистки снова запустите службу «Агент сервера 1С:Предприятие».

  2. Очистка клиентского кэша:

    Если вы запускаете мобильное приложение через клиент 1С на компьютере (например, для отладки), мы можем также очистить кэш клиента. Это можно сделать через диалог запуска 1С:Предприятия (выбор базы, кнопка «Настройка» -> «Удалить кэш»).

  3. Очистка кэша ЭДО (если применимо):

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

Очистка кэша заставляет платформу заново загрузить все метаданные и данные конфигурации, что может устранить ошибки, вызванные устаревшими или поврежденными кэшированными данными.

2. Конфигурация веб-сервера (Apache)

При публикации мобильного приложения на веб-сервере, таком как Apache, мы должны внимательно проверить его конфигурацию.

  1. Соответствие разрядности: Мы убеждаемся, что разрядность установленного Apache (32-бит или 64-бит) соответствует разрядности технологической платформы 1С, которая используется для публикации. Несоответствие может привести к некорректной работе модулей 1С для веб-сервера.
  2. Настройка ServerName: Мы проверяем файл httpd.conf веб-сервера Apache. Строка ServerName должна быть правильно настроена, например, ServerName localhost или указывать на актуальный IP-адрес/домен вашего сервера.
  3. Модули расширения веб-сервера: При установке платформы 1С на сервер, где размещается веб-сервер, мы критически важно установить компонент «Модули расширения веб-сервера». Если этот компонент не установлен, публикация может работать некорректно или не работать вовсе.
  4. Запуск службы: Мы убеждаемся, что служба веб-сервера запущена. Ошибка «Веб-серверы не обнаружены» при публикации часто связана с тем, что служба остановлена.

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

3. Анализ кода в обработчиках форм

Мы также рассматриваем возможность, что ошибка кроется в вашем собственном коде, особенно в обработчиках форм.

Ошибка «Неизвестный идентификатор формы» может возникать из-за специфического кода в обработчиках события формы ПриСозданииНаСервере. Если в этом обработчике происходит помещение во временное хранилище с использованием ЭтаФорма.УникальныйИдентификатор или сгенерированного идентификатора, который не является фактическим уникальным идентификатором самой формы, это может сбить платформу с толку. Мобильная платформа может быть более чувствительной к таким нюансам.

Мы должны тщательно проверить все участки кода, где программно открываются формы или используются их идентификаторы, особенно если это происходит при старте приложения или в общих модулях, вызываемых при создании формы.

4. Внешние компоненты и разрядность

Поскольку мы работаем с Библиотекой подключаемого оборудования, использование внешних компонентов (драйверов) является неотъемлемой частью. Мы должны убедиться, что клиентское приложение 1С и установленный драйвер оборудования имеют одинаковую разрядность (32-бит или 64-бит). Несоответствие разрядности может быть причиной проблем с подключением оборудования и, как следствие, ошибок при запуске форм, которые зависят от инициализации этого оборудования.

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

5. Влияние версии платформы

Как мы уже выяснили в основном решении, обновление платформы до более новой версии (например, 8.3.27) помогло решить проблему. Мы можем сделать вывод, что ошибка «Неизвестный идентификатор формы» может быть платформенной и чаще встречаться на старых версиях 1С. Это прямо указывает на возможные исправления в более новых релизах, которые улучшают стабильность и корректность работы мобильной платформы и её взаимодействия с конфигурацией.

Мы настоятельно рекомендуем всегда использовать актуальные и проверенные версии платформы 1С:Предприятие для разработки и эксплуатации мобильных приложений.

Совет по отладке: Логирование ошибок через HTTP

Если после всех предпринятых действий проблема все еще сохраняется и не удается точно определить источник ошибки, мы можем прибегнуть к более детальному логированию. Стандартные средства отладки в мобильном приложении могут быть ограничены, поэтому эффективным подходом является перехват ошибок с помощью конструкции Попытка...Исключение и запись информации об ошибке в лог-файл на сервере через HTTP-запрос.

Мы можем обернуть потенциально проблемные участки кода в блоки Попытка и Исключение. В блоке Исключение мы будем формировать строку с описанием ошибки (например, с помощью функции ОписаниеОшибки()) и отправлять её на специально настроенный веб-сервис или HTTP-обработчик на вашем веб-сервере. Это позволит нам удаленно получать подробные сведения о сбоях, которые происходят на мобильном устройстве.

Пример программного кода:


// В модуле объекта или другом серверном модуле

Процедура ИнициализироватьМобильноеПриложение()
    Попытка
        // Здесь располагается код, который, как мы подозреваем, вызывает ошибку.
        // Например, инициализация БПО, открытие начальных форм,
        // или вызовы, которые могли быть закомментированы ранее.

        // Пример вызова метода БПО
        // МенеджерОборудования.ИнициализироватьРаботуСОборудованием();

        // Пример открытия формы, которая может быть проблемной
        // ОткрытьФорму("ОбщаяФорма.НачальнаяСтраница",,,,);

    Исключение
        ПередатьОшибкуНаСервер("Ошибка при инициализации мобильного приложения: " + ОписаниеОшибки());
    КонецПопытки;
КонецПроцедуры

Функция ПередатьОшибкуНаСервер(ТекстОшибки)
    Попытка
        // Мы предполагаем, что на вашем веб-сервере есть веб-сервис или HTTP-сервис
        // для логирования ошибок.
        // Замените "ваш_сервер" и "ваш_веб_сервис_лог" на свои актуальные данные.
        HTTPСоединение = Новый HTTPСоединение("ваш_сервер",,,,,,); // Может потребоваться указать порт, пользователя, пароль
        HTTPЗапрос = Новый HTTPЗапрос("/ваш_веб_сервис_лог");

        // Формируем тело запроса с описанием ошибки
        HTTPЗапрос.УстановитьТелоИзСтроки(ТекстОшибки, КодировкаТекста.UTF8);

        HTTPОтвет = HTTPСоединение.Отправить(HTTPЗапрос);

        Если HTTPОтвет.КодСостояния <> 200 Тогда
            // Если запрос на логирование сам завершился ошибкой
            Сообщить("Не удалось передать ошибку на сервер: " + HTTPОтвет.КодСостояния + " " + HTTPОтвет.ПолучитьТелоКакСтроку());
        КонецЕсли;

    Исключение
        // Сообщаем об ошибке передачи, если что-то пошло не так
        Сообщить("Критическая ошибка при попытке передачи ошибки на сервер: " + ОписаниеОшибки());
    КонецПопытки;

    Возврат Истина;
КонецФункции

// В модуле мобильного приложения или другом месте вызова
// ИнициализироватьМобильноеПриложение();

Это позволит нам получить ценную информацию о конкретной строке кода или объекте, который вызывает сбой, даже если мобильное приложение «падает» без видимых причин на устройстве. Мы можем анализировать эти логи на сервере, чтобы сузить область поиска проблемы и применить более точечное решение.

Применяя эти комплексные подходы, мы сможем эффективно диагностировать и устранять проблему «Неизвестный идентификатор формы» в мобильных приложениях 1С с Библиотекой подключаемого оборудования, обеспечивая стабильную работу вашего решения.

← На главную