Книга знаний

Рекламное место пустует
1С:Предприятие / v8 / Приемы программирования / Формы

v8: Где в форме хранить промежуточные данные?

Нестандартное использование динамически создаваемых элементов управления для хранения промежуточных данных в форме.Автор статьи: Гений 1С | Редакторы: fotov
Последняя редакция №6 от 02.12.08 | История
URL: http://kb.mista.ru/article.php?id=101

Ключевые слова: форма,промежуточные данные


Иногда у программистов возникает потребность сохранить в форме некие промежуточные данные, да только неохота заводить у формы новую переменную с ключевым словом Экспорт (чтобы она была видна снаружи, из других модулей). Особенно это касается случаев, когда пишется универсальная обработка, не меняющая конфигурацию.

Специально для таких случаев могу порекомендовать следующее.
Программным путём (ЭлементыФормы.Добавить()) в форму добавляется невидимое поле ввода с каким-нибудь сложным именем, например "п_МояПеременнаяДляХраненияПромежуточныхДанныхЦЭИмяРек".
Далее используется свойство Значение или СписокВыбора этого поля ввода, где можно хранить любое значение или список значений.

Например, я использовал такой подход, когда мне нужно было сохранять названия старых процедур-обработчиков событий формы, когда я их заменял своими. Сначала вызывался мой обработчик, а из него через функцию Выполнить - старый обработчик. При этом название старой процедуры-обработчика сохранялось именно в такой динамической переменной.

Еще один пример по УПП. В ней есть функция "ПриУстановкеЗаголовкСистемы", которая вызывается практически для каждой формы документа. Сделаем так, чтобы для любой формы можно было получить время ее открытия.
Вот пример, который создает в форме поле, в котором хранится время открытия формы (временем открытия будем считать первый вызов фунцкции "ПриУстановкеЗаголовкСистемы"). Код нужно вставить в конец функции "ПриУстановкеЗаголовкСистемы":
ТекстМаркера="UniqueMarkerForForm20050802createdin1501by1SCoderGoodIdeaForRedirectionMoscow_PR_FIX";
Если Форма.ЭлементыФормы.Найти(ТекстМаркера)<>Неопределено Тогда
    Эл=Форма.ЭлементыФормы.Добавить(Тип("ПолеВвода"),ТекстМаркера,ложь); //Добавляет поле ввода
    Эл.Значение=ТекущаяДата(); //Сохраняет время открытия 
КонецЕсли;

А вот код, чтобы получить время открытия любой формы УПП:
ВремяОткрытияФормы=Форма.ЭлементыФормы.UniqueMarkerForForm20050802createdin1501by1SCoderGoodIdeaForRedirectionMoscow_PR_FIX.Значение;


Замечание: вместо длинного идентификатора лучше использовать идентификатор полученный из GUID - он точно будет уникальным.

p.s. для форм объектов в платформе 8.1 реализовано новое свойство "Дополнительные свойства" которое является структурой
Закладка

Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2011 | Mista.ru

Яндекс.Метрика