Имя: Пароль:
1C
 
Добавление самостоятельно индекса в 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