Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема мой первый прямой запрос - метапарсер имен не работает (число прочтений - 1965 )
Blilli
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 4
Зарегистрирован: 04. Января 2009
мой первый прямой запрос - метапарсер имен не работает
04. Января 2009 :: 13:05
Печать  
Начинаю осваивать прямые запросы, споткнулся почти в самом начале.
Выполняю такой запрос:
Код
Выбрать все
Текст = "
	|SELECT
	|  	Спр.Code as Код,
	|  	Спр.Descr as Наименование
 	|FROM
	|	SC84 as Спр"; 



все ОК!

А вот когда такой запрос:

Код
Выбрать все
Текст = "
	|SELECT
	|  	Спр.Code as Код,
	|  	Спр.Descr as Наименование
 	|FROM
	|	$Справочник.Номенклатура as Спр"; 



Получается ошибка:

State 42000, native 170, message [Microsoft][ODBC SQL Server Driver][SQL Server]Line 6: Incorrect syntax near '$'.

Получается, что метапарсер имен, который сам должен переводить все идентификаторы объектов в их реальные имена, как написано в инструкции, этого не делает!

Как быть? Озадачен

Версия 1cpp-2.5.0.7
MSSQL 2000 sp4
1c 7.70.27
  
Наверх
 
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: мой первый прямой запрос - метапарсер имен не работает
Ответ #1 - 04. Января 2009 :: 15:00
Печать  
Видимо, выполняешь такой запрос совсем не так, как сказано в инструкции.
Показывай каким образом текст запроса выполняется.
  
Наверх
ICQ  
IP записан
 
Blilli
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 4
Зарегистрирован: 04. Января 2009
Re: мой первый прямой запрос - метапарсер имен не работает
Ответ #2 - 04. Января 2009 :: 15:14
Печать  
Вот весь код моей обработки:
Код
Выбрать все
Процедура Сформировать()

	DataBase = СоздатьОбъект("ODBCDatabase");
	DataBase.Attach1C();

	ODBCRecordset = СоздатьОбъект("ODBCRecordSet");
	ODBCRecordset.SetDatabase(DataBase);

	Текст = "
	|SELECT
	|  	Спр.Code as Код,
	|  	Спр.Descr as Наименование
	|FROM
	|	$Справочник.Номенклатура as Спр";

	ODBCRecordset.Отладка(0);
	Если ODBCRecordset.Открыть(Текст) = 0 Тогда
		Ошибка = ODBCRecordset.ПолучитьОписаниеОшибки();
		Если ПустоеЗначение(Ошибка) = 0 Тогда
			Сообщить(Ошибка);
		КонецЕсли;
	КонецЕсли;

	ТЗ2 = СоздатьОбъект("ТаблицаЗначений");

	ODBCRecordset.ПолучитьРезультатыВ_ТЗ(ТЗ2, 1);
	ODBCRecordset.Закрыть();

	ТЗ2.ВыбратьСтроку();

КонецПроцедуры 



Все так как на этом форуме в FAQ`е.
Не пойму в чем косяк. Боюсь как бы самому в ручную парсить все используемые мной объекты ни прошлось бы, т.е. составлять список соответствия представлений в 1с и в sql.
Вот в документации написано:
Цитата:
Вот и выполнился наш первый запрос. Это конечно хорошо, но справочников в конфигурации много, смотреть каждый раз в DDS ой как не хочется, да и читать такие запросы совсем не удобно. Если использовать ADO, а не 1С++, то так и придется делать. Но скажем спасибо разработчикам 1С++, что в ней есть метапарсер имен, который сам переведет все идентификаторы объектов в их реальные имена.

И очень жаль, что это не работает  Плачущий
  
Наверх
 
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: мой первый прямой запрос - метапарсер имен не работает
Ответ #3 - 04. Января 2009 :: 15:33
Печать  
Код
Выбрать все
Процедура Сформировать()
	rs = СоздатьОбъект("ODBCRecordSet");

	Текст = "
	|SELECT
	|  	Спр.Code as Код,
	|  	Спр.Descr as Наименование
	|FROM
	|	$Справочник.Номенклатура as Спр";

	rs.Отладка(0); // <<-- это совсем не обязательно

	Попытка
		ТЗ = rs.ВыполнитьИнструкцию(Текст);
	Исключение
		Сообщить("Ошибка: " + ОписаниеОшибки());
		Возврат;
	КонецПопытки;

	ТЗ.ВыбратьСтроку();
КонецПроцедуры 

  
Наверх
ICQ  
IP записан
 
Blilli
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 4
Зарегистрирован: 04. Января 2009
Re: мой первый прямой запрос - метапарсер имен не работает
Ответ #4 - 04. Января 2009 :: 19:45
Печать  
spock, а если мою процедуру заменить твоей, то выходит ошибка: Цитата:
Ошибка: Поле агрегатного объекта не обнаружено (ВыполнитьИнструкцию)
Озадачен
  
Наверх
 
IP записан
 
Blilli
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 4
Зарегистрирован: 04. Января 2009
Re: мой первый прямой запрос - метапарсер имен не работает
Ответ #5 - 09. Января 2009 :: 14:52
Печать  
Проблему решил. Оказалось что в каталоге базы валялась древняя 1cpp.dll аж 2004 года и в предприятие грузилась она, а не последняя версия, которую я подсунул в каталог BIN. В этой древней dll видимо еще не было функционала метапарсера. Прошу прощения за беспокойство  Смущённый
Спасибо spock'у за попытки помочь мне.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать