После обновления конфигурации «Управление торговлей 11.5» пользователи могут столкнуться с серьезной проблемой: документы «Заказ поставщику» перестают проводиться, система выдает ошибку «Конфликт блокировок при выполнении транзакции». Часто это сопровождается общим замедлением работы. Рассмотрим, как диагностировать и устранить эту проблему.
Основной симптом — длительное «зависание» документа при проведении, которое в итоге прерывается ошибкой о превышении времени ожидания блокировки. Если использовать отладчик, можно заметить, что система надолго задерживается в процедуре ЗаполнитьОперативныеВзаиморасчеты общего модуля ОперативныеВзаиморасчетыСервер. При этом происходит запись аномально большого количества строк (тысячи и более) в регистр накопления РасчетыСПоставщикамиПланПоставок.
Ключевая причина такого поведения — некорректные данные в графике оплат документа. Если в табличной части «Этапы графика оплаты» у одного или нескольких этапов не заполнена дата платежа, система не может определить плановый период расчетов. В результате она пытается сгенерировать записи в регистры за очень большой промежуток времени, что и приводит к длительной транзакции, блокировке данных и, как следствие, ошибке.
Такая ситуация может проявиться именно после обновления, так как в новых релизах могли измениться алгоритмы работы с графиками оплат, и данные, которые раньше не вызывали проблем, теперь приводят к ошибкам.
Наша главная задача — найти и исправить документы с некорректно заполненными графиками оплат. Сделаем это в два шага.
Чтобы не перебирать все документы вручную, воспользуемся консолью запросов. С ее помощью мы можем быстро найти документы, которые создают наибольшее количество записей в регистрах расчетов с поставщиками. Выполним следующие запросы. Они покажут по 50 документов, создавших максимум движений в регистре РасчетыСПоставщикамиПланПоставок за указанный период.
Запрос для поиска проблемных документов «Заказ поставщику»:
ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 50
Т1.Регистратор КАК ДокументРегистратор,
КОЛИЧЕСТВО(*) КАК Записей
ИЗ
РегистрНакопления.РасчетыСПоставщикамиПланПоставок КАК Т1
ГДЕ
Т1.Период МЕЖДУ &ДатаНачала И &ДатаОкончания
И ТИПЗНАЧЕНИЯ(Т1.Регистратор) = ТИП(Документ.ЗаказПоставщику)
СГРУППИРОВАТЬ ПО
Т1.Регистратор
УПОРЯДОЧИТЬ ПО
Записей УБЫВ
Аналогичный запрос для документов «Приобретение товаров и услуг», так как они тоже могут влиять на этот регистр:
ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 50
Т1.Регистратор КАК ДокументРегистратор,
КОЛИЧЕСТВО(*) КАК Записей
ИЗ
РегистрНакопления.РасчетыСПоставщикамиПланПоставок КАК Т1
ГДЕ
Т1.Период МЕЖДУ &ДатаНачала И &ДатаОкончания
И ТИПЗНАЧЕНИЯ(Т1.Регистратор) = ТИП(Документ.ПриобретениеТоваровУслуг)
СГРУППИРОВАТЬ ПО
Т1.Регистратор
УПОРЯДОЧИТЬ ПО
Записей УБЫВ
В параметрах запроса &ДатаНачала и &ДатаОкончания укажите период, за который наблюдается проблема. Документы, которые окажутся вверху списка, — наши главные кандидаты на проверку.
Откройте поочередно документы из полученного списка. В каждом документе перейдите к табличной части, отвечающей за график оплаты (например, на вкладке «Основное» или «Дополнительно» может быть раздел «Оплата»).
Внимательно проверьте все строки в таблице Этапы графика оплаты. Убедитесь, что у каждого этапа заполнено поле «Дата платежа». Если дата пустая, укажите корректное значение. После внесения исправлений сохраните и перепроведите документ. Скорее всего, после исправления данных он проведется быстро и без ошибок.
Если исправление данных не помогло или проблемных документов слишком много, рассмотрим еще несколько вариантов:
Системный подход к диагностике, начиная с поиска аномалий в данных и заканчивая проверкой настроек системы, поможет эффективно решить проблему с блокировками и восстановить стабильную работу программы.