При программной работе с интерфейсом в среде «1С:Предприятие 8.3» разработчики нередко сталкиваются с ситуацией, когда попытка открыть форму объекта завершается ошибкой с сообщением «Неизвестное имя формы». Особенно часто это происходит при переходе от работы с обычными формами к управляемым или при обращении к объектам журналов документов. Разберем по шагам, почему возникает такая ошибка, как устроена адресация форм в платформе и как правильно открывать списки журналов в соответствии со стандартами разработки.
Рассмотрим ситуацию, с которой столкнулся разработчик. При попытке выполнить следующий код система выдает исключение:
Форма = ПолучитьФорму("Журнал.ЧекиККМ.Форма.ФормаСписка");
Форма.Открыть();
При этом в дереве метаданных конфигурации журнал документов с именем ЧекиККМ присутствует, и у него действительно существует подчиненная форма ФормаСписка. Однако платформа выдает ошибку поиска имени формы.
Выясним причину такого поведения платформы. В объектной модели «1С:Предприятие 8» имя класса метаданных для журналов строго зафиксировано — ЖурналДокументов (в англоязычной нотации — DocumentJournal). Сокращение Журнал являлось синтаксической конструкцией старых платформ (в частности, 1С 7.7) и не поддерживается восьмой версией при адресации путей к формам. Любая строка вида "Журнал.<ИмяЖурнала>..." является некорректным путем, что и приводит к системному сообщению о неизвестной форме.
Проанализируем структуру строки пути к форме управляемого приложения. Платформа 1С поддерживает два варианта обращения к формам списков объектов конфигурации:
Форма = ПолучитьФорму("ЖурналДокументов.ЧекиККМ.ФормаСписка");Форма:Форма = ПолучитьФорму("ЖурналДокументов.ЧекиККМ.Форма.ФормаСписка");Рассмотрим важный нюанс архитектуры управляемого приложения (в частности, в конфигурации «1С:Управление торговлей 11»). Использование устаревшей связки ПолучитьФорму() и последующего вызова метода Форма.Открыть() не рекомендуется стандартом разработки 1С. Такой подход влечет за собой избыточные вызовы контекста и инициализацию объекта формы на клиенте еще до момента ее отображения.
В управляемом клиенте для открытия формы списка журнала документов следует применять стандартную процедуру ОткрытьФорму(). Посмотрим на правильный и современный пример реализации:
ОткрытьФорму("ЖурналДокументов.ЧекиККМ.ФормаСписка");
Если требуется открыть конкретную форму, не являющуюся основной, используем явное имя:
ОткрытьФорму("ЖурналДокументов.ЧекиККМ.Форма.ФормаСписка");
Часто журнал требуется открыть не просто в исходном виде, а с определенными параметрами, например, установив фильтрацию или позиционирование на нужной строке. Метод ОткрытьФорму() позволяет передать структуру параметров вторым аргументом. Разберем практический пример:
ПараметрыФормы = Новый Структура;
// При необходимости передаем параметры открытия
ОткрытьФорму("ЖурналДокументов.ЧекиККМ.ФормаСписка", ПараметрыФормы);
Иногда требуется открыть форму журнала так, как если бы пользователь нажал на пункт меню в интерфейсе или панели разделов. В этом случае полезно применить команду перехода по внутренней навигационной ссылке платформы:
ПерейтиПоНавигационнойСсылке("e1cib/list/ЖурналДокументов.ЧекиККМ");
Если строка метаданных написана без ошибок (ЖурналДокументов.<Имя>.ФормаСписка), но ошибка «Неизвестное имя формы» все равно продолжает появляться, проанализируем сопутствующие факторы: