Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Дата и значение Цены прямой запрос

v7: Дата и значение Цены прямой запрос
Я
   zenon46
 
06.02.20 - 09:43
Доброго всем времени суток!
Помогите подсказкой, как в прямом запросе можно получить дату и значение последней записи в справочнике цен по типу цены. $ПоследнееЗначение.Цены.Цена(Цены.ID, :ВыбДата) - это на выбранную дату, а как получить саму дату последней записи, пока никак не могу придумать.
Для понимания, что нужно, нужно получить по списку товаров, последнюю по типу цены, цену и дату ее установки. На выходе получив три поля, ТОВАР | Цена | ДатаЦены |
Спасибо всем!
 
 
   ivsher
 
1 - 06.02.20 - 10:06
Все периодические значения справочников, хранятся в таблице _1SConst. Описание полей таблицы есть в хелп файле компоненты прямых запросов.
   trdm
 
2 - 06.02.20 - 10:10
   dk
 
3 - 06.02.20 - 10:38
раз приведен пример из 1с++ то можешь запрос.отладка(1) перед запрос.выполнить и получишь прямой текст чистого sql запроса
   dk
 
4 - 06.02.20 - 10:39
или в консоли запросов 1с++ посмотреть план запроса - там чистый sql код будет
   zenon46
 
5 - 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

Развернутая ВТ, как отсюда выдрать дату и привязать к конкретному элементу товара ?
   dk
 
6 - 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 ($Цены.КатегорияЦены = :гг)
*/
   zenon46
 
7 - 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 = :ТипЦен)
   zenon46
 
8 - 06.02.20 - 12:20
К сожалению пусто, на выходе
   zenon46
 
9 - 06.02.20 - 12:22
Вот тут что должно быть ? AND (Цены.sp3787 = '     1   ') у меня нет такого поля "sp3787"
   dk
 
10 - 06.02.20 - 12:29
в твоем случае 
1. c324_vv.id = 324
2. AND (Цены.sp3787 = '     1   ') можешь убрать - это тип цены
   zenon46
 
11 - 06.02.20 - 12:29
(10) ну так мне как раз нужен определенный тип цен
   zenon46
 
12 - 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 ($Цены.ТипЦен = :ТипЦен)
   dk
 
13 - 06.02.20 - 12:35
c324_vv.id = 324
   dk
 
14 - 06.02.20 - 12:36
точнее c3775_vv.id = 324
   trad
 
15 - 06.02.20 - 12:36
(9) очевидно это
AND ($Цены.КатегорияЦены = :гг)
   trad
 
16 - 06.02.20 - 12:38
(12) если возвращает пустую таблицу, то проблема где то тут
WHERE (Цены.PARENTEXT = :Владелец)
AND ($Цены.ТипЦен = :ТипЦен)
   zenon46
 
17 - 06.02.20 - 12:46
(16) убрал вообще условия отбора, получил всю таблицу https://prnt.sc/qyc6u4 но с пустым значением цены
   zenon46
 
18 - 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)
   zenon46
 
19 - 06.02.20 - 12:49
Все работает!
   zenon46
 
20 - 06.02.20 - 12:49
Проверяю!
   Злопчинский
 
21 - 06.02.20 - 16:25
может чем-то пригодится
http://catalog.mista.ru/public/76287/
   zenon46
 
22 - 06.02.20 - 20:53
(21) спасибо это видел! Весь нюанс был в том что мне нужно было дату цены узнать, а не цену на дату.


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.