al_zzz писал(а) 15. Ноября 2010 :: 11:22:Leierkastenmann писал(а) 15. Ноября 2010 :: 10:00:Мне кажется необязательно исправлять централизованно, по моему опыту бывало такое, что в одной базе регистр "искривлен", тогда как в другой все хорошо.
Это можно делать без всяких выгонов пользователей, длительных и муторных пересчетов итогов и автоматизированно. С периодичностью проверяются регистры и выявляются как уже писали выше комбинации измерений, по которым несоответствие итогов и движений. И только по этим комбинациям производится пересчет, производится обычными sql-запросами по типу того как это делает сама 1ска, можно даже ее процедуры использовать _1sp_RA****_ClearRecalcDocActs. Если есть опасения, что кто-то в это же время будет проводить документы, то можно просто в начале пересчета поставить блокировку, по времени такой выборочный пересчет будет работать быстрее, чем пересчитывать все.
Можете поподробнее написать, как это делается. Ато я в SQL не силен. Как я понимаю, нужно когда пользователей не будет хранимую процедуру(_1sp_RA****_ClearRecalcDocActs) в QA запустить и всё? Или ещё что-то?
Как запустить по нужным измерениям?
Последовательность действий приблизительно такая:
1. Определить самую раннюю дату, по которой начинаются расхождения. Это запрос, который из движений выбирает по всем изменениям с одним знаком, из остатков с противоположным, суммируется и берутся те наборы измерений, где сумма ненулевая.
2. Тут возможны варианты, если пользоваться той процедурой, которую я написал, то это надо для наборов измерений получить все документы, которые стоят после той самой ранней даты расхождений и последовательно все эти документы пройти этой процедурой. Естественно, что итоги по этим комбинациям измерений должны быть обнулены. По сути это почти то же самое, что сделать весь список этих документов сначала непроведенными, потом провести.
Второй вариант - это написать другую процедуру, которая по набору измерений будет за каждый период получать изменения движений и вписывать их в остатки. Собственно если напишете запрос для п.1, то написать запрос для этого варианта особого труда уже не составит.