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


1C++ rocks!

Сообщений: 5
Зарегистрирован: 21. Февраля 2009
Вывод цен в форме списка через  параметризированный запрос
21. Февраля 2009 :: 11:34
Печать  
В конфигурации пытаюсь использовать прямой запрос для получения цены товара в форме списка справочника:
Краткая пердистория:
  • Есть спр. "Цены", подчиненный спр. "ТМЦ", который имеет реквизиты "КатегорияЦены" и "Цена"-периодический; Справочник содержит все цены всех филилалов. Первые при символа кода цены отвечают за определенный филиал. Пример КВ1-01, КВ1-02,КВ1-03 - это все цени Киевского филилала, ЛВ1-01, ЛВ1-002 - цены Львовского филилала.
  • В форме спр. "ТМЦ" необходимо выводить значение цены определенного филиала и определенного типа на тек. дату.
    Т.к. получение стандартными средствами знач. цены ощутимо "тормозит" прокрутку справочника, было принято решение исп-ть прямой запрос:

Код
Выбрать все
ПриОткрытии()
RS_Цена = СоздатьОбъект("ODBCRecordset");
        ТекстЗапросаЦ = "
		|SELECT
		|    $ПоследнееЗначение.Цены.ЦенаСНДС(СпрЦены.ID, ?)
		|FROM
		|    $Справочник.Цены as СпрЦены WITH (NOLOCK)
		|WHERE
		|    СпрЦены.ParentExt = ? AND
		|    $СпрЦены.КатегорияЦены = ? AND
		|    СпрЦены.IsMark = 0 AND
		|    СпрЦены.Code like ?";
        RS_Цена.Отладка(1);
		RS_Цена.Подготовить(ТекстЗапросаЦ);
		RS_Цена.ДобПараметр(1,10,8,0);
		RS_Цена.ДобПараметр(1,14,9,0);
		RS_Цена.ДобПараметр(1,14,9,0);
		RS_Цена.УстПараметр(1, ПолучитьДатуТА());
		RS_Цена.УстПараметр(3, Константа.БазТипЦенРозн);
		RS_Цена.ДобПараметр(1,14,6,0);
		RS_Цена.УстПараметр(4, ""+Филия.Код+"%");


////****************************************************************
////****************************************************************
Функция ПолучитьЦену()
	Перем ТекЦена,ТекЗначение;
	RS_Цена.УстПараметр(2, ТекущийЭлемент());
   	ТекЦена = RS_Цена.ВыполнитьСкалярный();
   	Если ТекЦена = 0 Тогда
   		ТекЦена = "";
   	КонецЕсли;
   	Возврат ТекЦена;
КонецФункции

 



7.7-v27, 1С++ - 2.5.0.8

Ошибки негдеде не выдиет, но и цен не возвращает
Like наверное не верно срабатывает или неправильно передаеться параметр.
Пробывал указивать вместо 4 параметра
|
Код
Выбрать все
    СпрЦены.Code like ?"; 


Следующий док
|
Код
Выбрать все
    СпрЦены.Code like 'КВ1%'"; 


Тогда все работает класно и цены отображаютсья верно.
Вчем загвоздка?????
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Вывод цен в форме списка через  параметризированный запрос
Ответ #1 - 21. Февраля 2009 :: 12:22
Печать  
Цитата:
Код
Выбрать все
		|    СпрЦены.Code like ?";
 


почему бы не заменить на
Код
Выбрать все
		|    LEFT(СпрЦены.Code,3) = ?";
 


И соответственно передавать в параметр первые 3 буквы фильтра без %
  
Наверх
IP записан
 
Aleksandr
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 5
Зарегистрирован: 21. Февраля 2009
Re: Вывод цен в форме списка через  параметризированный запрос
Ответ #2 - 21. Февраля 2009 :: 12:28
Печать  
Огромное спасибо leshik. Все заработало Улыбка
  
Наверх
 
IP записан
 
Aleksandr
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 5
Зарегистрирован: 21. Февраля 2009
Re: Вывод цен в форме списка через  параметризированный запрос
Ответ #3 - 22. Февраля 2009 :: 01:07
Печать  
ХЕЛП ДРУГОЙ ТРАБЛ......
Код
Выбрать все
RS_Цена = СоздатьОбъект("ODBCRecordset");
	  ТекстЗапросаЦ = "
		|SELECT
		|    $ПоследнееЗначение.Цены.ЦенаСНДС(СпрЦены.ID, ?)
		|FROM
		|    $Справочник.Цены as СпрЦены WITH (NOLOCK)
		|WHERE
		|    СпрЦены.ParentExt = ? AND
		|    $СпрЦены.КатегорияЦены = ? AND
		|    СпрЦены.IsMark = 0 AND
		|    LEFT(СпрЦены.Code,3) = ?";
	  RS_Цена.Отладка(1);
		RS_Цена.Подготовить(ТекстЗапросаЦ);
		RS_Цена.ДобПараметр(1,10,8,0);
		RS_Цена.ДобПараметр(1,14,9,0);
		RS_Цена.ДобПараметр(1,14,9,0);
		RS_Цена.ДобПараметр(1,14,6,0);
		RS_Цена.УстПараметр(1, ПолучитьДатуТА());
		RS_Цена.УстПараметр(4, Филия.Код); 



после РС.Отладка
Код
Выбрать все
SELECT
    (
select top 1
cast(c2041_vv.value as numeric(11, 3))
from
_1sconst as c2041_vv (nolock)
where
c2041_vv.id = 2041 and
c2041_vv.objid = СпрЦены.ID and
(c2041_vv.date <= ?)
order by c2041_vv.date desc, c2041_vv.time desc, c2041_vv.docid desc, c2041_vv.row_id desc
)
FROM
    sc2034 as СпрЦены WITH (NOLOCK)
WHERE
    СпрЦены.ParentExt = ? AND
    СпрЦены.sp2036 = ? AND
    СпрЦены.IsMark = 0 AND
    LEFT(СпрЦены.Code,3) = ?
 


Все работает но там где есть 2 елемента (какойто нехороший человек создал 1шт в ЦБ для филиала, а на филиал сам создал еще 1 елемент, после обмена в ЦБ базе их стало 2 и оба начинаютсья на КВ1 и один и тот же тип цен, хоть таких елементов и мало но они присутсвуют.  И как только запрос их начинает обрабатывать вылетает ошибка и 1С вылетает, как вернуть только 1 елемент????
top 1 в отладке присутствует???? что не так хелп.
"C:\DocumentsandSettings\Captiva\Рабочийстол\1122_001.jpg"
  

1122_001_001.jpg ( 40 KB | Загрузки )
1122_001_001.jpg
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать