Переключение на Главную Страницу Страницы: 1 [2]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Как получить значение периодического реквизита (число прочтений - 6791 )
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Как получить значение периодического реквизита
Ответ #15 - 20. Сентября 2010 :: 10:24
Печать  
Eprst писал(а) 20. Сентября 2010 :: 10:19:
es3000 писал(а) 20. Сентября 2010 :: 10:18:
По пункту (2): если делаю для периодической даты типизацию
[МояДата $Дата], то всегда получается пустая дата


а в МояДата у тебя что ?


Код
Выбрать все
ТекстЗапроса = "
	|SELECT
	|	СпрКонтрагенты.ID as [Контрагент $Справочник.Контаргенты],
	|	ПериодическиеРеквизиты.ЗначениеРеквизита AS МояДата

...

|LEFT JOIN (SELECT
|		ПериодическиеРеквизиты.objid as objid,
|		ПериодическиеРеквизиты.value as ЗначениеРеквизита,
|		ПериодическиеРеквизиты.date AS ДатаРеквизита
|	FROM _1sconst as ПериодическиеРеквизиты (nolock)
|	WHERE
|		ПериодическиеРеквизиты.row_id =
|			(SELECT top 1 Константа.row_id
|			FROM _1sconst as Константа (nolock)
|			WHERE
|				(Константа.id = $ИсторияРеквизита.Абоненты.ДатаОкончанияДоговора)
|				AND
|				(Константа.objid = ПериодическиеРеквизиты.objid)
|			ORDER BY Константа.date desc, Константа.time desc, Константа.docid desc
|			)
|		AND
|		ПериодическиеРеквизиты.id = $ИсторияРеквизита.Абоненты.ДатаОкончанияДоговора
|	) as ПериодическиеРеквизиты ON ПериодическиеРеквизиты.objid = СпрКонтрагенты.id   "

 



если я здесь ставлю типизацию, то получается всегда пустая дата
  
Наверх
ICQ  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Как получить значение периодического реквизита
Ответ #16 - 20. Сентября 2010 :: 10:27
Печать  
Eprst писал(а) 20. Сентября 2010 :: 10:21:
es3000 писал(а) 20. Сентября 2010 :: 10:20:
А не будет ли при этом подзапрос выполняться дважды? Скорее всего да. Один раз в SELECT и один раз в WHERE. А если мне надо выбрать пять периодических реквизитов из справочника, то это приведет к значительным замедлениям


Конечно нет.
Еще раз, в данном тексте, в начале идет обработка ветки from, потом полученные строки фильтруются в where и только потом select


Хорошо, попробую
Если разницы по времени выполнения с явным подзапросом к _1sconst (как сделано выше) не будет, тогда просто прекрасно!
  
Наверх
ICQ  
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Как получить значение периодического реквизита
Ответ #17 - 20. Сентября 2010 :: 10:27
Печать  
У тебя периодический реквизит с типом ДАТА ?
Улыбка))))

Или всё же будешь дату его смотреть?
Код
Выбрать все
//ПериодическиеРеквизиты.ЗначениеРеквизита AS МояДата
ПериодическиеРеквизиты.ДатаРеквизита [МояДата $Дата]
 



  
Наверх
 
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Как получить значение периодического реквизита
Ответ #18 - 20. Сентября 2010 :: 10:45
Печать  
Цитата:
У тебя периодический реквизит с типом ДАТА ?

Да.
Сам реквизит называется "ДатаОкончанияДоговора". Он периодический, его тип "Дата". Мне нужна не дата его изменения (т.е. не ДатаРеквизита), а само его значение (ЗначениеРеквизита). Желательно уже приведенное к 1С-кому типу "Дата"
  
Наверх
ICQ  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Как получить значение периодического реквизита
Ответ #19 - 20. Сентября 2010 :: 11:07
Печать  
es3000 писал(а) 20. Сентября 2010 :: 10:45:
Цитата:
У тебя периодический реквизит с типом ДАТА ?

Да.
Сам реквизит называется "ДатаОкончанияДоговора". Он периодический, его тип "Дата". Мне нужна не дата его изменения (т.е. не ДатаРеквизита), а само его значение (ЗначениеРеквизита). Желательно уже приведенное к 1С-кому типу "Дата"

Может дату окончания договора хранить в самом договоре ?
  
Наверх
 
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Как получить значение периодического реквизита
Ответ #20 - 20. Сентября 2010 :: 11:21
Печать  
Цитата:
Может дату окончания договора хранить в самом договоре ?


Если б все было так легко  Злой
Конфигурация самописная, написана 5 лет назад. Сейчас серьезных изменений делать не хочется. Надеемся со следующего года перейдем на новую программу.

А сейчас реквизиты договора - это периодические реквизиты справочника контрагентов.
  
Наверх
ICQ  
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Как получить значение периодического реквизита
Ответ #21 - 20. Сентября 2010 :: 11:24
Печать  
Ну так тогда:
Код
Выбрать все
 [Дата $Дата], 

  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Как получить значение периодического реквизита
Ответ #22 - 20. Сентября 2010 :: 11:46
Печать  
es3000 писал(а) 20. Сентября 2010 :: 11:21:
Цитата:
Может дату окончания договора хранить в самом договоре ?


Если б все было так легко  Злой
Конфигурация самописная, написана 5 лет назад. Сейчас серьезных изменений делать не хочется. Надеемся со следующего года перейдем на новую программу.

А сейчас реквизиты договора - это периодические реквизиты справочника контрагентов.

Ну тогда получается
несерьезные изменения алгоритмов и структуры данных  влекут серьезную нагрузку на базу данных
Серьезные( и грамотные) изменения алгоритмов и структуры данных влекут
несерьезную нагрузку на базу данных
  
Наверх
 
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Как получить значение периодического реквизита
Ответ #23 - 20. Сентября 2010 :: 12:10
Печать  
Eprst писал(а) 20. Сентября 2010 :: 11:24:
Ну так тогда:
Код
Выбрать все
 [Дата $Дата], 



Ага.

Я пока сделал через CONVERT(DateTime, ЗначениеРеквизита, 104). В этом случае не нужна типизация [МояДата $Дата]
  
Наверх
ICQ  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Как получить значение периодического реквизита
Ответ #24 - 20. Сентября 2010 :: 12:12
Печать  
Z1 писал(а) 20. Сентября 2010 :: 11:46:
Ну тогда получается
несерьезные изменения алгоритмов и структуры данных  влекут серьезную нагрузку на базу данных
Серьезные( и грамотные) изменения алгоритмов и структуры данных влекут
несерьезную нагрузку на базу данных


Абсолютно согласен.
Но сейчас я данное изменение сделать не могу, есть другая срочная работа. Позже конечно же к этому надо будет вернуться
  
Наверх
ICQ  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Как получить значение периодического реквизита
Ответ #25 - 20. Сентября 2010 :: 12:15
Печать  
Eprst писал(а) 20. Сентября 2010 :: 12:14:
es3000 писал(а) 20. Сентября 2010 :: 12:10:
Я пока сделал через CONVERT(DateTime, ЗначениеРеквизита, 104). В этом случае не нужна типизация [МояДата $Дата]


И че, неужели строку '01.01.2010' к DateTime конвертнуло ???
Не ВЕРЮ.


Все даты конвернтунло.
А почему бы нет?
  
Наверх
ICQ  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Как получить значение периодического реквизита
Ответ #26 - 20. Сентября 2010 :: 12:16
Печать  
Для этого я указал параметр "104", который обозначает формат конвертируемой даты
  
Наверх
ICQ  
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Как получить значение периодического реквизита
Ответ #27 - 20. Сентября 2010 :: 12:17
Печать  
es3000 писал(а) 20. Сентября 2010 :: 12:15:
Eprst писал(а) 20. Сентября 2010 :: 12:14:
es3000 писал(а) 20. Сентября 2010 :: 12:10:
Я пока сделал через CONVERT(DateTime, ЗначениеРеквизита, 104). В этом случае не нужна типизация [МояДата $Дата]


И че, неужели строку '01.01.2010' к DateTime конвертнуло ???
Не ВЕРЮ.


Все даты конвернтунло.
А почему бы нет?


я забыл, что у тебя там только даты.. я делал с конвертом, но забыл ставить фильтр на objid.. ругалось на конверт.

  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 
ОтправитьПечать