Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Перечисление в присоединенной базе (число прочтений - 13456 )
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
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 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
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 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
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 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
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 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
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 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 записан
 
val
Full Member
***
Отсутствует


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

Сообщений: 137
Зарегистрирован: 07. Июля 2006
Re: Перечисление в присоединенной базе
Ответ #15 - 18. Ноября 2006 :: 11:34
Печать  
(14) Корректно - это как?
Где поискать?
  
Наверх
 
IP записан
 
Uncle
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 93
Зарегистрирован: 26. Июля 2006
Re: Перечисление в присоединенной базе
Ответ #16 - 19. Ноября 2006 :: 07:58
Печать  
http://www.1cpp.ru/forum/YaBB.pl?num=1157647282/0#0
Проверь текущий ночник, если в нем не будут работать перечисления, говори - порою у себя, должен где-то быть...
Удачи
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



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

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


Будет отличаться, если задействованный в запросе метаданные различны в разных базах (вплоть до самого факта существования).
я обращаю внимание, что пропарсить то же можно по "чужим" метаданным.
Т.е. подключить к другим метаданным не MetaDataWork, а непосредственно ODBCRecordset
  

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



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Перечисление в присоединенной базе
Ответ #18 - 20. Ноября 2006 :: 06:04
Печать  
Uncle писал(а) 18. Ноября 2006 :: 11:22:
Была такая проблема, насколько я помню уже решена в промежуточном ночном релизе, там перечисдление присоединенной базы обрабатывается корректно

не было такого
  

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


I Love YaBB 2!

Сообщений: 93
Зарегистрирован: 26. Июля 2006
Re: Перечисление в присоединенной базе
Ответ #19 - 20. Ноября 2006 :: 06:17
Печать  
trad писал(а) 20. Ноября 2006 :: 06:04:
Uncle писал(а) 18. Ноября 2006 :: 11:22:
Была такая проблема, насколько я помню уже решена в промежуточном ночном релизе, там перечисдление присоединенной базы обрабатывается корректно

не было такого

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



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Перечисление в присоединенной базе
Ответ #20 - 20. Ноября 2006 :: 06:25
Печать  
Не понял, чего не было???
Uncle писал(а) 20. Ноября 2006 :: 06:17:
там перечисдление присоединенной базы обрабатывается корректно

  

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


I Love YaBB 2!

Сообщений: 93
Зарегистрирован: 26. Июля 2006
Re: Перечисление в присоединенной базе
Ответ #21 - 23. Ноября 2006 :: 06:13
Печать  
trad писал(а) 20. Ноября 2006 :: 06:25:
Не понял, чего не было???
Uncle писал(а) 20. Ноября 2006 :: 06:17:
там перечисление присоединенной базы обрабатывается корректно



Что-то я тебя не понимаю, уважаемый Trad, ты ж сам сделал и я потом проверил, все нормально работало???  Нерешительный
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Перечисление в присоединенной базе
Ответ #22 - 23. Ноября 2006 :: 07:24
Печать  
Извини, но ты заблуждаешся.
Мной было добавлено метаимя $Перечисление.<Вид>.<Значение>
К типизации это не имеет никакого отношения. Типизация перечислениями была со времен появления метапарсера.
Но типизация агрегатными типами, в т.ч. и значениями перечислений, на присоединенной ИБ в общем случае невозможна.
  

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


I Love YaBB 2!

Сообщений: 93
Зарегистрирован: 26. Июля 2006
Re: Перечисление в присоединенной базе
Ответ #23 - 23. Ноября 2006 :: 07:51
Печать  
И в самом деле к типизации этот случай не относится Ужас)
Опять моя невнимательность... Сори
  
Наверх
 
IP записан
 
Oliver
Junior Member
**
Отсутствует



Сообщений: 25
Местоположение: SPb
Зарегистрирован: 25. Мая 2006
Пол: Мужской
Re: Перечисление в присоединенной базе
Ответ #24 - 24. Ноября 2006 :: 05:38
Печать  
1. А по условиям задачи удаленная база дана as is или считается, что можем изменить ее конфигурацию и т.д.?
Подмигивание
2. По OLE достаточно подключиться, выбрать себе в таблицу идентификаторы, номера и представления нужного перечисления и одключиться. Канал настолько узок что и такое все равно не потянет?
  
Наверх
 
IP записан
 
val
Full Member
***
Отсутствует


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

Сообщений: 137
Зарегистрирован: 07. Июля 2006
Re: Перечисление в присоединенной базе
Ответ #25 - 24. Ноября 2006 :: 12:32
Печать  
(24) Слишком долго будет идти сама процедура подключения по ОЛЕ к базе на канале шириной 256Кбит
  
Наверх
 
IP записан
 
Oliver
Junior Member
**
Отсутствует



Сообщений: 25
Местоположение: SPb
Зарегистрирован: 25. Мая 2006
Пол: Мужской
Re: Перечисление в присоединенной базе
Ответ #26 - 24. Ноября 2006 :: 13:28
Печать  
val писал(а) 24. Ноября 2006 :: 12:32:
(24) Слишком долго будет идти сама процедура подключения по ОЛЕ к базе на канале шириной 256Кбит


Это предположение или проверенный факт? Я бы проверил. Но не суть.

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

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

Я конечно банальные вещи предлагаю, которые и без меня наверное понятны, но все же почему так не сделать?
  
Наверх
 
IP записан
 
val
Full Member
***
Отсутствует


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

Сообщений: 137
Зарегистрирован: 07. Июля 2006
Re: Перечисление в присоединенной базе
Ответ #27 - 26. Ноября 2006 :: 15:20
Печать  
(26) "Это предположение или проверенный факт?"
Это проверенный факт.
"но все же почему так не сделать?"
Все давно сделано.
Не решен принципиальный вопрос - получение представления перечисления (идентификатор, номер) из любой присоединенной базы без "нелепых движений" (с) Улыбка
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 
ОтправитьПечать