Ошибка при расчёте зарплаты: Конфликт блокировок при выполнении транзакции:

1. Nik4Ever 06.04.15 05:53 Сейчас в теме
Здравствуйте.

исходные данные:
1С 8.2 ЗКБУ
база была сформирована из 1с ЗиК 7.7
конфигурация типовая
пробовались разные типы баз - файловая, терминал и sql (windows server 2008. sql server 2008.)
размер базы - 800Мб
платформа и конфигурация обновляются регулярно.
С базой работают 2 расчётчика


Проблема в следующем:

При одновременном расчёте заработной платы разным сотрудникам, у одного из расчётчиков(рандомно) возникает следующая ошибка:

Ошибка:
{ОбщийМодуль.ПроведениеРасчетовПереопределяемый.Модуль(4887)}: Ошибка при вызове метода контекста (Записать)
НаборЗаписейРегистра.Записать(Истина, ТолькоЗапись, Истина, Ложь);
по причине:
Конфликт блокировок при выполнении транзакции:
Microsoft SQL Server Native Client 10.0: Превышено время ожидания запроса на блокировку.
HRESULT=80040E31, SQLSrvr: SQLSTATE=HYT00, state=2D, Severity=10, native=1222, line=1

В конфигураторе ссылается на следующую строку:

// записываем набор перед расчетом каждой категории начислений
Если ИмяРегистра = "ОсновныеНачисленияРаботниковОрганизаций" Тогда
НаборЗаписейРегистра.Записать(Истина, ТолькоЗапись, Истина, Ложь);
Иначе
НаборЗаписейРегистра.Записать(Истина, ТолькоЗапись);
КонецЕсли;
ТолькоЗапись = Истина;

Данная проблема возникает не только у нас. Фирма, которая осуществляет сопровождение сначала причиной называло медленный компьютер на котором стоит база (файловый вариант) или линии ЛВС(исключили эту причину сразу), базу перенесли на терминальный сервер - та же ошибка, на SQL то же самое.

ЕСТЬ ли решение этой проблеме?
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. SaschaL 06.04.15 07:33 Сейчас в теме
(1) Nik4Ever, судя по всему ошибка возникает из-за занятости одной из таблиц каким тользователем либо фоновым заданием.
ПОглядите какие опрерации выполняются при этом в базе. Можно скачать в интеренет или на диске ИТС обработку, которая показывает регламентные задания.
Очень может быть что в этот момент выполняется регламентное задание.
Так же можно для эксперимента зайти в консоль кластера серверов 1С Предприятия, и в свойстве базы запретить регламентные задания.
6. Nik4Ever 07.04.15 07:46 Сейчас в теме
(2) регламентные задания в этот момент не выполняются.

(3) файловая база стоит на рабочем ПК (Dual-Core E5200, (2.50/800/2Mb); 2GB DDRII-800; Seagate (320 Gb/ 7200/8Mb/ SATA ).
терминальный и sql сервер ещё на более древнем компе(P4-3Ггц/1 гб ОЗУ/ 80гб винт)

(5) количество секунд ожидания блокировки в Конфигураторе я проставил 90 сек и блокировка возникает намного реже на SQL сервере, в файловом варианте на сервере терминала (90сек не помогли) блокировка так же возникает.

Вообще пока один расчетчик проводит начисление зарплаты, второй не сможет этого сделать... А насколько долго он не сможет этого сделать, уже зависит от сервера.

логично. на днях пробую поставить на виртуалку sql на более мощный комп и проверим.
Многие люди пишут, что проблема апгредом железа решается, но временно, до определённого роста базы.

P.S. почему в 1с у типовой конфы не реализован хотя бы принцип того, что если 1 пользователь рассчитывает кого либо и таблица естественно блокируется, 2 пользователь при попытке записи в это же время, в ту же таблицу не встаёт, допустим в ожидание-очередь? Или это реализовывается только "оптимизацией кода"?
10. spezc 795 07.04.15 10:39 Сейчас в теме
(6) в вашем случае проблема решится простым апгрейдом железа. и хватит вам это на долго.
5. kerocin 06.04.15 16:30 Сейчас в теме
(1) Nik4Ever, а сколько у Вас стоит количество секунд ожидания блокировки в Конфигураторе-Администрирование-Параметры информационной базы? Может увеличить?
Вообще пока один расчетчик проводит начисление зарплаты, второй не сможет этого сделать... А насколько долго он не сможет этого сделать, уже зависит от сервера.
3. spezc 795 06.04.15 08:37 Сейчас в теме
озвучьте параметры вашего терминального сервера
4. spezc 795 06.04.15 10:24 Сейчас в теме
судя по данным на соседнем форуме - вас спасет новый сервер, который можно собрать за 20т.р. хотя бы.
7. Kavar 89 07.04.15 07:56 Сейчас в теме
У нас такого не наблюдается. в Базе одновременно 10 расчетчиков работают.
win 2008 R2 SQL 2008 Standart, Сервер приложений х32.

Железо, правда помощьнее. ну там еще и БГУ крутиться с 30 юзерами.
8. Nik4Ever 07.04.15 09:52 Сейчас в теме
(7) какое железо у вас стоит?
какая сеть 100/1000Мбит?
одновременно 2-3 человека рассчётчитывать ЗП сотрудникам 1 подразделения пробовали?
P.S. у нас блокировка возникает, даже если считаешь зп сотрудникам разных подразделений, спотыкается на {Документ.НачислениеЗарплатыРаботникамОрганизаций.МодульОбъекта(1233)}: Ошибка при вызове метода контекста (Записать). в sql немного реже блокировки стали из за изменения в конфигураторе режима блокировок на управляемые и увеличения времени ожидания блокировки с 20 сек до 90 сек.
9. Kavar 89 07.04.15 10:31 Сейчас в теме
Железо Xenon E5607 X2 ОЗУ 32Гб. RAID SAS
Но на этом компе все: Терминал+Сервер 1С+SQl.
Сеть в данном случае значения не имеет.


Одновременно по одному подразделению не считали.
У нас многофирменный учет, каждый бухгалтер свои учреждения считает.
Но все в одной ИБ.
11. _123 08.07.15 15:00 Сейчас в теме
https://support.microsoft.com/ru-ru/kb/2878968
короче если вкратце - ничего тут не сделать, косяк майкрософта
нельзя апдейтить таблицу с ноулок- слетит индекс
соответственно ждать пока майкрософт исправит ошибку, а 1С после этого сделает обновление платформы
12. Nik4Ever 13.07.15 03:55 Сейчас в теме
ПРОБЛЕМА РЕШЕНА: АПГРЕЙДОМ ЖЕЛЕЗА. На поднятом терминальном серваке блокировок пока не возникает. На sql-сервере работает чуть медленнее.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот