Имя: Пароль:
1C
1C 7.7
v7: Дата и значение Цены прямой запрос
0 zenon46
 
06.02.20
09:43
Доброго всем времени суток!
Помогите подсказкой, как в прямом запросе можно получить дату и значение последней записи в справочнике цен по типу цены. $ПоследнееЗначение.Цены.Цена(Цены.ID, :ВыбДата) - это на выбранную дату, а как получить саму дату последней записи, пока никак не могу придумать.
Для понимания, что нужно, нужно получить по списку товаров, последнюю по типу цены, цену и дату ее установки. На выходе получив три поля, ТОВАР | Цена | ДатаЦены |
Спасибо всем!
1 ivsher
 
06.02.20
10:06
Все периодические значения справочников, хранятся в таблице _1SConst. Описание полей таблицы есть в хелп файле компоненты прямых запросов.
2 trdm
 
06.02.20
10:10
3 dk
 
06.02.20
10:38
раз приведен пример из 1с++ то можешь запрос.отладка(1) перед запрос.выполнить и получишь прямой текст чистого sql запроса
4 dk
 
06.02.20
10:39
или в консоли запросов 1с++ посмотреть план запроса - там чистый sql код будет
5 zenon46
 
06.02.20
11:35
select top 1
cast(c324_vv.value as numeric(14, 2))
from
_1sconst as c324_vv (nolock)
where
c324_vv.id = 324 and
c324_vv.objid = Цены.ID and
(c324_vv.date <= @ВыбДата0)
order by c324_vv.date desc, c324_vv.time desc, c324_vv.docid desc, c324_vv.row_id desc

Развернутая ВТ, как отсюда выдрать дату и привязать к конкретному элементу товара ?
6 dk
 
06.02.20
11:41
SELECT Цены.PARENTEXT [Владелец $Справочник.Номенклатура]
    , (
select top 1
cast(c3775_vv.value as numeric(14, 4))
from
_1sconst as c3775_vv (nolock)
where
c3775_vv.id = 3775 and
c3775_vv.objid = Цены.ID and
(c3775_vv.date <= '20200206')
order by c3775_vv.date desc, c3775_vv.time desc, c3775_vv.docid desc, c3775_vv.row_id desc
) Цена
    , (
select top 1
cast(c3775_vv.date as datetime)
from
_1sconst as c3775_vv (nolock)
where
c3775_vv.id = 3775 and
c3775_vv.objid = Цены.ID and
(c3775_vv.date <= '20200206')
order by c3775_vv.date desc, c3775_vv.time desc, c3775_vv.docid desc, c3775_vv.row_id desc
) Дата

    , (
select top 1
c3775_vv.time
from
_1sconst as c3775_vv (nolock)
where
c3775_vv.id = 3775 and
c3775_vv.objid = Цены.ID and
(c3775_vv.date <= '20200206')
order by c3775_vv.date desc, c3775_vv.time desc, c3775_vv.docid desc, c3775_vv.row_id desc
) Время

FROM sc3772 AS Цены With (NOLOCK)
WHERE (Цены.PARENTEXT = '  5PUARAD')
    AND (Цены.sp3787 = '     1   ')

/*
SELECT Цены.PARENTEXT [Владелец $Справочник.Номенклатура]
    , $ПоследнееЗначение.Цены.Цена(Цены.ID, :ВыбДата) Цена
FROM $Справочник.Цены AS Цены With (NOLOCK)
WHERE (Цены.PARENTEXT = :лл)
    AND ($Цены.КатегорияЦены = :гг)
*/
7 zenon46
 
06.02.20
12:20
(6) SELECT
Цены.PARENTEXT [Владелец $Справочник.Номенклатура],
(
select top 1
cast(c3775_vv.value as numeric(14, 4))
from
_1sconst as c3775_vv (nolock)
where
c3775_vv.id = 3775 and
c3775_vv.objid = Цены.ID and
(c3775_vv.date <= '20200206')
order by c3775_vv.date desc, c3775_vv.time desc, c3775_vv.docid desc, c3775_vv.row_id desc
) Цена
,
(
select top 1
cast(c3775_vv.date as datetime)
from
_1sconst as c3775_vv (nolock)
where
c3775_vv.id = 3775 and
c3775_vv.objid = Цены.ID and
(c3775_vv.date <= '20200206')
order by c3775_vv.date desc, c3775_vv.time desc, c3775_vv.docid desc, c3775_vv.row_id desc
) Дата
,
(
select top 1
c3775_vv.time
from
_1sconst as c3775_vv (nolock)
where
c3775_vv.id = 3775 and
c3775_vv.objid = Цены.ID and
(c3775_vv.date <= '20200206')
order by c3775_vv.date desc, c3775_vv.time desc, c3775_vv.docid desc, c3775_vv.row_id desc
) Время
FROM $Справочник.Цены AS Цены With (NOLOCK)
WHERE (Цены.PARENTEXT = :Владелец)
AND (Цены.ID = :ТипЦен)
8 zenon46
 
06.02.20
12:20
К сожалению пусто, на выходе
9 zenon46
 
06.02.20
12:22
Вот тут что должно быть ? AND (Цены.sp3787 = '     1   ') у меня нет такого поля "sp3787"
10 dk
 
06.02.20
12:29
в твоем случае
1. c324_vv.id = 324
2. AND (Цены.sp3787 = '     1   ') можешь убрать - это тип цены
11 zenon46
 
06.02.20
12:29
(10) ну так мне как раз нужен определенный тип цен
12 zenon46
 
06.02.20
12:35
Вот что в итоге вышло : только возвращает пустую таблицу

SELECT
Цены.PARENTEXT [Владелец $Справочник.Номенклатура],
(
select top 1
cast(c3775_vv.value as numeric(14, 4))
from
_1sconst as c3775_vv (nolock)
where
c3775_vv.id = 3775 and
c3775_vv.objid = Цены.ID and
(c3775_vv.date <= '20200206')
order by c3775_vv.date desc, c3775_vv.time desc, c3775_vv.docid desc, c3775_vv.row_id desc
) Цена
,
(
select top 1
cast(c3775_vv.date as datetime)
from
_1sconst as c3775_vv (nolock)
where
c3775_vv.id = 3775 and
c3775_vv.objid = Цены.ID and
(c3775_vv.date <= '20200206')
order by c3775_vv.date desc, c3775_vv.time desc, c3775_vv.docid desc, c3775_vv.row_id desc
) Дата
,
(
select top 1
c3775_vv.time
from
_1sconst as c3775_vv (nolock)
where
c3775_vv.id = 3775 and
c3775_vv.objid = Цены.ID and
(c3775_vv.date <= '20200206')
order by c3775_vv.date desc, c3775_vv.time desc, c3775_vv.docid desc, c3775_vv.row_id desc
) Время
FROM $Справочник.Цены AS Цены With (NOLOCK)
WHERE (Цены.PARENTEXT = :Владелец)
AND ($Цены.ТипЦен = :ТипЦен)
13 dk
 
06.02.20
12:35
c324_vv.id = 324
14 dk
 
06.02.20
12:36
точнее c3775_vv.id = 324
15 trad
 
06.02.20
12:36
(9) очевидно это
AND ($Цены.КатегорияЦены = :гг)
16 trad
 
06.02.20
12:38
(12) если возвращает пустую таблицу, то проблема где то тут
WHERE (Цены.PARENTEXT = :Владелец)
AND ($Цены.ТипЦен = :ТипЦен)
17 zenon46
 
06.02.20
12:46
(16) убрал вообще условия отбора, получил всю таблицу https://prnt.sc/qyc6u4 но с пустым значением цены
18 zenon46
 
06.02.20
12:47
Вот запрос :
SELECT
Цены.PARENTEXT [Владелец $Справочник.Номенклатура],
(
select top 1
cast(c324_vv.value as numeric(14, 4))
from
_1sconst as c324_vv (nolock)
where
c324_vv.id = 324 and
c324_vv.objid = Цены.ID and
(c324_vv.date <= '20200206')
order by c324_vv.date desc, c324_vv.time desc, c324_vv.docid desc, c324_vv.row_id desc
) Цена
,
(
select top 1
cast(c324_vv.date as datetime)
from
_1sconst as c324_vv (nolock)
where
c324_vv.id = 324 and
c324_vv.objid = Цены.ID and
(c324_vv.date <= '20200206')
order by c324_vv.date desc, c324_vv.time desc, c324_vv.docid desc, c324_vv.row_id desc
) Дата
,
(
select top 1
c324_vv.time
from
_1sconst as c324_vv (nolock)
where
c324_vv.id = 324 and
c324_vv.objid = Цены.ID and
(c324_vv.date <= '20200206')
order by c324_vv.date desc, c324_vv.time desc, c324_vv.docid desc, c324_vv.row_id desc
) Время
FROM $Справочник.Цены AS Цены With (NOLOCK)
19 zenon46
 
06.02.20
12:49
Все работает!
20 zenon46
 
06.02.20
12:49
Проверяю!
21 Злопчинский
 
06.02.20
16:25
может чем-то пригодится
http://catalog.mista.ru/public/76287/
22 zenon46
 
06.02.20
20:53
(21) спасибо это видел! Весь нюанс был в том что мне нужно было дату цены узнать, а не цену на дату.