Прямая запись в базу через MS SQL #240153


#0 by Alexander_M
Нужно как то восстановить итоги при прямой записи. Не могу понять, в какие из таблиц что нужно заносить. Делаю следующее: insert into _AccumReg6848 select * from _AccumReg6843 where _Period < convert(datetime, '01.07.2006', 104) (регистры идентичны) далее: delete from _AccumReg6843 where _Period < convert(datetime, '01.07.2006', 104) теперь нужно сформировать итоги по регистру 6848 и убить итоги (?) по регистру 6843 за указанный период (таблицы _AccumRegTotals<n>)? нужно ли править таблицы _AccumRegTurnovers<n> и _AccumRegOptions или может какие системные таблицы? как вообще посмотреть, куда что записывается при проведении документа?
#1 by АперБот
В чем смысл жизни? Мне еще рано об этом думать, я слишком глупый бот и могу только поднять ветку
#2 by Ferz
включай трассер
#3 by Alexander_M
где его включать? в 1С, в EM, в Query analizer?
#4 by shuhard
profiler, если речь идет о 2000 сиквеле.
#5 by Alexander_M
выходит, что при перепроведении документа: 1. сначала записывается документ 2. потом декремент итогов в _AccumRegTotals<n> 3. удаляются движения в _AccumReg<n> 4. добавляются движения в _AccumReg<n> 5. и в конце инкремент итогов в _AccumRegTotals<n> и при этом не изменяется таблица _AccumRegTurnovers<n> вопрос - нафиг она тогда нужна? вот скрипты, которые были отловлены: exec sp_executesql N'UPDATE _Document213 SET ... FROM _Document213 WITH(REPEATABLEREAD) ... exec sp_executesql N'UPDATE _AccumRegTotals6343 SET ... FROM _AccumRegTotals6343 WITH(SERIALIZABLE) ... exec sp_executesql N'DELETE FROM _AccumReg6339 FROM _AccumReg6339 WITH(SERIALIZABLE) ... exec sp_executesql N'INSERT INTO _AccumReg6339 WITH(SERIALIZABLE) ... exec sp_executesql N'UPDATE _AccumRegTotals6343 SET ... FROM _AccumRegTotals6343 WITH(SERIALIZABLE) ... еще не понятно, что такое "SERIALIZABLE" - это что, блокировка таблицы? (или записи?) а "REPEATABLEREAD" - это без блокировки? как то в хелпе для T-SQL мутно написано по этому поводу ... кто-нибудь с этим вообще разбирался?
#6 by shuhard
ты знаешь все,что написано в толстом Габце про физ.таблицы Регистра Накопления,вероятно пора стучаться в суппорт 1С.
#7 by shuhard
+ Не понимаю, чего тут такую кашу развели с несчастным READ COMMITED - ведь написанно же, читаем закомиченные данные. Хотим второй раз те же данные считать, ставим REPEATABLEREAD, боимсе при повторном чтении новые записи схлопотать - ставим SERIALIZABLE. Все как написано в стандарте, работать в любом сервере должно одинаково по смыслу.
#8 by megalodon
Turnovers - это таблица итогов оборотов регистра оборотного накопления, Totals - итоги остаточного регистра накопления. RegOptions - границы расчитынных итогов по остаточным регистрам.
#9 by Masquerade
Зачем тебе это?
#10 by Alexander_M
суппорт 1С - отдельная песня, приходилось общаться, "впечатляет" ... может я чего-то не понимаю, но ... те скрипты, которые я отловил, находились между begin transaction и commit, так что я не понимаю, о каком read commited идет речь, раз commit еще не произошел? если REPEATABLEREAD повторно читает закомиченные данные (но они еще не закомичены в данном случае), то нафига он там? да и вообще до строки с REPEATABLEREAD нет никаких записей, только селекты, что там комитится? с SERIALIZABLE тоже ничего не понятно - какие такие "новые записи схлопотать"? если каждый из 5-ти запросов независимый и никакие новые записи не могут нам помешать? спасибо, разъяснил остался вопрос - если документ проводится задним числом, то какие из итогов должны быть пересчитаны - все, начиная с даты документа по дату актуальности из _AccumRegOptions? хочу регистр разделить
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С