Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема какой-нитьДокумент.Вид() - очень медленная операция (число прочтений - 1693 )
sashas09
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 148
Местоположение: Киев
Зарегистрирован: 26. Апреля 2007
Пол: Мужской
какой-нитьДокумент.Вид() - очень медленная операция
05. Сентября 2008 :: 09:55
Печать  
какие-то подводные камни есть в следующем коде

если использовать вместо конструкции
  Если Док.Вид() ="Счет" Тогда  

 кодВида=Лев(МетаДатаВорк.ЗначениеВДлиннуюСтрокуБД(Док),4);
 Если кодВида=кодВидаДокументаСчетКоторыйОпределилиПриНачалеРаботыСистемы.

Конструкция работает значительно шустрее
  
Наверх
ICQ  
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: какой-нитьДокумент.Вид() - очень медленная операция
Ответ #1 - 09. Сентября 2008 :: 06:09
Печать  
Все правильно.
Когда пишешь док.Вид(), то 1С вынуждена преобразовать значение ссылки на документ (которое есть просто два числа - иддок и иб-суффикс) в агрегатный объект 1С, при этом подтягивает из базы данных значения всех реквизитлв документа.
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: какой-нитьДокумент.Вид() - очень медленная операция
Ответ #2 - 09. Сентября 2008 :: 20:05
Печать  
orefkov писал(а) 09. Сентября 2008 :: 06:09:
Все правильно.
Когда пишешь док.Вид(), то 1С вынуждена преобразовать значение ссылки на документ (которое есть просто два числа - иддок и иб-суффикс) в агрегатный объект 1С, при этом подтягивает из базы данных значения всех реквизитлв документа.

Насколько я с этим вопросом сталкивался, CValue всегда позволял получить id вида документа без обращения к базе.
Это, в частности, было использовано при построении быстрых индексов для ИТ.
Не спорю, скорее всего ты прав, и Вид() работает именно так, как ты описываешь; но по логике - не все тут правильно.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: какой-нитьДокумент.Вид() - очень медленная операция
Ответ #3 - 09. Сентября 2008 :: 20:32
Печать  
kms писал(а) 09. Сентября 2008 :: 20:05:
Не спорю, скорее всего ты прав, и Вид() работает именно так, как ты описываешь; но по логике - не все тут правильно.


По логике - использование функции Вид() приводит к использованию алгоритмов привязанных к конкретному набору документов.
В первых редакциях конфигураций для 8.0 была очень сильная привязка к виду документов, что крайне затрудняло добавление
новых документов - надо было править все строки, где он встречалась. Во второй редакции (и наверно в 3) -
практически полностью отказались от использования этой функции - это было большое облегчение.
Т.е. не важно как она реализована - ее лучше вообще не использовать
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: какой-нитьДокумент.Вид() - очень медленная операция
Ответ #4 - 10. Сентября 2008 :: 06:07
Печать  
kiruha писал(а) 09. Сентября 2008 :: 20:32:
В первых редакциях конфигураций для 8.0 была очень сильная привязка к виду документов, что крайне затрудняло добавление
новых документов - надо было править все строки, где он встречалась. Во второй редакции (и наверно в 3) -
практически полностью отказались от использования этой функции - это было большое облегчение.

Точно; и в типовых 7.0 и далее это было постоянной практикой и причиной головной боли.
Собственно, так и должно быть для систем, построенных на подобном переключаемом полиморфизме.

А каким именно методом отказались от него в 8.0?
Предположим, у нас нет icpp и классов, какие методы обеспечения полиморфизма мы можем еще применить в 7.7?
  

De quelle planète es-tu?
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: какой-нитьДокумент.Вид() - очень медленная операция
Ответ #5 - 10. Сентября 2008 :: 16:36
Печать  
kms писал(а) 10. Сентября 2008 :: 06:07:
kiruha писал(а) 09. Сентября 2008 :: 20:32:
В первых редакциях конфигураций для 8.0 была очень сильная привязка к виду документов, что крайне затрудняло добавление
новых документов - надо было править все строки, где он встречалась. Во второй редакции (и наверно в 3) -
практически полностью отказались от использования этой функции - это было большое облегчение.

Точно; и в типовых 7.0 и далее это было постоянной практикой и причиной головной боли.
Собственно, так и должно быть для систем, построенных на подобном переключаемом полиморфизме.

А каким именно методом отказались от него в 8.0?
Предположим, у нас нет icpp и классов, какие методы обеспечения полиморфизма мы можем еще применить в 7.7?


Сейчас посмотрел количество вхождений в последний релиз УТ
выражения "ДокументСсылка.РеализацияТоваровУслуг" - все равно есть 41, но это все же меньше чем 400 для первых редакций.

Метод стандартный : через предачу доп параметра настроенного на обработчик - например КодыОперацийПартииТоваров для движений регистра ПартииТоваровНаСкладах.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать