Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Различный результат выполнения запроса (число прочтений - 3137 )
noxxx
Full Member
***
Отсутствует


1c++ rocks 8)

Сообщений: 239
Местоположение: Москва
Зарегистрирован: 24. Августа 2007
Пол: Мужской
Различный результат выполнения запроса
02. Марта 2011 :: 10:21
Печать  
Добрый день!

Есть вопросик. Уже замучился, полдня бьюсь. Есть функция:

Код
Выбрать все
Функция глСуммаПредоплатыПоДоговоруНаДокумент(Договор, Документ)

	Поз = СформироватьПозициюДокумента(Документ, -1);

	qr = "
	|SELECT
	|	SUM(РасчетыСПокупателямиОстатки.ДолгОстаток) Сумма
	|FROM
	|	$РегистрОстатки.РасчетыСПокупателями(:ВыбДата~,,
	|		(Договор = :ВыбДог),,
	|		Долг) AS РасчетыСПокупателямиОстатки";

	глSecureODBC.УстановитьТекстовыйПараметр("ВыбДата", Поз);
	глSecureODBC.УстановитьТекстовыйПараметр("ВыбДог", Договор);

	Рез = глSecureODBC.ВыполнитьСкалярный(qr);

	Возврат Рез;

КонецФункции 



Если её запускать в обработке, то результат выдает 19393 (и это правильно).
Если её запускать в модуле документа при его проведении, то результат выдает 0 (неправильно).
Если её запускать в модуле документа при его перепроведении, то результат выдает 19393 (правильно).
Если запускать запрос из консоли, то результат выдает 19393 (правильно).

Я понять не могу, почему при первом проведении результат отличается от перепроведения?  Ужас
Может кто посмотрит свежим взглядом?
  
Наверх
ICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3044
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Различный результат выполнения запроса
Ответ #1 - 02. Марта 2011 :: 10:27
Печать  
в обработке проведения всегда пишу так
...
$РегистрОстатки.<>(:Позиция~,
...
Позиция = СформироватьПозициюДокумента(ПолучитьПозицию(),1);
рс.УстановитьТекстовыйПараметр("Позиция", Позиция);
...

  

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


1c++ rocks 8)

Сообщений: 239
Местоположение: Москва
Зарегистрирован: 24. Августа 2007
Пол: Мужской
Re: Различный результат выполнения запроса
Ответ #2 - 02. Марта 2011 :: 10:29
Печать  
trad писал(а) 02. Марта 2011 :: 10:27:
в обработке проведения всегда пишу так
...
$РегистрОстатки.<>(:Позиция~,
...
зицию(),1));
...


1 - это же следующая позиция? Мне нужно получить сумму НА документ. Или я не понимаю значение второго параметра?
  
Наверх
ICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3044
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Различный результат выполнения запроса
Ответ #3 - 02. Марта 2011 :: 10:30
Печать  
да, забыл отметить, что в моем случае движения текущего документа уже удалены
  

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


1c++ rocks 8)

Сообщений: 239
Местоположение: Москва
Зарегистрирован: 24. Августа 2007
Пол: Мужской
Re: Различный результат выполнения запроса
Ответ #4 - 02. Марта 2011 :: 10:36
Печать  
Если параметр выставить в 1, то стабильно показывает неверный результат Улыбка (0)
  
Наверх
ICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3044
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Различный результат выполнения запроса
Ответ #5 - 02. Марта 2011 :: 10:58
Печать  
а первый параметр ПолучитьПозицию()?
  

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


1c++ rocks 8)

Сообщений: 239
Местоположение: Москва
Зарегистрирован: 24. Августа 2007
Пол: Мужской
Re: Различный результат выполнения запроса
Ответ #6 - 02. Марта 2011 :: 11:07
Печать  
trad писал(а) 02. Марта 2011 :: 10:58:
а первый параметр ПолучитьПозицию()?

Упс, просмотрел сначала. Попробовал - результат не меняется.
  
Наверх
ICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3044
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Различный результат выполнения запроса
Ответ #7 - 02. Марта 2011 :: 11:17
Печать  
может быть что то типа этого:
Цитата:
...имеется один подводный камень на который нарываемся при получении остатка по документ в модуле проведения при проведении НЕ проведенного документа у которого нет флага "быстрой обработки движений".
Все дело в тексте ВТ:
если регистр не имеет "быстрой обработки движений", то в этом случае ВТ внутри будет иметь соединение с журналом типа:
from ra22 as ra22_vt (nolock)
inner join _1sjourn as j22_vt (nolock) on j22_vt.iddoc = ra22_vt.iddoc
а также условие по периоду типа:
where j22_vt.date_time_iddoc > '20061101' and j22_vt.date_time_iddoc < '20061106759TXC     JAA9'
и условие по флажку проведенности по регистру:
and j22_vt.rf22 = 0x1
В результате мы получим некорректнй остаток на конец документа: хотя мы уже сделали движения в модуле проведения, документ все еще считается не проведенным по состоянию флага в журнале.

