При доработке типовых конфигураций (например, УПП 1.3 или других решений на платформе «1С:Предприятие») разработчики нередко сталкиваются с ситуацией, когда добавленный в модуль код просто игнорируется: точка останова не срабатывает, вывод сообщений через функцию Сообщить() молчит, а обработчики событий элементов управления не реагируют на действия пользователя. Рассмотрим подробнее, почему возникают такие проблемы, как исправить ошибку метода ОткрытьФорму и как правильно работать с формами документов.
Самая распространенная причина, по которой процедура ПриОткрытии или событие изменения реквизита (например, ОрганизацияПриИзменении) не выполняются, заключается в том, что процедура физически существует в модуле формы, но не зарегистрирована в палитре свойств как обработчик события.
Разберем по шагам, как проверить и восстановить привязку:
ПриОткрытии). Если поле пустое, выберем соответствующую процедуру из выпадающего списка.ПриИзменении. В нем должна быть указана именно та процедура, выполнение которой ожидается.Если обработчики привязаны корректно, но код по-прежнему не отрабатывает, проанализируем саму форму, которая отображается пользователю. В сложных конфигурациях у одного объекта метаданных может существовать несколько форм объекта: основная типовая, специализированная форма для определенных ролей или нетиповая форма (например, твк_ФормаДокумента).
В этом случае вызовы могут переопределяться:
ОбработкаПолученияФормы.Если открывается альтернативная форма, код в модуле основной формы выполняться не будет. Необходимо убедиться, что правки вносятся именно в тот модуль формы, который фактически открывается в режиме предприятия.
При попытке открыть альтернативную форму программно разработчики часто допускают синтаксическую ошибку в формировании пути к объекту метаданных. Посмотрим на ошибочный пример вызова:
// Вызывает ошибку: Неизвестное имя формы
ОткрытьФорму("Документ.ЗаказПокупателя.твк_ФормаДокумента", ПараметрыВыбора);
Платформа требует строгого соблюдения пути к форме. Путь формируется с явным указанием типа объекта метаданных: Документ.<ИмяДокумента>.Форма.<ИмяФормы>. Исправим код следующим образом:
ОткрытьФорму("Документ.ЗаказПокупателя.Форма.твк_ФормаДокумента", ПараметрыВыбора);
Выясним причину, по которой попытка передать структуру с ключом Отбор в параметры формы документа не дает желаемого результата. Механизм отбора существует исключительно для списков: динамических списков, табличных полей типа ДокументСписок или справочников. Форма документа (объекта) отображает реквизиты ровно одной конкретной записи, поэтому коллекция Отбор для нее архитектурно не предусмотрена.
В зависимости от реальной бизнес-задачи применяются разные подходы:
ЗначенияОтбора = Новый Структура("Организация", НужнаяОрганизация);
ПараметрыФормы = Новый Структура("Отбор", ЗначенияОтбора);
ОткрытьФорму("Документ.ЗаказПокупателя.ФормаСписка", ПараметрыФормы);
ПараметрыФормы = Новый Структура("Ключ", СсылкаНаДокумент);
ОткрытьФорму("Документ.ЗаказПокупателя.Форма.твк_ФормаДокумента", ПараметрыФормы);
Форма = СсылкаНаДокумент.ПолучитьФорму("твк_ФормаДокумента");
Форма.Открыть();
ЗначенияЗаполнения:
ПараметрыФормы = Новый Структура("ЗначенияЗаполнения", Новый Структура("Организация", НужнаяОрганизация));
ОткрытьФорму("Документ.ЗаказПокупателя.Форма.твк_ФормаДокумента", ПараметрыФормы);
НовыйДокумент = Документы.ЗаказПокупателя.СоздатьДокумент();
НовыйДокумент.Организация = НужнаяОрганизация;
ФормаДокумента = НовыйДокумент.ПолучитьФорму("твк_ФормаДокумента");
ФормаДокумента.Открыть();