Имя: Пароль:
1C
1С v8
Как хранить ссылки?
,
0 Dolphinbet
 
28.01.14
11:24
Как лучше хранить ссылки на элементы справочников из других баз идентичной конфигурации? Есть три варианта Строка(36), УникальныйИдентификатор, в виде "битых" ссылок. Какой вариант предпочтительней с точки зрения производительности запросов с участием  этих полей, что лучше индексируется?
1 Ненавижу 1С
 
гуру
28.01.14
11:26
(0) сначала скажи зачем?

если нужно будет его представление, то лучше и хранить как идентичный справочник
2 Defender aka LINN
 
28.01.14
11:27
(0) Ссылка - это кроме ИД, еще и тип. Которого в другой базе элементарно может и не быть.
3 H A D G E H O G s
 
28.01.14
11:27
(2) "идентичной конфигурации"
4 Адинэснег
 
28.01.14
11:29
(0)о че бы объекты не хранить?
5 portowyi
 
28.01.14
11:29
ЗначениеВСтрокуВнутр(), ЗначениеИзСтрокиВнутр() - использую при обмене через COM соединение.
6 H A D G E H O G s
 
28.01.14
11:29
Храни УникальныйИдентификатор
7 Dolphinbet
 
28.01.14
11:29
(1) Да, представление нужно будет
8 Ненавижу 1С
 
гуру
28.01.14
11:32
(7) тогда прочти (1) полностью
9 Maxus43
 
28.01.14
11:33
сами элементы справочника и храни... что мешает?
10 Dolphinbet
 
28.01.14
11:35
(8) Из-за представления создавать идентичные элементы справочника? Нужно только ссылка+представление
11 Ненавижу 1С
 
гуру
28.01.14
11:35
(10) смотри тогда (9) раз непонятно
12 Dolphinbet
 
28.01.14
11:38
Непонятно зачем мне в базе создавать копии элементов справочников, если есть ссылка на справочник во внешней базе всегда через веб-сервис например можно получить данные этого элемента. Тем более если эти справочники большие...
13 Ненавижу 1С
 
гуру
28.01.14
11:39
(12) а скорость чтения?
большие это насколько?
14 sapphire
 
28.01.14
11:40
ЗначениеXML
15 sapphire
 
28.01.14
11:40
или (6)
16 Dolphinbet
 
28.01.14
11:43
(13) скорость меньше, но это не критично. К примеру насколько для Вас критична скорость загрузки страниц при работе в интернете? Никто же не тащит всю информации на ваш компьютер. Или к примеру работа в веб-клиенте 1С
17 Ненавижу 1С
 
гуру
28.01.14
11:44
(16) ты помнишь как миста тормозила?
18 Dolphinbet
 
28.01.14
11:45
(6) А как хранится одинэсовский УникальныйИдентификатор в базе данных?
19 Dolphinbet
 
28.01.14
11:47
(17) нет, не помню)
20 H A D G E H O G s
 
28.01.14
11:48
(18) Что конкретно тебя интересует?
21 Dolphinbet
 
28.01.14
11:50
(20) Тип значения в БД SQL.. на индексирование же влияет тип данных.
22 H A D G E H O G s
 
28.01.14
11:51
(21) binary(16)
Так же, как у ссылки. Все норм.
23 Ненавижу 1С
 
гуру
28.01.14
11:51
(21) бинарный тип
24 Dolphinbet
 
28.01.14
11:52
ну т е для индексирования это лучше чем Строка(36)?
25 H A D G E H O G s
 
28.01.14
11:53
Да
26 Dolphinbet
 
28.01.14
11:53
Спасибо, тогда остановлюсь на таком варианте. Сначала сделал строковый тип, но возникли сомнения, решил уточнить)
27 Maxus43
 
28.01.14
11:53
искать тут оптимальный тип... не в этом проблема будет, а в постоянном дёрганье веб-сервиса на получение данных по этому элементу. То, что ты мог запросами узнать у себя в "общей" базе - придётся дёргать веб-сервис
28 Dolphinbet
 
28.01.14
11:54
(27) вроде как скоро обещают REST сделать, он вроде производительней чем SOAP
29 Maxus43
 
28.01.14
12:13
(28) если бы да кабы... Везде где видел подобные реализации "общих справочников" аля НСИ - хранят спокойно сами элементы, обмениваются или по планам обмена, или просто сериализуют элемент в файл и кидают спокойненько в другую базу. Более универсально и надёжно это вот, вдруг потом понадобится реально эта информация? Делать дак на века...
30 Dolphinbet
 
28.01.14
14:34
Такс, первый глюк с УникальнымИдентификаторм. Создаю ТЗ с типом колонки УникальныйИдентификатор, помещаю ТЗ во временную таблицу - "тип не может быть выбран в запросе".
31 Рэйв
 
28.01.14
14:36
ЗначениеВСтрокуВнутр.
Если правда идентичные конфы конечно
32 Dolphinbet
 
28.01.14
15:02
(31) ЗначениеВСтрокуВнутр это строка, причем длиннее 36 символов, если уж хранить в строковом виде тогда, тогда лучше Строка(УникальныйИдентификатор)
33 Maxus43
 
28.01.14
15:11
ТЗ точно типизирована?
34 Рэйв
 
28.01.14
15:14
(32)А УникальныйИдентификатор потом пербором по всем таблицам будешь выискивать?
35 Maxus43
 
28.01.14
15:15
ТЗ = Новый ТаблицаЗначений;
    ТЗ.Колонки.Добавить("УИД", Новый ОписаниеТипов("УникальныйИдентификатор"));
36 Широкий
 
28.01.14
15:16
Я бы в качестве строки ГУИД хранил.
XMLСтрока/XMLЗначение кстати быстрее всего отрабатывают
37 Dolphinbet
 
28.01.14
15:16
(34) Нет, зачем?
(35) Да, так и есть
38 SeraFim
 
28.01.14
15:18
в БСП подсистема обмен данными - как строку хранят (РС СоответствияОбъектовИнформационныхБаз)
39 Dolphinbet
 
28.01.14
15:19
(38) как строку не очень хорошо, но возможно придется. Еще вариант хранить "битые" ссылки
40 Dolphinbet
 
28.01.14
15:23
ТЗ = Новый ТаблицаЗначений;
    ТЗ.Колонки.Добавить("УИД", Новый ОписаниеТипов("УникальныйИдентификатор"));
    
    НС = ТЗ.Добавить();
    Нс.УИД = Новый УникальныйИдентификатор;
    
    Запрос = Новый Запрос("ВЫБРАТЬ
    |    времТЗ.УИД
    |ПОМЕСТИТЬ времТЗ
    |ИЗ
    |    &времТЗ КАК времТЗ
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    времТЗ.УИД
    |ИЗ
    |    времТЗ КАК времТЗ");
    
    Запрос.УстановитьПараметр("времТЗ", ТЗ);
    
    Запрос.Выполнить().Выбрать();

{Форма.Форма(25)}: Ошибка при вызове метода контекста (Выполнить): {(2, 2)}: Тип не может быть выбран в запросе
<<?>>времТЗ.УИД
    Запрос.Выполнить().Выбрать();
по причине:
{(2, 2)}: Тип не может быть выбран в запросе
<<?>>времТЗ.УИД
41 Широкий
 
28.01.14
15:23
(39) Битые ссылки это хрень. Нет гарантии что ид-шники таблиц будут совпадать
42 Dolphinbet
 
28.01.14
15:30
(41) тогда придется в виде строки, жаль что УникальныйИдентификатор не прокатил
43 ИС-2
 
naïve
28.01.14
15:31
(0) я храню ввиде текстовых GUIDов в базе приемнике. В основной базе добавил общий реквзит GUID.
В запросах связываю данные по этому реквзиту.
Пользователи даже не знают, что данные для отчетов берутся из другой базы.
Минус, что приходится использовать код т.к внешние источники данных не могут работать с другими таблицами :(
  
(1) например, база делится на 2. База оперативного учета (регистры хранят только актуальную информацию) и аналитическую базу (хранится история заполнения регистра).
44 Широкий
 
28.01.14
15:32
(42) Если обмен односторонний - можно элементы в примнике создавать с тем же ид-шником, что и в источнике.
Тогда заморачиватся с соответствиями не надо
45 ИС-2
 
naïve
28.01.14
15:32
(40) все нормально. GUIDы нельзя выбрать в запросе, поэтому храню как текст(36)
46 Dolphinbet
 
28.01.14
15:34
(45) ладно, переделываю обратно на Строка(36)....
47 H A D G E H O G s
 
28.01.14
16:37
|    времТЗ.УИД
    |ПОМЕСТИТЬ времТЗ
    |ИЗ
    |    &времТЗ КАК времТЗ
    |;
    |

Заменить на

    |    ВЫРАЗИТЬ (времТЗ.УИД как Справочник.Номенклатура) как УИД
    |ПОМЕСТИТЬ времТЗ
    |ИЗ
    |    &времТЗ КАК времТЗ
    |;
    |
48 Dolphinbet
 
03.02.14
09:40
(47)хм, в таком случае я не уверен, что СУБД построит правильный план запроса, при соединении таблиц по полю с выражением ВЫРАЗИТЬ:

|    ВЫРАЗИТЬ (времТЗ.УИД как Справочник.Номенклатура) как УИД
    |ПОМЕСТИТЬ времТЗ
    |ИЗ
    |    &времТЗ КАК времТЗ
    |;
    |
...
ИЗ времТЗ
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СоответствияНоменклатуры КАК СоответствияНоменклатуры
ПО времТЗ.УИД = ВЫРАЗИТЬ (СоответствияНоменклатуры.ИдНоменклатуры КАК Справочник.Номенклатура)