Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) 1cpp 2.5.0.1 Не работает УложитьСписокОбъектов() (число прочтений - 5605 )
wolfsoft
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 13
Зарегистрирован: 26. Августа 2007
1cpp 2.5.0.1 Не работает УложитьСписокОбъектов()
28. Августа 2007 :: 19:57
Печать  
Обновил версию 1с++ до 2.5.0.1
Перестал нормально работать УложитьСписокОбъектов(),
при попытке вызвать его выдает ошибку

Internal error:
State 42000, native 156, message [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near the keyword 'table'.

Вернул старую версию 1.8.0.0, все работает.
Может у кого-нибудь есть мысли или знания по этой теме?
  
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1cpp 2.5.0.1 Не работает УложитьСписокОбъектов
Ответ #1 - 28. Августа 2007 :: 20:16
Печать  
Были изменения. Проверь синтаксис:

RS.УложитьСписокОбъектов(Объект, ИмяТаблицы, Объект.Вид());

и "SELECT val FROM " + ИмяТаблицы
  
Наверх
 
IP записан
 
wolfsoft
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 13
Зарегистрирован: 26. Августа 2007
Re: 1cpp 2.5.0.1 Не работает УложитьСписокОбъектов
Ответ #2 - 29. Августа 2007 :: 06:26
Печать  
Синтаксис следующий:

RS.УложитьСписокОбъектов(прНоменклатура, "#СписокЭлементовНоменклатуры", "Номенклатура");

где прНоменклатура - поле ввода на форме типа "Справочник.Номенклатура"

Сообщение об ошибке выводится непосредственно после вызова этого метода, запрос еще не сформирован. Может в принципе изменился порядок работы с параметрами?
Текстовые параметры устанавливаются нормально.
  
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1cpp 2.5.0.1 Не работает УложитьСписокОбъектов
Ответ #3 - 29. Августа 2007 :: 12:50
Печать  
Полный код покажи.
  
Наверх
 
IP записан
 
wolfsoft
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 13
Зарегистрирован: 26. Августа 2007
Re: 1cpp 2.5.0.1 Не работает УложитьСписокОбъектов
Ответ #4 - 29. Августа 2007 :: 13:07
Печать  
Пожалуйста:
Код
Выбрать все
	RS = СоздатьОбъект("ODBCRecordset");
	RS.УстБД1С();

	ТекстЗапроса = "
		|SELECT
		|	Подзапрос.Фирма as [Фирма $Справочник.Фирмы],
		|	Подзапрос.Склад as [Склад $Справочник.Склады],
		|	Подзапрос.Номенклатура as [Номенклатура $Справочник.Номенклатура],
		|	Подзапрос.ИтогПоФирмам as ИтогПоФирмам,
		|	Подзапрос.ИтогПоСкладам as ИтогПоСкладам,
		|	Подзапрос.Количество as Количество,
		|	Подзапрос.Резерв as Резерв,
		|	СпрНом.Descr as Наименование

		|FROM (

		|SELECT
		|	Рег.Фирма as Фирма,
		|	Рег.Склад as Склад,
		|	СпрТ.ParentExt as Номенклатура,
		|	GROUPING(Рег.Фирма) as ИтогПоФирмам,
		|	GROUPING(Рег.Склад) as ИтогПоСкладам,
		|	SUM(Рег.КоличествоОстаток) as Количество,
		|	SUM(РегРезервы.КоличествоОстаток) as Резерв

		|FROM
		|   $Справочник.Товары as СпрТ

		|  INNER JOIN


		// остатки
		|	($РегистрОстатки.ОстаткиТоваров(:ВыбДата~,
		|";

	Если флОтборПоНоменклатуре = 1 Тогда
		ТекстЗапроса = ТекстЗапроса + "
		|	inner join $Справочник.Товары as СпрТТ on СпрТТ.ID = Товар,
		|";
	Иначе
		ТекстЗапроса = ТекстЗапроса + "
		|	,
		|";
	КонецЕсли;

		ТекстЗапроса = ТекстЗапроса + "
		|					 Фирма = :ВыбФирма
		|				   and
		|					 Склад = :ВыбСклад
		|";

	Если флОтборПоНоменклатуре = 1 Тогда
		ТекстЗапроса = ТекстЗапроса + "
		|				   and
		|					 СпрТТ.ParentExt IN (SELECT Val FROM #СписокЭлементовНоменклатуры)
		|";
	КонецЕсли;

		ТекстЗапроса = ТекстЗапроса + "
		|,

		|					(Фирма,Склад,Товар), (Количество)) as Рег
		// конец остатки


			// резервы
			|	FULL JOIN

			|   $РегистрОстатки.Резервы(:ВыбДата~,
			|";

		Если флОтборПоНоменклатуре = 1 Тогда
			ТекстЗапроса = ТекстЗапроса + "
			|	inner join $Справочник.Товары as СпрТТ on СпрТТ.ID = Товар,
			|";
		Иначе
			ТекстЗапроса = ТекстЗапроса + "
			|	,
			|";
		КонецЕсли;

			ТекстЗапроса = ТекстЗапроса + "
			|					 Фирма = :ВыбФирма
			|				   and
			|					 Склад = :ВыбСклад
			|";

		Если флОтборПоНоменклатуре = 1 Тогда
			ТекстЗапроса = ТекстЗапроса + "
			|				   and
			|					 СпрТТ.ParentExt IN (SELECT Val FROM #СписокЭлементовНоменклатуры)
			|";
		КонецЕсли;

			ТекстЗапроса = ТекстЗапроса + "
			|,

			|					(Фирма,Склад,Товар), (Количество)) as РегРезервы
			|   ON РегРезервы.Фирма = Рег.Фирма and РегРезервы.Склад = Рег.Склад and РегРезервы.Товар = Рег.Товар)

			// конец резервы


		// остатки
		|   ON Рег.Товар = СпрТ.ID
		// конец остатки

		|GROUP BY
		|	Рег.Фирма, Рег.Склад, СпрТ.ParentExt
		|   WITH ROLLUP

		//|ORDER BY Рег.Фирма, Рег.Склад, СпрТ.ParentExt, Рег.ИтогПоФирмам DESC, Рег.ИтогПоСкладам DESC

		|) as Подзапрос

		// для сортировки по наименованию номенклатуры
		|LEFT JOIN $Справочник.Номенклатура as СпрНом on СпрНом.ID = Подзапрос.Номенклатура
		|ORDER BY Подзапрос.Фирма, Подзапрос.Склад, Подзапрос.Наименование, Подзапрос.ИтогПоФирмам DESC, Подзапрос.ИтогПоСкладам DESC

		|";

	RS.УстановитьТекстовыйПараметр("ВыбДата", прДата);
	RS.УстановитьТекстовыйПараметр("ВыбФирма", прФирма);
	RS.УстановитьТекстовыйПараметр("ВыбСклад", прОтдел);

	Если флОтборПоНоменклатуре = 1 Тогда
		RS.УложитьСписокОбъектов(прНоменклатура, "#СписокЭлементовНоменклатуры", "Номенклатура");
	КонецЕсли;

	RS.Открыть(ТекстЗапроса);

	ТЗ = СоздатьОбъект("ТаблицаЗначений");
	RS.ПолучитьРезультатыВ_ТЗ(ТЗ, 1);
	//RS.ВыполнитьИнструкцию(ТекстЗапроса, ТЗ, 1);
	RS.Закрыть();
 



Только ошибка выводится на строке
Код
Выбрать все
RS.УложитьСписокОбъектов(прНоменклатура, "#СписокЭлементовНоменклатуры", "Номенклатура");
 


т.е. ДО вызова запроса.
При этом в старой версии 1с++ все работает нормально, достаточно заменить длл-ку Печаль
  
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1cpp 2.5.0.1 Не работает УложитьСписокОбъектов
Ответ #5 - 29. Августа 2007 :: 17:12
Печать  
На кой тебе
Код
Выбрать все
RS.Открыть(ТекстЗапроса);
RS.ПолучитьРезультатыВ_ТЗ(ТЗ, 1);
RS.Закрыть();
 


Если можно просто ТЗ = RS.ВыполнитьИнструкцию(ТекстЗапроса, , 1);

Кроме того, RS.УстБД1С() можно не писать.

И главное, не понятно, как работают установленные текстовые параметры, в ПолучитьРезультатыВ_ТЗ, если ты уже раз выполнил запрос через Открыть.

по Уложить - вроде все ок, должно работать.
  
Наверх
 
IP записан
 
wolfsoft
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 13
Зарегистрирован: 26. Августа 2007
Re: 1cpp 2.5.0.1 Не работает УложитьСписокОбъектов
Ответ #6 - 29. Августа 2007 :: 18:24
Печать  
Цитата:
Если можно просто ТЗ = RS.ВыполнитьИнструкцию(ТекстЗапроса, , 1);

В старой версии данного метода не было.
RS.УстБД1С() - действительно можно не писать.

Код по формированию и выполнению запроса  можно вообще закомментарить.
Останется только
Код
Выбрать все
	RS = СоздатьОбъект("ODBCRecordset");
	RS.УстБД1С();
	RS.УстановитьТекстовыйПараметр("ВыбДата", прДата);
	RS.УстановитьТекстовыйПараметр("ВыбФирма", прФирма);
	RS.УстановитьТекстовыйПараметр("ВыбСклад", прОтдел);

	Если флОтборПоНоменклатуре = 1 Тогда
		RS.УложитьСписокОбъектов(прНоменклатура, "#СписокЭлементовНоменклатуры", "Номенклатура");
	КонецЕсли;
 


И будет ошибка.

В старой версии данный код работает без проблем, вот что обидно...
  
Наверх
 
IP записан
 
wolfsoft
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 13
Зарегистрирован: 26. Августа 2007
Re: 1cpp 2.5.0.1 Не работает УложитьСписокОбъектов
Ответ #7 - 29. Августа 2007 :: 18:27
Печать  
У кого-нибудь стоит 1cpp 2.5.0.1?
Если не трудно проверьте, работает у вас метод УложитьСписокОбъектов()?
Если да, то киньте, пожалуйста, свой работающий код.
  
Наверх
 
IP записан
 
wolfsoft
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 13
Зарегистрирован: 26. Августа 2007
Re: 1cpp 2.5.0.1 Не работает УложитьСписокОбъектов
Ответ #8 - 29. Августа 2007 :: 18:32
Печать  
У меня MS SQL 7.0
Может здесь "собака порылась"?
  
Наверх
 
IP записан
 
wolfsoft
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 13
Зарегистрирован: 26. Августа 2007
Re: 1cpp 2.5.0.1 Не работает УложитьСписокОбъектов
Ответ #9 - 30. Августа 2007 :: 05:02
Печать  
Есть такое чувство, что глюк в дистрибутиве 2.5.0.1...
  
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1cpp 2.5.0.1 Не работает УложитьСписокОбъектов
Ответ #10 - 30. Августа 2007 :: 05:25
Печать  
2.5.0.1 работает отлично. УложитьСписокОбъектов использует почти каждый, нареканий ни у кого нет.

Наверное стоит подождать ДмитрО, чтобы он сказал веское слово про 7.0
  
Наверх
 
IP записан
 
wolfsoft
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 13
Зарегистрирован: 26. Августа 2007
Re: 1cpp 2.5.0.1 Не работает УложитьСписокОбъектов
Ответ #11 - 30. Августа 2007 :: 05:36
Печать  
Спасибо Улыбка Теперь знаю, что у других работает. Будем ждать ДмитрО...
  
Наверх
 
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: 1cpp 2.5.0.1 Не работает УложитьСписокОбъектов
Ответ #12 - 30. Августа 2007 :: 11:51
Печать  
Скорее всего проблема в следующем.
При указании в методе УложитьСписокОбъектов третьего параметра (имя справочника), список переданных идентификаторов разворачивается до элементов (идентификаторы групп заменяются на идентификаторы входящих в них элементы). В последних версиях в реализации этого функционала участвует локальная переменная типа таблица (Пример табличной переменной: declare @t table(i int, s varchar(20)) ).
Вероятно 7-й сервер не поддерживал такие переменные и появились они только в 8-м. Документации по 7-му у меня щас нет, точно сказать не могу.
В более ранних версиях 1cpp в реализации этого функционала табличная переменная не использовалась.
Использование табличной переменной позволило ощутимо увеличить скорость выполнения метода.
Эти изменения были внесены в компоненту начиная с версии 2.0.2.1.
  
Наверх
ICQ  
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1cpp 2.5.0.1 Не работает УложитьСписокОбъектов
Ответ #13 - 30. Августа 2007 :: 12:44
Печать  
Цитата:
SQL Server 2000 introduces three new data types. bigint is an 8-byte integer type. sql_variant is a type that allows the storage of data values of different data types. table is a type that allows applications to store results temporarily for later use. It is supported for variables, and as the return type for user-defined functions.

Оно?
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: 1cpp 2.5.0.1 Не работает УложитьСписокОбъектов
Ответ #14 - 30. Августа 2007 :: 13:42
Печать  
О, оно самое.
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать