Имя: Пароль:
1C
1С v8
Уменьшение количества блокировок при проведении
0 DEVIce
 
11.11.11
08:25
Как считаете, какая реализация будет способствовать блокировке транзакции:

Движения = Движения.Хозрасчетный;
... (тра-ля-ля)
Движения.Записать(Ложь);

или

Движения = Движения.Хозрасчетный;
Движения.Прочитать();
... (тра-ля-ля)
Движения.Записать(Истина);
1 DEVIce
 
11.11.11
08:28
Второй вариант в случае если набор еще не был записан однозначно приводил к падению производительности (значительно увеличивалось время проведения документа) и пока документ проводился все остальные ждали, причем долго ждали.
Сейчас возникло подозрение, что первый вариант тоже работает не гуд в случае если набор записан.
2 ОбычныйЧеловек
 
11.11.11
08:36
(0) надеюсь ты понимаешь разницу между эти двумя приведенными тобой вариантами?
3 ОбычныйЧеловек
 
11.11.11
08:38
И зачем там вообще "записать" ?
4 DEVIce
 
11.11.11
08:46
(2). Понимаю. Только не понимаю почему чтение незаписанного набора приводит к резкому падению производительности. Есть конечно предположение, что записей по регистратору (читай отбору) в таблице нет и поэтому блокируется вся таблица.
(3). Да, можно и без Записать, но в первом случае ранее записанные данные сотрутся. А так как код выполняем в подписке и по бух.регистрам в типовой запись указывается явно, то если набор не читать предварительно, то потрутся типовые движения.
5 milan
 
11.11.11
08:47
При входе в обработку проведения не блокируются движения документа ?

(4) Если набор записан, то блокируется по измерениям набора записей, а если пустой, походу все блокируется
6 DEVIce
 
11.11.11
08:48
Короче, в типовой намутили так, что что-то явно записывается и нужно читать предварительно, а что-то записывается уже автоматом при завершении проведения (что согласно описалову предпочтительнее). В итоге, приходится опытным путем высекать с каким регистром в каком документе как поступили. Ибо если читать движения, которые еще не записаны, то все встает колом.
7 DEVIce
 
11.11.11
08:51
(5). Нет, специально не блокирую, работаю с существующим набором. Просто он может быть и записан и не записан.
8 DEVIce
 
11.11.11
08:54
Посему и вопрос. С точки зрения производительности для записанного набора данных, что лучше:
1. Прочитать, добавить свои записи и записать с замещением.
2. Добавить записи и записать без замещения.

Умом понимаю что в любом случае должны заблокироваться все записи по регистратору. А вот на практике как бы проверить.
9 milan
 
11.11.11
14:44
(8) по измерениям движений регистратора блокируется.
10 Axel2009
 
11.11.11
14:46
блокируется по периоду. если в регистре нет записей старше чем твоя запись, то будут блочиться любые даты, выше самой старшей из регистра.
11 Лефмихалыч
 
11.11.11
14:47
(0) Конструкция Движения.Записать(Истина) приводит к последовательной записи двух наборов - сначала пустого, чтобы очистить, а потом того, который ты в обработке проведения заполнил.
12 Лефмихалыч
 
11.11.11
14:52
+(11) хотя это справедливо только для сведений
13 milan
 
11.11.11
15:09
(11) кстати не исключено, в апдейтах писали, что оптимизировали алгоритм записи регистров, по идее авто запись движений пройдет быстро ежели оне не поменялись. а вот очстка и запись новых, это зело тяжко как для самого регистра, так и для таблицы итогов
14 Axel2009
 
11.11.11
15:11
(13) ежели записи не менялись, то запись пройдет быстро еще со времен далеких 8.1
15 DmitrO
 
11.11.11
15:17
(0)во втором варианте пересчет итогов от штатных движений шел дважды: первый раз когда записывался набор от штатного функционала; а второй, когда набор записывался второй раз (в подписке), т.к. записывался снова весь набор (в том числе и штатные движения).