|
v7: параметризированные запросы | ☑ | ||
---|---|---|---|---|
0
monsterZE
16.11.12
✎
16:35
|
хотел попробывать сабж.. чет не взлетает =(
может период не правильно указываю? без него, по товар склад отбирает правильно.. тема - получить остаток на ТА в списке ТекстЗапроса = " |SELECT | $Рег.ОстатокТовара as ОстатокТовара |FROM | $РегистрИтоги.ОстаткиТоваров as Рег |WHERE | Рег.Period = CAST('2012-10-01' AS datetime) | AND $Рег.Склад = ? | AND $Рег.Товар = ?"; |
|||
1
GLazNik
16.11.12
✎
16:36
|
(0) а остальное где?
|
|||
2
monsterZE
16.11.12
✎
16:37
|
RS.Подготовить(ТекстЗапроса);
RS.ПостроитьПараметры(); RS.УстПараметр(1, Склад); Функция RS.УстПараметр(2, ТекущийЭлемент()); Возврат RS.ВыполнитьСкалярный(); |
|||
3
monsterZE
16.11.12
✎
16:37
|
возвращает 0
|
|||
4
Попытка1С
16.11.12
✎
16:38
|
||||
5
GLazNik
16.11.12
✎
16:41
|
ВыполнитьСкалярный должен возвращать одно значение
|
|||
6
monsterZE
16.11.12
✎
16:42
|
(5) это понятно, в табличке на дату оно одно и есть
|
|||
7
mvk
16.11.12
✎
16:51
|
CAST('20121001' AS datetime)
RS.УстПараметр(1, Склад.ТекущийЭлемент()); //Проверь, что Склад - это ссылка на элемент, а не сам объект |
|||
8
mvk
16.11.12
✎
16:58
|
И еще
SUM($Рег.ОстатокТовара) as ОстатокТовара на всякий случай, чтобы при добавлении измерений в регистр не посыпалось. |
|||
9
monsterZE
16.11.12
✎
17:01
|
(7) попробывал - результат тот-же
вот так работает.. // тз = СоздатьОбъект("ТаблицаЗначений"); //ТекстЗапроса = " //|SELECT //| $Рег.ОстатокТовара as ОстатокТовара //|FROM //| $РегистрИтоги.ОстаткиТоваров as Рег //|WHERE //| Рег.Period = :ВыбПериод //| AND $Рег.Склад = :ВыбСклад //| AND $Рег.Товар = :ВыбТовар"; // // RS.УстановитьТекстовыйПараметр("ВыбПериод", НачМесяца(ПолучитьДатуТА())); // RS.УстановитьТекстовыйПараметр("ВыбСклад", Склад); // RS.УстановитьТекстовыйПараметр("ВыбТовар", ТекущийЭлемент()); // // тз = RS.ВыполнитьИнструкцию(ТекстЗапроса); // тз.ВыбратьСтроку(); |
|||
10
mvk
16.11.12
✎
17:04
|
А вот так работает?
//ТекстЗапроса = " //|SELECT //| $Рег.ОстатокТовара as ОстатокТовара //|FROM //| $РегистрИтоги.ОстаткиТоваров as Рег //|WHERE //| Рег.Period = :ВыбПериод //| AND $Рег.Склад = :ВыбСклад //| AND $Рег.Товар = :ВыбТовар"; // // RS.УстановитьТекстовыйПараметр("ВыбПериод", НачМесяца(ПолучитьДатуТА())); // RS.УстановитьТекстовыйПараметр("ВыбСклад", Склад); // RS.УстановитьТекстовыйПараметр("ВыбТовар", ТекущийЭлемент()); // // Остаток = RS.ВыполнитьСкалярный(ТекстЗапроса); |
|||
11
monsterZE
16.11.12
✎
17:13
|
(10) да
|
|||
12
monsterZE
16.11.12
✎
17:14
|
и если
Рег.Period = :ВыбПериод заменить Рег.Period = CAST('20121001' AS DateTime) тоже работает |
|||
13
mvk
16.11.12
✎
17:17
|
Тогда вместо RS.ПостроитьПараметры(); используй методы с явным указанием типа параметра. Сейчас не помню, как звучит. Покури хелп по 1С++.
|
|||
14
Попытка1С
16.11.12
✎
17:19
|
ДобПараметр()
|
|||
15
monsterZE
16.11.12
✎
17:49
|
в текущем варианте на локале особого выйгрыша не вижу.. (перед .Остаток)
завтра попробую к основной базе прикрутить.. попробывать, когда много юзверей.. (14) про ДобПараметр чет пока тоже не особо.. =) |
|||
16
Попытка1С
16.11.12
✎
17:50
|
(15) Я тебе ссылку кинул в (4).
|
|||
17
monsterZE
16.11.12
✎
17:51
|
(16) угу, завтра буду курить =) ща уже не воспринимается
|
|||
18
Mikeware
16.11.12
✎
17:52
|
(15) а перед чем должен быть выйгрыш?
Если перед Регистр.СводныйОстаток - то вдвое быстрее. если перед виртуальной таблицей - примерно вчетверо... |
|||
19
monsterZE
16.11.12
✎
17:55
|
(18) перед регистр.остаток
..ну пока запрос то не сабжевый получается |
|||
20
Mikeware
16.11.12
✎
17:57
|
(19) параметризованные имеют смысл только при "массовом исполнении"
|
|||
21
monsterZE
16.11.12
✎
18:02
|
(20) ну подбор товара в док из справочника, где оч. много позиций и некоторые любят отключать иерархию..
|
|||
22
Mikeware
16.11.12
✎
18:03
|
(21) это да
|
|||
23
Mikeware
16.11.12
✎
18:06
|
(21) попробуй заменить на ТабличноеПоле , кстати.
гораздо эффективнее будет Сразу джойнищь с Таблицей остатков регистра. Заодно такие фишки, как фильтрация удаленных, "запрещеных к продаже товаров". Даже поиск по вхождению прикручивается |
|||
24
monsterZE
17.11.12
✎
12:29
|
Цук.. возвращает нули и усе тут..
Процедура ПриОткрытии() RS = СоздатьОбъект("ODBCRecordset"); RS.Отладка(1); ТекстЗапроса = " |Declare @Склад Char(9) |Declare @Товар Char(9) |Set @Склад = ? |Set @Товар = ? |SELECT | $Рег.ОстатокТовара as ОстатокТовара |FROM | $РегистрИтоги.ОстаткиТоваров as Рег |WHERE | Рег.Period = CAST('20121001' AS DateTime) | AND $Рег.Склад = @Склад | AND $Рег.Товар = @Товар"; // "+НачМесяца(ПолучитьДатуТА())+" Подготовлен = RS.Подготовить(ТекстЗапроса); Сообщить(Подготовлен); RS.ДобПараметр(1,14,9,0); RS.ДобПараметр(1,14,9,0); //RS.ПостроитьПараметры(); RS.УстПараметр(1, Склад); КонецПроцедуры RS.УстПараметр(2, ТекущийЭлемент()); Остаток = RS.ВыполнитьСкалярный(); Возврат (Остаток) |
|||
25
monsterZE
17.11.12
✎
12:30
|
подготовлен показывает 1
|
|||
26
monsterZE
17.11.12
✎
12:41
|
(25) факардо! закаментил склад - и оно взлетело... ковыряю почему
|
|||
27
monsterZE
17.11.12
✎
13:06
|
мухаха! вот эт я ишачелло =)
на складе "автовыбор" стоял и в запрос просто пустой склад уходил.. мдя... =) ласт ворк вешен: при_открытии RS = СоздатьОбъект("ODBCRecordset"); ТекстЗапроса = " |Declare @ДатаОст Char(8) |Declare @Склад Char(9) |Declare @Товар Char(9) |Set @ДатаОст = ? |Set @Склад = ? |Set @Товар = ? |SELECT | SUM($Рег.ОстатокТовара) as ОстатокТовара |FROM | $РегистрИтоги.ОстаткиТоваров as Рег |WHERE | Рег.Period = CAST(@ДатаОст AS DateTime) | AND $Рег.Склад = @Склад | AND $Рег.Товар = @Товар"; RS.Подготовить(ТекстЗапроса); RS.ДобПараметр(1,14,8,0); RS.ДобПараметр(1,14,9,0); RS.ДобПараметр(1,14,9,0); //RS.ПостроитьПараметры(); Д = Формат(НачМесяца(ПолучитьДатуТА()),"ДГГГГММДД"); RS.УстПараметр(1, Д); RS.УстПараметр(2, Склад); функция RS.УстПараметр(3, ТекущийЭлемент()); Остаток = RS.ВыполнитьСкалярный(); Возврат (Остаток) |
|||
28
monsterZE
17.11.12
✎
13:08
|
вероятно с ПостроитьПараметры() тоже бы все работало..
надо чаще проверять входящие параметры 8-) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |