0. Andreynikus 1162 25.10.16 01:56 Сейчас в теме

Просмотр заблокированных строк в 1С

Ввиду своей деятельности, мне часто приходится рассказывать про различные аспекты оптимизации и в том числе про блокировки.
Очень часто слушатели задают следующие вопросы:
Как посмотреть в реальном времени, какие именно данные сейчас заблокированы?
Как понять, что сейчас заблокировано в терминах 1С?
Если гранулярность блокировки страница, как увидеть, какие данные в ней находятся?

Раньше приходилось отвечать, что инструмента, который показывает все вышеописанное, сейчас просто нет. Но потом мне это надоело, и я решил сделать собственный инструмент, который позволяет ответить на все вышеописанные вопросы.

Перейти к публикации

Комментарии
Избранное Подписка Сортировка: Древо
1. WellMaster 98 26.10.16 09:59 Сейчас в теме
Просто пытаюсь открыть обработку:

{ВнешняяОбработка.Блокировки_MS_SQL_Server_1С.МодульОбъекта(1033,12)}: Процедура или функция с указанным именем не определена (ПолучитьТаблицуДанныхПоСтрокеSQL)
			Возврат <<?>>ПолучитьТаблицуДанныхПоСтрокеSQL(СтруктураПараметров);
{ВнешняяОбработка.Блокировки_MS_SQL_Server_1С.МодульОбъекта(1035,12)}: Процедура или функция с указанным именем не определена (ПолучитьТаблицуДанныхПоСтраницеSQL)
			Возврат <<?>>ПолучитьТаблицуДанныхПоСтраницеSQL(СтруктураПараметров);
{ВнешняяОбработка.Блокировки_MS_SQL_Server_1С.МодульОбъекта(1603,17)}: Процедура или функция с указанным именем не определена (ПолучитьТаблицуЛоговТЖ)
	ТаблицаЛогов = <<?>>ПолучитьТаблицуЛоговТЖ();
3. Andreynikus 1162 26.10.16 10:42 Сейчас в теме
(1) WellMaster, обработка написана только под управляемое приложение. При запуске в обычном приложении будет описанная вами ошибка.
2. DenisCh 26.10.16 10:08 Сейчас в теме
Обратись к автору обработки
4. starik-2005 1685 27.10.16 13:38 Сейчас в теме
Как я понял, обработка показывает текущие блокировки СУБД (MS SQL) и уже завершившиеся блокировки 1С? Для первого, в принципе, можно в менеджмент студио правой кнопкой на базе и в отчетах найти соответствующий отчет по блокировкам. Я так понимаю, что основной плюс - это получение имени объекта в 1С?
5. Andreynikus 1162 27.10.16 22:01 Сейчас в теме
(4) starik-2005,
> Как я понял, обработка показывает текущие блокировки СУБД (MS SQL)
Да, именно так.

> уже завершившиеся блокировки 1С
Нет, показываются установленные но не завершившиеся блокировки 1С

> Для первого, в принципе, можно в менеджмент студио правой кнопкой на базе и в отчетах найти соответствующий отчет по блокировкам.

