Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Горячая тема (более 10 ответов) ПрисоединитьИБ() (число прочтений - 5522 )
U_zer
Экс-Участник


ПрисоединитьИБ()
29. Января 2009 :: 11:57
Печать  
Всем привет!

Че-то ничего не понимаю ...
Код
Выбрать все
	БД = СоздатьОбъект("OdbcDataBase");
	Попытка
		БД.ПрисоединитьИБ(СокрЛП(ВыбПутьКБазе),СокрЛП(ВыбПольз), СокрЛП(ВыбПароль));
		Запрос = СоздатьОбъект("OdbcRecordSet");
		Запрос.УстБД(БД);

	Исключение
		Сообщить(ОписаниеОшибки());
		Возврат;
	КонецПопытки;

select
СпрТ.Code [Код $строка],
РегОст.ресКоличествоОстаток [Кол $число]
from $РегистрОстатки.Товары(:ДКон~,
inner join $Справочник.Склады СпрС (nolock) on СпрС.id = измСклад, СпрС.Code = :ВыбСкл, (измТовар, измСклад), ресКоличество) РегОст
inner join $Справочник.Товары СпрТ (nolock) on СпрТ.id = РегОст.измТовар

Запрос.УстановитьТекстовыйПараметр("ВыбСкл", фрмСклад.Код);
Запрос.УстановитьТекстовыйПараметр("ДКон", фрмДатаКонечная);
Тзн = Запрос.ВыполнитьИнструкцию(ТЗ);

 



Выдает Meta name parser error: не указан параметр ":ВыбСкл"
Блин, :ДКон почему-то проходит ... В чем засада?
  
Наверх
 
IP записан
 
mov68
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 180
Зарегистрирован: 21. Декабря 2007
Re: ПрисоединитьИБ()
Ответ #1 - 29. Января 2009 :: 14:23
Печать  
Насколько я понимаю со своими небольшими познаниями,
Запрос.УстановитьТекстовыйПараметр("ВыбСкл", фрмСклад.Код);
пытается сконвертировать код как ссылку объекта,
2 решения
1) СпрС.Code ='"+ фрмСклад.Код+"" и т.д.
2)on СпрС.id = :ВыбСкл
и Запрос.УстановитьТекстовыйПараметр("ВыбСкл", фрмСклад);
  
Наверх
 
IP записан
 
U_zer
Экс-Участник


Re: ПрисоединитьИБ()
Ответ #2 - 30. Января 2009 :: 07:02
Печать  
mov68 писал(а) 29. Января 2009 :: 14:23:
Насколько я понимаю со своими небольшими познаниями,
Запрос.УстановитьТекстовыйПараметр("ВыбСкл", фрмСклад.Код);
пытается сконвертировать код как ссылку объекта,
2 решения
1) СпрС.Code ='"+ фрмСклад.Код+"" и т.д.
2)on СпрС.id = :ВыбСкл
и Запрос.УстановитьТекстовыйПараметр("ВыбСкл", фрмСклад);


Пятерка тебе!!  Улыбка По первому пункту заработало!
Но вот это:

Запрос.УстановитьТекстовыйПараметр("ВыбСкл", фрмСклад.Код);
пытается сконвертировать код как ссылку объекта


Если несложно, господа разработчики, поясните, так это или нет?
Если так, то ИМХО это косяк, ведь тип параметра должен приводиться к тому типу, с чем сравниваем, иначе как вообще может это работать?
  
Наверх
 
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: ПрисоединитьИБ()
Ответ #3 - 30. Января 2009 :: 08:01
Печать  
Цитата:
Запрос.УстановитьТекстовыйПараметр("ВыбСкл", фрмСклад.Код);
пытается сконвертировать код как ссылку объекта

Если несложно, господа разработчики, поясните, так это или нет?
Если так, то ИМХО это косяк, ведь тип параметра должен приводиться к тому типу, с чем сравниваем, иначе как вообще может это работать?

Брехня это. Все прекрасно работает. Например:

     ТекстЗапроса = "
     |Set NoCount ON
     |
     |SELECT
     |      ID
     |FROM
     |      спрНоменклатура
     |WHERE
     |      LTrim(Code) = :Код
     |";
     
     ЗапросСКЛ.УстановитьТекстовыйПараметр("Код", ВыбТовар.Код);
     РедакторТЗ(ЗапросСКЛ.ВыполнитьИнструкцию(ТекстЗапроса));
  
Наверх
 
IP записан
 
U_zer
Экс-Участник


Re: ПрисоединитьИБ()
Ответ #4 - 30. Января 2009 :: 09:10
Печать  
sadovnikov писал(а) 30. Января 2009 :: 08:01:
Цитата:
Запрос.УстановитьТекстовыйПараметр("ВыбСкл", фрмСклад.Код);
пытается сконвертировать код как ссылку объекта

Если несложно, господа разработчики, поясните, так это или нет?
Если так, то ИМХО это косяк, ведь тип параметра должен приводиться к тому типу, с чем сравниваем, иначе как вообще может это работать?

Брехня это. Все прекрасно работает. Например:

     ТекстЗапроса = "
     |Set NoCount ON
     |
     |SELECT
     |      ID
     |FROM
     |      спрНоменклатура
     |WHERE
     |      LTrim(Code) = :Код
     |";
     
     ЗапросСКЛ.УстановитьТекстовыйПараметр("Код", ВыбТовар.Код);
     РедакторТЗ(ЗапросСКЛ.ВыполнитьИнструкцию(ТекстЗапроса));


В этом случае работает, а в моем - нет! Попробуй передать параметр в виртуальную таблицу.
  
Наверх
 
IP записан
 
mov68
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 180
Зарегистрирован: 21. Декабря 2007
Re: ПрисоединитьИБ()
Ответ #5 - 30. Января 2009 :: 09:11
Печать  
sadovnikov писал(а) 30. Января 2009 :: 08:01:
Цитата:
Запрос.УстановитьТекстовыйПараметр("ВыбСкл", фрмСклад.Код);
пытается сконвертировать код как ссылку объекта

Если несложно, господа разработчики, поясните, так это или нет?
Если так, то ИМХО это косяк, ведь тип параметра должен приводиться к тому типу, с чем сравниваем, иначе как вообще может это работать?

Брехня это. Все прекрасно работает. Например:

     ТекстЗапроса = "
     |Set NoCount ON
     |
     |SELECT
     |      ID
     |FROM
     |      спрНоменклатура
     |WHERE
     |      LTrim(Code) = :Код
     |";
     
     ЗапросСКЛ.УстановитьТекстовыйПараметр("Код", ВыбТовар.Код);
     РедакторТЗ(ЗапросСКЛ.ВыполнитьИнструкцию(ТекстЗапроса));


Да, работает, если код не текстовый и ли в нем нет пробелов, в общем случае тогда ставь RTRIM(LTrim(Code)) = RTRIM(LTrim(:Код) т.е. на передаваемый параметр тоже (это в общем случае, для конкретного примера можно упростить)
  
Наверх
 
IP записан
 
mov68
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 180
Зарегистрирован: 21. Декабря 2007
Re: ПрисоединитьИБ()
Ответ #6 - 30. Января 2009 :: 09:14
Печать  
Как добавка к предыдущему: такую конструкцию использую при подключении к другой базе, когда по id связаться нельзя, если запрос в одной базе, то по ID надежнее (коды справочника могут и повторяться)
  
Наверх
 
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: ПрисоединитьИБ()
Ответ #7 - 30. Января 2009 :: 09:24
Печать  
mov68 писал(а) 30. Января 2009 :: 09:11:
Да, работает, если код не текстовый и ли в нем нет пробелов, в общем случае тогда ставь RTRIM(LTrim(Code)) = RTRIM(LTrim(:Код) т.е. на передаваемый параметр тоже (это в общем случае, для конкретного примера можно упростить)

Извини, конечно, но зачем бред-то писать??
  
Наверх
 
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: ПрисоединитьИБ()
Ответ #8 - 30. Января 2009 :: 09:25
Печать  
Цитата:
параметр в виртуальную таблицу.

Тут я пас. Не пользуюсь виртуальными таблицами.
  
Наверх
 
IP записан
 
mov68
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 180
Зарегистрирован: 21. Декабря 2007
Re: ПрисоединитьИБ()
Ответ #9 - 30. Января 2009 :: 10:27
Печать  
sadovnikov писал(а) 30. Января 2009 :: 09:24:
mov68 писал(а) 30. Января 2009 :: 09:11:
Да, работает, если код не текстовый и ли в нем нет пробелов, в общем случае тогда ставь RTRIM(LTrim(Code)) = RTRIM(LTrim(:Код) т.е. на передаваемый параметр тоже (это в общем случае, для конкретного примера можно упростить)

Извини, конечно, но зачем бред-то писать??


Бред, не бред, но навскидку 2 запроса из рабочих баз
ТекстЗапроса ="
                 |SELECT Номенклатура.ID [Авто $Справочник.Номенклатура]
                 |FROM $Справочник.Номенклатура AS Номенклатура
                 |WHERE (Ltrim($Номенклатура.Номер_по_каталогу) = Ltrim(:ВИН))
                 |AND (Номенклатура.ISMARK <> 1)";


ТекстЗапроса = "
| Select
| Z.*
| from SC33  as Z
| where Ltrim(Z.ID) = Ltrim(:ID) ";

Без обработки параметра не работает
  
Наверх
 
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: ПрисоединитьИБ()
Ответ #10 - 30. Января 2009 :: 10:37
Печать  
mov68 писал(а) 30. Января 2009 :: 10:27:
Без обработки параметра не работает

Руки, значит, из не оттуда растут... Чудес не бывает.
  
Наверх
 
IP записан
 
mov68
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 180
Зарегистрирован: 21. Декабря 2007
Re: ПрисоединитьИБ()
Ответ #11 - 30. Января 2009 :: 10:39
Печать  
sadovnikov писал(а) 30. Января 2009 :: 10:37:
mov68 писал(а) 30. Января 2009 :: 10:27:
Без обработки параметра не работает

Руки, значит, из не оттуда растут... Чудес не бывает.


Согласен, не оттуда, я лишь честно привожу рабочие куски кода. На личности переходить не будем
  
Наверх
 
IP записан
 
U_zer
Экс-Участник


Re: ПрисоединитьИБ()
Ответ #12 - 30. Января 2009 :: 11:09
Печать  
Замечу лишь, что эта хрень не работает только при сабже.
  
Наверх
 
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: ПрисоединитьИБ()
Ответ #13 - 30. Января 2009 :: 11:11
Печать  
mov68 писал(а) 30. Января 2009 :: 10:39:
На личности переходить не будем

Да и не собирался я на личности переходить. Просто:
1. Ltrim(:ВИН) - бред.
2. Ltrim(Z.ID) = Ltrim(:ID) - еще больший бред.
3. Где в запросах NoLock-и?
4. from SC33 - я правильно понял - это кусок кода именно из конфиги? Метапарсер для кого делался?
5. Z.* - что-то мне подсказывает, что вряд ли нужны именно все поля. Хотя, здесь могу быть очень не прав.
  
Наверх
 
IP записан
 
mov68
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 180
Зарегистрирован: 21. Декабря 2007
Re: ПрисоединитьИБ()
Ответ #14 - 30. Января 2009 :: 12:32
Печать  
sadovnikov писал(а) 30. Января 2009 :: 11:11:
mov68 писал(а) 30. Января 2009 :: 10:39:
На личности переходить не будем

Да и не собирался я на личности переходить. Просто:
1. Ltrim(:ВИН) - бред.
2. Ltrim(Z.ID) = Ltrim(:ID) - еще больший бред.
3. Где в запросах NoLock-и?
4. from SC33 - я правильно понял - это кусок кода именно из конфиги? Метапарсер для кого делался?
5. Z.* - что-то мне подсказывает, что вряд ли нужны именно все поля. Хотя, здесь могу быть очень не прав.


До меня к базе была привязана отдельная база SQL, в которой хранится часть информации,
А  from SC33 это для связи с другой базой 1С, метапарсер не конает (если уже есть возможность использовать метапарсер с присоединяемыми базами, укажи где смотреть - буду прыгать от восторга)
Ltrim(Z.ID) = Ltrim(:ID)  перестает быть бредом если понимать, что Z.ID и ID поля из разных баз
NoLock - согласен в этом случае
  
Наверх
 
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: ПрисоединитьИБ()
Ответ #15 - 30. Января 2009 :: 12:40
Печать  
mov68 писал(а) 30. Января 2009 :: 12:32:
До меня к базе была привязана отдельная база SQL, в которой хранится часть информации,
А  from SC33 это для связи с другой базой 1С, метапарсер не конает (если уже есть возможность использовать метапарсер с присоединяемыми базами, укажи где смотреть - буду прыгать от восторга)

Прыгай Улыбка

ЗапросСКЛ                  = СоздатьОбъект("ODBCRecordSet");
РадугаМД_Источник      = СоздатьОбъект("MetaDataWork");

ИмяБазыИсточника = сзБД.ПолучитьЗначение(сзБД.ТекущаяСтрока()) + ".dbo";
РадугаМД_Источник.ПрисоединитьМД(СокрП(ИмяФайла)); //MD-ник другой базы

ВидСправочника      = "НематериальныеАктивы";
стрВсеРеквизиты = ТекстЗапроса_ВсеРеквизитыСправочника(ВидСправочника);

ТекстЗапроса_Select = "
|SELECT
|      " + ТекстЗапроса_СлужебныеКолонкиСправочника(ВидСправочника) + "
|      " + стрВсеРеквизиты + "
|FROM
|      " + ИмяБазыИсточника + ".$Справочник." + ВидСправочника + " (NoLock)
|WHERE
|      IsFolder = 1
|";

ТекстЗапроса_Select = РадугаМД_Источник.ОбрМетаСКЛ(ТекстЗапроса_Select);

ТекстЗапроса = "
|Set NoCount ON
|DECLARE @Количество Int
|
|DELETE FROM $Справочник."+ВидСправочника+"
|
|INSERT INTO $Справочник."+ВидСправочника+"
|(" + ТекстЗапроса_СлужебныеКолонкиСправочника(ВидСправочника) + "
|      " + стрВсеРеквизиты + "
|)
|" + ТекстЗапроса_Select + "
|
|Set @Количество = @@RowCount
|
|SELECT @Количество
|";

Возврат ВыполнитьЗапрос(ТекстЗапроса, ВидСправочника);


mov68 писал(а) 30. Января 2009 :: 12:32:
Ltrim(Z.ID) = Ltrim(:ID)  перестает быть бредом если понимать, что Z.ID и ID поля из разных баз

Неа, не перестает Улыбка Char(9) он и в Африке Char(9)...
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ПрисоединитьИБ()
Ответ #16 - 30. Января 2009 :: 13:07
Печать  
sadovnikov писал(а) 30. Января 2009 :: 12:40:
Неа, не перестает Улыбка Char(9) он и в Африке Char(9)...

Не скажи. Попадалось и varchar(9) с несовпадающим collation..  Ужас
  

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


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: ПрисоединитьИБ()
Ответ #17 - 30. Января 2009 :: 13:25
Печать  
berezdetsky писал(а) 30. Января 2009 :: 13:07:
Не скажи. Попадалось и varchar(9) с несовпадающим collation..  Ужас

Согласись, что в свете данной ветки - это не тот случай?
  
Наверх
 
IP записан
 
mov68
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 180
Зарегистрирован: 21. Декабря 2007
Re: ПрисоединитьИБ()
Ответ #18 - 30. Января 2009 :: 13:26
Печать  
sadovnikov писал(а) 30. Января 2009 :: 12:40:
mov68 писал(а) 30. Января 2009 :: 12:32:
До меня к базе была привязана отдельная база SQL, в которой хранится часть информации,
А  from SC33 это для связи с другой базой 1С, метапарсер не конает (если уже есть возможность использовать метапарсер с присоединяемыми базами, укажи где смотреть - буду прыгать от восторга)

Прыгай Улыбка

mov68 писал(а) 30. Января 2009 :: 12:32:
Ltrim(Z.ID) = Ltrim(:ID)  перестает быть бредом если понимать, что Z.ID и ID поля из разных баз

Неа, не перестает Улыбка Char(9) он и в Африке Char(9)...


А вот за это огромное человеческое спасибо,  захожу на сайт наскоками, где-то эта инфа меня обошла (или я ее)
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ПрисоединитьИБ()
Ответ #19 - 30. Января 2009 :: 13:33
Печать  
sadovnikov писал(а) 30. Января 2009 :: 13:25:
berezdetsky писал(а) 30. Января 2009 :: 13:07:
Не скажи. Попадалось и varchar(9) с несовпадающим collation..  Ужас

Согласись, что в свете данной ветки - это не тот случай?

Согласен.  Улыбка
  

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


I Love YaBB 2!

Сообщений: 180
Зарегистрирован: 21. Декабря 2007
Re: ПрисоединитьИБ()
Ответ #20 - 30. Января 2009 :: 13:37
Печать  
sadovnikov писал(а) 30. Января 2009 :: 12:40:
mov68 писал(а) 30. Января 2009 :: 12:32:
До меня к базе была привязана отдельная база SQL, в которой хранится часть информации,
А  from SC33 это для связи с другой базой 1С, метапарсер не конает (если уже есть возможность использовать метапарсер с присоединяемыми базами, укажи где смотреть - буду прыгать от восторга)

Прыгай Улыбка
.

Не сочти за наглость, но приведи плиз ТекстЗапроса_ВсеРеквизитыСправочника и ТекстЗапроса_СлужебныеКолонкиСправочника
  
Наверх
 
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: ПрисоединитьИБ()
Ответ #21 - 30. Января 2009 :: 13:49
Печать  
Функция ТекстЗапроса_ВсеРеквизитыСправочника(ВидСправочника)
     ТекстЗапроса = "";
     
     МетаСправочник = Метаданные.Справочник(ВидСправочника);
     Для Н = 1 По МетаСправочник.Реквизит() Цикл
           _Реквизит = МетаСправочник.Реквизит(Н);
           Если _Реквизит.Периодический <> 1 Тогда
                 ТекстЗапроса = ТекстЗапроса + ", $Справочник." + ВидСправочника + "." + _Реквизит.Идентификатор;
           КонецЕсли;
     КонецЦикла;
     
     Возврат ТекстЗапроса;
КонецФункции

Функция ТекстЗапроса_СлужебныеКолонкиСправочника(ВидСправочника, ПрефиксКолонок = "")
     Если ПустаяСтрока(ПрефиксКолонок) = 0 Тогда
           ПрефиксКолонок = ПрефиксКолонок + ".";
     КонецЕсли;
     
     МетаСправочник      = Метаданные.Справочник(ВидСправочника);
     ТекстЗапроса      = ПрефиксКолонок + "ID, " + ПрефиксКолонок+ "ISMARK, " + ПрефиксКолонок + "VERSTAMP";
     
     Если МетаСправочник.ДлинаКода > 0 Тогда
           ТекстЗапроса = ТекстЗапроса + ", " + ПрефиксКолонок + "CODE";
     КонецЕсли;
     Если МетаСправочник.ДлинаНаименования > 0 Тогда
           ТекстЗапроса = ТекстЗапроса + ", " + ПрефиксКолонок + "DESCR";
     КонецЕсли;
     Если МетаСправочник.КоличествоУровней > 1 Тогда
           ТекстЗапроса = ТекстЗапроса + ", " + ПрефиксКолонок + "ISFOLDER, " + ПрефиксКолонок + "PARENTID";
     КонецЕсли;
     Если МетаСправочник.Владелец.Выбран() = 1 Тогда
           ТекстЗапроса = ТекстЗапроса + ", " + ПрефиксКолонок + "PARENTEXT";
     КонецЕсли;
     
     Возврат ТекстЗапроса;
КонецФункции
  
Наверх
 
IP записан
 
mov68
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 180
Зарегистрирован: 21. Декабря 2007
Re: ПрисоединитьИБ()
Ответ #22 - 30. Января 2009 :: 13:51
Печать  
СПАСИБО!!!
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 
ОтправитьПечать