![]() |
![]() |
|
Добавление самостоятельно индекса в SQL таблицу базы 7.7 | ☑ | ||
---|---|---|---|---|
0
Joshim
18.03.16
✎
14:34
|
Уважаемое сообщество 1С разработчиков, скажите можно самостоятельно добавлять индекс в SQL таблицу 1C7.7. 1С "переживет" это?
|
|||
1
Ёпрст
гуру
18.03.16
✎
14:35
|
переживёт
|
|||
2
lubitelxml
18.03.16
✎
14:35
|
1с всех переживет...
|
|||
3
Mikeware
18.03.16
✎
14:37
|
можно.
Только не забывай, что при реструктуризации этой таблицы индекс скорее всего слетит. Поэтому вткни процедуру в ПриНачалеРаботы |
|||
4
Joshim
18.03.16
✎
15:51
|
при входе 1С7 пишет "Нарушена структура индексов таблицы, для восстановления запустите программу в монопольном режиме". Если запустить монопольно - индекс исчезает
|
|||
5
lubitelxml
18.03.16
✎
15:52
|
(4) читай (3), кури ПриНачалеРаботыСистемы
|
|||
6
Joshim
18.03.16
✎
15:53
|
в смысле из кода добавлять? кажется понял
|
|||
7
lubitelxml
18.03.16
✎
15:54
|
(6) да, создавай его когда 1с уже прогрузилась
|
|||
8
Joshim
18.03.16
✎
16:00
|
через ODBCRecordSet правильно или придумали что-то быстрее уже?
|
|||
9
trad
18.03.16
✎
16:02
|
(7) а при выходе удалять?
иначе при следующем входе получим (4) |
|||
10
trad
18.03.16
✎
16:02
|
что бы "левый" индекс воспринимался как "родной" его необходимо прописать в dds
|
|||
11
lubitelxml
18.03.16
✎
16:06
|
(10) наверное ты прав, но тогда при реструктуризации придется каждый раз dds руками менять...
|
|||
12
Ёпрст
гуру
18.03.16
✎
16:07
|
(11) зачем ? Дописывай ддс всё в той же при начале работы системы
|
|||
13
trad
18.03.16
✎
16:08
|
(11) да, именно так
|
|||
14
trad
18.03.16
✎
16:09
|
(12) не выйдет. dds нужен исправленный еще при старте до НачалаРаботыСистемы()
|
|||
15
trad
18.03.16
✎
16:10
|
где то был скриптик для опенконфа который доп.индексы из спец файла ddx запихивал в dds сразу после реструктуризации
|
|||
16
Ёпрст
гуру
18.03.16
✎
16:17
|
(14) та не вопрос, проверяешь индекс, если нет, дописываешь в скуле и в ддс, Окошко с перезапуском и статусВозврата(0) в ПриНачале усё.
Так, в своё время всем правил cfg |
|||
17
Ёпрст
гуру
18.03.16
✎
16:18
|
дешево и сердито
|
|||
18
ДенисЧ
18.03.16
✎
16:19
|
Дык там вроде какую-то хранимку можно было переписать, чтобы оно на индексы не ругалось, нет?
|
|||
19
trad
18.03.16
✎
16:23
|
(17) нормально вроде
только зачем "Окошко с перезапуском и статусВозврата(0) в ПриНачале" ? |
|||
20
Mikeware
18.03.16
✎
16:26
|
(19) чтоб немонопольно запускать?
|
|||
21
trad
18.03.16
✎
16:29
|
(20) так вроде как немонопольно заходишь, создаешь индекс если его нет и прописываешь в dds
|
|||
22
Mikeware
18.03.16
✎
16:30
|
(21) а ты зайдешь немонопольно? "нарушение структуры" до ПриНачалеРаботы
|
|||
23
Mikeware
18.03.16
✎
16:30
|
(21) а, торможу...
|
|||
24
Mikeware
18.03.16
✎
16:31
|
(18) патч соарона вроде?
|
|||
25
Ёпрст
гуру
18.03.16
✎
16:31
|
(19) окошко для юзверов, на 5 секунд, чтоб не пугались :)
|
|||
26
Ёпрст
гуру
18.03.16
✎
16:31
|
(24) это тоже есть
|
|||
27
trad
18.03.16
✎
16:33
|
(25) перезапуск то зачем?
|
|||
28
ДенисЧ
18.03.16
✎
16:34
|
(24) Зачем призывать тёмные силы? Если скуль, то там одна хранимка руками правилась...
Вот какая - не помню, эклер обострился... |
|||
29
trad
18.03.16
✎
16:35
|
(28) путаешь, нет там хранимки по теме
|
|||
30
Mikeware
18.03.16
✎
16:35
|
а вот кто мне объяснит, зачем приоткрытии формы журнала и отчета происходит событие ВводНового...
О сколько нам открытий чудных...(цы) |
|||
31
ДенисЧ
18.03.16
✎
16:36
|
(29) Как нет???
|
|||
32
ДенисЧ
18.03.16
✎
16:37
|
||||
33
trad
18.03.16
✎
16:38
|
(31) - вот так нет
- как так вот так нет - никак нет |
|||
34
ДенисЧ
18.03.16
✎
16:39
|
(33)
Не смотря на ограниченность управления индексами в 1С 7,7. решение существует. У этого метода есть все же определенные недостатки связанные с удобствами администрирования. Необходимо определится с префиксом наименования индекса и в дальнейшем на этом сервере все индексы в рамках баз 1С нужно называть с предопределенным префиксом. Пускай этот префикс будет P1С – это довольно редкий префикс. В процедуре master.dbo.sp_statistics (процедура, ответственная за проверку наличия индексов таблиц) необходимо изменить небольшую часть кода. Смысл изменений в том что если эту процедуру вызывает приложение 1С то в этом случае в результат выполнения этой процедуры не будут попадать индексы с префиксом P1С. if app_name()='1CV7' /* это проверка какое приложение вызывает процедуру*/ begin /*этот вариант срабатывает если запущена процедура из 1С */ SELECT TABLE_QUALIFIER, TABLE_OWNER, TABLE_NAME, NON_UNIQUE, INDEX_QUALIFIER, INDEX_NAME, TYPE, SEQ_IN_INDEX, COLUMN_NAME, COLLATION, CARDINALITY, PAGES, FILTER_CONDITION = convert(varchar(128),null) FROM #TmpIndex WHERE (INDEX_NAME like @index_name /* If matching name */ or INDEX_NAME is null) /* If SQL_TABLE_STAT row */ and (substring(INDEX_NAME,1,3)<>'P1C' or INDEX_NAME is NULL) /*вот это проверка на префикс, если он начинается на P1C*/ /*то в результат выполнения процедуры не попадает*/ ORDER BY 4, 7, 6, 8 end else begin /* это старый вариант реализации, стандартный*/ SELECT TABLE_QUALIFIER, TABLE_OWNER, TABLE_NAME, NON_UNIQUE, INDEX_QUALIFIER, INDEX_NAME, TYPE, SEQ_IN_INDEX, COLUMN_NAME, COLLATION, CARDINALITY, PAGES, FILTER_CONDITION = convert(varchar(128),null) FROM #TmpIndex WHERE (INDEX_NAME like @index_name /* If matching name */ or INDEX_NAME is null) /* If SQL_TABLE_STAT row */ end |
|||
35
trad
18.03.16
✎
16:42
|
(32) ааа, вот ты про что, я думал ты про 1сные хранимки
да, интересный вариант |
|||
36
trad
18.03.16
✎
16:44
|
(35) но, имхо, еще более завуалированный чем правка dds
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |