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


Дорогу осиливает идущий

Сообщений: 137
Зарегистрирован: 07. Июля 2006
Перечисление в присоединенной базе
10. Ноября 2006 :: 13:46
Печать  
Работаю с 1С++ 2.0.3.1 с присоединенной базой:
           Database=СоздатьОбъект("ODBCDatabase");
           Database.ПрисоединитьИБ(Путь);
           глRecordSet=СоздатьОбъект("ODBCRecordSet");
           глRecordSet.УстБД(Database);
Вытаскиваю  документы. Один из реквизитов шапки документа - перечисление.
Не удается получить какое-либо представление этого перечисления, пригодное для анализа (идентификатор, номер).
Так работает в своей базе, но вылетает в присоединенной:
$ДокП.ВидДокумента [ВидДокумента $Перечисление.ВидыДокументовКнигиПриобретения]
Так дает неудобочтимый вариант:
$ДокП.ВидДокумента [ВидДокумента]

Нужна помощь.

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



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Перечисление в присоединенной базе
Ответ #1 - 10. Ноября 2006 :: 14:23
Печать  
Подмигивание я думал у меня дежавю
http://www.1cpp.ru/forum/YaBB.pl?num=1157467626
ответ #1 п.2
  

1&&2&&3
Наверх
 
IP записан
 
val
Full Member
***
Отсутствует


Дорогу осиливает идущий

Сообщений: 137
Зарегистрирован: 07. Июля 2006
Re: Перечисление в присоединенной базе
Ответ #2 - 10. Ноября 2006 :: 14:45
Печать  
(1) В прошлый раз ты подсказал варианты решений. Помогло конкретно.
Может, есть варианты и для этого случая?
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Перечисление в присоединенной базе
Ответ #3 - 10. Ноября 2006 :: 15:00
Печать  
задача интересная.
Но у меня в голове пока только один способ:
а) иметь на "той" стороне служебную таблицу с полями (ИД, Представление)
б) "та" сторона, регламентно (в идеале после каких-либо изменения в составе перечислений), обновляет эту таблицу
в) ну и в запросе выполнять соединение с этой таблицей по ИД перечисления
  

1&&2&&3
Наверх
 
IP записан
 
val
Full Member
***
Отсутствует


Дорогу осиливает идущий

Сообщений: 137
Зарегистрирован: 07. Июля 2006
Re: Перечисление в присоединенной базе
Ответ #4 - 10. Ноября 2006 :: 15:10
Печать  
(3) Ответ интересный. Но, прямо скажем, ... . 
Ну, в общем, вам по пояс будет (с) Улыбка
  
Наверх
 
IP записан
 
Quan
1c++ donor
1c++ power user
Отсутствует


I'm old, bald and ugly.

Сообщений: 273
Местоположение: Новосибирск -- Москва
Зарегистрирован: 20. Мая 2006
Пол: Мужской
Re: Перечисление в присоединенной базе
Ответ #5 - 10. Ноября 2006 :: 18:02
Печать  
trad писал(а) 10. Ноября 2006 :: 15:00:
задача интересная.
Но у меня в голове пока только один способ:
а) иметь на "той" стороне служебную таблицу с полями (ИД, Представление)
б) "та" сторона, регламентно (в идеале после каких-либо изменения в составе перечислений), обновляет эту таблицу
в) ну и в запросе выполнять соединение с этой таблицей по ИД перечисления


ну... или подключить через ОЛЕ 1с "той" базы, запустьть там 1срр и вытащить нужные ИД
  

А для тех, кто не хотел учить SQL, господь сотворил курсоры
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Перечисление в присоединенной базе
Ответ #6 - 11. Ноября 2006 :: 07:26
Печать  
если иметь ОЛЕ подключение, то это уже будет не спортивно  Подмигивание
  

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


I'm old, bald and ugly.

Сообщений: 273
Местоположение: Новосибирск -- Москва
Зарегистрирован: 20. Мая 2006
Пол: Мужской
Re: Перечисление в присоединенной базе
Ответ #7 - 11. Ноября 2006 :: 10:15
Печать  
trad писал(а) 11. Ноября 2006 :: 07:26:
если иметь ОЛЕ подключение, то это уже будет не спортивно  Подмигивание


А в данном случае, кстати, и ОЛЕ не спасает: коллега-то желает получить из запроса готовую типизацию "перечисление", а сие по определению невозможно, т.к. соответствующая типизация не обязана даже присутствовать в базе, со стороны которой инициируется запрос, не говоря уж о том, что не обязаны совпадать внутренние ИД  Подмигивание

Хотя, вообще-то, если обе базы унаследовали перечисление от одного и того же МД, то метод все же есть:
1. Подключаем объект метаданных к "чужой" базе.
2. Выдергиваем все необходимые имена таблиц и полей.
3. "Ручками" без метапарсера клеим запрос.
4. Подключаем свой родной МД, и уже в него заливаем запрос с требуемой типизацией выходного поля.

По идее должно проканать Улыбка
  

А для тех, кто не хотел учить SQL, господь сотворил курсоры
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Перечисление в присоединенной базе
Ответ #8 - 11. Ноября 2006 :: 10:36
Печать  
Quan писал(а) 11. Ноября 2006 :: 10:15:
А в данном случае, кстати, и ОЛЕ не спасает: коллега-то желает получить из запроса готовую типизацию "перечисление", а сие по определению невозможно, т.к. соответствующая типизация не обязана даже присутствовать в базе, со стороны которой инициируется запрос, не говоря уж о том, что не обязаны совпадать внутренние ИД  Подмигивание
нет, ему достаточно например представления.
Поэтому на стороне оле-сервера создаем метадатаворк, по ИД получаем тамже агрегатное перечисление, а уже потом представление.
  

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



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Перечисление в присоединенной базе
Ответ #9 - 11. Ноября 2006 :: 10:41
Печать  
Quan писал(а) 11. Ноября 2006 :: 10:15:
1. Подключаем объект метаданных к "чужой" базе.
2. Выдергиваем все необходимые имена таблиц и полей.
3. "Ручками" без метапарсера клеим запрос.

результат ничем не будет отличатся если просто пропарсить по чужим метаданным
  

1&&2&&3
Наверх
 
IP записан
 
val
Full Member
***
Отсутствует


Дорогу осиливает идущий

Сообщений: 137
Зарегистрирован: 07. Июля 2006
Re: Перечисление в присоединенной базе
Ответ #10 - 13. Ноября 2006 :: 06:13
Печать  
(8) Мне в самом деле нужно представление, а не типизация.
Подключение по ОЛЕ нежелательно: работаю со многими присоединенными базами по низкоскоростным каналам: от 256Кбит.
ОЛЕ будет либо срываться, либо грузиться русский месяц.
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


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

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Перечисление в присоединенной базе
Ответ #11 - 13. Ноября 2006 :: 16:34
Печать  
Может быть тупость... но наверное можно и хранить у себя представления для таких вот объектов чтобы каждый раз не лазить...
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
Quan
1c++ donor
1c++ power user
Отсутствует


I'm old, bald and ugly.

Сообщений: 273
Местоположение: Новосибирск -- Москва
Зарегистрирован: 20. Мая 2006
Пол: Мужской
Re: Перечисление в присоединенной базе
Ответ #12 - 13. Ноября 2006 :: 17:22
Печать  
trad писал(а) 11. Ноября 2006 :: 10:41:
Quan писал(а) 11. Ноября 2006 :: 10:15:
1. Подключаем объект метаданных к "чужой" базе.
2. Выдергиваем все необходимые имена таблиц и полей.
3. "Ручками" без метапарсера клеим запрос.

результат ничем не будет отличатся если просто пропарсить по чужим метаданным


Будет отличаться, если задействованный в запросе метаданные различны в разных базах (вплоть до самого факта существования).
Я как раз и предлагал метод из минимального предположения, что общим-унаследованным является только необходимый для типизации объект "перечисление". Если же базы ващще разные - туши свет.
  

А для тех, кто не хотел учить SQL, господь сотворил курсоры
Наверх
 
IP записан
 
val
Full Member
***
Отсутствует


Дорогу осиливает идущий

Сообщений: 137
Зарегистрирован: 07. Июля 2006
Re: Перечисление в присоединенной базе
Ответ #13 - 14. Ноября 2006 :: 05:37
Печать  
(11) Хранить у себя представления для всех перечислений всех баз?
Плохо представляю себе процедуру сбора таких сведений, поддержания в актуальном состоянии.
(12) "Я знаю, что задача неразрешима, меня интересует, как ее решить." (с)  Улыбка
По сути, меня для начала устроил бы номер перечисления: ПорядковыйНомер().
Базы в самом деле разные.
  
Наверх
 
IP записан
 
Uncle
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 93
Зарегистрирован: 26. Июля 2006
Re: Перечисление в присоединенной базе
Ответ #14 - 18. Ноября 2006 :: 11:22
Печать  
Была такая проблема, насколько я помню уже решена в промежуточном ночном релизе, там перечисдление присоединенной базы обрабатывается корректно
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать