Переключение на Главную Страницу Страницы: 1 [2] 3  ОтправитьПечать
Очень популярная тема (более 25 ответов) Доступ в другую базу на том же SQL-сервере (число прочтений - 7026 )
mistyx
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 16
Зарегистрирован: 25. Февраля 2010
Re: Доступ в другую базу на том же SQL-сервере
Ответ #15 - 26. Февраля 2010 :: 13:32
Печать  
Z1 писал(а) 26. Февраля 2010 :: 13:25:
да потому что неправильно фраза построена
dbo.$Документ.РеализацияТары

$Документ.РеализацияТары т.к. перед $ точка то скорее всего метапарсер это все пропускает и не подставляет нужной таблицы sql

Чтобы увидеть это используйте метод
Отладка(1)


Нет, не совсем так. Точка стоит потому, что там еще пишется имя базы, из которой выбирается таблица.

Если имя базы и .dbo. не указывать, то ошибка возникает независимо от наличия или отсутствия типизации результатов работы запроса. Если же писать dbname.dbo.$Документ.Реализация, то метапарсер конвертирует его в dbname.dbo.dh1234, и селект без типизации проходит успешно. Если же пытаться типизировать результат, то выскакивает ошибка, описанная выше.

Кстати, в случае ошибки при парсинге запроса метод Обработчик.Отладка(1) рушится с той же ошибкой Улыбка
  
Наверх
 
IP записан
 
mistyx
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 16
Зарегистрирован: 25. Февраля 2010
Re: Доступ в другую базу на том же SQL-сервере
Ответ #16 - 26. Февраля 2010 :: 14:02
Печать  
Z1 писал(а) 26. Февраля 2010 :: 13:25:
Я совсем запутался я думал что тебе нужен общий результат на множестве баз ( ну типа сумма всех приходных накладных за период или что то такое )
я сейчас я понимаю что не понимаю зачем тебе нужен общий запрос

Так что лучше еще раз сформулируй задачу в человеческих терминах.

ОК, давай попробую. Есть 8 баз, из которых 6 имеют одинаковую структуру и две сильно переделаны. Мне нужно из всех имеющихся баз выгрузить различные документы и справочники, на которые эти документы ссылаются. Выгрузка происходит в текстовые файлы, которые потом загружаются уже в нашу базу на SQL-сервере и нужным образом обрабатываются для собственного ERP-приложения.

Вопрос, который мы сейчас обсуждаем, относится исключительно к процессу автоматизации выгрузки данных сходного вида из разных баз. Например, в одной из "кривых" баз есть тип документа Документ.РеализацияТары, которого нет в других базах. А, например, тип УслугиСтороннихОрганизаций есть в 6 одинаковых базах, но отсутствует в "кривых" базах. У меня есть процедура, которая в зависимости от передаваемых параметров (включая вид документа) выгружает в текстовый файл указанный тип документа с указанными полями. Для всех документов сходного типа (например, расходные накладные, предоставляемые услуги, поступление товаров) текстовый файл общий. В процессе выгрузки получаемые ID-номера (например, ID самого документа или ID контрагента, к которому относится документ) типизируются с использованием соответствующих таблиц, чем достигается уникальность этих номеров (например, ID-номера номенклатуры и материалов в 1С повторяются, а с указанием таблицы - нет).

Задача, которую я хочу решить, заключается в том, чтобы не дергать каждую базу для проведения выгрузки, а подключиться к одной базе и через нее вытащить данные сразу из всех баз. Останавливает меня неумение правильно типизировать ID-номер документа, тип которого отсутствует в текущей базе. Я думал, что при подключении MD-файла к рекордсету вся типизация будет автоматически производиться с его использованием. Однако, пока у меня получается только получить правильное имя таблицы, из которой выбираются данные, а вот аналогичный текст в типизации результатов (например, ID as [Документ $Документ.Реализация]) не обрабатывается парсером. Как-то так...
  
Наверх
 
IP записан
 
slawa
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 125
Зарегистрирован: 05. Октября 2006
Re: Доступ в другую базу на том же SQL-сервере
Ответ #17 - 26. Февраля 2010 :: 14:04
Печать  
mistyx писал(а) 26. Февраля 2010 :: 13:23:
slawa писал(а) 26. Февраля 2010 :: 13:06:
Попытаюсь промедитировать Улыбка
Все-таки ты хочешь синхронизировать базы одинаковой структуры, но с разными IDшниками объектов.
Такие могли получиться если при загрузке изменений в конфигурацию использовалась операция "Объединение баз", а не "Загрузка измененной базы"

Так ?

Тогда 1cpp.dll, в текущей реализации, тебе не поможет. ИМХО
Тебе придется самому сопоставлять разные ID, для одинаковых (по наименованию) объектов.

Правильно медитируешь, можешь записываться в телепаты Улыбка

Базы делал не я, делали их не для меня, однако возиться сейчас приходится с ними именно мне.

Собственно, последние несколько часов я домогаюсь тебя и Z1 на тему упрощения моей работы - чтобы можно было запускать одну обработку в одной базе, которая сама подключится ко всем остальным базам и все сделает.

Может быть, есть альтернативные, более простые варианты автоматизации обработки нескольких баз, различных по структуре? Опять-таки, ссылки на ФАК вполне привествуются Улыбка


Может помогут такие функции:
Код
Выбрать все
ИДОбъекта = RS.мд.ИДДокумента(...)
или
ИДОбъекта = RS.мд.ИДСправочника(...);
и т.д.
 



но тут прошу обратить внимание на ошибку в 1cpp.dll (баг № 3560)
  
Наверх
 
IP записан
 
slawa
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 125
Зарегистрирован: 05. Октября 2006
Re: Доступ в другую базу на том же SQL-сервере
Ответ #18 - 26. Февраля 2010 :: 14:21
Печать  
mistyx писал(а) 26. Февраля 2010 :: 14:02:
... Однако, пока у меня получается только получить правильное имя таблицы, из которой выбираются данные, а вот аналогичный текст в типизации результатов (например, ID as [Документ $Документ.Реализация]) не обрабатывается парсером. Как-то так...

Потому, что имя внешней таблицы получается с помощью парсера настроенного на внешнюю базу.
А получить хочешь тип документа локальной базы, используя парсер настроенный на, туже, внешнюю базу.

не катит Улыбка
  
Наверх
 
IP записан
 
slawa
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 125
Зарегистрирован: 05. Октября 2006
Re: Доступ в другую базу на том же SQL-сервере
Ответ #19 - 26. Февраля 2010 :: 14:25
Печать  
Хочу обратить внимание на то, что текущая база ни как не связана с базой подключенной с помощью метода ПрисоединитьИБ().
т.е. 1cpp.dll такой связи не поддерживает.
Это абсолютно разные базы (с точки зрения 1С++)
  
Наверх
 
IP записан
 
mistyx
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 16
Зарегистрирован: 25. Февраля 2010
Re: Доступ в другую базу на том же SQL-сервере
Ответ #20 - 26. Февраля 2010 :: 14:58
Печать  
slawa писал(а) 26. Февраля 2010 :: 14:21:
mistyx писал(а) 26. Февраля 2010 :: 14:02:
... Однако, пока у меня получается только получить правильное имя таблицы, из которой выбираются данные, а вот аналогичный текст в типизации результатов (например, ID as [Документ $Документ.Реализация]) не обрабатывается парсером. Как-то так...

Потому, что имя внешней таблицы получается с помощью парсера настроенного на внешнюю базу.
А получить хочешь тип документа локальной базы, используя парсер настроенный на, туже, внешнюю базу.

не катит Улыбка

А счастье было так возможно... Понял, спасибо, будем думать.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Доступ в другую базу на том же SQL-сервере
Ответ #21 - 27. Февраля 2010 :: 05:54
Печать  
Из №16 я понял что Вам не нужен единый запрос к нескольким базам.
Т.е. каждую базу Вы обрабатываете последовательно и все деййствия записываете в один или несколько файлов.

Так сделайте в каждой базе запросы через метапарсер.После этого
прогоните либо через отладка(1) либо через ОбрМетаСКЛ чистый sql
( в этом чистом sql должны быть полными с именем базы и владельцем). сохраните эти сценарии в файл ( один файл на одну базу ) и после выполняйте запросы из этих файлов
  
Наверх
 
IP записан
 
Стрелок
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 134
Местоположение: Ukrane
Зарегистрирован: 31. Октября 2008
Пол: Мужской
Re: Доступ в другую базу на том же SQL-сервере
Ответ #22 - 02. Марта 2010 :: 21:54
Печать  
Доброго времени суток. у меня схожая но несколько другая задача

Задача такая

есть 7 баз данных на основе ТиС (6 скульных и одна - dbf). размеры от 500 Мб до 10 Гб. Во всех базах делаются одни и те же отчёты (продажи, долги и т.п.). базы чуть отличаются по структуре.

надо получить консолидированные данные из всех баз или из конкретной базы.

для реализации думаю создать ещё одну базу и в неё тянуть данные из необходимой (необходимых) баз. По ольке можно но чего то мне не понравился единственный мой опыт - плохо летает - дымит. вопрос - можно ли для этого заюзать 1С++ и её вкусности? буду благодарен за примеры или пинки в нужном направлении. Если не сложно - и за алгоритм тоже буду благодарен
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Доступ в другую базу на том же SQL-сервере
Ответ #23 - 03. Марта 2010 :: 06:04
Печать  
Стрелок писал(а) 02. Марта 2010 :: 21:54:
Доброго времени суток. у меня схожая но несколько другая задача

Задача такая

есть 7 баз данных на основе ТиС (6 скульных и одна - dbf). размеры от 500 Мб до 10 Гб. Во всех базах делаются одни и те же отчёты (продажи, долги и т.п.). базы чуть отличаются по структуре.

надо получить консолидированные данные из всех баз или из конкретной базы.

для реализации думаю создать ещё одну базу и в неё тянуть данные из необходимой (необходимых) баз. По ольке можно но чего то мне не понравился единственный мой опыт - плохо летает - дымит. вопрос - можно ли для этого заюзать 1С++ и её вкусности? буду благодарен за примеры или пинки в нужном направлении. Если не сложно - и за алгоритм тоже буду благодарен


Два способа
1. Все писать в один запрос в котором все базы
( тогда dbf база не получиться )
2. Есть ТЗ сначала она пустая формируем запрос к каждой базе
и дописываем результат ( без затирания ) в эту ТЗ. Наверное можно и dbf сделать в этом варианте сам так ни разу не делал.

Если нужен скажем результат отгрузок в разрезе клиентов по всем базам то должна быть стыковочная таблица по Клиентам

Табл
ID_glob,ИмяКл, база1, ID_в_базе1
ID_glob,ИмяКл, база2, ID_в_базе2
...
ID_glob,ИмяКл, базаn, ID_в_базеn
Для клиентов в принципе в качестве ключа может подойти  ИНН-КПП

Аналогично стыковочные таблицы нужны и по товарам и
по всем разрезам по каким делается отчетность.
Также что достаточно сложная задача эти таблицы надо поддерживать в актуальном состоянии.
  
Наверх
 
IP записан
 
leshik
1c++ donor
На связи



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Доступ в другую базу на том же SQL-сервере
Ответ #24 - 03. Марта 2010 :: 06:15
Печать  
Цитата:
1. Все писать в один запрос в котором все базы
( тогда dbf база не получиться )

ну почему же - можно использовать linked servers
  
Наверх
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Доступ в другую базу на том же SQL-сервере
Ответ #25 - 03. Марта 2010 :: 06:19
Печать  
leshik писал(а) 03. Марта 2010 :: 06:15:
Цитата:
1. Все писать в один запрос в котором все базы
( тогда dbf база не получиться )

ну почему же - можно использовать linked servers

я даже и не подозревал что такое возможно.
  
Наверх
 
IP записан
 
leshik
1c++ donor
На связи



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Доступ в другую базу на том же SQL-сервере
Ответ #26 - 03. Марта 2010 :: 06:56
Печать  
Z1 писал(а) 03. Марта 2010 :: 06:19:
leshik писал(а) 03. Марта 2010 :: 06:15:
Цитата:
1. Все писать в один запрос в котором все базы
( тогда dbf база не получиться )

ну почему же - можно использовать linked servers

я даже и не подозревал что такое возможно.

http://social.technet.microsoft.com/Forums/ru-RU/sqlru/thread/043f7101-4c7b-4ccb...
  
Наверх
IP записан
 
Стрелок
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 134
Местоположение: Ukrane
Зарегистрирован: 31. Октября 2008
Пол: Мужской
Re: Доступ в другую базу на том же SQL-сервере
Ответ #27 - 03. Марта 2010 :: 15:22
Печать  
наверное надо уточнить

перетащить единственную базу dbf на скуль - дело полу часа - это не проблема. по стыковочной таблице есть мысли (есть несколько разработок по обмену данными и соответственно синхронизации справочников). дело за малым - мне бы хоть куски кода запроса глянуть одним глазком.....

и ещё что значит "формируем запрос к каждой базе"? это в каждой базе формировать запрос и потом выгружать во внешнюю ТЗ? или я чего то не понял. мне в общем то и не надо одним запросом сразу все базы обработать. товарные группы совершенно разные а складывать апельсины с крокодилами меня ещё в школе отучили. но должно быть (грубо говоря) 7 ТЗ которые отражают продажи (вместо сложных типов данных - простые - строки), 7 ТЗ с дебиторкой ну и т.д. а уж обработать их я соображу как
  
Наверх
 
IP записан
 
leshik
1c++ donor
На связи



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Доступ в другую базу на том же SQL-сервере
Ответ #28 - 03. Марта 2010 :: 15:39
Печать  
Автор, Вам говорят что можно построить 1 запрос в как в пределах одного SQL сервера и разных баз, так и с использованием linked servers к каталогу DBF.
То есть перетаскивать что-то из DBF в SQL не требуется. - надо просто создать linked server и обращаться к нему в контексте одного запроса.
  
Наверх
IP записан
 
Стрелок
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 134
Местоположение: Ukrane
Зарегистрирован: 31. Октября 2008
Пол: Мужской
Re: Доступ в другую базу на том же SQL-сервере
Ответ #29 - 03. Марта 2010 :: 17:08
Печать  
а по нику нельзя было написать? чтобы не гадать кому адресовано?

когда я написал что "перевести базу на скуль - не проблема" я имел в виду что то что одна база формата dbf - не проблема.

добавлю - скуль стоит 2003

поставлю вопрос ребром - как из одной базы сделать запрос к данным другой базы данных. всё. остальное - сам додумаю. потому как в дебри типа "linked server" сейчас лезть не буду - есть болие приоритетные вопросы по теме
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 3 
ОтправитьПечать