Чем можно заменить условие: СправочникСсылка.ПолучитьОбъект()<>Неопределено ? #579603


#0 by Shaman
Проходит обработка большого количества объектов, данное условие занимает значительную часть обработки. Логика условия такова - в качестве параметра передается ссылка на справочник, возможен вариант когда передается ссылка на еще не записанный элемент справочника, но с установленым гуидом. Можно ли "облегчить" это условие?
#1 by Amiralnar
С гуидом, без гуида... не записанный = > ЭтоНовый = Истина
#2 by anddro
Запросом почему не хочешь? И желательно не в цикле
#3 by anddro
ЭтоНовый - у объекта, а ТС спрашивает про ссылку
#4 by Amiralnar
Передавай параметром признак того, что объект записан. Или храни список не записанных объектов в глобальной таблице.
#5 by Aleksey
А если запросом
#6 by Фрэнки
тогда по условиям написанного запроса будет получаться, что у тестовой ссылки просто не заполнено значение реквизита Ссылка т.е. если такой запрос работает, должна работать и проверка ЗначениеЗаполнено(СправочникСсылка.Ссылка)
#7 by Фрэнки
+5 но при этом я уже вижу свою ошибку : мой вариант надо применять в том случае, если конкретная ссылка получена чтением данных _объекта_, т.е. СправочникСсылка нужно перечитать из базы, что можно сделать тем же самым методом ПолучитьОбъект. А в запросе вызывается неявным образом чтение данных объекта из БД - это практически такая же функция ПолучитьОбъект Я к тому что выигрыша по скорости для каждой конкретной проверяемой ссылкой в цикле не даст никакого. Надо придумывать какой-то более эффективный способ.
#8 by sda553
Понимаешь в чем дело. Тут уже была дискуссия которая установила, что если какой то горе программист напишет в модуле объекта функцию Предупреждение или Вопрос или еще какую то такую гадость, то твой код ПолучитьОбъект ни фига не будет работать из под сервера.
#9 by sda553
Поэтому тогда установили что безопаснее и быстрее использовать запросы
#10 by Фрэнки
с этой позицией (запрос вместо метода) я согласен на все 100% - есть безопасность кода и ее нужно обеспечить. Но в контексте заданного вопроса в теме просят предложить версию выигрыша по скорости обработки. Я не думаю, что по скорости именно такая версия запроса даст выигрыш, либо он будет совсем небольшой.
#11 by acsent
ПолучитьОбъектне работает на сервере??????
#12 by Фрэнки
Ну... по идее, согласно задумке разработчиков платформы, при корректном описании контекста модуля, на сервере ПолучитьОбъект работать будет. Поэтому я и не особо привязываюсь к методу, а говорю об отсутствии выигрыша в скорости, если просто заменить вызов одного метода для одной ссылки на объект таким вот запросом, точно также получающим один объект по ссылке на него.
#13 by Фрэнки
зы. убежал. вечером вернусь.
#14 by acsent
А отличие от в том что ПолучитьОбъект получает ВСЕ реквизиты и что самое страшное табличные части
#15 by anddro
+1
#16 by sda553
У ПолучитьОбъект выполняется модуль инициализации - он может хоть час выполнятся, смотря что туда понаписать
#17 by Фрэнки
просто я не видел никогда этого модуля. Если в модуле предусмотрено выделение памяти под типы значений реквизитов и реквизитов тч и в самом деле происходит единовременное получение всех этих значений... Это же прописывается в коде платформы? "смотря что туда" - это имеется ввиду в состав реквизитов шапки и реквизитов тч ?
#18 by Фрэнки
о как! не удосуживался проверить.
#19 by alkov
А Пустая не прокатит?
#20 by sda553
Это обычный модуль объекта. Код инициализации это то что в этом модуле за границами всех процедур и функций Конечно нет, Пустая для битой ссылки возвращает Ложь
#21 by Фрэнки
хитро, спасибо за подсказку.
#22 by alkov
А ему нужно Истина, если GUID уже установлен?
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С