В процессе разработки и кастомизации интерфейсов в системе 1С:Предприятие (особенно когда речь идет об обычных формах) программисты нередко сталкиваются с крайне неприятной проблемой. При добавлении графического оформления (например, значка или логотипа) на элементы формы — в частности, на многостраничные панели — конфигурация начинает вести себя нестабильно. На компьютере разработчика все открывается и функционирует штатно, но при попытке запустить эту же форму на любом другом рабочем месте платформа аварийно завершает работу, выдавая ошибку СУБД или операционной системы (Access Violation).
Рассмотрим подробнее техническую природу этого сбоя, выясним причину, почему стандартные методы удаления графики из палитры свойств не помогают, и разберем по шагам три надежных способа восстановления работоспособности формы.
Когда мы связываем графический файл с элементом обычной формы напрямую через палитру свойств (например, указывая путь к файлу на жестком диске), платформа 1С выполняет сериализацию этого объекта. В метаданных формы сохраняются двоичные данные графики, а также абсолютный путь к файлу на компьютере разработчика (например, C:\Users\Developer\Documents\logo.png).
При открытии этой формы на компьютерах других пользователей происходит следующее:
Попытка...Исключение.Казалось бы, достаточно зайти в Конфигуратор, открыть свойства проблемного элемента (например, страницы панели), очистить поле с путем к файлу и сохранить изменения. Однако на практике это часто не решает проблему. Мы сталкиваемся с эффектом так называемых фантомных ссылок.
При очистке свойства визуально поле в Конфигураторе становится пустым. Но во внутренней структуре метаданных формы (в XML-описании) бинарный поток или некорректная ссылка на локальный ресурс не вычищаются до конца из-за багов платформы. Система продолжает хранить поврежденный фрагмент данных в структуре элемента управления, что снова и снова вызывает падение платформы у пользователей.
Проанализируем методы, которые помогут гарантированно очистить форму от фантомного мусора.
Для быстрого и низкоуровневого исправления метаданных отлично подходит специализированный пакет обработок «Инструменты разработчика» (ИР). Он позволяет обойти стандартные ограничения Конфигуратора и напрямую отредактировать свойства объектов.
Разберем алгоритм действий:
Если у вас нет под рукой сторонних обработок, мы можем воспользоваться штатным механизмом выгрузки метаданных в текстовые файлы. Это самый надежный способ полностью контролировать структуру формы.
Выполним следующие шаги:
.xml (например, Document.ИмяДокумента.Form.ФормаДокумента.Form.xml).<Picture> или схожие контейнеры, содержащие закодированные в Base64 бинарные данные либо абсолютные пути).Если вы не хотите работать с XML-кодом напрямую, можно решить задачу визуальными средствами Конфигуратора. Так как фантомные свойства привязаны к конкретному элементу (например, многостраничной панели), нам нужно полностью уничтожить этот элемент и создать его заново.
Пошаговый план решения:
Чтобы в будущем не допускать подобных аварийных ситуаций, важно соблюдать стандарты разработки 1С. Никогда не загружайте внешние файлы напрямую со своего локального диска в свойства элементов формы.
Правильный архитектурный подход заключается в использовании общих объектов метаданных:
ОбщиеКартинки. В этом случае в форме будет сохранена лишь ссылка на объект метаданных, что гарантирует стабильную работу интерфейса на любом клиентском компьютере.Для динамического управления интерфейсом также рекомендуется использовать программное назначение свойств с обязательной проверкой доступности ресурсов. Посмотрим на пример безопасного кода инициализации элементов:
Процедура ПриОткрытии()
// Безопасное назначение оформления из общих ресурсов конфигурации
Попытка
ЭлементыФормы.ПанельОсновная.Страницы.СтраницаКонтакты.Картинка = БиблиотекаКартинок.Телефон;
Исключение
ЗаписьЖурналаРегистрации("Интерфейс.ОшибкаОформления",
УровеньЖурналаРегистрации.Предупреждение,,,
"Не удалось установить значок вкладки: " + ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
Применяя описанные методики очистки фантомных свойств и соблюдая правила работы с общими объектами метаданных, мы сможем гарантировать бесперебойную работу интерфейсов наших решений на любых рабочих станциях пользователей.