|   |   | 
| 
 | 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-) | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |