Многократное получение значения параметров сеанса
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

При обращение к значению параметра сеанса необходимо учитывать, что, не смотря на то, что при это не выполняется обращение к БД, время обращения к значению параметра все-таки значительно отличается от аналогичного времени обращения к переменной. Поэтому не рекомендуется выполнять многократное получение значения параметра сеанса – следует использовать "промежуточную" переменную.

Неправильно:

Выборка = Запрос.Выполнить().Выбрать(); Набор = РегистрыСведений.НастройкиПользователей.СоздатьНаборЗаписей(); .... Пока Выборка.Следующий() Цикл Запись = Набор.Добавить(); ... Запись.Пользователь = ПараметрыСеанса.ТекущийПользователь; ... КонецЦикла; Набор.Записать();

 

Правильно:

Выборка = Запрос.Выполнить().Выбрать(); Пользователь = ПараметрыСеанса.ТекущийПользователь; Набор = РегистрыСведений.НастройкиПользователей.СоздатьНаборЗаписей(); .... Пока Выборка.Следующий() Цикл Запись = Набор.Добавить(); ... Запись.Пользователь = Пользователь; ... КонецЦикла; Набор.Записать();

 

 

Проверка заполнения значения переменной (реквизита и т.п.)

В тех случаях, когда необходимо проверить факт установки «пустого» значения в переменной, реквизите объекта или формы и любых других подобных значениях рекомендуется применять следующую функцию:

 

Функция ЗначениеНеЗаполнено(Значение) Экспорт Результат = Ложь; ТипЗначения = ТипЗнч(Значение); // Сначала примитивные типы Если Значение = Неопределено Тогда Результат = Истина; ИначеЕсли Значение = NULL Тогда Результат = Истина; ИначеЕсли ТипЗначения = Тип("Строка") Тогда Если ПустаяСтрока(Значение) Тогда Результат = Истина; КонецЕсли; ИначеЕсли ТипЗначения = Тип("Число") Тогда Если Значение = 0 Тогда Результат = Истина; КонецЕсли; ИначеЕсли ТипЗначения = Тип("Дата") Тогда Если Значение = Дата('00010101') Тогда Результат = Истина; КонецЕсли; ИначеЕсли ТипЗначения = Тип("Булево") Тогда Результат = Ложь; // Булево будем считать не пустым //////////////////////////////////////////////////////////// ИначеЕсли ТипЗначения = Тип…. //Другие проверки, для значений, не имеющих конструктора /////////////////////////////////////////////////////////// // Для остальных будем считать значение пустым, если оно равно // значению своего типа, получаемому конструктором Иначе Если Значение = Новый(ТипЗначения) Тогда Результат = Истина; КонецЕсли; КонецЕсли; Возврат Результат; КонецФункции // ЗначениеНеЗаполнено()

 

Для возможности применения данного метода в любом модуле конфигурации данная функция должна располагаться в одном из общих модулей, с установленными признаками компиляции "Клиент", "Сервер" и "Внешнее соединение".

При использовании этого метода следует учитывать, что прямая проверка искомого значения на «пустое» выполняется все-таки быстрее.
Например,
Ссылка.Пустая()
выполняется на порядок быстрее чем
ЗначениеНеЗаполнено(Ссылка).
Соответственно, при обработке большого объема информации в алгоритмах критических к времени выполнения, когда тип проверяемого значения заведомо определен, применять данный метод не рекомендуется.

 






Требования к реализации обработчиков события ПередЗаписью() объектов конфигурации

В случаях, когда в обработчике события ПередЗаписью() объекта конфигурации выполняется какая-либо проверка или иные действия, в результате которых может быть принято решение об отказе от записи объекта (т.е. установка значения флага Отказ в ИСТИНА), то такая проверка не должна выполняться при записи данных, получаемых через механизмы обмена данных.
То есть, данная проверка должна быть ограничена условием:
"Если НЕ ОбменДанными.Загрузка Тогда"

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

Неправильно:

Если ЭтоНовый() Тогда Если ЗначениеНеЗаполнено(ЕдиницаХраненияОстатков) Тогда Отказ = Истина; КонецЕсли; мСсылкаНового = Справочники.Номенклатура.ПолучитьСсылку(); Если НЕ Отказ Тогда УстановитьСсылкуНового(мСсылкаНового); КонецЕсли; КонецЕсли;

 

Правильно:

Если НЕ ОбменДанными.Загрузка Тогда Если ЭтоНовый() Тогда Если ЗначениеНеЗаполнено(ЕдиницаХраненияОстатков) Тогда Отказ = Истина; КонецЕсли; мСсылкаНового = Справочники.Номенклатура.ПолучитьСсылку(); Если НЕ Отказ Тогда УстановитьСсылкуНового(мСсылкаНового); КонецЕсли; КонецЕсли; КонецЕсли;

 



Дата: 2018-11-18, просмотров: 233.