Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Горячая тема (более 10 ответов) PLAESE HELP - Вылетает база при запросе (число прочтений - 6682 )
slider26
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 256
Зарегистрирован: 01. Июня 2006
PLAESE HELP - Вылетает база при запросе
29. Августа 2006 :: 02:21
Печать  
В конфигурации пытаюсь использовать прямой запрос для получения цены товара в форме списка справочника:
Краткая пердистория:
-Есть спр. "Цены", подчиненный спр. "Номенклатура", который имеет реквизиты "ТипЦен" и "Цена"-периодический;
-Есть спр. "Прайс", в котором есть реквизит "Товар" - ссылка на эл. спр. "Номенклатура"
-В форме спр. "Прайс" необходимо выводить значение цены ук-го типа на тек. дату.
Т.к. получение стандартными средствами знач. цены ощутимо "тормозит" прокрутку справочника, было принято решение исп-ть прямой запрос:

Код
Выбрать все
Перем ЗапросЦ;

//_____________________________________________________________________________            
Процедура ПриОткрытии()

	Перем ТекстЗапросаЦ;

...........

	Если (глЭтоSQLБаза = 1) Тогда

		ЗапросЦ = СоздатьОбъект("ODBCRecordset");

		ТекстЗапросаЦ = "
		|SELECT
		|    $ПоследнееЗначение.Цены.Цена(СпрЦены.ID, ?)
		|FROM
		|    $Справочник.Цены as СпрЦены WITH (NOLOCK)
		|WHERE
		|    СпрЦены.ParentExt = ? AND $СпрЦены.ТипЦен = ? AND СпрЦены.IsMark = 0";

		ЗапросЦ.Подготовить(ТекстЗапросаЦ);
		ЗапросЦ.ДобПараметр(1,10,8,0);
		ЗапросЦ.ДобПараметр(1,14,9,0);
		ЗапросЦ.ДобПараметр(1,14,9,0);
		ЗапросЦ.УстПараметр(1, ПолучитьДатуТА());
		ЗапросЦ.УстПараметр(3, тип_цен);
	КонецЕсли;

КонецПроцедуры //ПриОткрытии

//_____________________________________________________________________________            
Функция ВернутьЦену()
    Перем цена;

	Если (ТекущийЭлемент().ЭтоГруппа() = 1) Тогда
	    Возврат "";
	КонецЕсли;

	Если (глЭтоSQLБаза = 1) Тогда
		Если (тип_цен.СпособФормированияЦен = Перечисление.СпособыФормированияЦен.ХранитсяВИБ) Тогда
			ЗапросЦ.УстПараметр(2, ТекущийЭлемент().Товар);
			цена = ЗапросЦ.ВыполнитьСкалярный();
	    	Возврат Формат(цена,"Ч0.2");
		КонецЕсли;
	КонецЕсли;

	Если (глВернутьЦену(ТекущийЭлемент().Товар, тип_цен, ТекущаяДата(), цена) = 1) Тогда
	    Возврат Формат(цена,"Ч0.2");
	КонецЕсли;

	Возврат "";
КонецФункции //ВернутьЦену

//_____________________________________________________________________________            
 



Функция "ВернутьЦену" используется в формуле, в колонке табл. части типа "Текст"

Запрос отлично выполняется 5 раз (форма спр. "свернута", видно малое кол-во строк), а затем база выпадает с ошибкой (см. вложение)

В чем может быть дело? Please HELP...

PS:"Вылет" происходит при выполнении кода:

Код
Выбрать все
Товар = ТекущийЭлемент().Товар;
 



25-я платформа, релиз 1С++ 2.0.2.2
« Последняя редакция: 29. Августа 2006 :: 06:45 - slider26 »  

1122_001.jpg ( 40 KB | Загрузки )
1122_001.jpg
Наверх
 
IP записан
 
U_zer
Экс-Участник


Re: PLAESE HELP - Вылетает база при запросе
Ответ #1 - 29. Августа 2006 :: 04:42
Печать  
Замени ВыполнитьСкалярный на ВыполнитьИнструцию,
похоже, он как-то криво работает с парам. запросами ..
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
На связи



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: PLAESE HELP - Вылетает база при запросе
Ответ #2 - 29. Августа 2006 :: 04:50
Печать  
Цитата:
Замени ВыполнитьСкалярный на ВыполнитьИнструцию,
похоже, он как-то криво работает с парам. запросами ..

нет, не похоже
  

1&&2&&3
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
На связи



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: PLAESE HELP - Вылетает база при запросе
Ответ #3 - 29. Августа 2006 :: 04:53
Печать  
to 0
ты уверен что запрос всегда возвращает в выборке не более одной строки?
я бы поставил top 1
  

1&&2&&3
Наверх
 
IP записан
 
U_zer
Экс-Участник


Re: PLAESE HELP - Вылетает база при запросе
Ответ #4 - 29. Августа 2006 :: 05:40
Печать  
При попытке вернуть структуру в ВыполнитьСкалярный вылетает такая бодяга.
При попытке вернуть одно значение, та же фигня.
Если заменить на ВыполнитьИнструкцию - все работает, по крайней мере на
v. 2.0.3.0 NB от 17.06.2006
  
Наверх
 
IP записан
 
DrACe
1c++ donor
1c++ power user
Отсутствует


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

Сообщений: 447
Местоположение: г. Новосибирск
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: PLAESE HELP - Вылетает база при запросе
Ответ #5 - 29. Августа 2006 :: 05:51
Печать  
slider26 писал(а) 29. Августа 2006 :: 02:21:
PS:"Вылет" происходит при выполнении кода:

Код
Выбрать все
Товар = ТекущийЭлемент().Товар;
 



25-я платформа, релиз 1С++ 2.0.2.2


я что-то не вижу этого "падучего" кода у тебя
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
На связи



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: PLAESE HELP - Вылетает база при запросе
Ответ #6 - 29. Августа 2006 :: 06:31
Печать  
Цитата:
При попытке вернуть структуру в ВыполнитьСкалярный вылетает такая бодяга.
При попытке вернуть одно значение, та же фигня.
Если заменить на ВыполнитьИнструкцию - все работает, по крайней мере на
v. 2.0.3.0 NB от 17.06.2006

пример пожалуйста
  

1&&2&&3
Наверх
 
IP записан
 
slider26
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 256
Зарегистрирован: 01. Июня 2006
Re: PLAESE HELP - Вылетает база при запросе
Ответ #7 - 29. Августа 2006 :: 06:36
Печать  
DrACe писал(а) 29. Августа 2006 :: 05:51:
slider26 писал(а) 29. Августа 2006 :: 02:21:
PS:"Вылет" происходит при выполнении кода:

Код
Выбрать все
Товар = ТекущийЭлемент().Товар;
 



25-я платформа, релиз 1С++ 2.0.2.2


я что-то не вижу этого "падучего" кода у тебя


"Падучий" код - отследился отладчиком - Первая строка функции, возвращающей остатки по складу, т.к. вылет происходит сразу, после выполнения данной строки, а также в том случае, когда просто под отладчиком пытаемся вычислить "ТекущийЭлемент().Товар" то текст функции не приведен в коде как не имеющий отношения к проблеме
  
Наверх
 
IP записан
 
slider26
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 256
Зарегистрирован: 01. Июня 2006
Re: PLAESE HELP - Вылетает база при запросе
Ответ #8 - 29. Августа 2006 :: 06:44
Печать  
trad писал(а) 29. Августа 2006 :: 04:53:
to 0
ты уверен что запрос всегда возвращает в выборке не более одной строки?
я бы поставил top 1


Огромное спасибо Улыбка top 1 спас ситуацию.
  
Наверх
 
IP записан
 
U_zer
Экс-Участник


Re: PLAESE HELP - Вылетает база при запросе
Ответ #9 - 29. Августа 2006 :: 06:51
Печать  
Цитата:
пример пожалуйста


