Img/xRom.gif Главная О сайте Новости Статьи Программы OLAP Ссылки
на сайте на Народ.Ру на Яндексе


Об использовании функции Шаблон().
В идеологии фирмы 1С, что и отмечено в документации говорится о невозможности доступа к функциям, процедурам, переменным локального модуля. При передаче контекста одной формы другой, передается ссылка на форму, реквизиты объекта, но по каким-то причинам "забыта" ссылка на модуль.
Т.е. из Глобального модуля нельзя выполнять локальные функции и получать значения локальных переменных уже открытой формы, код которой уже интерпретирован. Когда Глобальный модуль не может использовать уже интерпретированный код локального модуля, то это кажется по крайней мере не логичным.
Обойти ограничения можно с помощью довольно простой схемы. Для этого используем стандартную функцию форматирования Шаблон()
1) Вставляем глобальные функции :
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//Возвращает объект любого типа. По сути является универсальной, но
//работает дольше чем _Вычислить(), поэтому ИМХО рекомендовал бы
//использовать ее когда нужно вернуть именно объект
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Функция _ВычислитьОбъект(Выражение ) Экспорт
Возврат ЗначениеИзСтроки(Шаблон(
"[ЗначениеВСтроку("+Выражение +")]"));
КонецФункции

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//Возвращает число. Использую ее когда нужно получить результат выполнения
//лок. функции, которые обычно возвращают 0/1
// (Для удобства такие же функции можно написать и для др. простых типов данных)
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Функция _Вычислить(Выражение ) Экспорт
> Возврат Число(Шаблон(
"["+Выражение+"]" ));
КонецФункции

2) Вызов функции осуществляется так:
_Вычислить("ИмяЛокФункции()");
или
глПерем=_ВычислитьОбъект( "ЛокПерем");

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

Следует отметить, что при необходимости программного открытия какого-либо объекта из глобального модуля и дальнейшего выполнения этим объектом каких-то локальных функций, применение Шаблона() для доступа к локальному модулю не даст результатов. Т.е. схема типа:

ОткрытьФорму("Документ.Счет");
_Вычислить("Взаиморасчеты()");

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

Типичный пример использования функции Шаблон()  описан в статье "Пример использования функции Шаблон()"



1C:TOP-100 КЛУБ ПРОФЕССИОНАЛОВ 1С
Hosted by uCoz