Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Очень популярная тема (более 25 ответов) Почему: "Получаемая строка превысит допустимые размеры"? (число прочтений - 10858 )
Ptitz
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 25
Зарегистрирован: 21. Июля 2008
Почему: "Получаемая строка превысит допустимые размеры"?
10. Апреля 2009 :: 13:39
Печать  
Есть нижеследующий запрос, который при выполнении:
ТЗ.загрузить(RS.ВыполнитьИнструкцию(ТекстЗапроса));
выдаёт ошибку из сабжа.
Если "Движения" из метода дополнения убрать или заменить на "ДвиженияИГраницыПериода", то ошибка не появляется. В чём беда?
Код
Выбрать все
	SELECT БИОстаткиОбороты.Счет [Счет $Счет.Основной]
		, БИОстаткиОбороты.Субконто1 [ТМЦ $Субконто]
		, БИОстаткиОбороты.Субконто2 [МестаХранения $Субконто]
		, БИОстаткиОбороты.КоличествоНачальныйОстаток AS НачКво
		, (БИОстаткиОбороты.КоличествоОборотДт) AS ПриходКво
		, Right(БИОстаткиОбороты.ПозицияДокумента, 9) [Документ $Документ]
		, БИОстаткиОбороты.ВидДокумента Документ_вид
		, БИОстаткиОбороты.Субконто1_вид ТМЦ_вид
		, БИОстаткиОбороты.Субконто2_вид МестаХранения_вид
	FROM $БИОстаткиОбороты.Основной(:Дата1, :Дата2 ~,
			Документ,Движения,,
			(Счет IN (SELECT Val FROM #Acc)),
			(ТМЦ,МестаХранения),
		) AS БИОстаткиОбороты
WHERE ((КоличествоНачальныйОстаток <>0)OR(КоличествоОборотДт <>0))AND(Субконто2 IN (SELECT Val FROM #TM)) 

  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Почему: "Получаемая строка превысит допустимые размеры"?
Ответ #1 - 10. Апреля 2009 :: 14:33
Печать  
Видимо, оно пытается порадовать тебя слишком длинным сообщением об ошибке. Посмотрю вечером.
  

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


I Love YaBB 2!

Сообщений: 25
Зарегистрирован: 21. Июля 2008
Re: Почему: "Получаемая строка превысит допустимые размеры"?
Ответ #2 - 10. Апреля 2009 :: 14:45
Печать  
Смех  Очень довольный Смех

Заранее спасиба.
Как я понимаю, можно пойти другим путём: наложить условие ненулёвости всех оборотов. Но интересно с методом дополнения.
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Почему: "Получаемая строка превысит допустимые размеры"?
Ответ #3 - 10. Апреля 2009 :: 16:45
Печать  
Исправлено в AccountsRecordset v3.04.

Upd: Ptitz писал(а) 10. Апреля 2009 :: 14:45:
Как я понимаю, можно пойти другим путём: наложить условие ненулёвости всех оборотов.

Это было бы ошибкой.
« Последняя редакция: 11. Апреля 2009 :: 05:54 - berezdetsky »  

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


I Love YaBB 2!

Сообщений: 125
Зарегистрирован: 05. Октября 2006
Re: Почему: "Получаемая строка превысит допустимые размеры"?
Ответ #4 - 12. Апреля 2009 :: 22:58
Печать  
Такую ошибку дает компилятор 1С-ки, когда строка слишком длинная.
Проверь все открывающие и закрывающие кавычки.
  
Наверх
 
IP записан
 
Ptitz
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 25
Зарегистрирован: 21. Июля 2008
Re: Почему: "Получаемая строка превысит допустимые размеры"?
Ответ #5 - 13. Апреля 2009 :: 07:23
Печать  
berezdetsky писал(а) 10. Апреля 2009 :: 16:45:
Исправлено в AccountsRecordset v3.04.

Заработала! Улыбка

berezdetsky писал(а) 10. Апреля 2009 :: 16:45:
Это было бы ошибкой.


Почему? Нам надо получить перечень документов движения счета товарных остатков с информацией о том, сколько товара было на начало каждого движения (документа). Соответственно, нам нужны записи с ненулевыми оборотами.
Вот мне, например, нужно получить перечень расходов с начальными остатками. А в результирующую таблицу попадают и строки с документами прихода. Т.е. условие на ненулёвость интересующих меня оборотов прийдётся таки вставлять. Так же ж?
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Почему: "Получаемая строка превысит допустимые размеры"?
Ответ #6 - 13. Апреля 2009 :: 07:32
Печать  
Ptitz писал(а) 13. Апреля 2009 :: 07:23:
Соответственно, нам нужны записи с ненулевыми оборотами.

Это не соответствует условию в запросе:
Код
Выбрать все
((КоличествоНачальныйОстаток <>0)OR(КоличествоОборотДт <>0)) 


Если не было оборотов, но были остатки, с методом дополнения "Движения" ты эти остатки увидишь, а если "наложить условие ненулёвости всех оборотов" - то нет. Т.е. результаты этих подходов будут разные.
  

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


I Love YaBB 2!

Сообщений: 25
Зарегистрирован: 21. Июля 2008
Re: Почему: "Получаемая строка превысит допустимые размеры"?
Ответ #7 - 15. Апреля 2009 :: 09:45
Печать  
berezdetsky писал(а) 13. Апреля 2009 :: 07:32:
Если не было оборотов, но были остатки, с методом дополнения "Движения" ты эти остатки увидишь, а если "наложить условие ненулёвости всех оборотов" - то нет. Т.е. результаты этих подходов будут разные.

точно, выпало из внимания.
Я к своей проблеме подхожу то справа, то слева. Мож вообще велосипед изобретаю.

Ещё вопрос.
Если проводить аналогии с 1С: я могу наложить условие на переменную запроса, но по ней не группировать и в итоговой таблице эта переменная не будет полем. Как аналогичную вещь сделать в AccountsRecordset?
Как пример: мне нужно получить остатки в развороте по ТМЦ на каждый день по определённому набору складов. Но разворачивать по складам мне категорически не надо.
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Почему: "Получаемая строка превысит допустимые размеры"?
Ответ #8 - 15. Апреля 2009 :: 11:16
Печать  
Это можно сделать, если использовать позиционное определение субконто. Для этого нужно, чтобы у всех счетов из #Acc нужные виды субконто находились в одних и тех же позициях. К примеру, если МестаХранения - это первое субконто, а ТМЦ - второе, твой запрос мог бы выглядеть как
Код
Выбрать все
SELECT БИОстаткиОбороты.Счет [Счет $Счет.Основной]
	, БИОстаткиОбороты.Субконто2 [ТМЦ $Субконто]
	, БИОстаткиОбороты.КоличествоНачальныйОстаток AS НачКво
	, БИОстаткиОбороты.КоличествоОборотДт AS ПриходКво
	, Right(БИОстаткиОбороты.ПозицияДокумента, 9) [Документ $Документ]
	, БИОстаткиОбороты.ВидДокумента Документ_вид
	, БИОстаткиОбороты.Субконто2_вид ТМЦ_вид
FROM $БИОстаткиОбороты.Основной(:Дата1, :Дата2 ~,
		Документ,
		Движения,,,
		Субконто2,
		(Счет IN (SELECT Val FROM #Acc))
		AND (Субконто1 IN (SELECT Val FROM #TM))
	) AS БИОстаткиОбороты
WHERE ((КоличествоНачальныйОстаток <> 0) OR (КоличествоОборотДт <> 0)) 


(если в #Acc есть группы счетов, верни это условие в секцию УсловиеСчета).

В крайнем случае, всегда есть GROUP BY + SUM().
  

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


I Love YaBB 2!

Сообщений: 25
Зарегистрирован: 21. Июля 2008
Re: Почему: "Получаемая строка превысит допустимые размеры"?
Ответ #9 - 17. Апреля 2009 :: 15:58
Печать  
berezdetsky, я сделала запрос по мотивам предыдущего поста. Наложила условие на счет, но как колонку не объявила. Результирующая таблица выглядела просто как с оторванной колонкой "Счет". Т.е. не сгуппированна по счетам. В общем, я просто сделала "Свернуть", благо, много времени свёртка не занимает и успокоилась.
Спасибо за ответы, мой отчёт заиграл всеми красками, ттт!
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Почему: "Получаемая строка превысит допустимые размеры"?
Ответ #10 - 17. Апреля 2009 :: 18:29
Печать  
Управлять детализацией итогов можно только с помощью секций <Субконто> и <Период>. Группировка/агрегация по остальным полям выполняется всегда, независимо от того, указаны ли они в списке выбора.

Я рад, что у тебя всё получилось.  Улыбка
« Последняя редакция: 17. Апреля 2009 :: 19:59 - berezdetsky »  

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


I Love YaBB 2!

Сообщений: 25
Зарегистрирован: 21. Июля 2008
Re: Почему: "Получаемая строка превысит допустимые размеры"?
Ответ #11 - 22. Апреля 2009 :: 17:36
Печать  
Идём дальше Улыбка
Возжно ли объединить, например, БИОбороты и БИОстатки через LEFT JOIN?
Пытаюсь сделать что-то типа
Код
Выбрать все
|	SELECT БИОборотыОсновной.Счет [Счет $Счет.Основной]
|		, БИОборотыОсновной.Субконто1 [ТМЦ $Субконто]
|		, БИОборотыОсновной.Субконто2 [Контрагент $Субконто]
|		, БИОборотыОсновной.КоличествоОборотДт AS Кво90
|		, БИОборотыОсновной.СуммаОборотДт AS Сумма90
|		, БИОборотыОсновной.Субконто1_вид ТМЦ_вид
|		, БИОборотыОсновной.Субконто2_вид Контрагент_вид
|		, Right(БИОборотыОсновной.ПозицияДокумента, 9) [Док $Документ]
|		, БИОборотыОсновной.ВидДокумента Док_вид
|	FROM $БИОбороты.Основной(:Дата1, :Дата2 ~,
|			Документ,,
|			(Счет IN (SELECT Val FROM #Acc)),
|			(ТМЦ,Контрагенты),,,
|		) AS БИОборотыОсновной
|	LEFT JOIN
|	SELECT БИОстаткиОсновной.Счет [СчетО $Счет.Основной]
|		, БИОстаткиОсновной.Субконто1 [ТМЦО $Субконто]
|		, БИОстаткиОсновной.Субконто1_вид ТМЦО_вид
|		, БИОстаткиОсновной.СуммаОстаток AS СуммаОст
|	FROM $БИОстатки.Основной(:Дата1,,(Счет IN (SELECT Val FROM #AccO)),
|			ТМЦ,
|		) AS БИОстаткиОсновной ON (БИОборотыОсновной.Субконто1 = БИОстаткиОсновной.Субконто1)";
 


Ругается Incorrect syntax near the keyword 'SELECT'
  
Наверх
 
IP записан
 
alexdd
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 347
Зарегистрирован: 25. Июня 2007
Re: Почему: "Получаемая строка превысит допустимые размеры"?
Ответ #12 - 22. Апреля 2009 :: 18:58
Печать  
Код
Выбрать все
|	LEFT JOIN (
|	SELECT БИОстаткиОсновной.Счет [СчетО]
|		, БИОстаткиОсновной.Субконто1 [ТМЦО]
|		, БИОстаткиОсновной.Субконто1_вид ТМЦО_вид
|		, БИОстаткиОсновной.СуммаОстаток AS СуммаОст
|	FROM $БИОстатки.Основной(:Дата1,,(Счет IN (SELECT Val FROM #AccO)),
|			ТМЦ,
|		) AS БИОстаткиОсновной) БИОстаткиОсновной ON (БИОборотыОсновной.Субконто1 = БИОстаткиОсновной.ТМЦО) 


но что-то странное вы в этом запросе нагородили.. Класс
  
Наверх
 
IP записан
 
Ptitz
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 25
Зарегистрирован: 21. Июля 2008
Re: Почему: "Получаемая строка превысит допустимые размеры"?
Ответ #13 - 22. Апреля 2009 :: 19:30
Печать  
alexdd писал(а) 22. Апреля 2009 :: 18:58:
но что-то странное вы в этом запросе нагородили.. Класс

Второй запрос отдельно в виде:
Код
Выбрать все
|	SELECT БИОстаткиОсновной.Счет [СчетО $Счет.Основной]
|		, БИОстаткиОсновной.Субконто1 [ТМЦО $Субконто]
|		, БИОстаткиОсновной.Субконто1_вид ТМЦО_вид
|		, БИОстаткиОсновной.СуммаОстаток AS СуммаОст
|	FROM $БИОстатки.Основной(:Дата1,,(Счет IN (SELECT Val FROM #AccO)),
|			ТМЦ,
|		) AS БИОстаткиОсновной";
 


Работает нормально. И первый отдельно даёт что надо, а вот связать не получается. Если это реально, то в чем я ошибаюсь? (Потом мне ещё справочник надо будет привязать)
  
Наверх
 
IP записан
 
alexdd
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 347
Зарегистрирован: 25. Июня 2007
Re: Почему: "Получаемая строка превысит допустимые размеры"?
Ответ #14 - 22. Апреля 2009 :: 20:01
Печать  
Ptitz писал(а) 22. Апреля 2009 :: 19:30:
Если это реально, то в чем я ошибаюсь? (Потом мне ещё справочник надо будет привязать)

так я же написал выше: оберните, то что джойните в подзапрос(скобки поставьте left join (select ..from..) as vt on ... )
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать