|
On-line изменение схемы таблицы 1С в SQL Server'е
|
|||
---|---|---|---|
#18+
Доброе всем времени суток! У меня такой вопрос, хотя лучше сначала немного предыстории… В конторе есть 1С + SQL Server. Задача от руководства: Обеспечить логирование всех изменений в базе, при чем, стандартным mlg-файлом не подходит (была ситуация, когда один шибко умный пассажир просто-напросто потер логи о своих дейвствиях). Решение: В 1С заводится справочник «Лог». При вводе нового элемента и редактирования анализируется 1cv7.dds для выяснения какие таблицы и поля использует тот или иной справочник. При записи напрямую в SQL выполняется запрос, который создает триггер у нужной таблицы и создает таблицы куда пишет триггер. Плюс у справчника исть булево значение «Вкл/Выкл» - для включения или выключения триггера. Система работает, но есть одно НО: если при добавлении / включении / выключении / удалении триггера у кого-то открыт справочник (для которого задается параметр триггера), то 1С ругается «Could not complete cursor operation because the table schema changed after the cursor», и вылетает. Но триггер изменяется успешно. Вот эти скульные запрос: ИмяТаблицы -> SC1809 ПоляТаблицы-> ID, Descr и т. д. Для добавления таблицы под логи: Код: plaintext 1. 2. 3. 4. 5. 6.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Для включения / выключения триггеров: Код: plaintext 1. 2.
Вопрос: Можно ли с этим как-то бороться и как? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2008, 04:45 |
|
On-line изменение схемы таблицы 1С в SQL Server'е
|
|||
---|---|---|---|
#18+
А зачем при каждом изменении анализировать dds? Ведь он меняется только при изменении структуры метаданных в конфигураторе. Тогда (т.е. после конфигурирования, а не во время работы пользователей) и готовить все триггеры. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2008, 07:30 |
|
On-line изменение схемы таблицы 1С в SQL Server'е
|
|||
---|---|---|---|
#18+
pailА зачем при каждом изменении анализировать dds? Ведь он меняется только при изменении структуры метаданных в конфигураторе. Тогда (т.е. после конфигурирования, а не во время работы пользователей) и готовить все триггеры. dds анализировать надо только когда создается новый элемент справочника "Лог", чтобы сопоставить название в метаданных и в таблицах скуля, т. е. чтобы понять, что, например, SC1809 - ни что иное, как Справочник.Кассы. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2008, 09:24 |
|
On-line изменение схемы таблицы 1С в SQL Server'е
|
|||
---|---|---|---|
#18+
Lobion dds анализировать надо только когда создается новый элемент справочника "Лог", чтобы сопоставить название в метаданных и в таблицах скуля, т. е. чтобы понять, что, например, SC1809 - ни что иное, как Справочник.Кассы. достаточно сделать сопоставление объектов и скульных таблиц только при запуске в режиме предприятия. закинуть все это в какую-нить таблицузначений например ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2008, 11:55 |
|
On-line изменение схемы таблицы 1С в SQL Server'е
|
|||
---|---|---|---|
#18+
tvm достаточно сделать сопоставление объектов и скульных таблиц только при запуске в режиме предприятия. закинуть все это в какую-нить таблицузначений например Как парсить ддс - НЕСУЩЕСТВЕННО!!! Важнее сам вопрос! ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2008, 12:16 |
|
On-line изменение схемы таблицы 1С в SQL Server'е
|
|||
---|---|---|---|
#18+
Если вопрос в том, как отучить 1С ругаться на изменение схемы базы во время работы пользователей с данными - то следует рассмотреть возможность вообще отказаться от таких изменений, и провести добавление всех необходимых полей и триггеров ДО того, как пустить в базу пользователей. Т.е. провести изменения схемы во время конфигурирования (сразу после закрытия конфигуратора). Или были заданы другие вопросы? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2008, 12:23 |
|
On-line изменение схемы таблицы 1С в SQL Server'е
|
|||
---|---|---|---|
#18+
pail...провести добавление всех необходимых полей и триггеров ДО того, как пустить в базу пользователей. Т.е. провести изменения схемы во время конфигурирования (сразу после закрытия конфигуратора). ... так вот и я почти про тоже. на одной из моих прошлых работ тоже делали логирование. так вот при входе первого пользователя сравнивался dds и таблицы базы. если было отличие то пересоздавались триггеры ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2008, 12:34 |
|
On-line изменение схемы таблицы 1С в SQL Server'е
|
|||
---|---|---|---|
#18+
pailЕсли вопрос в том, как отучить 1С ругаться на изменение схемы базы во время работы пользователей с данными - то следует рассмотреть возможность вообще отказаться от таких изменений, и провести добавление всех необходимых полей и триггеров ДО того, как пустить в базу пользователей. Т.е. провести изменения схемы во время конфигурирования (сразу после закрытия конфигуратора). Или были заданы другие вопросы? Да, вопрос именно в этом. Я совершенно ясно понимаю, что изменять онлайн схему таблицы нельзя... Все-равно, может потребоваться включать или исключать объект метеданных в/из списка логируемых. Вобщем-то и решение нашлось: использовать временную таблицу для переброски изменений в лог, потом очищать ее. А в таблице лога тогда можно будет включать или отключать триггер. Тут еще один вопрос возник, с Вашего позволения озвучу. Вот такой запрос добавляет триггер: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
А как бы сделать так, чтобы вместо suser_sname(), было глПользователь, который вносит изменения в справочник? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2008, 12:37 |
|
On-line изменение схемы таблицы 1С в SQL Server'е
|
|||
---|---|---|---|
#18+
обрати внимание на статейку Логирование средствами MS SQL http://www.1csql.ru/materials/articles/develop.html~49e72144-3910-2323-ade1-bc42f7e4d100 ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2008, 19:14 |
|
On-line изменение схемы таблицы 1С в SQL Server'е
|
|||
---|---|---|---|
#18+
Lobion[quot pail] Тут еще один вопрос возник, с Вашего позволения озвучу. Вот такой запрос добавляет триггер: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
А как бы сделать так, чтобы вместо suser_sname(), было глПользователь, который вносит изменения в справочник? Вот, например, в ПроКлубе есть мехнанизм, который связывает номера соединений с именами пользователей 1С: http://1c.proclub.ru/modules/mydownloads/personal.php?cid=5&lid=3344 |SELECT "+ПоляТаблицы+"n.DESCR, getdate(), type_action |FROM inserted, "+ТаблицаИмен+" n WHERE n.ROW_ID=@@SPID ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2008, 15:23 |
|
On-line изменение схемы таблицы 1С в SQL Server'е
|
|||
---|---|---|---|
#18+
Извините, продолжаю: в приведённых выше двух строчках показано, как из таблицы "ТаблицаИмен" взять имя пользователя в 1С (n.DESCR) Кстати, проверяя подменённую процедуру при входе пользователя в 1С, можно увидеть, что изменилась конфигурация, что на SQL нужно по-новому расставлять триггеры... ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2008, 15:29 |
|
|
start [/forum/topic.php?fid=28&fpage=174&tid=1525037]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
41ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
2ms |
others: | 267ms |
total: | 394ms |
0 / 0 |