http://www.1cpp.ru/forum/YaBB.pl?num=1162733649/5#5
  

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


1c++ rocks 8)

Сообщений: 239
Местоположение: Москва
Зарегистрирован: 24. Августа 2007
Пол: Мужской
Re: Различный результат выполнения запроса
Ответ #8 - 03. Марта 2011 :: 07:22
Печать  
Попробовал так:

Код
Выбрать все
	Рег = СоздатьОбъект("Регистр.РасчетыСПокупателями");
	Если ИтогиАктуальны()=0 Тогда
		Рег.ВременныйРасчет();
		РассчитатьРегистрыНа(Документ);
		Рег.Контрагент = Документ.Контрагент;;
		Рег.Договор = Документ.Договор;
		Рег.ОстаткиПолучить();
		Рез = Рег.Долг;
	Иначе
		Рез = Рег.СводныйОстаток(Документ.Контрагент, Документ.Договор, "Долг");
	КонецЕсли;
 



Что при проведенном, что при не проведенном документе выдает результат "0" (неверно)  Смущённый
  
Наверх
ICQ  
IP записан
 
noxxx
Full Member
***
Отсутствует


1c++ rocks 8)

Сообщений: 239
Местоположение: Москва
Зарегистрирован: 24. Августа 2007
Пол: Мужской
Re: Различный результат выполнения запроса
Ответ #9 - 03. Марта 2011 :: 08:05
Печать  
trad писал(а) 02. Марта 2011 :: 11:17:
может быть что то типа этого:
Цитата:
...имеется один подводный камень на который нарываемся при получении остатка по документ в модуле проведения при проведении НЕ проведенного документа у которого нет флага "быстрой обработки движений".
Все дело в тексте ВТ:
если регистр не имеет "быстрой обработки движений", то в этом случае ВТ внутри будет иметь соединение с журналом типа:
from ra22 as ra22_vt (nolock)
inner join _1sjourn as j22_vt (nolock) on j22_vt.iddoc = ra22_vt.iddoc
а также условие по периоду типа:
where j22_vt.date_time_iddoc > '20061101' and j22_vt.date_time_iddoc < '20061106759TXC     JAA9'
и условие по флажку проведенности по регистру:
and j22_vt.rf22 = 0x1
В результате мы получим некорректнй остаток на конец документа: хотя мы уже сделали движения в модуле проведения, документ все еще считается не проведенным по состоянию флага в журнале.

http://www.1cpp.ru/forum/YaBB.pl?num=1162733649/5#5


Поставил в регистре одному измерению "Отбор движения" и всё действительно заработало правильно!  Очень довольный
  
Наверх
ICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3044
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Различный результат выполнения запроса
Ответ #10 - 03. Марта 2011 :: 08:20
Печать  
Я вообще у всех регистров сразу при создании устанавливаю "быструю обработку движений".
Не делать этого не вижу смысла.
  

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


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Различный результат выполнения запроса
Ответ #11 - 03. Марта 2011 :: 08:33
Печать  
(0)  Перед началом проведения документа из итогов rg
убираются движения текущего  документа.
На итоги на документ это не влияет
на итоги по  документ влияет но их неправильно считает виртуальная функция
Перепишите (0) без РасчетыСПокупателями ( только rg и ra )
и все должно  получиться.
  
Наверх
 
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Различный результат выполнения запроса
Ответ #12 - 04. Марта 2011 :: 05:05
Печать  
noxxx писал(а) 03. Марта 2011 :: 08:05:
Поставил в регистре одному измерению "Отбор движения" и всё действительно заработало правильно!  Очень довольный


Именно "Отбор движений", или же "быструю обработку движений"?
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Различный результат выполнения запроса
Ответ #13 - 04. Марта 2011 :: 05:30
Печать  
Satans Claws писал(а) 04. Марта 2011 :: 05:05:
noxxx писал(а) 03. Марта 2011 :: 08:05:
Поставил в регистре одному измерению "Отбор движения" и всё действительно заработало правильно!  Очень довольный


Именно "Отбор движений", или же "быструю обработку движений"?


Это не важно, что так, что так, добавляется новое индексное поле (date_time_iddoc).
Заместо галки "быстрая обработка движений" можно втыкать отбор движений любому измерению/реквизиту регистра.

  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Различный результат выполнения запроса
Ответ #14 - 04. Марта 2011 :: 07:23
Печать  
trad писал(а) 03. Марта 2011 :: 08:20:
Я вообще у всех регистров сразу при создании устанавливаю "быструю обработку движений".
Не делать этого не вижу смысла.

Ага, я также всегда сразу так делал.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать