При работе с платформой «1С:Предприятие 8.2» и «8.3» многие разработчики сталкиваются с парадоксальной ситуацией: встроенный в конфигурацию отчет с управляемой формой прекрасно открывается в обычном приложении (толстом клиенте), но стоит сохранить его как внешний файл (.erf), как при попытке открытия система просто ничего не делает. Нет ни ошибок, ни предупреждений — отчет просто игнорирует команду пользователя. Рассмотрим причины этого поведения и разберем пошаговые инструкции, как заставить такие отчеты работать.
Проанализируем ситуацию с точки зрения архитектуры платформы. В свойствах конфигурации существует важная настройка — Использовать управляемые формы в обычном приложении. Когда этот флаг установлен, платформа позволяет «вкраплять» управляемые интерфейсы в старый добрый интерфейс обычного приложения. Однако этот механизм ориентирован в первую очередь на объекты, которые уже включены в состав метаданных конфигурации.
Когда вы открываете внешний файл через меню «Файл — Открыть», платформа запускает старый алгоритм поиска основной формы. В режиме обычного приложения система в первую очередь ищет форму, помеченную как «Обычная». Если во внешнем отчете создана только управляемая форма, механизм сопоставления типов во внешних файлах часто дает сбой. Платформа «видит» управляемую форму в метаданных файла, но не может корректно инициализировать ее как основную в контексте толстого клиента обычного приложения. Результат — полная тишина («болт», как выразился автор вопроса).
Это самый эффективный и быстрый способ, позволяющий не перерисовывать сложный интерфейс с нуля. Мы создадим «посредника» — обычную форму, которая будет единственной задачей иметь запуск управляемой формы. Разберем по шагам, как это реализовать:
ФормаДляОбычногоПриложения.Основная форма отчета (для обычного приложения) выбрана именно эта новая обычная форма.ПриОткрытии.Проанализируем код, который нам понадобится. Мы должны программно вызвать управляемую форму этого же объекта, а открытие самой обычной формы прервать, чтобы пользователь её даже не заметил:
Процедура ПриОткрытии(Отказ)
// Получаем управляемую форму по ее имени в метаданных внешнего отчета
ФормаУпр = ЭтотОбъект.ПолучитьФорму("ФормаУправляемая");
// Открываем управляемую форму
ФормаУпр.Открыть();
// Устанавливаем Отказ в Истина, чтобы пустая обычная форма не отобразилась
Отказ = Истина;
КонецПроцедуры
Этот метод «обманывает» платформу: при нажатии «Файл — Открыть» система успешно находит и инициализирует обычную форму (что она умеет делать хорошо), а та, в свою очередь, перехватывает управление и запускает нужный нам современный интерфейс.
Если вы не хотите добавлять лишние формы, давайте проанализируем настройки самого файла отчета. Иногда проблема кроется в некорректном заполнении свойств основной формы. Рассмотрим, на что нужно обратить внимание:
Основная форма отчета и Форма отчета.Режим использования модальности в конфигурации. Если ваша управляемая форма использует модальные вызовы (например, Вопрос() вместо ПоказатьВопрос()), а в конфигурации использование модальности запрещено, форма может закрыться мгновенно после открытия без выдачи ошибок.Если ваша конфигурация современная (например, «Управление торговлей 11», «Бухгалтерия 3.0» или любая другая на базе БСП), но пользователи по какой-то причине работают в обычном интерфейсе (толстом клиенте), лучшим решением будет отказ от открытия через «Файл — Открыть».
Зарегистрируйте отчет в справочнике Дополнительные отчеты и обработки. Рассмотрим, почему это помогает:
&НаСервере и &НаКлиенте.Важно понимать, что даже если управляемая форма успешно открылась во внешнем отчете внутри обычного приложения, она будет работать в режиме Толстого клиента (управляемое приложение). Выясним, что это означает для разработчика:
Во-первых, все вызовы &НаСервере будут работать штатно, так как толстый клиент имеет прямой доступ к серверным процедурам. Во-вторых, могут возникнуть сложности с некоторыми интерактивными методами, которые специфичны для веб-клиента или тонкого клиента. Например, методы работы с файловой системой на клиенте могут потребовать дополнительной проверки типа платформы.
Также проанализируем ситуацию с правами доступа. Убедитесь, что у пользователя в роли установлено право Интерактивное открытие внешних отчетов и обработок. Хотя автор темы указал, что это право установлено, для многих других это становится неочевидным препятствием. Без этого права «болт» при открытии — стандартная реакция системы.
Подводя итог, если вам нужно быстро реанимировать внешний отчет без переписывания кода под обычные формы, используйте Способ 1 (Форма-заглушка). Это наиболее надежный «костыль», проверенный годами практики. Он позволяет сохранить всю функциональность управляемого интерфейса, минимизировав при этом конфликты с устаревшим механизмом открытия внешних файлов в толстом клиенте.