Вводная
перешли с 8.3.11 на 8.3.12 после отключения совместимости фрагмент кода ниже перестал открывать требуемую форму из другой (справедливо для клиент-серверного варианта проверить файловый вариант ИБ не было возможности)&НаКлиенте Процедура СписокВидовДоговоровВыборЗначения(Элемент, Значение, СтандартнаяОбработка)
// . . .
ОткрытьФорму("Справочник.ДоговорыКонтрагентов.ФормаОбъекта",
ПараметрыФормыДоговора, ЭтаФорма.ВладелецФормы,,,,,РежимОткрытияОкнаФормы.Независимый);
ЭтаФорма.Закрыть();
КонецПроцедуры
Теперь немного больше деталей.
Для справочника ДоговорыКонтрагентов реализовано переопределение формы в обработчике получения формы
Процедура ОбработкаПолученияФормы(ВидФормы,
Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) Если ВидФормы = "ФормаОбъекта" Тогда // . . .
КонецЕсли; КонецПроцедуры
Это требуется для того, чтобы в зависимости от данных заполнения или переданного ключа может быть открыта как форма элемента справочника, так и форма элемента подчиненного справочника. При интерактивном создании элементов справочника мы получим поведение аналогичное программному открытию формы
ОткрытьФорму("Справочник.ДоговорыКонтрагентов.ФормаОбъекта". . . );
В случае если требуемые ключи не заданы - открываем диалог выбора требуемых значений для заполнения нового
ВыбраннаяФорма =
"Справочник.ДоговорыКонтрагентов.Форма.ФормаВыбораТипаДоговораКонтрагента";
Решение
ОткрытьФорму("Справочник.ДоговорыКонтрагентов.ФормаОбъекта",
ПараметрыФормыДоговора, ЭтаФорма.ВладелецФормы,Истина,,,,
РежимОткрытияОкнаФормы.Независимый);
Включение в параметры Уникальность = Истина. Возвращает нас к исходному поведению (требуемая форма открывается).Дальше теории конспирологов (когда сколько бы ты не знал, это только догадки).
Что у нас произошло:
По умолчанию Уникальность = Ложь, те форма не уникальная и сначала попытаться найти среди открытых.
1. мы создали интерактивно новый элемент
2. платформа открывает для него форму по-умолчанию (Справочник.ДоговорыКонтрагентов.ФормаОбъекта, Владелец)
3. мы переопределяем форму в обработчике получения формы
4. платформа кеширует ФормаОбъекта+Владелец = форма из п.3 (точнее любая форма какую вернет сервер)
5. Мы программно открывает форму ФормаОбъекта+тот же Владелец - платформа нашла по этим ключам форму из п.2 (тот же набор ключей). Так как форма уже открыта, мы интерактивно не ощущаем каких либо изменений и считаем что открытие формы "не работает".
Ещё немного
Фрагмент справки 8.3.11.2954 идентичен фрагменту справки 8.3.12.1529, 8.3.12.1616<Уникальность> (необязательный)
Тип: Произвольный.
В данном параметре может быть задан некоторый ключ, значение которого будет использоваться для поиска уже открытых форм. Если будет найдена форма с таким же ключом уникальности, вместо открытия новой формы будет активизирована найденная форма.
Ложь - искать форму с ключом уникальности по умолчанию, Истина - не искать форму вообще, любое другое значение устанавливает ключ уникальности, по которому будет произведен поиск.
Значение по умолчанию: Ложь.
Из описания ОткрытьФорму() трудно сделать выводы об явном изменении в поведении платформы, скорее всего было исправлено\оптимизировано ранее существовавшее допущение. Скорее всего изменилась обработка Уникального пользовательского ключа и поиска формы по нему, в 8.3.11 пустое значение - не сопоставляется при поиске среди открытых форм, то в 8.3.12 - пустое значение, тоже значение. Напомню в режиме "совместимости с 8.3.11" в 8.3.12 - форма открывается и с Уникальность = Ложь (значение по умолчанию, если верить документации оно - Ложь).Открывает и возвращает форму или управляемую форму. В тонком и веб-клиенте только управляемую форму. Перед открытием осуществляется поиск уже открытой такой же формы. Поиск осуществляется по типу формы, значениям ключевых параметров формы, владельцу формы, пользовательскому ключу уникальности.Описание:
Можно открывать уже полученную форму. В этом случае в параметрах передается уже полученная форма и окно, в котором открыть форму.
Можно открыть по имени формы. В этом случае в параметры передаются имя формы, параметры формы, владелец, ключ уникальности и окно, в котором должна быть открыта форма.
Тонкий клиент, веб-клиент, толстый клиент, мобильное приложение(клиент).Доступность:
Вызов метода выполняет обращение к серверу.
Для варианта "По названию" параметры вызова аналогичны параметрам метода ПолучитьФорму.Примечание:
Обычные формы внешних обработок не поддерживаются.
В управляемом приложении не следует выполнять программное открытие и закрытие одной и той же формы в одном вызове встроенного языка.
Если при открытии обычной формы в параметре <ИмяФормы> указано не стандартное имя формы, передаваемые параметры не обрабатываются.
В процессе выполнения может быть несколько обращений к серверу. Часть из них кэшируются. Как минимум одно обращение к серверу есть всегда и оно не кэшируется. Кэширование зависит от версии платформы и версии конфигурации в целом. Если установлена низкая скорость соединения и не указывается текущая строка, то кэшируется форма выбора. Очистка кэша осуществляется с периодичностью в 20 мин. Удаляются формы, которые не использовались в этот период времени
Так же о многом говорит - ничего не говоря конкретно - расплывчатая формулировка "Кэширование зависит от версии платформы и версии конфигурации в целом."
Комментарии
Отправить комментарий