Если имеется ввиду отчет «Все блокирующие транзакции» то это не так. В отчете вы увидите только то, что одна транзакция блокирует другую. На какие строки наложена блокировка там не указано, на какой ресурс тоже не указано, даже тип блокировки не указан. На практике этот отчет почти бесполезен.
tormozit; +1 Ответить
21. nvv1970 09.10.17 07:51 Сейчас в теме
(5) информация по блокировкам 1с получается из ТЖ или с сервера приложения?
Меня самого часто просят посмотреть "что и кто прямо сейчас блокирует"... Мне представляется более удобным и качественным расследовать инциденты по истории блокировок в ТЖ, т.е. с некоторой статистикой по блокировкам за интервал времени. А сию секундный срез информации обладает лишь частичной пользой. Скорее это инструмент для выявления и "ликвидации" виновника (завершения сеанса)
22. Andreynikus 1162 09.10.17 11:33 Сейчас в теме
(21)
Информация об управляемых транзакционных блокировках 1С берется из ТЖ т.к. сейчас это единственный источник такой информации.
Это инструмент скорее для изучения блокировок, чем для реального анализа проблем, я об этом писал в статье.
6. ture 235 01.12.16 16:46 Сейчас в теме
(0) 1С держит все блокировки на сервере СУБД?
Заблокировать() и если пользователь форму открывает и начинает редактировать туда же?
8. Andreynikus 1162 04.12.16 14:27 Сейчас в теме
(6)
Нет конечно, блокировки 1С находятся на сервере приложений, именно их обработка и показывает если включить флаг.
9. Andreynikus 1162 04.12.16 14:30 Сейчас в теме
(6)
Блокировки 1С на сервере приложений, блокировки СУБД на сервере СУБД. Обработка может показывать и то и другое.
7. ture 235 02.12.16 08:59 Сейчас в теме
Выбор эксперта на инфостарте стал не объективным.
10. Andreynikus 1162 04.12.16 14:33 Сейчас в теме
(7)
Напишите поподробнее, что вы имеете ввиду?
11. it@medipal-onko.ru 28.01.17 14:47 Сейчас в теме
Можно ли здесь увидеть блокировки Регламентных заданий сервера 1С?
12. Andreynikus 1162 28.01.17 22:20 Сейчас в теме
(11)
Обработка показывает транзакционные блокировки 1С и СУБД, при этом не важно кто их наложил, пользователь или регламентное задание.
13. it@medipal-onko.ru 30.01.17 11:40 Сейчас в теме
жаль, что нельзя увидеть какой пользователь заблокировал объекты...
14. Andreynikus 1162 30.01.17 23:16 Сейчас в теме
(13)
Обработка показывает пользователей которые блокируют объекты, посмотрите на скрин.
15. it@medipal-onko.ru 31.01.17 09:04 Сейчас в теме
(14) именно так. я вижу список практически всех своих пользователей (около 150) и все заблокированные объекты. Но понять, кто и что заблокировал невозможно.
16. Andreynikus 1162 31.01.17 12:19 Сейчас в теме
(15)
Эта обработка в первую очередь для тестовых баз, для анализа что именно и в каких случаях блокируется, а не для расследования проблем в боевых базах.
Вы выделяете пользователя, внизу должны отразится данные о тех объектах которые он заблокировал.
Если пользователь Б отображается вложенным в пользователя А, это значит что пользователь А заблокировал пользователя Б. На крайнем скриншоте видно что Администратор заблокировал пользователя Продовец.
17. rossoxa 87 14.06.17 21:08 Сейчас в теме
Добрый день.Подскажите пожалуйста. При попытке включить блокировки 1С получаю ошибку
Прикрепленные файлы:
18. Andreynikus 1162 15.06.17 01:35 Сейчас в теме
(17)
Как бы глупо это не звучало, но проверьте что у пользователя под которым запущена служба 1С есть доступ в этот каталог conf на чтение и запись. Если у вас rphost запускается под своим пользователем, то проверьте под ним.
19. EmpireSer 26.09.17 16:10 Сейчас в теме
Ошибка в обработке:
Логина и пароля от SQL может не быть, так как MS SQL может работать по доменной авторизации.

Из-за этого вот тут тест проходит успешно
	// тестируем подключение sql
	СоединениеSQL = ОбработкаОбъект.СоздатьВнешнееПодключение(ПараметрыПодключения,10);
	Если СоединениеSQL <> Неопределено Тогда
		Сообщить("Подключение к серверу СУБД прошло успешно", СтатусСообщения.Информация);
	КонецЕсли;

А тут получаем проблему
	Если НЕ НастройкиЗаполнены() Тогда
		ОткрытьФормуМодально("ВнешняяОбработка.Блокировки_MS_SQL_Server_1С.Форма.ФормаНастроек");
		Возврат;
	КонецЕсли;
20. Andreynikus 1162 08.10.17 09:52 Сейчас в теме
(19)
Сейчас доменная авторизация в обработке не предусмотрена. Пока можно специально завести на сервере СУБД учетную запись и подключаться под ней.
23. user665952_a.karuna 03.11.17 13:19 Сейчас в теме
хорошая обработка, а под оракл когда-нибудь такая появится? или может уже есть?
24. Andreynikus 1162 04.11.17 11:29 Сейчас в теме
(23)
Может и есть, я не в курсе, хотя там СУБД версионник и как там получать список текущих блокировок не очень понятно.
В любом случае можно доработать обработку таким образом, что бы она фиксировала только управляемые блокировки, они не зависят от СУБД.
25. Novicad 2 21.11.17 06:28 Сейчас в теме
настройки кластера 1С, не проходит авторизация. Имя и пароль верные, админа 1С конфигурации?
27. harisov_r 26 11.01.18 15:58 Сейчас в теме
(25) эх, Александр догадался, а сюда не написал - у меня тоже не проходило соединение с Кластером, пока не наткнулся на фразу к описанию в другой обработке: если кластер без ограничения доступа, то следует писать так: Агент.Authenticate(Кластер, , );
и я понял, что на моем ноутбуке при установке я не делал пароль и логин для администратора кластера, поэтому имя и пароль администратора кластера надо оставить пустыми :о)
26. Novicad 2 21.11.17 06:29 Сейчас в теме
28. Xershi 516 19.06.18 13:26 Сейчас в теме
При тестировании подключения пишет, что нужно проделать настройку по статье: https://infostart.ru/public/197627/
Сервер 1С 64-битный.
Выполнил настройку, но сервер не перезапускал.
Есть методы без этих манипуляций?
29. Andreynikus 1162 20.06.18 12:05 Сейчас в теме
(28)
Тут дело не в обработке, а в COM - конекторе, если он не работает, то и остальное работать не будет.
30. Xershi 516 20.06.18 14:28 Сейчас в теме
(29) это понятно что не в обработке. Может нашли способ без создания обертки или без перезагрузки сервера хотя бы.
31. kar911 28.06.18 15:14 Сейчас в теме
Подскажите что не так делаю, ввел настройки, проверил подключение, подключился успешно. Поставил все галочки, нажал обновить но данных так никакие и не отобразило кроме списка пользователей.
32. Andreynikus 1162 29.06.18 17:57 Сейчас в теме
(31)
Возможно имя базы данных отличается от имени информационной базы.
33. kar911 29.06.18 18:12 Сейчас в теме
(32)ну да отличается, но ведь подключение проходит успешно
34. Andreynikus 1162 29.06.18 18:20 Сейчас в теме
(33)
Я имею ввиду, что в настройках обработки нужно указывать именно ту базу данных, которая указана в свойствах информационной базы 1С.
И еще следует учитывать тот факт, что обработка показывает только заблокированные строки на момент нажатия кнопки. Если ничего не заблокировано, то обработка ничего не покажет.
35. Xershi 516 29.06.18 23:48 Сейчас в теме
Переписал вашу обработку на обычные формы, чтобы не нужно было создавать обертку для 64-битного сервера.
Кстати для таких случаев стоит предусмотреть использование названия через реквизит. Плюс таблицу "Пользователи" переименовал в "ТаблицаПользователи", т.к. в типовых есть одноименный общий модуль!
36. Andreynikus 1162 30.06.18 09:06 Сейчас в теме
(35)
Отлично, я как раз за то что бы обработка развивалась! Буду рад если выложите свою версию в комментариях, возможно это поможет кому-то еще.
37. Terve!R 21.08.18 09:56 Сейчас в теме
(35) как раз не получилось на конфигурации с обычными формами и 64 битным сервером запустить. Поделитесь?
38. Xershi 516 21.08.18 10:28 Сейчас в теме
(37) планирую сделать публикацию, как только будет протестирована обработка. Сообщу как будет готова!
39. Pawlick 9 03.10.18 14:09 Сейчас в теме
Добрый день.
Скачал обработку, настроил, обертку создал, все ок.

Но при попытке обновить данные ошибка:

"Ошибка при выполнении запроса SQL. {ВнешняяОбработка.Блокировки_MS_SQL_Server_1С.МодульОбъекта(106)}: Ошибка при вызове метода контекста (Execute): Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [Microsoft][ODBC SQL Server Driver][SQL Server]Контекст базы данных изменен на "ca_mss_second"."

Не подскажите в чем может быть проблема?
40. Andreynikus 1162 05.10.18 10:47 Сейчас в теме
(39)
Проверьте что у пользователя СУБД которого вы указали есть необходимые права для подключения к вашей базе. Это первое что приходит на ум.
41. WellMaster 98 22.10.18 12:04 Сейчас в теме
Долго бился с ошибкой подключения к кластеру 1с, пока не зарегистрировал длл-ку следующим методом (во вложении на картинке). Запуск командной строки от имени администратора.
Обертку в COM+ как в статье https://infostart.ru/public/197627/ не использовал.
Прикрепленные файлы:
Xershi; Andreynikus; +2 Ответить
44. Xershi 516 30.01.19 21:47 Сейчас в теме
(41) спасибо!
Дублирую текстом:
c:\Windows\SysWOW64\regsvr32 "c:\Program Files\1cv8\8.3.13.1644\bin\comcntr.dll"

Останется только версию платформы подменить!
45. Xershi 516 30.01.19 21:50 Сейчас в теме
(44) увы, что в 32-битной клиенте, что в 64-битном на УФ:
Не зарегистрирована компонента comcntr.dll: {ВнешняяОбработка.Блокировки_MS_SQL_Server_1С.МодульОбъекта(408)}: Ошибка при вызове конструктора (COMОбъект): -2147221005(0x800401F3): Недопустимая строка с указанием класса
В моей доработке для ОФ конечно код выполняется на 32-битном режиме и обработка запускается...
42. lemilk 30.01.19 16:34 Сейчас в теме
К серверу 1С на Ubuntu + PostgreSQL эту обработку можно приспособить?
43. Andreynikus 1162 30.01.19 20:35 Сейчас в теме
(42)
Если смотреть только управляемые блокировки тогда можно.
Если сервер 1С на Ubuntu то возможно потребуются танцы с бубном, но код открыт, так что все в ваших руках.
46. vova196 21 05.02.19 13:18 Сейчас в теме
В описании указано что для 8.х, но под 8.2 - не запускается.
Текст ошибки
47. Kinestetik 20 26.02.19 18:23 Сейчас в теме
(46), в 8.2 ещё не было таких инструкций препроцессора как "#Область", она появилась только в 8.3

Пройдитесь глобальной заменой по всей обработке и сделайте:

#Область заменить на //#Область
#КонецОбласти заменить на //#КонецОбласти

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

Вакансии

Программист 1С
Санкт-Петербург
зарплата от 110 000 руб. до 120 000 руб.
Полный день

Аналитик 1С
Санкт-Петербург
зарплата от 80 000 руб.
Полный день

Программист 1С
Нижний Новгород
зарплата до 120 000 руб.
Полный день

Программист 1С
Волгоград
зарплата от 45 000 руб. до 90 000 руб.
Полный день

Автор новостных обзоров на тему 1С и бухучета
Санкт-Петербург
По совместительству