Просмотр блокировок 1С 7.7 SQL

17.08.06

Разработка - Инструментарий разработчика

Обработка позволяет наблюдать за быстродействием  1С, даёт возможность определять причину замедления работы и отстранять от работы её "автора".
Если Вы используете терминальный сервер (Citrix), а подключение к с серверу SQL идёт через один логин и пароль, то стандартные средства MS SQL не дают возможность различать пользователей и определять "виновника".
Предлагаемая обработка решает эту проблему.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Бесплатно
lock.zip
.zip 22,98Kb
1405
1405 Скачать бесплатно

Позволяет определять пользователя, вызвавшего замедление работы даже при использовании терминалов Citrix; снимать с выполнения выбранные процессы.
Для работы обработки "Блокировки.ert" необходимо внесение изменений в конфигурацию 1С: необходимо добавить 5 констант, справочник и внести изменения в глобальный модуль.
Без этих изменений может работать только упрощённая версия обработки - "kill.ert" (присутствует в архиве).

См. также

Инструментарий разработчика Системный администратор Программист Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Консоль запросов к базе SQL, не требующая внешних компонент

10 стартмани

29.04.2015    22291    57    Gvozdod    8    

16

Инструментарий разработчика Системный администратор Программист Платформа 1С v7.7 Платформа 1С v8.3 Абонемент ($m)

Очередная редакция альтернативного стартера, являющегося продолжением StartManager 1.3. Спасибо всем, кто присылал свои замечания и пожелания, и тем, кто перечислял финансы на поддержку проекта. С учетом накопленного опыта, стартер был достаточно сильно переработан в плане архитектуры. В основном сделан упор на масштабируемость, для способности программы быстро адаптироваться к расширению предъявляемых требований (т.к. довольно часто просят добавить ту или иную хотелку). Было пересмотрено внешнее оформление, переработан существующий и добавлен новый функционал. В общем можно сказать, что стартер эволюционировал, по сравнению с предыдущей редакцией. Однако пока не всё реализовано, что планировалось, поэтому еще есть куда развиваться в плане функциональности.

1 стартмани

23.04.2014    168399    1882    Alexoniq    1596    

499

Инструментарий разработчика Программист Платформа 1С v7.7 Платформа 1С v8.3 Россия Абонемент ($m)

Согласитесь, что окно стандартное сообщений в 1С иногда приносит больше неудобств, чем пользы. И тем более разные "Предупредить"... Что с этим окном только не делают! Его отцепают от формы, делают маленьким, умудряются спрятать за границы экрана. А потом звонят программистам с претензией, что документ почему-то не проводится, отя ничего и не пишет. У вас такого не было? А вот у нас было и не раз )))

1 стартмани

04.09.2013    33411    61    O-Planet    78    

49

Инструментарий разработчика Программист Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

На днях встретил вопрос на форуме про возможность внесения изменений в конфигурацию без долгого сохранения в рабочей базе большого объема. Вот решил поделиться опытом, как это делал я. База у нас была объемом порядка 120 Гб. К базе обращался сайт в режиме 24/7, поэтому важно было быстро сохранять изменения и желательно без последующего монопольного запуска для восстановления индексов и процедур и без отключения пользователей от базы. Это первая часть статьи и посвящена она справочникам. С одной стороны - это самый простой объект, с другой стороны, именно про справочник спрашивалось на форуме. Если статья будет востребована, то я напишу аналогичные про документы, регистры и может еще что.

1 стартмани

13.08.2013    21809    Reptile    5    

35

Инструментарий разработчика Программист Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Встала недавно задача для одной организации, которая все еще на 1С 7.7 немного автоматизировать работу отдела продаж. А именно уйти от ручного заполнения договоров, сделанных юристами в MS Word. Договора от разных фирм и разного назначения отличались. Переводить их в таблицы 1С очень не хотелось и нашел способ прямо в файлах Word сделать небольшие дополнения, чтобы можно было печатать, используя именно эти заготовки юристов.

1 стартмани

14.07.2013    27659    56    adamx    11    

14

Инструментарий разработчика Программист Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Давным давно, когда я еще плотно писал на 7.7 работа с формами была мучительной и неудобной. Приходилось каждый элемент выкладывать, выравнивать на форме ручками, прописывать код в модуле. Иногда при разработке очередной формы приходила в голову мысль: "а где-то я уже похожее делал..." и начинался мучительный поиск подходящего кода в своих запасах........

1 стартмани

21.02.2013    18352    36    MarSeN    14    

17

Инструментарий разработчика Программист Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Анализируем различные данные в 1С, используя OLAP-технологии со всеми прелестями. Т.е. наглядное отображение данных, быстрые расчеты, горизонтальные и вертикальные группировки любой вложенности, удобная фильтрация, Drag'n'Drop и ещё много приятных вещей от MS. Обработка на входе принимает практически любую таблицу значений (ТЗ в которой колонкам указаны типы значений, строка, число и т.п.), на выходе имеем на форме 1С сводную таблицу и график по этой ТЗ, с которой работаем, как и в Excel со сводной таблицей и диаграммой. Взял за основу разработку «OLAP Анализ счёта» ( http://infostart.ru/public/14964/ ) от JohnyDeath и переделал под любую ТЗ. Опционально используется «Прогресс бар для 1С 77» (http://infostart.ru/public/14061/ ) от Gmix.

1 стартмани

21.12.2012    36352    51    venger    7    

23
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Aleco 06.09.06 08:16 Сейчас в теме
Не хватает в kill.ert имя пользователя 1с
2. 09.09.06 12:28 Сейчас в теме
Правильно, в kill имени пользователя 1С нет! Чтобы его добыть - имя пользователя 1С - следуйте инструкциям и используйте "Блокировки.ert".
Впрочем, поскольку Вы дали такой комментарий, читать инструкции Вы не привыкли :-((.
3. saser 03.10.07 18:25 Сейчас в теме
автор развей мои сомнения

обработка kill.ert не показывает заблокированных , т.к. пытается анализировать только таблицу master..sysprocesses , а по полю blocked этой таблице вряд ли это можно сделать.

а вот "блокировки.ert" другое дело
4. saser 03.10.07 18:29 Сейчас в теме
а ну нашел на проклабе комментарий автора

>>> Кроме того, у kill.ert нет возможности смотреть заблокированных пользователей и комфортно отслеживать степень загруженности работой MS SQL.

вопрос снят
просто не понятно тогда, для чего она нужна :)
28. putinpe 11.10.16 16:47 Сейчас в теме
ГлавнаяТаблица.Время=Время-тблЗагруженность.Время;
{C:\USERS\POLGIN.D\DESKTOP\НОВАЯ ПАПКА (4)\БЛОКИРОВКИ.ERT(214)}: Операция вычитания не определена для строковых величин


как править?
31. Sure 166 12.10.16 12:15 Сейчас в теме
(28) putinpe, По-видимому, нужно преобразование:
ГлавнаяТаблица.Время=Число(Время)-Число(тблЗагруженность.Время);
5. o-mel 28.02.08 13:04 Сейчас в теме
Отличная обработка, пользовался на SQL 2000 долгое время..
Поставили SQL 2005 и с ней траблы..
Переделывать обработку под sql 2005 не собираешся???
6. Sure 166 28.02.08 16:40 Сейчас в теме
Пока не собираюсь: SQL 2005 в обозримом окружении нет. Собственно, работа с 1С 7.7 в нашей организации более не ведётся :-(. Потому возможностей для сколь-либо полезных доработок этой обработки у меня больше нет. В 1С 8.0 всё стало много хуже: сервер приложений изолирует нас и от соединения с SQL-сервером, а кроме того, попытка принудительно "прибить" злоумышленника, запустившего "тяжёлую" операцию в 1С ведёт к обрушению сервера приложений. В 1С 7.7 всё было много проще и приятнее.
7. Gilev.Vyacheslav 1917 08.08.08 19:40 Сейчас в теме
8. MadDAD 136 18.09.08 04:28 Сейчас в теме
12. Sure 166 17.10.12 14:48 Сейчас в теме
Пришло сообщение.
Доброе время суток !
Александр, подскажите пожалуйста маленький вопрос по вашей обработке "Просмотр блокировок 1С 7.7 SQL"
Вопрос в следующем.
У нас на рабочем сервере крутятся две базы SQL разных конфигураций. Я добавил в одну базу константы и справочник и запустил обработку КонфигурироватьБлоки ровки. Далее когда запускаю обработку по просмотру блокировок то вижу в колонке пользователей имена активных пользователей из первой базы (в которой создан справочник АктивныеПользователи ) а так же подключения на SQL сервер которые происходят из второй базы (в которой этого справочника нет)
Возможно ли видеть при одновременно активных двух базах SQL сервера с помощью этой обработки пользователей из двух баз идентифицированных по именам ?

Отвечаю. Извините, что не могу отправить приватно: новая система начисления баллов на infostart загнала меня в минус.
Возможно. Но не стандартной версией, а настроенной под себя.
Нужно знать имена баз, в обеих завести механизм учёта болокировок, знать имена таблиц в основной базе и во второй (Пусть будут SC8888 и anorherdb..SC9999).
Тогда процедура a_lock_sp будет примерно выглядеть так
create proc a_lock_sp as
set nocount on
create table #locks (spid int,dbid int,ObjId int,IndId int, Type varchar(8),Resource varchar(30),Mode varchar(8),Status varchar(8))
insert #locks exec sp_lock
create table #who(spid int, ecid int, status varchar(20),loginame varchar(256), hostname varchar(256) ,blk char(5) null,dbname varchar(80)null, cmd varchar(256) null)
insert #who exec sp_who
select s.ROW_ID spid, left(d.name,15) as dbid,
case d.name
when 'onedb' then s.DESCR
when 'anotherdb' then s1.DESCR
else ''
end as name
, count(*) as QtyLock,convert(char(20),loginame) login,l.Status, convert(char(40),cmd) Command,convert(char(20),hostname) Host
from #locks l, #who w, SC8888 s, anorherdb..SC9999 s1, master..sysdatabases d
where d.dbid=l.dbid and l.Mode<>'S' and l.spid=w.spid and s.ROW_ID=l.spid group by s.ROW_ID, left(d.name,15),
case d.name
when 'onedb' then s.DESCR
when 'anotherdb' then s1.DESCR
else ''
end,
convert(char(20),loginame),l.Status, convert(char(40),cmd),convert(char(20),hostname) having s.ROW_ID<>@@SPID
drop table #locks, #who
set nocount off
return
grant exec on a_lock_sp to public

Она будет подхватывать имена пользователей из обеих баз.

Обращаю внимание: отличие процедуры от стандартной - вместо DESCR as name будет "простыня"
case d.name
when 'onedb' then s.DESCR
when 'anotherdb' then s1.DESCR
else ''
end as name
9. boks 1 21.05.09 07:58 Сейчас в теме
Отличная обработка, пользуюсь, нравится.
Автору респект.
10. Pierre 19.08.10 14:48 Сейчас в теме
А почему она может не показывать имена пользователей? т.е. пустые строки
11. Sure 166 19.08.10 21:41 Сейчас в теме
Во-первых, может показывать пустые строчки, если в ходе работы чистился справочник "Ативные пользователи". Во-вторых, если используются прямые запросы к SQL-базе, то они создаются "в обход регистрации пользователя", такие соединения с SQL не получают имени в таблице "АктивныеПользователи". Их Вы и видите.
На моём нынешнем месте работы база оптимизирована прямыми запросами достаточно сильно. И на одно соединение пользователя приходится ещё три соединения с SQL для запросов через ADO. Ну, благо, что здесь хоть терминальный сервер не используется :-)
13. Sure 166 08.11.12 13:15 Сейчас в теме
Отвечаю. Извините, что не могу отправить приватно: новая система начисления баллов на infostart загнала меня в минус.
Подскажите пожалуйста один момент.
В процедуре ПриНачалеРаботыСистемы() вы вставляете конструкцию

Процесс=СоздатьОбъект("Справочник.АктивныеПользователи");
Процесс.Новый();

Если 0=Процесс.НайтиЭлемент(Процесс) Тогда

не понятно вот что. В чем смысл конструкции
Если 0=Процесс.НайтиЭлемент(Процесс) Тогда

? Идея выполнять запрос при каждом входе пользователя в базу 1С ? Ведь и так понятно что если элемент справочника только создан то он не будет найден.

Это трюк. При конфигурации блокировок подменяется процедура поска элемента. Вместо этого в таблицу АктивныеПользователи запрос SQL вписывает имя текущего пользователя и номер его сессии. Таким образом, при просмотре блокировок мы может выяснить, кто из пользователей вызывает блокировки (SQL-сервер штатной процедурой sp_lock даёт не имя пользователя в 1С, а номер сессии и имя компьютера)
14. vovaapril 47 27.01.15 16:39 Сейчас в теме
Параметры подключения к БД SQL можно брать из файла 1CV7.DBA, а не заставлять пользователя вносить их руками
пример кода тут
15. Sure 166 28.01.15 10:41 Сейчас в теме
(14) vovaapril,
Да-да! Плавали-знаем. Я знаю способ получения пароля из параметров подключения. К сожалению, в моей жизни был пример, когда пароль, расшифрованный из параметров подключения не совпадал с паролем SQL. Потому что пароль был в русской раскладке. Так что пароль из констант оказался более надёжной штукой.
:-(
vovaapril; +1 Ответить
16. shiro93 03.07.15 11:54 Сейчас в теме
Добрый день.такая вот проблема при пробе подключиться к кто блокирует выскакивает ошибка SQL ERROR a_lock_sp :<<Microsoft OLE DB Provider for ODBC Drivers: [Microsoft][ODBC SQL Server Driver][SQL Server]Имя столбца или число предоставленных значений не соответствует определению таблицы.>>
кто что подскажет?
и еще время не хочет выводить ошибка: ГлавнаяТаблица.Время=СокрЛП(rs.Fields("wait").Value);
{C:\USERS\SHYROBOKOV.A\DESKTOP\LOCK\БЛОКИРОВКИ.ERT(97)}: Тип переменой не поддерживается
17. MadDAD 136 03.07.15 12:13 Сейчас в теме
(16) Версия SQL сервера какая?
18. shiro93 03.07.15 12:39 Сейчас в теме
20. MadDAD 136 03.07.15 14:15 Сейчас в теме
(18) Обработка "КонфигурированиеБлокировок" отработала нормально? В глобальник все что нужно добавлено? Константы установлены?
21. shiro93 03.07.15 14:29 Сейчас в теме
(20) MadDAD, с этим все верно отработало. к другим подключается. к этой не хочет процедуре
22. shiro93 06.07.15 09:43 Сейчас в теме
(20) MadDAD, проблема где-то в этом участке:
"set nocount on cre ate   table #locks (spid int,dbid int,ObjId int,IndId int, Type varchar(8),Resource varchar(30),Mode varchar(8),Status varchar(8)) ins ert #locks exec sp_lock cre ate   table #who(spid int,"+
 	" ecid int, status varchar(20),loginame varchar(256), hostname varchar(256) ,blk char(5) null,dbname varchar(80)null, cmd  varchar(256) null) insert #who exec sp_who sel ect s.ROW_ID spid, left(d.name,15) as dbid, DESCR as name,"+
 	" count(*) as QtyLock,convert(char(20),loginame) login,l.Status, convert(char(40),cmd) Command,convert(char(20),hostname) Host fr om #locks l, #who w, "+_txtTbl+" s, master..sysdatabases d where d.dbid=l.dbid and l.Mode<>'S' and l.spid=w.spid and"+
 	" s.ROW_ID=l.spid group by s.ROW_ID, left(d.name,15),DESCR, convert(char(20),loginame),l.Status, convert(char(40),cmd),convert(char(20),hostname) having s.ROW_ID<>@@SPID dr op   table #locks, #who se t nocount off return";
23. MadDAD 136 06.07.15 10:13 Сейчас в теме
(22) _txtTbl в Вашем случае чему равно?
24. shiro93 06.07.15 10:51 Сейчас в теме
(23) MadDAD, это имя таблицы справочника
25. shiro93 06.07.15 11:42 Сейчас в теме
(23) MadDAD, разобрался в табл #who не хватало колонки для выполнения процедуры sp_who
26. mai13 01.06.16 17:09 Сейчас в теме
(25) shiro93, А можете дать точную информацию, чего не хватало и как решить проблему "wait" ?
27. Sure 166 03.06.16 13:17 Сейчас в теме
(26) mai13,
Позвольте автору высказаться.

В старой версии MS SQL процедура sp_who выдавала на одну колонку меньше.
Лечение:
cmd varchar(256) null)
меняется на
cmd varchar(256) null, request_id int)

По поводу wait. По-видимому, 1С-у не нравится возвращаемое значение. Попробуйте заменить
max(waittime) wait
на
str(max(waittime),18,0) as wait
19. shiro93 03.07.15 12:58 Сейчас в теме
со второй ошибкой времени разобрался. первая осталась еще
29. putinpe 11.10.16 17:50 Сейчас в теме
Почему та таблица в которой данные по Активным пользователям не очищается?
Почему в той таблице показываются все БД которые на сервере?
30. putinpe 11.10.16 18:15 Сейчас в теме
Если Вы используете терминальный сервер (Citrix), а подключение к с серверу SQL идёт через один логин и пароль, то стандартные средства MS SQL не дают возможность различать пользователей и определять "виновника".
Предлагаемая обработка решает эту проблему.

У меня путает Базы . Я зашел в базу "TEST BLOсK" в показывает что в "TORG"

Конфа такая
1с 7.7
sql 2005
Терминальный доступ
100 человек все в 1с
Как мне сделать что бы все это заработало?
32. Sure 166 12.10.16 12:18 Сейчас в теме
(30) putinpe,
Для того, чтобы можно было видеть пользователей во всех базах, нужно во всех базах произвести доработки и воспользоваться предложенным в (12) ответом.
А иначе - смотрите на пустых пользователей
33. Sure 166 12.10.16 13:14 Сейчас в теме
Когда пользователь заходит в базу, то в процедуре ПриНачалеРаботыСистемы() в таблицу "АктивныеПользователи" записывается его имя. Если пользователь выходит из системы регламетным способом, то в процедура ПриЗавершенииРаботыСистемы() имя очищается.
Если же пользователь выходит из системы "нерегламентно", то есть при снятии задачи, при kill в SQL, при ошибке и т.п., то процедура ПриЗавершенииРаботыСистемы() не запускается, имя не очищается.

Если в других базах (не обязательно 1С-ных) на SQL работает пользователи, то в таблице "АктивныеПользователи" они не регистрируются.
Более того, если пользователь запускает обработку, применяющую SQL запросы через ODBC, ADO, то такие запросы имеют дополнительные входы на SQL сервер. Которые также не регистрируются в таблице "АктивныеПользователи". Да, это недостаток предлагаемого решения.
Feci quod potui, faciant meuora potentes.
Оставьте свое сообщение