Беру свои слова обратно ..
top 1 - рулит!  Класс
  
Наверх
 
IP записан
 
Славко
Senior Member
****
Отсутствует



Сообщений: 467
Местоположение: Украина, г. Днепропетровск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: PLAESE HELP - Вылетает база при запросе
Ответ #10 - 29. Августа 2006 :: 06:52
Печать  
slider26 писал(а) 29. Августа 2006 :: 06:44:
Огромное спасибо Улыбка top 1 спас ситуацию.

то ты Вася, то ты не Вася...  Смех
это я к тому, шо ты вроде типа как проверял и выбирал одно значение и говорил что проблему это не спасло, так таки не проверял получается... нехарашо людефф то в заблуждение вводить...
  

Ламер, самый обычный ламер...    сначала мы ...   а потом мы ...
Наверх
wwwICQ  
IP записан
 
slider26
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 256
Зарегистрирован: 01. Июня 2006
Re: PLAESE HELP - Вылетает база при запросе
Ответ #11 - 29. Августа 2006 :: 06:57
Печать  
Цитата:
slider26 писал(а) 29. Августа 2006 :: 06:44:
Огромное спасибо Улыбка top 1 спас ситуацию.

то ты Вася, то ты не Вася...  Смех
это я к тому, шо ты вроде типа как проверял и выбирал одно значение и говорил что проблему это не спасло, так таки не проверял получается... нехарашо людефф то в заблуждение вводить...

Я где-то говорил, что уже использовал ранее TOP 1? Озадачен
Сылку в студию, PLS
  
Наверх
 
IP записан
 
Славко
Senior Member
****
Отсутствует



Сообщений: 467
Местоположение: Украина, г. Днепропетровск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: PLAESE HELP - Вылетает база при запросе
Ответ #12 - 29. Августа 2006 :: 07:00
Печать  
slider26 писал(а) 29. Августа 2006 :: 06:57:
Я где-то говорил, что уже использовал ранее TOP 1? Озадачен
Сылку в студию, PLS

навреное не проснулся еще, это U_zer утверждал что это не помогло...
  

Ламер, самый обычный ламер...    сначала мы ...   а потом мы ...
Наверх
wwwICQ  
IP записан
 
U_zer
Экс-Участник


Re: PLAESE HELP - Вылетает база при запросе
Ответ #13 - 29. Августа 2006 :: 07:12
Печать  
Цитата:
навреное не проснулся еще, это U_zer утверждал что это не помогло...


Хмм, а где я утверждал, что это не помогло?
Грабли были там же, где и у slider26
  
Наверх
 
IP записан
 
Славко
Senior Member
****
Отсутствует



Сообщений: 467
Местоположение: Украина, г. Днепропетровск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: PLAESE HELP - Вылетает база при запросе
Ответ #14 - 29. Августа 2006 :: 07:21
Печать  
Цитата:
Хмм, а где я утверждал, что это не помогло?
Грабли были там же, где и у slider26

ну почитай вот это:
http://www.1cpp.ru/forum/YaBB.pl?num=1156818080/4#4

это же не мое сообщение то...
  

Ламер, самый обычный ламер...    сначала мы ...   а потом мы ...
Наверх
wwwICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
На связи



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: PLAESE HELP - Вылетает база при запросе
Ответ #15 - 29. Августа 2006 :: 07:23
Печать  
Славко, хватит флудить
  

1&&2&&3
Наверх
 
IP записан
 
Aleksandr
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 5
Зарегистрирован: 21. Февраля 2009
Re: PLAESE HELP - Вылетает база при запросе
Ответ #16 - 22. Февраля 2009 :: 01:02
Печать  
ХЕЛП У МЕНЯ ТАЖЕ СИТУАЦИЯ И ТАЖЕ ОШИБКА.....
Код
Выбрать все
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????
top 1 в отладке присутствует???? что не так хелп.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 
ОтправитьПечать