Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Как получить список полей из провайдера ТП (число прочтений - 3667 )
mvgfirst
Full Member
***
Отсутствует


В борьбе бобра с ослом
всегда побеждает бобро!

Сообщений: 152
Местоположение: Украина г. Кривой Рог
Зарегистрирован: 17. Августа 2007
Пол: Мужской
Как получить список полей из провайдера ТП
10. Декабря 2007 :: 13:58
Печать  
Создал табличное поле. Создал провайдер ODBCDataProvider.MSSQL. Установил запрос :
Цитата:
SELECT id as Id, Code as Код, Descr as Наименование From $Справочник.Номенклатура

Поле порядка установил: Код
Поле идентификации установил Id.
Обновил провайдер.
Спрашиваю количество полей у провайдера - возвращает 2? Почему?
При попытке получить поле с индексом 2 - ошибка "Неверный параметр".

Что-то делаю нетак?
Версия 1С++: Последний ночник.
  
Наверх
ICQ  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как получить список полей из провайдера ТП
Ответ #1 - 10. Декабря 2007 :: 15:05
Печать  
Цитата:
Спрашиваю количество полей у провайдера - возвращает 2? Почему?

а как ты у него спрашиваешь?
Цитата:
При попытке получить поле с индексом 2 - ошибка "Неверный параметр".

нумерация начинается с нулевого.
  
Наверх
 
IP записан
 
mvgfirst
Full Member
***
Отсутствует


В борьбе бобра с ослом
всегда побеждает бобро!

Сообщений: 152
Местоположение: Украина г. Кривой Рог
Зарегистрирован: 17. Августа 2007
Пол: Мужской
Re: Как получить список полей из провайдера ТП
Ответ #2 - 10. Декабря 2007 :: 15:53
Печать  
Как спрашиваю?
Провайдер.Поля.Количество().
Возвращает в моей ситуации число 2. По логике нумерации с 0 (хотя об этом нигде ничего в мануале нет а в 1С принято все с 1-цы нумеровать... тоже кстати непонятка) для получения третьего поля нужно указывать индекс поля равный 2-м. что я и делаю. Как резальтат получаю ошибку Неверный параметр.
  
Наверх
ICQ  
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как получить список полей из провайдера ТП
Ответ #3 - 10. Декабря 2007 :: 16:16
Печать  
mvgfirst писал(а) 10. Декабря 2007 :: 15:53:
а в 1С принято все с 1-цы нумеровать...

Но не в 1cpp же...

Пользуйся Информатором
  
Наверх
 
IP записан
 
mvgfirst
Full Member
***
Отсутствует


В борьбе бобра с ослом
всегда побеждает бобро!

Сообщений: 152
Местоположение: Украина г. Кривой Рог
Зарегистрирован: 17. Августа 2007
Пол: Мужской
Re: Как получить список полей из провайдера ТП
Ответ #4 - 10. Декабря 2007 :: 16:17
Печать  
Arta писал(а) 10. Декабря 2007 :: 16:16:
Но не в 1cpp же...

Пользуйся Информатором

Ну да ладно... на определение что нумерация с 0-ля я много времени не тратил... но проблему это не решает.
Третье поле так и не могу получить.

Это только у меня так? Кто нибудь может повторить это у себя?
  
Наверх
ICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как получить список полей из провайдера ТП
Ответ #5 - 10. Декабря 2007 :: 16:26
Печать  
А у тебя точно все поля включены в список колонок ТП?
ЗЫ насколько я помню, не все поля автоматом попадают в список ТП Улыбка, часть нужно руками добавлять Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
mvgfirst
Full Member
***
Отсутствует


В борьбе бобра с ослом
всегда побеждает бобро!

Сообщений: 152
Местоположение: Украина г. Кривой Рог
Зарегистрирован: 17. Августа 2007
Пол: Мужской
Re: Как получить список полей из провайдера ТП
Ответ #6 - 10. Декабря 2007 :: 16:30
Печать  
Если я руками прописываю поля в табличном поле... все работает замечательно.
Я хочу сделать обработку которой на вход буду подавать запрос и на основании его программно создавать колонки в ТП.
Для этого и использую конструкцию
Для ии = 0 По Провайдер.Поля.Количество() Цикл // на этом этапе возвращает значение 2
   ИмяПоля = Провайдер.Поля.Получить(ии); // вот здесь и возникает ошибка
   Колонка = ТабПоле.Колонки.Добавить(ИмяПоля);
   // Дальше идет код настройки колонки ТП.
КонецЦикла;
  
Наверх
ICQ  
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как получить список полей из провайдера ТП
Ответ #7 - 10. Декабря 2007 :: 16:31
Печать  
artbear писал(а) 10. Декабря 2007 :: 16:26:
А у тебя точно все поля включены в список колонок ТП?
ЗЫ насколько я помню, не все поля автоматом попадают в список ТП Улыбка, часть нужно руками добавлять Улыбка

Эээ... ты о чем? Все поля добавляются в ТП вручную...
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как получить список полей из провайдера ТП
Ответ #8 - 10. Декабря 2007 :: 16:33
Печать  
Извини, но всю жизнь было так:
если нумерация с нуля, то Количество-1 - это последний элемент, а элемента с номером Количество не существует Улыбка
Т.е. цикл нужно делать от 0 до Количество-1 Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
mvgfirst
Full Member
***
Отсутствует


В борьбе бобра с ослом
всегда побеждает бобро!

Сообщений: 152
Местоположение: Украина г. Кривой Рог
Зарегистрирован: 17. Августа 2007
Пол: Мужской
Re: Как получить список полей из провайдера ТП
Ответ #9 - 10. Декабря 2007 :: 16:36
Печать  
Да я все понимаю.
Как мне получить третье поле из запроса? Приведенного в шапке?
Я уже принудительно писал так:
Сообщить(Провайдер.Поля.Получить(0));
Сообщить(Провайдер.Поля.Получить(1));
Сообщить(Провайдер.Поля.Получить(2));
По итогу на третьем Сообщить - выпадала ошибка. Почему Провайдер.Поля.Количество() показывает результат 2 а не 3? Хотя полей в запросе 3??? Я вот этого не пойму.

Может и туманно объяснял вначале... ну уж извините.
  
Наверх
ICQ  
IP записан
 
mvgfirst
Full Member
***
Отсутствует


В борьбе бобра с ослом
всегда побеждает бобро!

Сообщений: 152
Местоположение: Украина г. Кривой Рог
Зарегистрирован: 17. Августа 2007
Пол: Мужской
Re: Как получить список полей из провайдера ТП
Ответ #10 - 10. Декабря 2007 :: 21:31
Печать  
Попробовал добавить в запрос еще два поля из справочника. По итогу в коллекции полей не прибаливлось ничего. Т.е. там автоматически появились только поля которые я прописал как УстКлючПорядка и УстИдПоле.

Отсюда делаю вывод: Провайдер ТП не поддерживает автоматический разбор полей в запросе.

И сразу же вопрос! Почему? И походу второй - самому что ли парсить запрос на предмет наличия полей?
  
Наверх
ICQ  
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как получить список полей из провайдера ТП
Ответ #11 - 10. Декабря 2007 :: 21:45
Печать  
Пример в студию!
  
Наверх
 
IP записан
 
mvgfirst
Full Member
***
Отсутствует


В борьбе бобра с ослом
всегда побеждает бобро!

Сообщений: 152
Местоположение: Украина г. Кривой Рог
Зарегистрирован: 17. Августа 2007
Пол: Мужской
Re: Как получить список полей из провайдера ТП
Ответ #12 - 10. Декабря 2007 :: 22:02
Печать  
Код
Выбрать все
Процедура ПослеОткрытия()
	оФорма = СоздатьОбъект("Форма");
	оФорма.УстановитьФорму(Форма);

	ТабПоле = оФорма.СоздатьЭлементУправления("ТабличноеПоле", "тпДанные");
//	НоваяКолонка = табПоле.Колонки.Добавить("id");
//	НоваяКолонка.Заголовок = "id";
//	НоваяКолонка.Данные = "Id";
//
//	НоваяКолонка = табПоле.Колонки.Добавить("Код");
//	НоваяКолонка.Заголовок = "Код";
//	НоваяКолонка.Данные = "Код";
//
//	НоваяКолонка = табПоле.Колонки.Добавить("Наименование");
//	НоваяКолонка.Заголовок = "Наименование";
//	НоваяКолонка.Данные = "Наименование";

	Источник = СоздатьОбъект("ODBCDataProvider.MSSQL");
	Источник.УстТекстЗапроса("Select id as Id, code as Код, descr as Наименование,  $Спр.ВидТовара as [Вид $Перечисление.ВидыТоваров] from $Справочник.Номенклатура as Спр");
	Источник.УстКлючПорядка("Код");
	Источник.УстИдПоле("Id");
	//Источник.Отладка(1);
	БД = СоздатьОбъект("ODBCDataBase");
	Источник.БазаДанных = БД;
	Источник.Обновить();
	Источник.Поля.Добавить();
	Для ии = 0 по Источник.Поля.Количество()-1 Цикл
		_имяПоля = Источник.Поля.Получить(ии).Имя;
		Колонка = ТабПоле.Колонки.Добавить(_имяПоля);
		Колонка.Заголовок = _имяПоля;
		Колонка.Данные = _имяПоля;
	КонецЦикла;

	ТабПоле.ПоставщикДанных = Источник;
	ТабПоле.ОбновитьСтроки();

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

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



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как получить список полей из провайдера ТП
Ответ #13 - 10. Декабря 2007 :: 23:01
Печать  
Обрати внимание на описание поставщика данных

Цитата:
Этот поставщик данных поддерживает функционал исключения полей из текста запроса, если данные не нужны для отображения (по причине удаления или невидимости колонки табличного поля).


Сперва установи колонки ТП, а потом обращайся к полям поставщика данных
  
Наверх
 
IP записан
 
mvgfirst
Full Member
***
Отсутствует


В борьбе бобра с ослом
всегда побеждает бобро!

Сообщений: 152
Местоположение: Украина г. Кривой Рог
Зарегистрирован: 17. Августа 2007
Пол: Мужской
Re: Как получить список полей из провайдера ТП
Ответ #14 - 11. Декабря 2007 :: 07:43
Печать  
Парадоксальная ситуация получается...
Мне нужно получить список полей поставщика данных что бы добавить колонки в ТП. Но для того что бы список полей появился у поставщика данных нужно самому добавить колонки в ТП.
Петля мёбиуса какая-то Печаль.
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать