Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема ИТ: Обновление индекса после изменения значения индексной колонки (число прочтений - 2858 )
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
ИТ: Обновление индекса после изменения значения индексной колонки
05. Мая 2009 :: 08:38
Печать  
Есть две ИТ. В них есть колонка "Контрагент".
Выполняю с ними следующие действия:
1) добавляю индекс по этой колонке в обоих таблицах,
2) выполняю полное соединение между ними по этой же колонке,

Код
Выбрать все
мТаб1.ПолноеСоединение ("Контрагент", мТаб2, "Контрагент",
	"Контрагент : Таб2__Контрагент, Итог_Сумма : Таб2__Итог_Сумма")
 



3)  для записей добавленных из правой таблицы поле "Контрагент" получается пустым а поле "Таб2__Контаргент" заполненным,
поэтому для этих записей я  заполняю поле "Контрагент" значением поля "Таб2__Контрагент"

После всех этих манипуляций нарушается индекс таблицы Таб1.
Есть ли какая-либо команда для обновления индекса?
Сейчас мне приходится делать так:

Код
Выбрать все
Таб1.УдалитьИндекс("Контрагент");
Таб1.ДобавитьИндекс("Контрагент", "Контрагент", 0);
 


  
Наверх
ICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ИТ: Обновление индекса после изменения значения индексной колонки
Ответ #1 - 05. Мая 2009 :: 10:45
Печать  
ИМХО прилично быстрее будет перед заполнением доп.колонки удалить индекс, а уже после заполнения заново его создать.

Команды обновления индекса нету.
Юзай штатный путь, который я описал.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: ИТ: Обновление индекса после изменения значения индексной колонки
Ответ #2 - 05. Мая 2009 :: 11:23
Печать  
То есть такая проблема не только у меня. А то я уж подумал может я чего не так написал.

Придется воспользоваться обходным путем.
Спасибо.
  
Наверх
ICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: ИТ: Обновление индекса после изменения значения индексной колонки
Ответ #3 - 05. Мая 2009 :: 14:26
Печать  
es3000 писал(а) 05. Мая 2009 :: 08:38:
1) добавляю индекс по этой колонке в обоих таблицах,
2) выполняю полное соединение между ними по этой же колонке,

Индекс по левой таблице для выполнения полного соединения не нужен.

Цитата:
После всех этих манипуляций нарушается индекс таблицы Таб1.

Если это так, то можно сделать тест в любом виде и добавить запись в багтракере.
Индекс по левой таблице не нужен, но и нарушаться он не должен.

Цитата:
3)  для записей добавленных из правой таблицы поле "Контрагент" получается пустым а поле "Таб2__Контаргент" заполненным,
поэтому для этих записей я  заполняю поле "Контрагент" значением поля "Таб2__Контрагент"

А почему не копировать сразу в колонку "Контрагент"?
Не знаю, как это перенесет текущая реализация соединения в ИТ, но в теории, такой вариант использования возможен.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: ИТ: Обновление индекса после изменения значения индексной колонки
Ответ #4 - 06. Мая 2009 :: 06:50
Печать  
Цитата:
Цитата:
3)  для записей добавленных из правой таблицы поле "Контрагент" получается пустым а поле "Таб2__Контаргент" заполненным,
поэтому для этих записей я  заполняю поле "Контрагент" значением поля "Таб2__Контрагент"

А почему не копировать сразу в колонку "Контрагент"?
Не знаю, как это перенесет текущая реализация соединения в ИТ, но в теории, такой вариант использования возможен.


Сразу не хочу копировать в колонку "Контрагент" потому что эта колонка будет перезаписываться даже для тех записей, которые есть в обоих таблицах.
Как-то была ситуация я это проверял. Конечно это ерунда, возможно никаких плохих последствий и не будет, но все-таки такое поведение мне кажется нелогичным.
Правильнее было бы скопировать в колонку "Контрагент" левой таблицы только тех контрагентов, которые есть в правой но отсутсвуют в левой. Это я и делаю вручную на 3-ем шаге.
  
Наверх
ICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: ИТ: Обновление индекса после изменения значения индексной колонки
Ответ #5 - 06. Мая 2009 :: 09:36
Печать  
es3000 писал(а) 06. Мая 2009 :: 06:50:
Сразу не хочу копировать в колонку "Контрагент" потому что эта колонка будет перезаписываться даже для тех записей, которые есть в обоих таблицах.
Как-то была ситуация я это проверял. Конечно это ерунда, возможно никаких плохих последствий и не будет, но все-таки такое поведение мне кажется нелогичным.

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

+
Хотя, можно и не заморачиваться.
Там на самом деле все просто: копирование действительно есть, но это малозатратная операция.
И в любом случае после завершения соединения - идет полный реиндекс по всем индексам приемника.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: ИТ: Обновление индекса после изменения значения индексной колонки
Ответ #6 - 06. Мая 2009 :: 12:02
Печать  
kms писал(а) 06. Мая 2009 :: 09:36:
es3000 писал(а) 06. Мая 2009 :: 06:50:
Сразу не хочу копировать в колонку "Контрагент" потому что эта колонка будет перезаписываться даже для тех записей, которые есть в обоих таблицах.
Как-то была ситуация я это проверял. Конечно это ерунда, возможно никаких плохих последствий и не будет, но все-таки такое поведение мне кажется нелогичным.

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

+
Хотя, можно и не заморачиваться.
Там на самом деле все просто: копирование действительно есть, но это малозатратная операция.
И в любом случае после завершения соединения - идет полный реиндекс по всем индексам приемника.


Да, можно не заморачиваться, или сделать это опционально например в зависимости от доп.параметра метода "ПолноеСоединение".
Дело не в затратах. Я начал с этим разбираться из-за того что индекс попортился. вероятно индекс попортился не из за соединения, а из-за следующего за ним заполнения колонки "Контрагент" из колонки "Таб2__Контрагент"
  
Наверх
ICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: ИТ: Обновление индекса после изменения значения индексной колонки
Ответ #7 - 06. Мая 2009 :: 17:52
Печать  
es3000 писал(а) 06. Мая 2009 :: 12:02:
Дело не в затратах. Я начал с этим разбираться из-за того что индекс попортился. вероятно индекс попортился не из за соединения, а из-за следующего за ним заполнения колонки "Контрагент" из колонки "Таб2__Контрагент"

Что-то здесь не то.
ИТ допускает динамическое изменение индекса, ничего здесь портиться не должно.
Другое дело, что итерирование с одновременным изменением индекса невозможно (по крайней мере, в последних версиях icpp).
Не с этим ли связано? У тебя версия какая? Как выполняется перенос колонки Таб2__Контрагент - дай кусок кода.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать