Имя: Пароль:
1C
1С v8
Конфликт блокировок при записи Табеля раб.времени
0 Andrey_1811
 
16.08.17
09:49
Доброго времени суток. Столкнулся с такой проблемой при записи/проведении Табеля база уходит в тормоз, через некоторое время вываливается в Конфликт блокировок. Превышено максимальное время предоставления блокировки. В конфигурации стоит 180 сек, конфигурация, табель, регистр сведений ГрафикиРаботПоВидамВремени - режим блокировки - Управляемый. Тормозит код в документе:


НаборЗаписей = РегистрыСведений.ГрафикиРаботыПоВидамВремени.СоздатьНаборЗаписей();
  Пока ВыборкаЗапроса.Следующий() Цикл
    
    НаборЗаписей.Отбор.План.Установить(Ложь);
    НаборЗаписей.Отбор.ГрафикРаботы.Установить(ВыборкаЗапроса.Сотрудник);
    НаборЗаписей.Отбор.Месяц.Установить(ВыборкаЗапроса.Месяц);

    Если ВыборкаЗапроса.УдалятьЗаписиЗаПериод Тогда
      НаборЗаписей.Очистить();
      НаборЗаписей.Записать();
    Иначе
    
      НаборЗаписей.Прочитать();
      Для Каждого Запись Из НаборЗаписей Цикл
        Если (Запись.Документ = Ссылка) Тогда
          Запись.ОсновноеЗначениеПолное = 0;
          Запись.ДополнительноеЗначениеПолное = 0;
          Запись.Документ = Документы.ТабельУчетаРабочегоВремениОрганизации.ПустаяСсылка();
        КонецЕсли;
      КонецЦикла;
      НаборЗаписей.Записать();
    КонецЕсли;                  
  КонецЦикла;

Очистка регистра дает результат в скорости для одного пользователя в бд, когда заходят 5-10 табельщиков, проблема снова проявляется. Подскажите куда смотреть? В сторону кода работы с регистром, платформы или что то другое? На этом же постгре крутится много других баз, нигде проблемы нет, так что думаю субд не при чем.
Платформа 8.3.10.2252
Конфигурация ЗУП 2.1.41.1
PostgreSQL 9.6.2
Заранее спасибо.
1 Рэйв
 
16.08.17
09:52
НаборЗаписей.Очистить(); - лишнее.Ты набор не читал, там нет ничего.
2 Рэйв
 
16.08.17
09:54
>>5-10 табельщиков, проблема снова проявляется
понятное дело, все скопом пыьаются писать в регистр, а блокировки автоматические скорее всего. Делай управляемые и будет тебе счастье
3 Fedor-1971
 
16.08.17
10:44
(1) не лишнее, в наборе записей осталось, то что было в предыдущей итерации

(0) ВыборкаЗапроса - объём выборки какой?
По логике: идёшь по работникам и устанавливаешь каждому график - тогда добавь НаборЗаписей.Отбор.Сотрудник, что бы разные табельщики не путались между собой (По тех процессу - одновременно разные табельщики будут работать с одним сотрудником? всё-же вероятность меньше).
Как вариант: используй не НаборЗаписей, а МенеджерЗаписи, т.е. изменяй не пачкой, а каждую запись - проиграешь по времени, но блокировка будет минимальна
4 Fedor-1971
 
16.08.17
10:46
3+   НаборЗаписей.Отбор.ГрафикРаботы.Установить(ВыборкаЗапроса.Сотрудник);  - выглядит несколько прикольно, точно правильно?
5 Andrey_1811
 
16.08.17
12:09
(4) Это типовой код конфы). До него идут два запроса с выборкой в 150к записей где то