Здравствуйте, подскажите пожалуйста следующее, не могу получить прямым запросом значение периодического реквизита из справочника цены
Конфигурация: 1С 7.7 ТиС
Вот мой код :
Все время выдает пустое значение
Конфигурация: 1С 7.7 ТиС
Вот мой код :
Попытка
база = СоздатьОбъект("SQLiteBase");
Исключение
ЗагрузитьВнешнююКомпоненту("1sqlite.dll");
база = СоздатьОбъект("SQLiteBase");
КонецПопытки;
база.Открыть(":memory:");
ТекстЗапросаЦены = "
|SEL ECT спр.id as [Ссылка :Справочник.Цены],
|(
|(SELECT value FR OM __1S_Const
|WHERE id=:ТипЦены AND (date < :ВыбДата or date = :ВыбДата) and objid = :Владелец ORDER BY date desc LIMIT 1)
|) as Цена
|FROM Справочник_Цены as спр
|";
ЗапросЦен = база.НовыйЗапрос();
ЗапросЦен.Подставлять("Владелец", ВыбНом);
ЗапросЦен.Подставлять("ТипЦены", ВыбТипЦен);
ЗапросЦен.Подставлять("ВыбДата", ВыбДата);
ТекЦена = ЗапросЦен.ВыполнитьЗапрос(ТекстЗапросаЦены).ПолучитьЗначение(1,1).Цена;
ПоказатьВсе время выдает пустое значение
Найденные решения
Если сборка 1sqlite не от Орефкова, а посвежее https://infostart.ru/public/559826/ то самый быстрый способ такой
SEL ECT
max(Константы.DATE||Константы.TIME)
,Цены.PARENTEXT [Номенклатура $Справочник.Номенклатура]
,Цены.ТипЦен [ТипЦен $Справочник.ТипыЦен]
,Константы.VALUE [Цена $Число]
FR OM Справочник_Цены AS Цены
LEFT JOIN [_1S.Const] AS Константы
ON Цены.ID=Константы.OBJID
AND Константы.ID=:ИсторияРеквизита.Цены.Цена
AND Константы.DATE<=:Дата
WHERE Цены.PARENTEXT=:Номенклатура
AND Цены.ТипЦен = :ТипЦен
GROUP by Цены.ТипЦен,Цены.PARENTEXT
SEL ECT
max(Константы.DATE||Константы.TIME)
,Цены.PARENTEXT [Номенклатура $Справочник.Номенклатура]
,Цены.ТипЦен [ТипЦен $Справочник.ТипыЦен]
,Константы.VALUE [Цена $Число]
FR OM Справочник_Цены AS Цены
LEFT JOIN [_1S.Const] AS Константы
ON Цены.ID=Константы.OBJID
AND Константы.ID=:ИсторияРеквизита.Цены.Цена
AND Константы.DATE<=:Дата
WHERE Цены.PARENTEXT=:Номенклатура
AND Цены.ТипЦен = :ТипЦен
GROUP by Цены.ТипЦен,Цены.PARENTEXT
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(2)
для 7.70.941 сложнее -
для 7.70.941 сложнее -
#============================================================ ===================
#==TABLE no 49 : Справочник Цены
# Name |Descr |Type[A/S/U]|DBTableName|ReUsable
T=SC319 |Справочник Цены |A |SC319 |1
#-----Fields-------
# Name |Descr |Type|Length|Precision
F=ID |ID object |C |9 |0
F=PARENTEXT |Parent in other tabl|C |9 |0
F=ISMARK |Flag Object is Marke|C |1 |0
F=VERSTAMP |Version stamp |C |6 |0
F=SP6681 |(P)Валюта |C |9 |0
F=SP6682 |(P)Процент |N |7 |2
F=SP327 |(P)ТипЦен |C |9 |0
F=SP8983 |(P)IDD |C |17 |0
#----Indexes------
# Name |Descr |Unique|Indexed fields |DBName
I=IDD |of ID |0 |ID |IDD
I=PCODE |of PARENT |0 |PARENTEXT |PCODE
I=VI327 |VI327 |0 |SP327 |VI327
I=VIP327 |VIP327 |0 |PARENTEXT,SP327 |VIP327
I=VI8983 |VI8983 |0 |SP8983(UPPER=128) |VI8983
I=VIP8983 |VIP8983 |0 |PARENTEXT,SP8983(UPPER=128) |VIP8983
#
Показать
(6)
одним запросом -
* розничные цены,
* единицы измерения на указанную дату и
* курсы валют цены на дату ее (ц ены) установки
реализация для 2005-ого сервера:
для 2000-го получается больший и менее понятный запрос,
хотя тоже вполне работоспособный
одним запросом -
* розничные цены,
* единицы измерения на указанную дату и
* курсы валют цены на дату ее (
реализация для 2005-ого сервера:
sel ect
тов [тов $Справочник.Номенклатура],
Цена,
ДатаУстановкиЦены,
Единица
[Единица $Справочник.Единицы],
Вал
[Валюта $Справочник.Валюты],
Курс
fr om (
sel ect
a.*,
cast(b.value as numeric(10,4)) курс,
row_number() over(partition by a. тов
order by b.date desc, b.time desc, b.docid desc, b.row_id desc) rn2
fr om (
select Тов, Вал
,max(case when id=:ИДЦена then cast(value as numeric(14,2)) end) Цена
,max(case when id=:ИДЦена then date end) ДатаУстановкиЦены
,max(case when id=:ИДЕдиница then left(value,8) end) Единица
fr om (
select
_1sconst.value, $СпрЦ.валюта Вал,
objid, _1sconst.id, date, СпрЦ.parentext Тов,
row_number() over(partition by _1sconst.id,
_1sconst.objid order by date desc,
time desc, docid desc,
_1sconst.row_id desc) rn
fr om _1sconst (nolock)
inner join
$Справочник.Цены СпрЦ (nolock) on СпрЦ.id = _1sconst.objid
where _1sconst.id in (:ИДЦена, : ИДЕдиница)
and date <= :ВыбДата
and $СпрЦ.ТипЦен = :РозничныйТипЦен
) a where rn=1 group by Тов, Вал
) a left join _1sconst b (nolock)
on a. Вал=b.objid and b.date<=a. ДатаУстановкиЦены
wh ere b.id=:ИДКурс
) a Wh ere rn2=1
Показатьдля 2000-го получается больший и менее понятный запрос,
хотя тоже вполне работоспособный
(7)
Извиняюсь, не до конца уточнил задачу.
База файловая (просто подумал что раз указал что подключаю компоненту 1sqlite.dll, то будет понятно что файловая база), мое упущение.
В SQL-запросе понятное дело там проще указать и получить все это, а вот через прямой запрос при файловом варианте как это получить с использованием этой компоненты?
Извиняюсь, не до конца уточнил задачу.
База файловая (просто подумал что раз указал что подключаю компоненту 1sqlite.dll, то будет понятно что файловая база), мое упущение.
В SQL-запросе понятное дело там проще указать и получить все это, а вот через прямой запрос при файловом варианте как это получить с использованием этой компоненты?
(8)
- Извиняюсь, не до конца уточнил задачу.
База файловая (просто подумал что раз указал что подключаю компоненту 1sqlite.dll, то будет понятно что файловая база), мое упущение.
- под каждым движком: 2000, 2005, 2008, 2012,.. 1sqlite -- у прямых запросов возможны различия в реализации, в зависимости от функционала; однако в сущности, по существу это ничто не отменяет.
- В SQL-запросе понятное дело там проще указать и получить все это, а вот через прямой запрос при файловом варианте как это получить с использованием этой компоненты?
- не понял.. предлагаете решать за вас вашу же задачу? - см. п. 4 без привязки, анализа 1Cv7.DD, а так же экспериментов на реальной ИБ
- Извиняюсь, не до конца уточнил задачу.
База файловая (просто подумал что раз указал что подключаю компоненту 1sqlite.dll, то будет понятно что файловая база), мое упущение.
- под каждым движком: 2000, 2005, 2008, 2012,.. 1sqlite -- у прямых запросов возможны различия в реализации, в зависимости от функционала; однако в сущности, по существу это ничто не отменяет.
- В SQL-запросе понятное дело там проще указать и получить все это, а вот через прямой запрос при файловом варианте как это получить с использованием этой компоненты?
- не понял.. предлагаете решать за вас вашу же задачу? - см. п. 4 без привязки, анализа 1Cv7.DD, а так же экспериментов на реальной ИБ
(8)
мне по сути непонятно - например, зачем прямым запросом получать 2ва значения,.. а именно - ссылку не элемент справочника номенклатура и сложно связанное с ней значение цены.. такая задача штатными методами решается не менее продуктивно.. единственное, что приходит на ум - это интеграция с другой ИБ, но вот этого действительно в вашем коде не просматривается.
мне по сути непонятно - например, зачем прямым запросом получать 2ва значения,.. а именно - ссылку не элемент справочника номенклатура и сложно связанное с ней значение цены.. такая задача штатными методами решается не менее продуктивно.. единственное, что приходит на ум - это интеграция с другой ИБ, но вот этого действительно в вашем коде не просматривается.
(1)
- Конфигурация: 1С 7.7 ТиС...
- у меня,.. в разных релизах - разные структуры; в 7.70.990:
- Конфигурация: 1С 7.7 ТиС...
- у меня,.. в разных релизах - разные структуры; в 7.70.990:
#============================================================ ===================
#==TABLE no 49 : Справочник Цены
# Name |Descr |Type[A/S/U]|DBTableName|ReUsable
T=SC319 |Справочник Цены |A |SC319 |1
#-----Fields-------
# Name |Descr |Type|Length|Precision
F=ID |ID object |C |9 |0
F=PARENTEXT |Parent in other tabl|C |9 |0
F=ISMARK |Flag Object is Marke|C |1 |0
F=VERSTAMP |Version stamp |C |6 |0
F=SP6681 |(P)Валюта |C |9 |0
F=SP6682 |(P)Процент |N |7 |2
F=SP327 |(P)ТипЦен |C |9 |0
#----Indexes------
# Name |Descr |Unique|Indexed fields |DBName
I=IDD |of ID |0 |ID |IDD
I=PCODE |of PARENT |0 |PARENTEXT |PCODE
I=VI327 |VI327 |0 |SP327 |VI327
I=VIP327 |VIP327 |0 |PARENTEXT,SP327 |VIP327
#
Показать
Если сборка 1sqlite не от Орефкова, а посвежее https://infostart.ru/public/559826/ то самый быстрый способ такой
SEL ECT
max(Константы.DATE||Константы.TIME)
,Цены.PARENTEXT [Номенклатура $Справочник.Номенклатура]
,Цены.ТипЦен [ТипЦен $Справочник.ТипыЦен]
,Константы.VALUE [Цена $Число]
FR OM Справочник_Цены AS Цены
LEFT JOIN [_1S.Const] AS Константы
ON Цены.ID=Константы.OBJID
AND Константы.ID=:ИсторияРеквизита.Цены.Цена
AND Константы.DATE<=:Дата
WHERE Цены.PARENTEXT=:Номенклатура
AND Цены.ТипЦен = :ТипЦен
GROUP by Цены.ТипЦен,Цены.PARENTEXT
SEL ECT
max(Константы.DATE||Константы.TIME)
,Цены.PARENTEXT [Номенклатура $Справочник.Номенклатура]
,Цены.ТипЦен [ТипЦен $Справочник.ТипыЦен]
,Константы.VALUE [Цена $Число]
FR OM Справочник_Цены AS Цены
LEFT JOIN [_1S.Const] AS Константы
ON Цены.ID=Константы.OBJID
AND Константы.ID=:ИсторияРеквизита.Цены.Цена
AND Константы.DATE<=:Дата
WHERE Цены.PARENTEXT=:Номенклатура
AND Цены.ТипЦен = :ТипЦен
GROUP by Цены.ТипЦен,Цены.PARENTEXT
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот