|
регистр сведений ГрафикиРаботыПоВидамВремени и табеля | ☑ | ||
---|---|---|---|---|
0
vip67
16.07.15
✎
09:15
|
Всем добрый день!
1с 8.2 УПП для Украины 1-3-30-1, SQL 2012 сервера нормальные по производительности. возникла проблема при обработке табелей: одновременно с табелями работает около 30 сотрудников (всего 60 подразделений) В каждом подразделении кол-во сотрудников колеблется от 5-ти до 800 (таких всего 2). В основном - около 50-100 сотрудников. при попытке записи или проведении табеля очень часто (практически каждый пользователь) возникает ошибка: Ошибка при выполнении обработчика - 'ПередЗаписью' по причине: {Документ.ТабельУчетаРабочегоВремениОрганизации.МодульОбъекта(2371)}: Ошибка при вызове метода контекста (Выполнить) по причине: Ошибка выполнения запроса по причине: Конфликт блокировок при выполнении транзакции: Microsoft SQL Server Native Client 11.0: Транзакция (идентификатор процесса 60) вызвала взаимоблокировку ресурсов блокировка | буфер связи с другим процессом и стала жертвой взаимоблокировки. Запустите транзакцию повторно. HRESULT=80004005, SQLSrvr: SQLSTATE=40001, state=34, Severity=D, native=1205, line=1 место ошибки: модуль объекта документ табель учета рабочего времени. Процедура УдалитьЗаписиЗаПериодДокумента() // бил //Блокир_ = Новый БлокировкаДанных; //ЭлементБлокировки = Блокир_.Добавить("РегистрСведений.ГрафикиРаботыПоВидамВремени"); //ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый; //ЭлементБлокировки.УстановитьЗначение("Документ", ЭтотОбъект.Ссылка); //Блокир_.Заблокировать(); // бил Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; Запрос.УстановитьПараметр("Документ", Ссылка); Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ | ГрафикиРаботы.ГрафикРаботы, | ГрафикиРаботы.Месяц |ПОМЕСТИТЬ ВТСотрудникоМесяц |ИЗ | РегистрСведений.ГрафикиРаботыПоВидамВремени КАК ГрафикиРаботы |ГДЕ | ГрафикиРаботы.Документ = &Документ"; Запрос.Выполнить(); Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ |СотрудникоМесяц.ГрафикРаботы КАК Сотрудник, |СотрудникоМесяц.Месяц КАК Месяц, |ВЫБОР | КОГДА ВведенныеДокументы.ГрафикРаботы ЕСТЬ NULL | ТОГДА ИСТИНА | ИНАЧЕ ЛОЖЬ |КОНЕЦ КАК УдалятьЗаписиЗаПериод | |ИЗ | ВТСотрудникоМесяц КАК СотрудникоМесяц |ЛЕВОЕ СОЕДИНЕНИЕ | (ВЫБРАТЬ | СотрудникоМесяц.ГрафикРаботы, | СотрудникоМесяц.Месяц | ИЗ | ВТСотрудникоМесяц КАК СотрудникоМесяц | ВНУТРЕННЕЕ СОЕДИНЕНИЕ | РегистрСведений.ГрафикиРаботыПоВидамВремени КАК ГрафикиРаботы | ПО | ГрафикиРаботы.ГрафикРаботы = СотрудникоМесяц.ГрафикРаботы | И НЕ ГрафикиРаботы.План | И ГрафикиРаботы.Месяц = СотрудникоМесяц.Месяц | И ГрафикиРаботы.Документ <> &Документ | И ГрафикиРаботы.Документ <> ЗНАЧЕНИЕ(Документ.ТабельУчетаРабочегоВремениОрганизации.ПустаяСсылка) | )КАК ВведенныеДокументы |ПО | ВведенныеДокументы.ГрафикРаботы = СотрудникоМесяц.ГрафикРаботы | И ВведенныеДокументы.Месяц = СотрудникоМесяц.Месяц"; ВыборкаЗапроса = Запрос.Выполнить().Выбрать(); НаборЗаписей = РегистрыСведений.ГрафикиРаботыПоВидамВремени.СоздатьНаборЗаписей(); Пока ВыборкаЗапроса.Следующий() Цикл НаборЗаписей.Отбор.План.Установить(Ложь); НаборЗаписей.Отбор.ГрафикРаботы.Установить(ВыборкаЗапроса.Сотрудник); НаборЗаписей.Отбор.Месяц.Установить(ВыборкаЗапроса.Месяц); Если ВыборкаЗапроса.УдалятьЗаписиЗаПериод Тогда НаборЗаписей.Очистить(); НаборЗаписей.Записать(); Иначе НаборЗаписей.Прочитать(); Для Каждого Запись Из НаборЗаписей Цикл Если (Запись.Документ = Ссылка) Тогда Запись.ОсновноеЗначениеПолное = 0; Запись.ДополнительноеЗначениеПолное = 0; Запись.Документ = Документы.ТабельУчетаРабочегоВремениОрганизации.ПустаяСсылка(); КонецЕсли; КонецЦикла; НаборЗаписей.Записать(); КонецЕсли; КонецЦикла; КонецПроцедуры // УдалитьЗаписиЗаПериодДокумента() Кроме этого, очень часто табель записывается или проводится очень долго - до 30-40мин. Разработчики (линия поддержки подтвердила узкое место с регистром сведений ГрафикиРаботыПоВидамВремени, советует либо дробить табеля (что нам не подходит), либо переводить конфигурацию на управляемые блокировки) Как еще можно бороться с этой проблемой, потому как с управляемыми блокировками не сталкивался? |
|||
1
piter3
16.07.15
✎
09:18
|
проведение на ночь регламентами например
|
|||
2
leonidkorolev
16.07.15
✎
09:24
|
(0) Если приемлемо, то проведение ночью, а в рабочее время типа предварительное проведение.
Я бы попробовал побаловаться блокировками. Сама УПП в управляемом режиме, надо только документ Табель перевести в управляемый режим. |
|||
3
vip67
16.07.15
✎
09:24
|
(1) не подойдет,т.к. один табель начнет проводиться, а другие просто зависнут, кроме того если конец месяца - и нужно здавать табель сегодня, а необходимо править, то кто будет ждать до завтра?
|
|||
4
vip67
16.07.15
✎
09:25
|
(2) УПП работает в обычном приложении
|
|||
5
leonidkorolev
16.07.15
✎
09:30
|
||||
6
leonidkorolev
16.07.15
✎
09:37
|
||||
7
vip67
16.07.15
✎
09:40
|
(5) ну, у меня режим блокировок стоит автоматический. по вашим картинкам - сама 1С - четко в управляемом, а табельв автоматическом режимах? и что это дает? напоминаю - у меня 8.2
я пробовал ставить 1с в автоматический и управляемый режим, а табель и регистр в управляемый. но тогда как я понимаю - нужно самостоятельно прописывать блокировки на все процедуры записи в документе? или если не пропишу - будет действоват ьавтоматическая блокировка? |
|||
8
leonidkorolev
16.07.15
✎
09:44
|
(7) Каша в голове.
Короче. Автоматический режим это зло. Везде ставим управляемый. |
|||
9
piter3
16.07.15
✎
09:45
|
(8) а код написан для управляемых?
|
|||
10
leonidkorolev
16.07.15
✎
09:49
|
(9) код нет. код надо править.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |