Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Очень популярная тема (более 25 ответов) На DBF работает УложитьСписокОбъектов ? (число прочтений - 7521 )
dimm73
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 414
Зарегистрирован: 03. Июля 2006
Пол: Мужской
На DBF работает УложитьСписокОбъектов ?
29. Августа 2007 :: 09:11
Печать  
На скуле давно и успешно использую эту процедуру.
Сегодня попробовал на dbf базе простейший пример, вываливается ошибка:
State 42S02, native 173, message [Microsoft][ODBC Visual FoxPro Driver]File '#_ародитель.dbf' does not exist.
Код
Выбрать все
	|SELECT
	|		$РегОстатков.Товар as [Товар $Справочник.Номенклатура],
	|		$РегОстатков.ОстатокТовара as ОстатокТовара
	|		FROM
	|			$РегистрИтоги.ОстаткиТоваров as РегОстатков
	|   WHERE
	|   $РегОстатков.Товар IN (SELECT Val FROM #_аРодитель)
_ODBCRecordSet.УложитьСписокОбъектов(аРодитель,"#_аРодитель","Номенклатура");
 


где аРодитель - выбранная группа номенклатуры
пробовал на релизах 1.8.1.6 и 2.0.3.3 - одинаково не работает.
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: На DBF работает УложитьСписокОбъектов ?
Ответ #1 - 29. Августа 2007 :: 10:13
Печать  
Попробуй так:
Код
Выбрать все
ИмяВремТаб = "";
_ODBCRecordSet.УложитьСписокОбъектов(аРодитель, ИмяВремТаб,"Номенклатура");
ТекстЗапроса = "SELECT
	|		$РегОстатков.Товар as [Товар $Справочник.Номенклатура],
	|		$РегОстатков.ОстатокТовара as ОстатокТовара
	|		FROM
	|			$РегистрИтоги.ОстаткиТоваров as РегОстатков
	|   WHERE
	|   $РегОстатков.Товар IN (SELECT Val FROM "+ИмяВремТаб+")";
 

  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: На DBF работает УложитьСписокОбъектов ?
Ответ #2 - 29. Августа 2007 :: 10:26
Печать  
Типа функция:
Код
Выбрать все
Функция УсловиеВхождения(ИмяТабл, ПолеТабл, ТипМФ, ИмяВремТабл)
	Перем Результат;

	Результат = "" + ИмяТабл + "." + ПолеТабл;

	Если ТипМФ = 1 Тогда
		Результат = Результат + " IN ";
	ИначеЕсли ТипМФ = 2 Тогда
		Результат = Результат + " NOT IN ";
	КонецЕсли;

	Результат = Результат + "(SELECT VAL FROM " + ИмяВремТабл + ")";

	Возврат Результат;
КонецФункции // УсловиеВхождения()
 



Устанавливаем параметр:
Код
Выбрать все
Если ВыбТоварД.Выбран() = 1 Тогда
		    Запрос.УложитьСписокОбъектов(ВыбТоварД, СписокТМЦД, "Номенклатура");
	Запрос.УстановитьТекстовыйПараметр("СписокТМЦД", СписокТМЦД);
КонецЕсли;
 



В запросе:
Код
Выбрать все
ТекстЗапросаВлож = ТекстЗапросаВлож + " OR (" + УсловиеВхождения("Номенклатура", "ID", 1, ":СписокТМЦД") + ") )";
 




ЗЫ. Скоммунизжено у Кирилла, опробовано, траблов нет  Подмигивание
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
dimm73
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 414
Зарегистрирован: 03. Июля 2006
Пол: Мужской
Re: На DBF работает УложитьСписокОбъектов ?
Ответ #3 - 29. Августа 2007 :: 10:28
Печать  
(JohnyDeath)
попробовал, выдает ошибку
State 42S02, native 173, message [Microsoft][ODBC Visual FoxPro Driver]File '' does not exist.
  
Наверх
 
IP записан
 
dimm73
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 414
Зарегистрирован: 03. Июля 2006
Пол: Мужской
Re: На DBF работает УложитьСписокОбъектов ?
Ответ #4 - 29. Августа 2007 :: 10:42
Печать  
(Вадимко)
попробовал, да видимо что-то сделал не так
вываливается с ошибкой
Command contains unrecognized phrase/keyword.

привожу код:
Код
Выбрать все
Функция УсловиеВхождения(ИмяТабл, ПолеТабл, ТипМФ, ИмяВремТабл)
	Перем Результат;

	Результат = "" + ИмяТабл + "." + ПолеТабл;

	Если ТипМФ = 1 Тогда
		Результат = Результат + " IN ";
	ИначеЕсли ТипМФ = 2 Тогда
		Результат = Результат + " NOT IN ";
	КонецЕсли;

	Результат = Результат + "(SELECT VAL FROM " + ИмяВремТабл + ")";

	Возврат Результат;
КонецФункции // УсловиеВхождения()

//-------------------------------
Процедура Печать()
	ВыбТовар=ТекущийЭлемент();
	Если ВыбТовар.Уровень()=1 Тогда
		Заг="По всем товарам.";
	Иначе
		аРодитель=ВыбТовар.Родитель;
		Заг="По товарам группы "+ВыбТовар.Родитель.Наименование;
	КонецЕсли;


	_ODBCDatabase = СоздатьОбъект("ODBCDatabase");
	_ODBCRecordSet = СоздатьОбъект("ODBCRecordSet");
	СтрокаПодключения = "DRIVER=Microsoft Visual FoxPro Driver;Deleted=Yes;Null=Yes;Collate=RUSSIAN;"+
	"Exclusive=No;SourceType=DBF;SourceDB="+КаталогИБ();
	Результат = _ODBCDatabase.Соединение(СтрокаПодключения);
	Если Результат = 0 Тогда
		Модуль = СоздатьОбъект("ВыполняемыйМодуль");
		Модуль.ВыброситьИскл(, "Не удалось выполнить соединение"+РазделительСтрок+СтрокаПодключения);
	КонецЕсли;
	_ODBCRecordSet.УстБД(_ODBCDatabase);
	Ошибка=_ODBCRecordSet.ПолучитьОписаниеОшибки();
	Если ПустоеЗначение(Ошибка)=0 Тогда
		Модуль = СоздатьОбъект("ВыполняемыйМодуль");
		Модуль.ВыброситьИскл(, "Ошибка при загрузке журнала"+РазделительСтрок+Ошибка);
	КонецЕсли;


	СписокТМЦД="";
	_ODBCRecordSet.УложитьСписокОбъектов(аРодитель, СписокТМЦД, "Номенклатура");
	_ODBCRecordSet.УстановитьТекстовыйПараметр("СписокТМЦД", СписокТМЦД);

	ТекстЗапроса = "SELECT
	|		$РегОстатков.Товар as [Товар $Справочник.Номенклатура],
	|		$РегОстатков.ОстатокТовара as ОстатокТовара
	|		FROM
	|			$РегистрИтоги.ОстаткиТоваров as РегОстатков
	|   WHERE
	|   $РегОстатков.Товар
  | ";
	ТекстЗапроса = ТекстЗапроса + " OR (" + УсловиеВхождения("Номенклатура", "ID", 1, ":СписокТМЦД") + ") )";

	лРезТаблица= _ODBCRecordSet.ВыполнитьИнструкцию(ТекстЗапроса);
	лРезТаблица.ВыбратьСтроку();

 

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


I Love YaBB 2!

Сообщений: 414
Зарегистрирован: 03. Июля 2006
Пол: Мужской
Re: На DBF работает УложитьСписокОбъектов ?
Ответ #5 - 29. Августа 2007 :: 11:20
Печать  
(Вадимко)

в конечном итоге если все подстановки собрать в одну строку получаем почти тоде, что советовал JohnyDeath
только с добавление метода установить текстовый параметр
но в результате ошибка таже, что и в начале
File '' does not exist.
Код
Выбрать все
	СписокТМЦД="";
	_ODBCRecordSet.УложитьСписокОбъектов(аРодитель, СписокТМЦД, "Номенклатура");
	_ODBCRecordSet.УстановитьТекстовыйПараметр("СписокТМЦД", СписокТМЦД);

	ТекстЗапроса = "SELECT
	|		$РегОстатков.Товар as [Товар $Справочник.Номенклатура],
	|		$РегОстатков.ОстатокТовара as ОстатокТовара
	|		FROM
	|			$РегистрИтоги.ОстаткиТоваров as РегОстатков
	|   WHERE
  |   $РегОстатков.Товар IN (SELECT Val FROM "+СписокТМЦД+")
  | ";

 

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


I Love YaBB 2!

Сообщений: 414
Зарегистрирован: 03. Июля 2006
Пол: Мужской
Re: На DBF работает УложитьСписокОбъектов ?
Ответ #6 - 29. Августа 2007 :: 11:47
Печать  
Слушайте, может в строке подключения что-то не так?
     СтрокаПодключения = "DRIVER=Microsoft Visual FoxPro Driver;Deleted=Yes;Null=Yes;Collate=RUSSIAN;"+
     "Exclusive=No;SourceType=DBF;SourceDB="+КаталогИБ();
хотя другие запросы прокатывали
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: На DBF работает УложитьСписокОбъектов ?
Ответ #7 - 29. Августа 2007 :: 12:18
Печать  
из документации по ODBCRecordSet :: УложитьСписокОбъектов / PutObjectList
Цитата:
Синтаксис: УложитьСписокОбъектов(Список, ИмяТаблицы, [ВидЭлементов])
...
Описание: сохраняет список внутренних идентификаторов объектов во временной таблице MS SQL
...
Замечание: метод допустимо применять только для источника данных Microsoft SQL Server.

все дело в волшебных пузырьках
  

1&&2&&3
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: На DBF работает УложитьСписокОбъектов ?
Ответ #8 - 29. Августа 2007 :: 12:22
Печать  
на дбф используйте OLEDBCommand :: УложитьСписокОбъектов / PutObjectList
  

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



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: На DBF работает УложитьСписокОбъектов ?
Ответ #9 - 29. Августа 2007 :: 12:32
Печать  
В ДБФ тогда создается файл, что не очень быстро...
Я использую динамическое условие, в запросе
Код
Выбрать все
IN("+Мд.ЗначениеВСтрокуБД(Список.ПолучитьЗначение(1)"+,...) 


а если в списке отбора есть группы -то специальный подзапрос.
За полгода - полет нормальный...
  
Наверх
 
IP записан
 
dimm73
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 414
Зарегистрирован: 03. Июля 2006
Пол: Мужской
Re: На DBF работает УложитьСписокОбъектов ?
Ответ #10 - 29. Августа 2007 :: 12:43
Печать  
Можно по подробнее о OLEDBCommand
И как это поможет в моем случае?
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: На DBF работает УложитьСписокОбъектов ?
Ответ #11 - 29. Августа 2007 :: 13:09
Печать  
Код
Выбрать все
глОлеДБ = СоздатьОбъект("OLEDBData");
	Рез=глОлеДБ.Соединение("
	|Provider=VFPOLEDB.1;
	|Deleted=Yes;
	|Null = Yes;
	|Exclusive = No;
	|SourceType = DBF;
	|Data Source=" + КаталогИБ() + ";
	|Mode=ReadWrite;
	|Extended Properties="""";
	|User ID="""";
	|Password="""";
	|Mask Password=False;
	|Collating Sequence=MACHINE;
	|DSN=""""");
ОлеДБКоманда = глОлеДБ.СоздатьКоманду();
 


работа с командой - http://www.1cpp.ru/docum/html/oledb.html
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: На DBF работает УложитьСписокОбъектов ?
Ответ #12 - 29. Августа 2007 :: 13:11
Печать  
dimm73 писал(а) 29. Августа 2007 :: 12:43:
И как это поможет в моем случае?

тем что будет работать УложитьСписокОбъектов
  

1&&2&&3
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: На DBF работает УложитьСписокОбъектов ?
Ответ #13 - 29. Августа 2007 :: 17:37
Печать  
А  я даже не заметил, что используется ODBCRecordSet. В свете OLE DB я наивно полагал, что ODBCRecordSet для ДБФ уже никто не использует.
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: На DBF работает УложитьСписокОбъектов ?
Ответ #14 - 29. Августа 2007 :: 22:10
Печать  
JohnyDeath писал(а) 29. Августа 2007 :: 17:37:
А  я даже не заметил

Мдя... +1  Улыбка
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать