Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Очень популярная тема (более 25 ответов) $ и внешняя база (число прочтений - 6737 )
vinogradoff
Full Member
***
Отсутствует



Сообщений: 107
Зарегистрирован: 06. Февраля 2010
Пол: Мужской
$ и внешняя база
09. Июля 2010 :: 09:08
Печать  
Подключаюсь к удаленной базе 1С sql таким образом:
Код
Выбрать все
db = СоздатьОбъект("ODBCDatabase");
Если db.Соединение("DRIVER=SQL Server;SERVER=192.168.*.*;UID=***;PWD=***;DATABASE=***;") = 0 Тогда
	Предупреждение("Connection error");
	Возврат;                  
КонецЕсли;        
rs = СоздатьОбъект("AccountsRecordset");
rs.SetDatabase(db);
 


Далее в запросе при использовании символа $ 1CPP пытается парсить имена используя имена таблиц локальной базы, т.е. если в запросе использую $Справочник.Номенклатура, то 1CPP подставит имя таблицы справочника номенклатуры из локальной базы (напр., sc245), чему в большинстве случаев будет соответствовать другая таблица в удаленной базе. Можно обойти это, использовав настоящие имена таблиц (или view) удаленной базы.
Подскажите,  как быть с такими таблицами, как $БИОстатки.Основной?
Прямой запрос к БИ без AccountsRecordset использовать как-то лень)
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: $ и внешняя база
Ответ #1 - 09. Июля 2010 :: 09:13
Печать  
  
Наверх
 
IP записан
 
vinogradoff
Full Member
***
Отсутствует



Сообщений: 107
Зарегистрирован: 06. Февраля 2010
Пол: Мужской
Re: $ и внешняя база
Ответ #2 - 09. Июля 2010 :: 09:37
Печать  
ПрисоединитьИБ(КаталогИБ, [ИмяПользователя], [Пароль], [СтрокаСоединения])

База находится не в локальной сети. Доступ через vpn, посему каталог указать не могу.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: $ и внешняя база
Ответ #3 - 09. Июля 2010 :: 10:58
Печать  
почему не можешь ?
Ты же в соединении тоже каталог ИБ указываешь, тут - по аналогии.
  
Наверх
 
IP записан
 
vinogradoff
Full Member
***
Отсутствует



Сообщений: 107
Зарегистрирован: 06. Февраля 2010
Пол: Мужской
Re: $ и внешняя база
Ответ #4 - 09. Июля 2010 :: 11:44
Печать  
Да, получилось, только проблема новая: при подключении нужно ждать пока закачается md-шник 4.5мб
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: $ и внешняя база
Ответ #5 - 09. Июля 2010 :: 11:45
Печать  
vinogradoff писал(а) 09. Июля 2010 :: 11:44:
Да, получилось, только проблема новая: при подключении нужно ждать пока закачается md-шник 4.5мб

А ты хотел динамическое чтение? Стандартная 1С-ка тоже затаскивает MD.
Если надо тянуть - тяни параметризированными запросами чтобы 1 раз подключаться.э
Или храни глобальную переменную с подключением.
  
Наверх
IP записан
 
vinogradoff
Full Member
***
Отсутствует



Сообщений: 107
Зарегистрирован: 06. Февраля 2010
Пол: Мужской
Re: $ и внешняя база
Ответ #6 - 09. Июля 2010 :: 12:51
Печать  
Спасибо, запросы к обычным таблицам парсятся (скопировал MD той базы себе на жесткий и путь к нему указал), а вот в $БИ... ошибки выдает все-равно.
Код
Выбрать все
|select
|	Ост.КоличествоОстаток
|from
|	$БИОстатки.Основной() as Ост 



AccountsRecordset::СформироватьОшибку(Строка Ошибка=State 42S22, native 207, message [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid column name 'PLANID'.)
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: $ и внешняя база
Ответ #7 - 09. Июля 2010 :: 13:36
Печать  
Понимаешь в чем дело - в бухучете используется кроме плана счетов еще таблица 1saccs - план счетов. И вот без неё - никак.
  
Наверх
IP записан
 
vinogradoff
Full Member
***
Отсутствует



Сообщений: 107
Зарегистрирован: 06. Февраля 2010
Пол: Мужской
Re: $ и внешняя база
Ответ #8 - 12. Июля 2010 :: 06:20
Печать  
Народ, помогите: взял кусок по $БИОстатки из описания AccountsRecordset.ert
Код
Выбрать все
sql = "
	|select ОсновнойОстатки.Счет [Счет $Счет.Основной]
	|	, ОсновнойОстатки.Валюта [Валюта $Справочник.Валюты]
	|	, ОсновнойОстатки.Субконто1 [Субконто1 $Субконто]
	|	, ОсновнойОстатки.Субконто1_вид
	|	, ОсновнойОстатки.Субконто2 [Субконто2 $Субконто]
	|	, ОсновнойОстатки.Субконто2_вид
	|	, ОсновнойОстатки.СуммаОстатокДт
	|	, ОсновнойОстатки.СуммаОстатокКт
	|	, ОсновнойОстатки.ВалютнаяСуммаОстатокДт
	|	, ОсновнойОстатки.ВалютнаяСуммаОстатокКт
	|	, ОсновнойОстатки.КоличествоОстатокДт
	|	, ОсновнойОстатки.КоличествоОстатокКт
	|from $БИОстатки.Основной(:ВыбДата~,,
	|		(Счет = " + ТС.СчетИД + "),
	|		(Номенклатура, МестаХранения),
	|		) as ОсновнойОстатки
	|inner join _1saccs as ПланСчетов (nolock) on ОсновнойОстатки.Счет = ПланСчетов.id
	|";                                
	rs.SetTextParam("ВыбДата", ТекущаяДата());	  
	ТЗ = rs.ВыполнитьИнструкцию(sql); 


в ТС.СчетИД id нужного мне счета
Получаю все ту же AccountsRecordset::СформироватьОшибку(Строка Ошибка=State 42S22, native 207, message [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid column name 'PLANID'.)

Добавлю, что подключение идет все к той же внешней базе, а чтобы не ждать выкачивания md-шника скопировал его себе на комп и в AttachIB указываю к нему путь.
  
Наверх
 
IP записан
 
vinogradoff
Full Member
***
Отсутствует



Сообщений: 107
Зарегистрирован: 06. Февраля 2010
Пол: Мужской
Re: $ и внешняя база
Ответ #9 - 12. Июля 2010 :: 08:15
Печать  
Вопрос пока снят: в базе из которой делал запрос было 2 плана счетов, а в базе к которой - 1.
  
Наверх
 
IP записан
 
leov-001
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 150
Зарегистрирован: 05. Марта 2009
Re: $ и внешняя база
Ответ #10 - 12. Июля 2010 :: 09:58
Печать  
vinogradoff писал(а) 09. Июля 2010 :: 11:44:
Да, получилось, только проблема новая: при подключении нужно ждать пока закачается md-шник 4.5мб

Скачай мд-шник на комп с которого отправляешь запрос. При подключении укажи папку куда положил мд-шник. Этот способ годится только для SQL.
  
Наверх
 
IP записан
 
Boog
Junior Member
**
Отсутствует



Сообщений: 95
Местоположение: Винница
Зарегистрирован: 23. Февраля 2009
Пол: Мужской
Re: $ и внешняя база
Ответ #11 - 15. Июля 2010 :: 11:17
Печать  
Есть вопрос на эту же тему ($ и удаленная БД):
понятно, что когда я обращаюсь к другой БД, то рассчитывать на типизацию метаобъектов не стоит. Каким способом я могу получить строковое представление объекта, например справочника неизвестного вида? Понятно, что присоединить таблицу справочника придется, но как мне в запросе получить представление вида справочника, чтобы передать в рабочую базу нормальное строковое представление?


P.S. to vinogradoff:
если канал очень узкий, то можно на удаленной стороне склепать bat-ничек, который будет налету архивировать md-ник и передавать тебе архив, ну а на приемной стороне аналогично разархивировать.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: $ и внешняя база
Ответ #12 - 15. Июля 2010 :: 11:23
Печать  
Типизируй к  $ВидСправочника в тексте запроса - будешь видеть текстовое представление вида справочника.
Ежели хочешь посмотреть вид справочника у реквизита неопределенного вида, то первые 4 символа этого реквизита типизируй.
Если я правильно тебя понял, что ты хочешь.
  
Наверх
 
IP записан
 
Boog
Junior Member
**
Отсутствует



Сообщений: 95
Местоположение: Винница
Зарегистрирован: 23. Февраля 2009
Пол: Мужской
Re: $ и внешняя база
Ответ #13 - 15. Июля 2010 :: 11:56
Печать  
Спасибо, правильно.
  
Наверх
 
IP записан
 
Boog
Junior Member
**
Отсутствует



Сообщений: 95
Местоположение: Винница
Зарегистрирован: 23. Февраля 2009
Пол: Мужской
Re: $ и внешняя база
Ответ #14 - 15. Июля 2010 :: 12:16
Печать  
Все же не совсем: ВидСправочника даст мне идентификатор вида справочника, а не его представление на стороне 1С.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать