Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Вопрос по параметризированным запросам (число прочтений - 1705 )
One-gb
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 3
Зарегистрирован: 26. Мая 2009
Вопрос по параметризированным запросам
26. Мая 2009 :: 07:07
Печать  
Доброго времени суток!

Работать с ВК 1С++ начал только что... В связи с тем что базу перевели на скуль... База ТиС 9.2, двиг 27...

Тормозят отчеты и много е другое... Улыбка Сделал вывод что единственный выход переписывать запросы на прямые. Возникли вопросы:

1. Возможны ли прямые запросу сразу к двум регистрам? что то типа вот этого:

     СтрПериод = ?(ДатаКонца>= ПолучитьДатуТА(),"",
     "Период с ДатаКонца по ДатаКонца;");      
     ТекстЗапроса =
     "//{{ЗАПРОС(Сформировать)
     |" + СтрПериод +
     "
     |Фирма                  = Регистр.ОстаткиТМЦ.Фирма,            
     |                 Регистр.РезервыТМЦ.Фирма;
     |УпрАналитика      = Регистр.ОстаткиТМЦ.Фирма.УпрАналитика,
     |                 Регистр.РезервыТМЦ.Фирма.УпрАналитика;
     |ЮрЛицо            = Регистр.ОстаткиТМЦ.Фирма.ЮрЛицо,      
     |                 Регистр.РезервыТМЦ.Фирма.ЮрЛицо;
     |Номенклатура      = Регистр.ОстаткиТМЦ.Номенклатура,      
     |                 Регистр.РезервыТМЦ.Номенклатура;
     |Склад                  = Регистр.ОстаткиТМЦ.Склад,            
     |                 Регистр.РезервыТМЦ.Склад;";
     
     ТекстЗапроса = ТекстЗапроса +
     "Количество = Регистр.ОстаткиТМЦ.Количество;
     |Резерв     = Регистр.РезервыТМЦ.Количество;
     |Функция КоличествоКонОст = КонОст(Количество);
     |Группировка Номенклатура"+?(ПоказатьОстатки.ТекущаяСтрока()>=2," Все","")+";";
                   
     Возврат ТекстЗапроса;
За конкретный пример как это будет выглядеть буду особенно благодарен!! Улыбка

2. Приходится подрихтовать форму подбора (в части отображения остатков)... Воспользовался примером с мисты "Эффективное использование MSSQL ..." т.е.:

При открытии
 RS = СоздатьОбъект("ODBCRecordset");
           ТекстЗапроса = "
           |SELECT
           |    SUM($Рег.Количество) as Количество
           |FROM
           |    $РегистрИтоги.ОстаткиТМЦ as Рег
           |WHERE
           |    Рег.Period = :Дат AND
           |    $Рег.Склад = ? AND
           |    $Рег.Номенклатура = ?";      
     RS.УстановитьТекстовыйПараметр("Дат", ПолучитьДатуТА());            
   RS.Подготовить(ТекстЗапроса);
   RS.ПостроитьПараметры();
   RS.УстПараметр(1, Склад);
     
Функция ПолОстаток()
   RS.УстПараметр(2, ТекущийЭлемент());
   Возврат RS.ВыполнитьСкалярный();
КонецФункции

Показывает нули... Что не так?

Прошу прощение за возможно глупые вопросы! Подмигивание
Заранее спасибо за ответы...  Подмигивание
  
Наверх
 
IP записан
 
DrACe
1c++ donor
1c++ power user
Отсутствует


1С++ любитель

Сообщений: 447
Местоположение: г. Новосибирск
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Вопрос по параметризированным запросам
Ответ #1 - 26. Мая 2009 :: 07:24
Печать  
...давненько я тут не появлялся...  Улыбка Всем привет!

1) проще использовать Виртуальную таблицу "Остатки"
2) в этом конкретном примере попробуй так RS.УстановитьТекстовыйПараметр("Дат", НачМесяца(ПолучитьДатуТА()));
  
Наверх
 
IP записан
 
One-gb
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 3
Зарегистрирован: 26. Мая 2009
Re: Вопрос по параметризированным запросам
Ответ #2 - 26. Мая 2009 :: 07:29
Печать  
DrACe писал(а) 26. Мая 2009 :: 07:24:
...давненько я тут не появлялся...  Улыбка Всем привет!

1) проще использовать Виртуальную таблицу "Остатки"
2) в этом конкретном примере попробуй так RS.УстановитьТекстовыйПараметр("Дат", НачМесяца(ПолучитьДатуТА()));



Спасибо большое за ответ! Можно уточнить?

Как я понял в ВТ хранится запрос по одному регистру? примерно так:
     RS = СоздатьОбъект("ODBCRecordset");
     RS.УстБД1С();                   
     
     
     ТекстЗапроса = "
     |SELECT
     |    Рег.Номенклатура as [Номенклатура $Справочник.Номенклатура],
     |    Рег.КоличествоОстаток as Количество
     |FROM
     |    $РегистрОстатки.ОстаткиТМЦ(:Дат,,Номенклатура=:Ном AND Склад=:ВыбСклад,
     |                                                      Номенклатура, Количество) as Рег"; 
                 
     RS.УстановитьТекстовыйПараметр("Ном",Товар);
     RS.УстановитьТекстовыйПараметр("Дат",Дат);
     RS.УстановитьТекстовыйПараметр("ВыбСклад",Склад);
     
     ТЗ1 = RS.ВыполнитьИнструкцию(ТекстЗапроса);         
Т.е. для того чтобы мне получить резервы мне придется делать еще один запрос... Как я это понимаю... Или я не прав?

Спасибо!
  
Наверх
 
IP записан
 
DrACe
1c++ donor
1c++ power user
Отсутствует


1С++ любитель

Сообщений: 447
Местоположение: г. Новосибирск
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Вопрос по параметризированным запросам
Ответ #3 - 26. Мая 2009 :: 07:38
Печать  
в ВТ ничего не хранится - это всего лишь макроподстановка.
если знаком с sql'ем - знаешь что такое присоединение таблиц, объединение и т.д. и т.п.

тут можно сделать объединение UNION ALL двух подзапросов с группировкой результата(если надо)

SELECT ...
FROM(
SELECT ...
FROM ВТ1

UNION ALL

SELECT ...
FROM ВТ2
)

типа того
  
Наверх
 
IP записан
 
One-gb
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 3
Зарегистрирован: 26. Мая 2009
Re: Вопрос по параметризированным запросам
Ответ #4 - 26. Мая 2009 :: 07:45
Печать  
DrACe писал(а) 26. Мая 2009 :: 07:38:
в ВТ ничего не хранится - это всего лишь макроподстановка.
если знаком с sql'ем - знаешь что такое присоединение таблиц, объединение и т.д. и т.п.

тут можно сделать объединение UNION ALL двух подзапросов с группировкой результата(если надо)

SELECT ...
FROM(
SELECT ...
FROM ВТ1

UNION ALL

SELECT ...
FROM ВТ2
)

типа того


Вся фишка в том что со скулем то особо не знаком (пока... пытаюсь вникать по ходу)...
Еще раз спасибо!
Кстати точ то ты мне подсказал :
RS.УстановитьТекстовыйПараметр("Дат", НачМесяца(ПолучитьДатуТА())); Сработало!
Улыбка Правда результат удручающий... работает медленнее чем штатная галка отображать остатки...

  
Наверх
 
IP записан
 
DrACe
1c++ donor
1c++ power user
Отсутствует


1С++ любитель

Сообщений: 447
Местоположение: г. Новосибирск
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Вопрос по параметризированным запросам
Ответ #5 - 26. Мая 2009 :: 07:56
Печать  
1) надо попасть в индекс, чтобы бы было максимально быстро(индексы можно посмотреть в файле 1cv7.dds)
Выбираешь наиболее подходящий индекс и отбираешь по всем полям, которые в него входят (если это возможно в твоем случае, конечно)

2) кстати, вот здесь вроде вот так должно быть
Код
Выбрать все
Рег.Period = :Дат~~ 

потому как это тип Дата
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать