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

17.08.06

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

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

Скачать файлы

Наименование Файл Версия Размер
lock.zip
.zip 22,98Kb
1404
.zip 22,98Kb 1404 Скачать бесплатно

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

См. также

Консоль запросов

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

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

10 стартмани

29.04.2015    21559    54    Gvozdod    8    

14

StartManager 1.4 - Развитие альтернативного стартера

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

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

1 стартмани

23.04.2014    165704    1864    Alexoniq    1596    

496

Tray Informer

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

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

1 стартмани

04.09.2013    32877    61    O-Planet    78    

49

Изменение структуры баз 1С 7.7 без долгой реструктуризации. Часть 1. Справочники

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

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

1 стартмани

13.08.2013    21197    Reptile    5    

35

v7.7 1CDialogControls: Инструмент в помощь разработчику на 7.7.

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

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

1 стартмани

21.02.2013    18030    35    MarSeN    14    

16

[Разработчику] Любая таблица значений в OLAP

Инструментарий разработчика Платформа 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    36103    51    venger    7    

23

Библиотека кода 1С 7.7 (накопленная за 8 лет)

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

Весь код на 1С 7.7, собранный для повторного использования за 8 лет работы.

10 стартмани

25.11.2012    34958    248    adhocprog    51    

70
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
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 163 12.10.16 12:15 Сейчас в теме
(28) putinpe, По-видимому, нужно преобразование:
ГлавнаяТаблица.Время=Число(Время)-Число(тблЗагруженность.Время);
5. o-mel 28.02.08 13:04 Сейчас в теме
Отличная обработка, пользовался на SQL 2000 долгое время..
Поставили SQL 2005 и с ней траблы..
Переделывать обработку под sql 2005 не собираешся???
6. Sure 163 28.02.08 16:40 Сейчас в теме
Пока не собираюсь: SQL 2005 в обозримом окружении нет. Собственно, работа с 1С 7.7 в нашей организации более не ведётся :-(. Потому возможностей для сколь-либо полезных доработок этой обработки у меня больше нет. В 1С 8.0 всё стало много хуже: сервер приложений изолирует нас и от соединения с SQL-сервером, а кроме того, попытка принудительно "прибить" злоумышленника, запустившего "тяжёлую" операцию в 1С ведёт к обрушению сервера приложений. В 1С 7.7 всё было много проще и приятнее.
7. Gilev.Vyacheslav 1910 08.08.08 19:40 Сейчас в теме
8. MadDAD 152 18.09.08 04:28 Сейчас в теме
12. Sure 163 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 163 19.08.10 21:41 Сейчас в теме
Во-первых, может показывать пустые строчки, если в ходе работы чистился справочник "Ативные пользователи". Во-вторых, если используются прямые запросы к SQL-базе, то они создаются "в обход регистрации пользователя", такие соединения с SQL не получают имени в таблице "АктивныеПользователи". Их Вы и видите.
На моём нынешнем месте работы база оптимизирована прямыми запросами достаточно сильно. И на одно соединение пользователя приходится ещё три соединения с SQL для запросов через ADO. Ну, благо, что здесь хоть терминальный сервер не используется :-)
13. Sure 163 08.11.12 13:15 Сейчас в теме
Отвечаю. Извините, что не могу отправить приватно: новая система начисления баллов на infostart загнала меня в минус.
Подскажите пожалуйста один момент.
В процедуре ПриНачалеРаботыСистемы() вы вставляете конструкцию

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

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

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

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

Это трюк. При конфигурации блокировок подменяется процедура поска элемента. Вместо этого в таблицу АктивныеПользователи запрос SQL вписывает имя текущего пользователя и номер его сессии. Таким образом, при просмотре блокировок мы может выяснить, кто из пользователей вызывает блокировки (SQL-сервер штатной процедурой sp_lock даёт не имя пользователя в 1С, а номер сессии и имя компьютера)
14. vovaapril 46 27.01.15 16:39 Сейчас в теме
Параметры подключения к БД SQL можно брать из файла 1CV7.DBA, а не заставлять пользователя вносить их руками
пример кода тут
15. Sure 163 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 152 03.07.15 12:13 Сейчас в теме
(16) Версия SQL сервера какая?
18. shiro93 03.07.15 12:39 Сейчас в теме
20. MadDAD 152 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 152 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 163 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 163 12.10.16 12:18 Сейчас в теме
(30) putinpe,
Для того, чтобы можно было видеть пользователей во всех базах, нужно во всех базах произвести доработки и воспользоваться предложенным в (12) ответом.
А иначе - смотрите на пустых пользователей
33. Sure 163 12.10.16 13:14 Сейчас в теме
Когда пользователь заходит в базу, то в процедуре ПриНачалеРаботыСистемы() в таблицу "АктивныеПользователи" записывается его имя. Если пользователь выходит из системы регламетным способом, то в процедура ПриЗавершенииРаботыСистемы() имя очищается.
Если же пользователь выходит из системы "нерегламентно", то есть при снятии задачи, при kill в SQL, при ошибке и т.п., то процедура ПриЗавершенииРаботыСистемы() не запускается, имя не очищается.

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