Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 на сервере встроенная функция t-sql sp_getapplock отрабатывает корректно,из 1С нет  [new]
YanMalyakov
Member

Откуда: Краснодар
Сообщений: 36
на сервере встроенная функция t-sql EXEC sp_getapplock @DbPrincipal = 'dbo', @Resource = 'SC5197',@LockMode = 'exclusive';
отрабатывает нормально
из 1С 8 нет

пСтрСоед = "driver={SQL Server};"+"server="+СокрЛП("test1c")+";"+"uid="+СокрЛП(Login)+"; "+"pwd="+СокрЛП(Password)+";"+"Database="+СокрЛП("SMP_2018");
 
GlobalConnection = Новый COMОбъект("ADODB.Connection"); 
GlobalConnection.Provider = "SQLOLEDB"; 
GlobalConnection.ConnectionTimeout = 15; 
GlobalConnection.CommandTimeOut    = 30; 
GlobalConnection.ConnectionString = пСтрСоед; 
GlobalConnection.Open();
GlobalCommand = Новый COMОбъект("ADODB.Command"); 
GlobalCommand.ActiveConnection = GlobalConnection; 
GlobalCommand.CommandType = 1;  ////ставил типы 1, 4,8
GlobalCommand.prepared = "true";
GlobalCommand.namedParameters   = "true";

///Здесь пытаюсь вызвать функцию

GlobalCommand.CommandText = "sp_getapplock"; 

////и пытаюсь передать в неё параметр 

GlobalCommand.Parameters.Append(GlobalCommand.CreateParameter("@LockMode", 200, 3, 16, )); 
GlobalCommand.Parameters(0).value = "exclusive";
GlobalCommand.Execute(); 

///пишет
Произошла исключительная ситуация (Microsoft OLE DB Provider for SQL Server): Процедура или функция "sp_getapplock" ожидает параметр "@LockMode", который не был указан.

///пробую сделать по другому

GlobalCommand.Parameters.Append(GlobalCommand.CreateParameter("@DbPrincipal", 200, 3, 16,"dbo")); 
GlobalCommand.Parameters.Append(GlobalCommand.CreateParameter("@Resource", 200, 1, 12, "SC5197")); 
GlobalCommand.Parameters.Append(GlobalCommand.CreateParameter("@LockMode", 200, 1, 16, "exclusive")); 
GlobalCommand.Execute(); 
///пишет
Произошла исключительная ситуация (Microsoft OLE DB Provider for SQL Server): Процедура или функция "sp_getapplock" ожидает параметр "@LockMode", который не был указан.


///и даже вот так 
СтрокаЗапроса =   "BEGIN TRAN;EXEC sp_getapplock @DbPrincipal = 'dbo', @Resource = 'SC5197',@LockMode = 'exclusive';";
GlobalCommand.CommandText = СтрокаЗапроса;
GlobalCommand.Execute(); 
///ошибок не выдает но и результата блокировки тоже нет


//////третий параметр менял с 0 до 4 не помогает
GlobalCommand.Parameters.Append(GlobalCommand.CreateParameter("@LockMode", 200, 1, 16,"exclusive")); 

подскажите пожалуйста как правильно передать LockMode
2 авг 18, 12:09    [21624132]     Ответить | Цитировать Сообщить модератору
 Re: на сервере встроенная функция t-sql sp_getapplock отрабатывает корректно,из 1С нет  [new]
Garya
Member

Откуда: Москва
Сообщений: 31290
Блог
Тема перенесена по просьбе автора.

Модератор: Тема перенесена из форума "1С".


Сообщение было отредактировано: 2 авг 18, 15:08
2 авг 18, 15:08    [21625013]     Ответить | Цитировать Сообщить модератору
 Re: на сервере встроенная функция t-sql sp_getapplock отрабатывает корректно,из 1С нет  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36926
YanMalyakov
///ошибок не выдает но и результата блокировки тоже нет

Это единственное, что имеет смысл обсуждать в данном разделе. Как передавать параметры из 1с на сервер, спрашивайте в разделе 1с.

Выполните в студии команду

BEGIN TRAN;EXEC sp_getapplock @DbPrincipal = 'dbo', @Resource = 'SC5197',@LockMode = 'exclusive';exec sp_lock @@spid

Если рузультат не отличается, то проблема опять в 1с, смотрите профайлером, что у вас происходит.

К сообщению приложен файл. Размер - 32Kb


Сообщение было отредактировано: 2 авг 18, 15:15
2 авг 18, 15:15    [21625050]     Ответить | Цитировать Сообщить модератору
 Re: на сервере встроенная функция t-sql sp_getapplock отрабатывает корректно,из 1С нет  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36926
Так же процедура sp_getapplock возвращает результат, которые неплохо бы проанализировать, когда что-то идет не так.
2 авг 18, 15:16    [21625057]     Ответить | Цитировать Сообщить модератору
 Re: на сервере встроенная функция t-sql sp_getapplock отрабатывает корректно,из 1С нет  [new]
YanMalyakov
Member

Откуда: Краснодар
Сообщений: 36
Заработал такой вариант
СтрокаЗапроса =   "BEGIN TRAN;EXEC sp_releaseapplock @DbPrincipal = 'dbo', @Resource = 'SC2984';" ;

 GlobalCommand.CommandText = СтрокаЗапроса;


Всем спасибо!
2 авг 18, 15:54    [21625267]     Ответить | Цитировать Сообщить модератору
 Re: на сервере встроенная функция t-sql sp_getapplock отрабатывает корректно,из 1С нет  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
YanMalyakov,

вам справку запрещают читать?
@LockOwner выставьте и не извращайтесь
2 авг 18, 16:02    [21625319]     Ответить | Цитировать Сообщить модератору
 Re: на сервере встроенная функция t-sql sp_getapplock отрабатывает корректно,из 1С нет  [new]
YanMalyakov
Member

Откуда: Краснодар
Сообщений: 36
TaPaK,
еще вопрос, запускаю в студии
что бы снять блокировки
USE SMP_2018;
GO
BEGIN TRAN;
EXEC sp_releaseapplock @DbPrincipal = 'dbo', @Resource = 'SC2984', @LockOwner = 'Transaction' ;
GO

смотрю
	SELECT 
		dm_tran_locks1.request_type,
		dm_tran_locks1.resource_database_id,
		dm_tran_locks1.resource_description,
		dm_tran_locks1.request_session_id, 
		dm_tran_locks1.request_status,
		dm_tran_locks1.request_mode,
		dm_tran_locks1.request_owner_type,
		dm_tran_locks1.resource_associated_entity_id
		from  sys.dm_tran_locks as dm_tran_locks1

показывает что блокировки остались не снятыми,правильно ли снимать sp_getapplock с помощью
sp_releaseapplock в таком синтаксисе ?
EXEC sp_releaseapplock @DbPrincipal = 'dbo', @Resource = 'SC2984', @LockOwner = 'Transaction'  ;
2 авг 18, 16:33    [21625452]     Ответить | Цитировать Сообщить модератору
 Re: на сервере встроенная функция t-sql sp_getapplock отрабатывает корректно,из 1С нет  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
YanMalyakov,

я вообще не понимаю ваших танцев... Вам запрещено хелп открывать? Моргните.

так не снимет блокировку
BEGIN TRAN;
EXEC sp_releaseapplock @DbPrincipal = 'dbo', @Resource = 'SC2984', @LockOwner = 'Transaction' ;
GO
EXEC sp_releaseapplock ...
2 авг 18, 16:37    [21625479]     Ответить | Цитировать Сообщить модератору
 Re: на сервере встроенная функция t-sql sp_getapplock отрабатывает корректно,из 1С нет  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
блокировку на транзакции можно снять только внутри этой же транзакции или она сам снимется после окончаниия, длоя сессии всё тоже самое
2 авг 18, 16:39    [21625491]     Ответить | Цитировать Сообщить модератору
 Re: на сервере встроенная функция t-sql sp_getapplock отрабатывает корректно,из 1С нет  [new]
YanMalyakov
Member

Откуда: Краснодар
Сообщений: 36
TaPaK,а принудительно нельзя снять блокировку ?
я так подумал логически в начале работы модуля проведения документа
sp_getapplock
перед самым завершением
sp_releaseapplock
https://docs.microsoft.com/ru-ru/sql/relational-databases/system-stored-procedures/sp-releaseapplock-transact-sql?view=sql-server-2017

подскажи как правильно сделать пожалуйста.
2 авг 18, 16:43    [21625517]     Ответить | Цитировать Сообщить модератору
 Re: на сервере встроенная функция t-sql sp_getapplock отрабатывает корректно,из 1С нет  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
YanMalyakov
TaPaK,а принудительно нельзя снять блокировку ?
я так подумал логически в начале работы модуля проведения документа
sp_getapplock
перед самым завершением
sp_releaseapplock
https://docs.microsoft.com/ru-ru/sql/relational-databases/system-stored-procedures/sp-releaseapplock-transact-sql?view=sql-server-2017

подскажи как правильно сделать пожалуйста.

что значить принудительно? С другой сессии?

автор
в начале работы модуля проведения документа
sp_getapplock
перед самым завершением
sp_releaseapplock

больше похоже на сессию, хотя я без понятия как у вас
2 авг 18, 16:46    [21625536]     Ответить | Цитировать Сообщить модератору
 Re: на сервере встроенная функция t-sql sp_getapplock отрабатывает корректно,из 1С нет  [new]
YanMalyakov
Member

Откуда: Краснодар
Сообщений: 36
TaPaK,
в 1С в самом документе есть
НачатьТранзакцию(); в начале
между ними
sp_getapplock
перед самым завершением
sp_releaseapplock
а в самом конце ЗафиксироватьТранзакцию();
верно делаю нет ?
2 авг 18, 16:46    [21625540]     Ответить | Цитировать Сообщить модератору
 Re: на сервере встроенная функция t-sql sp_getapplock отрабатывает корректно,из 1С нет  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
