Почему в поле переключателя на мобильной платформе 1С отображаются пустые строки и как это исправить

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

При разработке мобильных приложений на платформе 1С:Предприятие 8.3 разработчики часто сталкиваются с ситуацией, когда стандартные элементы управления ведут себя не так, как в десктопной версии. Одной из таких проблем является некорректное отображение элемента Переключатель. Суть проблемы заключается в следующем: в конфигураторе список выбора заполнен, данные в реквизите есть, на форме появляются характерные "кружочки" выбора, но текст рядом с ними (представление) остается абсолютно пустым. Проблема может проявляться как на эмуляторах, так и на реальных устройствах под управлением Android и iOS.

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

Причина 1. Особенности кэширования метаданных и идентификаторов

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

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

Разберем этот процесс по шагам:

  1. Удалим текущий элемент формы (вид: Переключатель).
  2. Удалим сам реквизит в окне метаданных объекта или формы.
  3. Выполним обновление конфигурации базы данных.
  4. Создадим реквизит заново с тем же типом (например, Строка) и добавим его на форму.
  5. Заново настроим список выбора.

Почему это работает? При создании нового реквизита платформа присваивает ему новый внутренний идентификатор (UUID). Для мобильной платформы это служит сигналом к созданию абсолютно нового объекта в локальной базе устройства, что полностью исключает использование битых ссылок из старого кэша.

Причина 2. Явное указание представлений в списке выбора

Рассмотрим специфику работы мобильной платформы с типами данных. В десктопной версии 1С, если в списке выбора заполнено поле "Значение", а поле "Представление" оставлено пустым, система автоматически подставляет значение вместо текста. На мобильной платформе (особенно версий 8.3.13 – 8.3.15) этот механизм может давать сбой.

Выясним причину: мобильный клиент крайне чувствителен к настройкам локализации. Мы рекомендуем всегда заполнять колонку "Представление" явно. Чтобы убедиться в корректности данных, выполните следующие действия:

Причина 3. Несоответствие типов данных и длины строк

Проанализируем еще один технический нюанс. Мобильная платформа строго контролирует соответствие типов данных в реквизите и в списке выбора. Если ваш реквизит имеет тип Строка(20), а в списке выбора вы указали значение длиной 25 символов или строку неограниченной длины, связь может нарушиться.

Также критичным фактором являются лишние пробелы (Trailing Spaces). Если в значении реквизита записана строка "Вариант1", а в списке выбора указано "Вариант1 " (с пробелом в конце), мобильный переключатель создаст строку выбора, но не сможет сопоставить её с представлением, из-за чего строка останется пустой. Всегда проверяйте соответствие типов Ограниченная строка и Неограниченная строка.

Причина 4. Ошибки отрисовки и программное заполнение

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

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


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Очищаем список выбора перед заполнением
    Элементы.ИмяРеквизитаПереключатель.СписокВыбора.Очистить();
    
    // Добавляем значения с явным указанием представления
    Элементы.ИмяРеквизитаПереключатель.СписокВыбора.Добавить("Самовывоз", "Заберу сам в магазине");
    Элементы.ИмяРеквизитаПереключатель.СписокВыбора.Добавить("Доставка", "Доставить курьером по адресу");
    
    // Если проблема сохраняется, можно попробовать принудительно обновить отображение
    ЭтаФорма.ОбновитьОтображениеДанных();
    
КонецПроцедуры

Если даже после программного заполнения строки остаются пустыми, попробуйте перенести вызов метода ОбновитьОтображениеДанных() в событие ПриОткрытии на клиенте. Это заставит графический движок мобильной платформы пересчитать ширину элементов и отобразить текст.

Причина 5. Влияние интерфейсных настроек

На мобильной платформе существует режим "Компактный интерфейс". В некоторых случаях, если переключатель находится внутри сложной иерархии групп (например, группа с видом Страницы или Группа колонок), алгоритм расчета ширины текста может ошибочно установить для представления нулевую ширину. Текст фактически присутствует, но он "сжат" до невидимого состояния.

Чтобы проверить эту теорию, попробуйте временно вынести переключатель в корень формы или изменить свойство РастягиватьПоГоризонтали. Если текст появится — значит, проблема в компоновке формы, и необходимо пересмотреть структуру групп.

Итоги и рекомендации

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

  1. Проверьте соответствие типов: тип реквизита должен в точности совпадать с типом значений в списке выбора.
  2. Заполните представления: никогда не оставляйте колонку "Представление" пустой, надеясь на автоподстановку.
  3. Программный метод: используйте заполнение через СписокВыбора.Добавить() в серверном коде.
  4. Радикальный метод: если ничего не помогает, удалите реквизит и элемент формы, обновите конфигурацию и создайте их заново. Как показывает практика, это самый быстрый способ победить баги кэширования мобильной платформы.

Соблюдение этих правил позволит вам создавать стабильные и визуально корректные мобильные интерфейсы на базе 1С.

← На главную