Цитата(bolobol @ 11.09.11, 19:23) необходимо зарегистрироваться для просмотра ссылки
Суть задачи:
1. перед записью узнать объёмы повреждения производительности на сервере - вычислить изменения, заодно, в качестве полного лога, можно это и записать в ту же базу данных. Какой объект целесообразнее для этого использовать или возможно это сделать не выходя из рамок перепроводимого документа?
Цитата(pablo @ 12.09.11, 8:37) необходимо зарегистрироваться для просмотра ссылки
1. В двух словах, нужно строить список изменений перед сохранением объекта, а обрабатывать сей список - При проведении. Потенциальные грабли находятся в случае если пользователь нажмёт Сохранить дважды перед проведением.
Сделано так: берётся сохранённая версия (ссылка.*, ссылка.ТабличнаяЧасть.*) и получается разница в новый документ. При этом блокирован, как я понимаю, только текущий документ? А проведённый документ при записи так же перепроводится, т.е. весь алгоритм отработается и при первой записи. Вот записывать многие очень часто любят - и это правильно, вдруг чё переглючит, а я работал...
Цитата(bolobol @ 11.09.11, 19:23) необходимо зарегистрироваться для просмотра ссылки
2. удалить неактуальные записи в регистрах. Возможно ли такое вообще, т.к. наборы записей читаются и пишутся, насколько мне известно, только целиком?
Цитата(pablo @ 12.09.11, 8:37) необходимо зарегистрироваться для просмотра ссылки
2. Нет. Очищается вся запись в регистре. Можно, конечно сравнивать старую запись с новыми данными, но дополнительное чтение данных из регистра не убьёт ли всю оптимизацию на корню?
Понял так: для получения набора записей, я не смогу установить отбор по регистратору и остальным реквизитам для получения одной записи, соответствующей удалённой строке документа. Да?
Старый набор записей читать придётся, т.к. в худшем случае - этот набор записей будет основанием для новой записи, но до тех пор, пока я не собираюсь корректировать этот набор записей (идёт анализ изменений) - блокировка итогов не нужна - в этом ожидается первый плюс. Блокировка итогов регистра начнётся только по факту расчёта на основании этого же регистра новых движений или вообще - только по факту записи. А перерасчёт - это, как правило, 5% документа, что в 20 раз сокращает необходимые блокировки на время расчёта и проверок отрицательных итогов там... А вот запись всего набора - как раз пугает потерей всего выигрыша. Но ведь новый документ (документ корректировки) записывает данные только на саму корректировку в регистры, вот и думается - почему бы не установить отбор при создании дополнительного набора записей настолько узким, чтобы не задев при очистке в регистре по установленному отбору в нём существующие записи других строк документа?
Цитата(bolobol @ 11.09.11, 19:23) необходимо зарегистрироваться для просмотра ссылки
4. записать заново рассчитанные данные в регистры. Возможно, запись данных придётся делать только добавляя записи, возможно ли добавить набор записей, если в БД уже есть такой набор записей? почему бы нет, при очередном чтении получим старый набор плюс дописанный набор, или я не тут ваще?
Цитата(pablo @ 12.09.11, 8:37) необходимо зарегистрироваться для просмотра ссылки
4. Платформа не позволяет такой вольности.
Тут нужно мне пример привести для полного понимания ограничений платформы:
Возьмём регистр из бухгалтерии (испытательный полигон, как самая незагруженная конфа):
ВзаиморасчетыСРаботникамиОрганизаций:
Отбор устанавливается по:
Регистратор, Физлицо, Организация, ПериодВзаиморасчётов - что дострочно по документу отражает движение.
В документе три Физлица, изменилось только Физлицо2 - уменьшилась сумма в два раза.
Установив отбор по Физлицу2, заполнив новыми значениями и записав - получаем удаление прошлой записи в регистре по Физлицу2 и запись нового значения. Или я не правильно что-то понимаю? Или есть другие ограничения?
Цитата(pablo @ 12.09.11, 8:37) необходимо зарегистрироваться для просмотра ссылки
В целом, снижение нагрузки на запись требует увеличения нагрузки на чтение. Телодвижений придется делать много, а будет ли выигрыш?
Выигрыш должен быть во времени блокировки данных. Чтение данных из регистра по тому документу, который проводим, не приводит к появлениям блокировок, т.к. кроме нас, никто другой не может менять этот документ. А вот запись 5-ти% новых движений должно существенно сокращать возникающие с этим блокировки, по сравнению с полной перезаписью. Или как?