YanMalyakov
TaPaK,
в 1С в самом документе есть
НачатьТранзакцию(); в начале
между ними
sp_getapplock
перед самым завершением
sp_releaseapplock
а в самом конце ЗафиксироватьТранзакцию();
верно делаю нет ?

похоже на то.
2 авг 18, 16:48    [21625551]     Ответить | Цитировать Сообщить модератору
 Re: на сервере встроенная функция t-sql sp_getapplock отрабатывает корректно,из 1С нет  [new]
Шыфл
Member

Откуда: Прага
Сообщений: 776
TaPaK
похоже на то.

Похоже на то, что нужно сначала ресурс получіть, а потом уже трансакцію начінать.
3 авг 18, 13:32    [21628242]     Ответить | Цитировать Сообщить модератору
 Re: на сервере встроенная функция t-sql sp_getapplock отрабатывает корректно,из 1С нет  [new]
msLex
Member

Откуда:
Сообщений: 8000
Шыфл
Похоже на то, что нужно сначала ресурс получіть, а потом уже трансакцію начінать.

Откуда такая уверенность?
3 авг 18, 13:46    [21628312]     Ответить | Цитировать Сообщить модератору
 Re: на сервере встроенная функция t-sql sp_getapplock отрабатывает корректно,из 1С нет  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Шыфл
TaPaK
похоже на то.

Похоже на то, что нужно сначала ресурс получіть, а потом уже трансакцію начінать.

а как получить ресурс = транзакцию до её открытия?

ну и

BEGIN TRAN;
EXEC sp_getapplock @DbPrincipal = 'dbo', @Resource = 'SC5197',@LockMode = 'exclusive',  @LockOwner = 'Transaction';

exec sp_lock @@spid

EXEC sp_releaseapplock @DbPrincipal = 'dbo', @Resource = 'SC5197', @LockOwner = 'Transaction' 

COMMIT TRAN

exec sp_lock @@spid
3 авг 18, 14:03    [21628371]     Ответить | Цитировать Сообщить модератору
 Re: на сервере встроенная функция t-sql sp_getapplock отрабатывает корректно,из 1С нет  [new]
Шыфл
Member

Откуда: Прага
Сообщений: 776
msLex
Шыфл
Похоже на то, что нужно сначала ресурс получіть, а потом уже трансакцію начінать.

Откуда такая уверенность?


Простая логика. Трансакция SQL по любому откроется, а вот ресурс получить ещё надо...

Сначала надо вынуть бумажку из ящика и показать всем, что она у вас в руках, а потом уже делать ваши аrхісложные проводки по таблицам. А то вы говорите вслух "я буду делать проводку", а ящик ещё и не отрывали - вдруг там нет ничего. Тогда ваши слова прозвучали зря...
3 авг 18, 15:22    [21628633]     Ответить | Цитировать Сообщить модератору
 Re: на сервере встроенная функция t-sql sp_getapplock отрабатывает корректно,из 1С нет  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Шыфл
msLex
пропущено...

Откуда такая уверенность?


Простая логика. Трансакция SQL по любому откроется, а вот ресурс получить ещё надо...

Сначала надо вынуть бумажку из ящика и показать всем, что она у вас в руках, а потом уже делать ваши аrхісложные проводки по таблицам. А то вы говорите вслух "я буду делать проводку", а ящик ещё и не отрывали - вдруг там нет ничего. Тогда ваши слова прозвучали зря...

При чём здесь все эти сравнения? Просто пофилософствовать? sp_getapplock по сути ничего не блокирует. Это объявление, с разной длительностью жизни (транзакция/сессия) которое можно проверить в других сессиях/транзакциях
3 авг 18, 15:25    [21628645]     Ответить | Цитировать Сообщить модератору
 Re: на сервере встроенная функция t-sql sp_getapplock отрабатывает корректно,из 1С нет  [new]
Шыфл
Member

Откуда: Прага
Сообщений: 776
TaPaK,
1C - это про проводки. Ресурсы - это бумажки. А SQL трансакции - это чтобы пріхо і расход пісалісь вместе.
3 авг 18, 15:27    [21628655]     Ответить | Цитировать Сообщить модератору
 Re: на сервере встроенная функция t-sql sp_getapplock отрабатывает корректно,из 1С нет  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Шыфл
TaPaK,
1C - это про проводки. Ресурсы - это бумажки. А SQL трансакции - это чтобы пріхо і расход пісалісь вместе.

ох
3 авг 18, 15:41    [21628711]     Ответить | Цитировать Сообщить модератору
 Re: на сервере встроенная функция t-sql sp_getapplock отрабатывает корректно,из 1С нет  [new]
Konst_One
Member

Откуда:
Сообщений: 11517
развели тут 1с-щину, автор сам не понял, зачем ему это надо, а вы его ещё путаете дополнительно.

ТС, чего транзакции то не хватает? если тебе надо другие сессии блокировать в момент пока твоя транзакция работает, то этот код тебя всё равно не спасёт без глобальной переделки твоего клиента 1с
3 авг 18, 15:45    [21628728]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить