|
v7: Получить кратность валюты прямым запросом | ☑ | ||
---|---|---|---|---|
0
LisaAlisa
28.11.15
✎
21:32
|
Подскажите, пжл, как составить прямой запрос, чтобы получить кратность валюты на опр. дату. Аналог Док.Валюта.Кратность.Получить(Док.ДатаДок)
select Валюты.CODE '???' AS Кратность from SC30 as Валюты |
|||
1
Отладчик
28.11.15
✎
22:10
|
1с++ што ле? Хороший костыль к 77 был...
|
|||
2
Горогуля
28.11.15
✎
23:45
|
ну посмотри в dd
|
|||
3
hhhh
28.11.15
✎
23:52
|
(0) если нужно получить(), то это не справочнике Валюты, это совсем в другом месте. Может в константах.
|
|||
4
Pers0naGrata
29.11.15
✎
00:03
|
Пишу такой прямой запрос:
ТекстЗапроса = " |ВЫБРАТЬ | $спрВалюты.Код КАК Код, | ВЫРАЗИТЬ($ПоследнееЗначение.Валюты.Кратность(:ВыбВалюта,:ВыбДата) КАК ЧИСЛО(7,0)) КАК Кратность |ИЗ | Справочник.Валюты КАК спрВалюты |ГДЕ | $спрВалюты.ТекущийЭлемент = :ВыбВалюта |"; ПрямойЗапрос=СоздатьОбъект("ПрямойЗапрос"); ПрямойЗапрос.Текст=ТекстЗапроса; ПрямойЗапрос.УстановитьТекстовыйПараметр("ВыбВалюта",ВыбВалюта); ПрямойЗапрос.УстановитьТекстовыйПараметр("ВыбДата",ТекущаяДата()); И он мне в режиме отладке выдает такое: SELECT спрВалюты.CODE AS Код, CAST((SELECT const_vt.VALUE FROM __1S_CONST const_vt WHERE const_vt.ID = ' G' AND const_vt.OBJID = ' 1 ' AND const_vt.DATE < '20151128' ORDER BY idx_ID_OBJID_DATE_TIME_DOCID_PARTNO DESC LIMIT 1) AS ЧИСЛО(7,0)) AS Кратность FROM [Справочник.Валюты] AS спрВалюты WHERE спрВалюты.ID = ' 1 ' Дальше сама разберешься... |
|||
5
LisaAlisa
30.11.15
✎
10:05
|
(4) спасибо! но не разобралась, ведь кратность это не константа...
|
|||
6
cw014
30.11.15
✎
10:11
|
(5) Это периодический реквизит, а оно в таблице const лежит
|
|||
7
LisaAlisa
30.11.15
✎
10:26
|
Я не могу понять, какие значения подставить в условия
WHERE const_vt.ID = ' G' AND const_vt.OBJID = ' 1 ' где посмотреть эти значения? |
|||
8
Franchiser
гуру
30.11.15
✎
10:42
|
В mdeditor. Или скопировать md, сделать в не периодический реквизит обычным и потом посмотреть в dd.
|
|||
9
AMKahm
30.11.15
✎
10:52
|
а просто написать $ПоследнееЗначение.Валюты.Кратность(:ВыбВалюта,:ВыбДата)
никак? можно и так мд = СоздатьОбъект("MetaDataWork"); рс = СоздатьОбъект("ODBCRecordset"); ТекстЗапроса = " |SELECT TOP(1) VALUE |FROM _1SCONST (nolock) |WHERE (OBJID=:Валюта) AND (ID = :Кратность) AND (DATE <= :ТекДата) |ORDER BY DATE DESC |"; рс.УстановитьТекстовыйПараметр("Валюта", Валюта); рс.УстановитьТекстовыйПараметр("ТекДата", ТекущаяДата()); рс.УстановитьТекстовыйПараметр("Кратность",мд.ИДОбъекта(Метаданные.Справочник("Валюты").Реквизит("Кратность"))); Кратность = рс.ВыполнитьСкалярный(ТекстЗапроса); или надо савсем прямой запрос, чтоб не из 1С выполнялся? |
|||
10
LisaAlisa
30.11.15
✎
11:11
|
(9) да, чтоб не из 1С тоже
|
|||
11
AMKahm
30.11.15
✎
12:00
|
ну самое простое - выполни запрос из (9) в 1С
и например в профайлере/режиме отладки посмотри что там вместо :Валюта и :Кратность встало ID там менятся не будет OBJID - соединяй с таблицей Валют например так |SELECT Валюты.DESCR as Валюта, Константы.VALUE as Кратность |FROM | SC30 as Валюты | OUTER APPLY (SELECT TOP(1) VALUE as Значение, DATE as Дата FROM _1SCONST (nolock) WHERE (OBJID=Валюты.ID) AND (ID = ' идКратности из профайлера') AND (Константы.DATE <= :ТекДата) ORDER BY DATE DESC) as Кратность |
|||
12
AMKahm
30.11.15
✎
12:03
|
косячно скопипастил, но смысл понятен...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |