Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Помогите разобраться с запросом (AccountsRecordset) (число прочтений - 1901 )
NeoN
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 15
Зарегистрирован: 28. Марта 2012
Помогите разобраться с запросом (AccountsRecordset)
17. Сентября 2012 :: 13:20
Печать  
Добрый день! помогите разобраться с прямым запросом

хочу получить все движения по конкретному счету в разрезе документов
Вот Запрос:
Код
Выбрать все
	Би=СоздатьОбъект("AccountsRecordset");

	ТекстЗапроса="
	|SELECT
	|	Счет [Счет $Счет.Основной]
	|	, КорСчет [КорСчет $Счет.Основной]
	|	, СуммаОборотДт
	|	, СуммаОборотКт
	|	, Right(ПозицияДокумента, 9) [Док $Документ]
	|	, ВидДокумента Док_вид
	|
	|FROM $БИОбороты.Основной(:НачДата, :КонДата ~,Документ,
	|		,(Счет = :Счет),БезСубконто,
	|		,,БезСубконто) БИ
	|";

	Би.УстановитьТекстовыйПараметр("НачДата",'31.07.2012');
	Би.УстановитьТекстовыйПараметр("КонДата",'31.07.2012');
	Би.УстановитьТекстовыйПараметр("Счет",СчетПоКоду(6415));
	БИ.Отладка();
	иТз=СоздатьОбъект("ИндексированнаяТаблица");
	Би.ВыполнитьИнструкцию(ТекстЗапроса,иТз);
	иТз.Показать();
 


Запрос отрабатывает результат возвращет НО Пропускаются проводки по документу ОПЕРАЦИЯ

Начал разбирать:

1. кусок запроса вернутый функцией БИ.Отладка(); который должен зафиксировать мои документы, находит проводки НО не находит документы и Функцией INNER JOIN отсекает их из запроса:
Код
Выбрать все
SELECT _1SENTRY_vt.CURRID Валюта
		, _1SENTRY_vt.ACCDTID СчетДт
		, _1SENTRY_vt.ACCKTID СчетКт

		, _1SENTRY_vt.SUM_ СуммаОборот
		, _1SENTRY_vt.CURSUM ВалютнаяСуммаОборот
		, _1SENTRY_vt.AMOUNT КоличествоОборот

		, _1SENTRY_vt.DATE_TIME_DOCID ПозицияДокумента
	--	, _1SJOURN_vt.IDDOCDEF ВидДокумента
		, _1SJOURN_vt.*
	FROM _1SENTRY AS _1SENTRY_vt WITH (NOLOCK)
	--	INNER JOIN _1SJOURN AS _1SJOURN_vt WITH (NOLOCK) ON (_1SENTRY_vt.DATE_TIME_DOCID = _1SJOURN_vt.DATE_TIME_IDDOC)
		Left JOIN _1SJOURN AS _1SJOURN_vt WITH (NOLOCK) ON (_1SENTRY_vt.DATE_TIME_DOCID = _1SJOURN_vt.DATE_TIME_IDDOC)
		INNER JOIN _1SACCSEL AS _1SACCSEL_kt_vt WITH (NOLOCK) ON (_1SENTRY_vt.DATE_TIME_DOCID = _1SACCSEL_kt_vt.DATE_TIME_DOCID) AND (_1SENTRY_vt.NUMBER = _1SACCSEL_kt_vt.NUMBER) AND (_1SENTRY_vt.CORNO = _1SACCSEL_kt_vt.CORNO) AND ((_1SACCSEL_kt_vt.ACCID = '    D1   '))


	WHERE (_1SENTRY_vt.ACTIVE = ' ')
		AND ((_1SENTRY_vt.PROVKIND = ' ') OR (_1SENTRY_vt.CORNO > 0))
AND (_1SACCSEL_kt_vt.KT = '*') AND (_1SACCSEL_kt_vt.DATE_TIME_DOCID >= '20120731') AND (_1SACCSEL_kt_vt.DATE_TIME_DOCID < '20120731Z')
AND _1SENTRY_vt.ACCDTID='    FN   ' 




2. Запрос и результат к журналу документов по номерам документа "ОПЕРАЦИЯ"
Код
Выбрать все
Select *
from _1SJOURN
Where  DocNo='356247' or DocNo='356230' 




А теперь ВОПРОС:
Почему у меня в таблице _1SENTRY и _1SJOURN разные DATE_TIME_IDDOC ?
20120731EAEAY8  565UFPB
20120731EAGG40  565UFPB

М как БЫть ичтоб они попадали в запрос?
  
Наверх
 
IP записан
 
NeoN
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 15
Зарегистрирован: 28. Марта 2012
Re: Помогите разобраться с запросом (AccountsRecordset)
Ответ #1 - 17. Сентября 2012 :: 14:06
Печать  
Судя по названию поле DATE_TIME_IDDOC содержит информацию о ДАТЕ , Времени и СОБСТВЕННО ИД

по какой-то космической причине Время в таблице проводок и журнале документов отличается Печаль
,соответственно надо приравнивать по ИД Документа

Выход: заменил прямо в КЛАССЕ AccountsRecordset

Строку
Код
Выбрать все
  ВТ = ВТ + "		INNER JOIN _1SJOURN AS _1SJOURN_vt WITH (NOLOCK) ON (_1SENTRY_vt.DATE_TIME_DOCID = _1SJOURN_vt.DATE_TIME_IDDOC) 


на      строку:
Код
Выбрать все
  ВТ = ВТ + "		INNER JOIN _1SJOURN AS _1SJOURN_vt WITH (NOLOCK) ON (_1SENTRY_vt.DOCID = _1SJOURN_vt.IDDOC) 

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


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Помогите разобраться с запросом (AccountsRecordset)
Ответ #2 - 17. Сентября 2012 :: 16:46
Печать  
По моему причина это когда время
документа 23.59.59
в _1sjourn  время пишется правильно
а в проводках ( _1sentry) время перескакивает 24 часа.
Можешь проверить это тот или не тот случай.

+ последнем  "поиск ошибок в регистрах"
ловит все эти ситуации.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите разобраться с запросом (AccountsRecordset)
Ответ #3 - 18. Сентября 2012 :: 05:40
Печать  
Z1 писал(а) 17. Сентября 2012 :: 16:46:
По моему причина это когда время
документа 23.59.59
в _1sjourn  время пишется правильно
а в проводках ( _1sentry) время перескакивает 24 часа.
Можешь проверить это тот или не тот случай.

+ последнем  "поиск ошибок в регистрах"
ловит все эти ситуации.


так и есть - причина в 23:59:59
  
Наверх
 
IP записан
 
NeoN
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 15
Зарегистрирован: 28. Марта 2012
Re: Помогите разобраться с запросом (AccountsRecordset)
Ответ #4 - 18. Сентября 2012 :: 06:31
Печать  
точно время!
Украденная От сюда функция dbo.ap_1Cdatetime (@dts varchar(30)) вернула:
_1SENTRY                          _1SJOURN
2012-08-01 00:00:09.000      2012-07-31 23:59:59.000
2012-08-01 00:00:09.000      2012-07-31 23:59:59.000
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать