Переключение на Главную Страницу Страницы: 1 2 [3] 4  ОтправитьПечать
Очень популярная тема (более 25 ответов) Помогите разобраться с глюком! (число прочтений - 15050 )
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Помогите разобраться с глюком!
Ответ #30 - 14. Мая 2013 :: 10:18
Печать  
Eprst писал(а) 14. Мая 2013 :: 09:45:
Ага.. баян значится (это я про метапарсер)



А, чо-чо?
Есть запись в багтрекере (или подробное описание, как и когда проявляется)?
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите разобраться с глюком!
Ответ #31 - 14. Мая 2013 :: 10:27
Печать  
Да вроде есть, этому приколу сто лет в обед, то исправили его, то он опять появляется. Не любит метапарсер символы табуляции в тексте запроса.
  
Наверх
 
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Помогите разобраться с глюком!
Ответ #32 - 14. Мая 2013 :: 10:45
Печать  
Стрянно

у меня все всюду форматируется табляциями - и норм все
хотя... я виртуальный таблицы не использую - у меня для этого есть свой функционал в классе ТОтчет.Запрос
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите разобраться с глюком!
Ответ #33 - 14. Мая 2013 :: 10:51
Печать  
Это какой то плавающий глюк, причем, на разных машинах один и тот же текст запроса может не работать.
Да и не простейшем запросе с селектом может не отработать из-за табов
  
Наверх
 
IP записан
 
Alex37
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 23
Зарегистрирован: 13. Мая 2013
Пол: Мужской
Re: Помогите разобраться с глюком!
Ответ #34 - 15. Мая 2013 :: 16:26
Печать  
Продолжение истории.
Вот этот текст запроса тоже не отрабатывает
Табуляцию я убрал из текста, вместо него только пробелы. И глюк опять плавающий.
Текст запроса генерируется, я его ещё буду править (сейчас генерируется лишний вложенный запрос), но запрос рабочий.

Вот текст оригинального запроса
Код
Выбрать все
Set NoCount On

IF EXISTS (SELECT * FROM tempdb..sysobjects WHERE
ID=OBJECT_ID('tempdb..#ВремОстатки') AND sysstat & 0xf = 3 )
DROP TABLE #ВремОстатки

SELECT CAST('20130501' as DateTime) as Период
   , ОстаткиТМЦ.Номенклатура AS Номенклатура
   , ОстаткиТМЦ.КоличествоКонечныйОстаток  as Остаток
Into #ВремОстатки
From $РегистрОстаткиОбороты.ОстаткиТМЦ('20130501','20130508Z',Период,,,(Номенклатура = '   G7N   '),(Номенклатура),(Количество)) as ОстаткиТМЦ
WHERE ОстаткиТМЦ.КоличествоКонечныйОстаток <> 0

SELECT ПартииНаличие.Период as Период
   , ПартииНаличие.Номенклатура [Номенклатура $Справочник.Номенклатура]
   , Sum(ПартииНаличие.Остаток) as Остаток
FROM (
SELECT CASE WHEN CAST('20130501' as DateTime)<'20130501' THEN '20130501' ELSE CAST('20130501' as DateTime) END as Период
   , Рег.Номенклатура
   , Рег.Остаток as Остаток
FROM (
SELECT кросс.День as Период
   , кросс.Номенклатура AS Номенклатура
   , Ост.Остаток AS Остаток
From (Select DISTINCT дни.dateE as День
   , Остатки.Номенклатура AS Номенклатура
   From #tmp_dates as Дни
   CROSS JOIN #ВремОстатки as Остатки
   ) as Кросс
   LEFT JOIN (Select об1.Период as ДатаС
      , MIN(CASE WHEN об2.Период Is NULL THEN DATEADD(day,1,CAST('20130508' as DateTime)) ELSE DATEADD(day,-1,об2.Период) END) as ДатаПо
      , об1.Остаток as Остаток
   , об1.Номенклатура AS Номенклатура
   From #ВремОстатки об1
      LEFT JOIN #ВремОстатки об2 on об1.Период < об2.Период
Group By об1.Период,об1.Остаток,об1.Номенклатура
) as Ост on кросс.день BETWEEN Ост.ДатаС AND Ост.ДатаПо AND кросс.Номенклатура = Ост.Номенклатура
Where Ост.Остаток <> 0
) as Рег
) as ПартииНаличие
GROUP BY ПартииНаличие.Период,ПартииНаличие.Номенклатура
ORDER BY 1
глРС.ВыполнитьИнструкцию(ТекстЗапроса,ИТЗ);
{\\TSCLIENT\E\1С\АНАЛИЗ ТМЦ ПО ПЕРИОДАМ.ERT(477)}: State 42S22, native 207, message [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid column name 'Номенклатура'. 




Вот он при отладке
Код
Выбрать все
Set NoCount On

IF EXISTS (SELECT * FROM tempdb..sysobjects WHERE
ID=OBJECT_ID('tempdb..#ВремОстатки') AND sysstat & 0xf = 3 )
DROP TABLE #ВремОстатки

SELECT CAST('20130501' as DateTime) as Период
   , ОстаткиТМЦ.Номенклатура AS Номенклатура
   , ОстаткиТМЦ.КоличествоКонечныйОстаток  as Остаток
Into #ВремОстатки
From (
select
rb2412_vt.Номенклатура,
sum(rb2412_vt.КоличествоОстаток) as КоличествоНачальныйОстаток,
sum(rb2412_vt.КоличествоПриход) as КоличествоПриход,
sum(rb2412_vt.КоличествоРасход) as КоличествоРасход,
sum(rb2412_vt.КоличествоОстаток) + sum(rb2412_vt.КоличествоПриход) - sum(rb2412_vt.КоличествоРасход) as КоличествоКонечныйОстаток
from (
select
ra2412_vt.sp2406 as Номенклатура,
case when ra2412_vt.debkred = 0 then ra2412_vt.sp2410 else 0 end as КоличествоПриход,
case when ra2412_vt.debkred = 1 then ra2412_vt.sp2410 else 0 end as КоличествоРасход,
0 as КоличествоОстаток
from ra2412 as ra2412_vt (nolock)
inner join _1sjourn as j2412_vt (nolock) on j2412_vt.iddoc = ra2412_vt.iddoc
where j2412_vt.date_time_iddoc > '20130501' and j2412_vt.date_time_iddoc < '20130508AHX3Y8 2PNWY  0'
and j2412_vt.rf2412 = 0x1
and ((ra2412_vt.sp2406 = '   G7N   '))
union all
select
rg2412_vt.sp2406 as Номенклатура,
0,
0,
rg2412_vt.sp2410
from rg2412 as rg2412_vt (nolock)
where rg2412_vt.period={d '2013-04-01'}
and ((rg2412_vt.sp2406 = '   G7N   '))
) as rb2412_vt
group by
rb2412_vt.Номенклатура
having
sum(rb2412_vt.КоличествоОстаток) <> 0 or
sum(rb2412_vt.КоличествоПриход) <> 0 or
sum(rb2412_vt.КоличествоРасход) <> 0 or
sum(rb2412_vt.КоличествоОстаток) + sum(rb2412_vt.КоличествоПриход) - sum(rb2412_vt.КоличествоРасход) <> 0
) as ОстаткиТМЦ
WHERE ОстаткиТМЦ.КоличествоКонечныйОстаток <> 0

SELECT ПартииНаличие.Период as Период
   , ПартииНаличие.Номенклатура [Номенклатура $Справочник.Номенклатура]
   , Sum(ПартииНаличие.Остаток) as Остаток
FROM (
SELECT CASE WHEN CAST('20130501' as DateTime)<'20130501' THEN '20130501' ELSE CAST('20130501' as DateTime) END as Период
   , Рег.Номенклатура
   , Рег.Остаток as Остаток
FROM (
SELECT кросс.День as Период
   , кросс.Номенклатура AS Номенклатура
   , Ост.Остаток AS Остаток
From (Select DISTINCT дни.dateE as День
   , Остатки.Номенклатура AS Номенклатура
   From #tmp_dates as Дни
   CROSS JOIN #ВремОстатки as Остатки
   ) as Кросс
   LEFT JOIN (Select об1.Период as ДатаС
      , MIN(CASE WHEN об2.Период Is NULL THEN DATEADD(day,1,CAST('20130508' as DateTime)) ELSE DATEADD(day,-1,об2.Период) END) as ДатаПо
      , об1.Остаток as Остаток
   , об1.Номенклатура AS Номенклатура
   From #ВремОстатки об1
      LEFT JOIN #ВремОстатки об2 on об1.Период < об2.Период
Group By об1.Период,об1.Остаток,об1.Номенклатура
) as Ост on кросс.день BETWEEN Ост.ДатаС AND Ост.ДатаПо AND кросс.Номенклатура = Ост.Номенклатура
Where Ост.Остаток <> 0
) as Рег
) as ПартииНаличие
GROUP BY ПартииНаличие.Период,ПартииНаличие.Номенклатура
ORDER BY 1
глРС.ВыполнитьИнструкцию(ТекстЗапроса,ИТЗ);
{\\TSCLIENT\E\1С\АНАЛИЗ ТМЦ ПО ПЕРИОДАМ.ERT(477)}: State 42S22, native 207, message [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid column name 'Номенклатура'. 

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


1C++ rocks!

Сообщений: 23
Зарегистрирован: 13. Мая 2013
Пол: Мужской
Re: Помогите разобраться с глюком!
Ответ #35 - 15. Мая 2013 :: 16:36
Печать  
Результат из Query Anilyzer
Код
Выбрать все
select * from #ВремОстатки 


Колонка Номенклатура там есть
Период                 Номенклатура            Остаток
Код
Выбрать все
2013-05-01 00:00:00.000    G7N   	494.00000	 

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



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите разобраться с глюком!
Ответ #36 - 16. Мая 2013 :: 04:58
Печать  
SELECT CASE WHEN CAST('20130501' as DateTime)<'20130501' THEN '20130501' ELSE CAST('20130501' as DateTime) END as Период
   , Рег.Номенклатура as Номенклатура

алиясы везде указывай
  
Наверх
 
IP записан
 
Alex37
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 23
Зарегистрирован: 13. Мая 2013
Пол: Мужской
Re: Помогите разобраться с глюком!
Ответ #37 - 16. Мая 2013 :: 06:16
Печать  
Подставил, один раз сработало... Ну а сейчас что ему не хватает?
Код
Выбрать все
Set NoCount On

IF EXISTS (SELECT * FROM tempdb..sysobjects WHERE
ID=OBJECT_ID('tempdb..#ВремОстатки') AND sysstat & 0xf = 3 )
DROP TABLE #ВремОстатки

SELECT ОстаткиТМЦ.Период as Период
   , ОстаткиТМЦ.Фирма as Фирма
   , $Номенклатура.ГруппаТовара as ГруппаТМЦ
   , ОстаткиТМЦ.КоличествоКонечныйОстаток  as Остаток
Into #ВремОстатки
From $РегистрОстаткиОбороты.ОстаткиТМЦ('20130101','20130514Z',Месяц,,,(Номенклатура IN (SELECT Val FROM #РеквизитАнализТМЦПоПериодамНоменклатура)),(Фирма,Номенклатура),(Количество)) as ОстаткиТМЦ
   INNER JOIN $Справочник.Номенклатура as Номенклатура ON Номенклатура.ID = ОстаткиТМЦ.Номенклатура
WHERE ОстаткиТМЦ.КоличествоКонечныйОстаток <> 0

SELECT ПартииНаличие.Период as Период
   , ПартииНаличие.Фирма [Фирма $Справочник.Фирмы]
   , ПартииНаличие.ГруппаТМЦ [ГруппаТМЦ $Справочник.ГруппаТовара]
   , Sum(ПартииНаличие.Остаток) as Остаток
FROM (
SELECT CASE WHEN dateadd(day,1-day(Рег.Период),Рег.Период)<'20130101' THEN '20130101' ELSE dateadd(day,1-day(Рег.Период),Рег.Период) END as Период
   , Рег.Фирма as Фирма
   , Рег.ГруппаТМЦ as ГруппаТМЦ
   , Рег.Остаток as Остаток
FROM (
SELECT кросс.День as Период
   , кросс.Фирма as Фирма
   , кросс.ГруппаТМЦ as ГруппаТМЦ
   , Ост.Остаток AS Остаток
From (Select DISTINCT дни.dateE as День
   , Остатки.Фирма as Фирма
   , Остатки.ГруппаТМЦ AS ГруппаТМЦ
   From #tmp_dates as Дни
   CROSS JOIN #ВремОстатки as Остатки
   ) as Кросс
   LEFT JOIN (Select об1.Период as ДатаС
	, MIN(CASE WHEN об2.Период Is NULL THEN DATEADD(day,1,CAST('20130514' as DateTime)) ELSE DATEADD(day,-1,об2.Период) END) as ДатаПо
	, об1.Остаток as Остаток
   , об1.Фирма as Фирма
   , об1.ГруппаТМЦ AS ГруппаТМЦ
   From #ВремОстатки об1
	LEFT JOIN #ВремОстатки об2 on об1.Период < об2.Период
Group By об1.Период,об1.Остаток,об1.Фирма,об1.ГруппаТМЦ
) as Ост on кросс.день BETWEEN Ост.ДатаС AND Ост.ДатаПо AND кросс.Фирма = Ост.Фирма AND кросс.ГруппаТМЦ = Ост.ГруппаТМЦ
Where Ост.Остаток <> 0
) as Рег
) as ПартииНаличие
GROUP BY ПартииНаличие.Период,ПартииНаличие.Фирма,ПартииНаличие.ГруппаТМЦ
ORDER BY 1
глРС.ВыполнитьИнструкцию(ТекстЗапроса,ИТЗ);
{D:\TEMP\АНАЛИЗ ТМЦ ПО ПЕРИОДАМ.ERT(476)}: State 42S22, native 207, message [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid column name 'Фирма'. 

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


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Помогите разобраться с глюком!
Ответ #38 - 16. Мая 2013 :: 08:37
Печать  
От табов точно избавился?
ибо, если это досимвольно тот текст запроса, который отдается на исполнение - то табы в нем присутствуют

(например, тут - "      LEFT JOIN #ВремОстатки об2 on об1.Период < об2.Период")
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Помогите разобраться с глюком!
Ответ #39 - 16. Мая 2013 :: 10:04
Печать  
OFF.

Eprst писал(а) 14. Мая 2013 :: 10:51:
Это какой то плавающий глюк, причем, на разных машинах один и тот же текст запроса может не работать.
Да и не простейшем запросе с селектом может не отработать из-за табов

Эмм.. А на пальцах показать можешь? Я к чему спрашиваю - мой конструктор отродясь запросы табами форматировал, а связанных с этим багрепортов я ни разу не получал.  Озадачен
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите разобраться с глюком!
Ответ #40 - 16. Мая 2013 :: 10:40
Печать  
Да запросто Улыбка

Код
Выбрать все
	ТекстЗапроса = "
	|select
	|	$Док.Контрагент
	|from  $Документ.Реализация as	Док
	|"; 



если после as во фроме будет стоять таб, усё.. метапарсер не видит псевдоним таблички
  
Наверх
 
IP записан
 
Alex37
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 23
Зарегистрирован: 13. Мая 2013
Пол: Мужской
Re: Помогите разобраться с глюком!
Ответ #41 - 16. Мая 2013 :: 11:43
Печать  
Satans Claws писал(а) 16. Мая 2013 :: 08:37:
От табов точно избавился?
ибо, если это досимвольно тот текст запроса, который отдается на исполнение - то табы в нем присутствуют

(например, тут - "      LEFT JOIN #ВремОстатки об2 on об1.Период < об2.Период")


Я уже тест на это поставил
Код
Выбрать все
Если СтрЧислоВхождений(ТекстЗапроса,СимволТабуляции) <> 0 Тогда Предупреждение("Застрелись!");
	КонецЕсли;
 



В оригинале там 6 пробелов

P.S. Чуть переделал запрос, вот такой текст сейчас (временно) работает
Код
Выбрать все
Set NoCount On

IF EXISTS (SELECT * FROM tempdb..sysobjects WHERE
ID=OBJECT_ID('tempdb..#ВремОстатки') AND sysstat & 0xf = 3 )
DROP TABLE #ВремОстатки

SELECT CAST('20130501' as DateTime) as Период
   , $Номенклатура.ГруппаТовара as ГруппаТМЦ
   , ОстаткиТМЦ.КоличествоКонечныйОстаток  as Остаток
Into #ВремОстатки
From ),(Количество)) as ОстаткиТМЦ
   INNER JOIN $Справочник.Номенклатура as Номенклатура ON Номенклатура.ID = ОстаткиТМЦ.Номенклатура
WHERE ОстаткиТМЦ.КоличествоКонечныйОстаток <> 0

SELECT ПартииНаличие.Период as Период
   , ПартииНаличие.ГруппаТМЦ [ГруппаТМЦ $Справочник.ГруппаТовара]
   , Sum(ПартииНаличие.Остаток) as Остаток
FROM (
SELECT кросс.День as Период
   , кросс.ГруппаТМЦ as ГруппаТМЦ
   , Ост.Остаток AS Остаток
From (Select DISTINCT дни.dateB as День
   , Остатки.ГруппаТМЦ AS ГруппаТМЦ
   From #tmp_dates as Дни
   CROSS JOIN #ВремОстатки as Остатки
   ) as Кросс
   LEFT JOIN (Select об1.Период as ДатаС
	, MIN(CASE WHEN об2.Период Is NULL THEN DATEADD(day,1,CAST('20130516' as DateTime)) ELSE DATEADD(day,-1,об2.Период) END) as ДатаПо
	, об1.Остаток as Остаток
   , об1.ГруппаТМЦ AS ГруппаТМЦ
   From #ВремОстатки об1
	LEFT JOIN #ВремОстатки об2 on об1.Период < об2.Период
Group By об1.Период,об1.Остаток,об1.ГруппаТМЦ
) as Ост on (кросс.день BETWEEN Ост.ДатаС AND Ост.ДатаПо) AND кросс.ГруппаТМЦ = Ост.ГруппаТМЦ
Where Ост.Остаток <> 0
) as ПартииНаличие
GROUP BY ПартииНаличие.Период,ПартииНаличие.ГруппаТМЦ
ORDER BY 1
10.39 сек., 63 строк 



а с заменой одной переменной на другую - нет
Код
Выбрать все
Set NoCount On

IF EXISTS (SELECT * FROM tempdb..sysobjects WHERE
ID=OBJECT_ID('tempdb..#ВремОстатки') AND sysstat & 0xf = 3 )
DROP TABLE #ВремОстатки

SELECT CAST('20130501' as DateTime) as Период
   , ОстаткиТМЦ.Склад as Склад
   , ОстаткиТМЦ.КоличествоКонечныйОстаток  as Остаток
Into #ВремОстатки
From чество)) as ОстаткиТМЦ
WHERE ОстаткиТМЦ.КоличествоКонечныйОстаток <> 0

SELECT ПартииНаличие.Период as Период
   , ПартииНаличие.Склад [Склад $Справочник.Склады]
   , Sum(ПартииНаличие.Остаток) as Остаток
FROM (
SELECT кросс.День as Период
   , кросс.Склад as Склад
   , Ост.Остаток AS Остаток
From (Select DISTINCT дни.dateB as День
   , Остатки.Склад as Склад
   From #tmp_dates as Дни
   CROSS JOIN #ВремОстатки as Остатки
   ) as Кросс
   LEFT JOIN (Select об1.Период as ДатаС
	, MIN(CASE WHEN об2.Период Is NULL THEN DATEADD(day,1,CAST('20130516' as DateTime)) ELSE DATEADD(day,-1,об2.Период) END) as ДатаПо
	, об1.Остаток as Остаток
   , об1.Склад as Склад
   From #ВремОстатки об1
	LEFT JOIN #ВремОстатки об2 on об1.Период < об2.Период
Group By об1.Период,об1.Остаток,об1.Склад
) as Ост on (кросс.день BETWEEN Ост.ДатаС AND Ост.ДатаПо) AND кросс.Склад = Ост.Склад
Where Ост.Остаток <> 0
) as ПартииНаличие
GROUP BY ПартииНаличие.Период,ПартииНаличие.Склад
ORDER BY 1
глРС.ВыполнитьИнструкцию(ТекстЗапроса,ИТЗ);
{D:\TEMP\АНАЛИЗ ТМЦ ПО ПЕРИОДАМ.ERT(490)}: State 42S22, native 207, message [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid column name 'Склад'. 

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



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите разобраться с глюком!
Ответ #42 - 16. Мая 2013 :: 12:28
Печать  
выполняй кусками по частям
  
Наверх
 
IP записан
 
Alex37
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 23
Зарегистрирован: 13. Мая 2013
Пол: Мужской
Re: Помогите разобраться с глюком!
Ответ #43 - 16. Мая 2013 :: 13:16
Печать  
В Query Anilyzer'е запрос выполняется. Я сделал таблицу дат, таблицу остатков и запустил батч
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите разобраться с глюком!
Ответ #44 - 16. Мая 2013 :: 13:54
Печать  
ну не знаю, раздели запросы через ; что ли..
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 2 [3] 4 
ОтправитьПечать