Переключение на Главную Страницу Страницы: [1] 2 3  ОтправитьПечать
Очень популярная тема (более 25 ответов) Как обойти блокировку таблицы _1SBKTTLC? (число прочтений - 11683 )
chicago
Senior Member
****
Отсутствует


1C++, I have nothing to
say more!

Сообщений: 316
Местоположение: Тернополь-Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Как обойти блокировку таблицы _1SBKTTLC?
18. Сентября 2009 :: 13:39
Печать  
Есть:
1. 1С SQL 7.70.0.25.
2. Microsoft SQL Server  2000 - 8.00.2055 (Intel X86).
3. В процесе разработки собственного механизма блокировок возникла следующая проблемма. Необходимо при проведении документа который участвует в бух. учете (формирует бух. операции, проводки) разработать механизм исключающий взаимоблокировки.

При проведении документа, при вызове метода
Код
Выбрать все
Операция.Записать(); 


выполняется одна из хран. процедур, а именно "_1sp__1SBKTTLC_ChangeTotal".
В тексте данной процедуры есть
Код
Выбрать все
...
Update _1SBKTTLC
set
OB1=OB1+@Ob1,
OB2=OB2+@Ob2,
OB3=OB3+@Ob3,
DTFLAGS=@DtFlags,
KTFLAGS=@KtFlags
where
DATE=@Date and KIND=@Kind and ACCKTID=@AccKtId and ACCDTID=@AccDtId and CURRID=@CurId
... 

.
4. Вопрос(ы):
1. Почему при выполнении даной процедуры с параметрами
@Date = Дат1;
@Kind = Вид1;
@AccKtId = СчК1
@AccDtId = СчД1
@CurId = Вал1
следующим запросом
Код
Выбрать все
SET LOCK_TIMEOUT 500
DECLARE @РезБло smallint
SELECT @РезБло = 1
FROM _1SBKTTLC AS ТабБло WITH (INDEX(PK__1SBKTTLC), ROWLOCK, XLOCK)
WHERE
(ТабБло.DATE = Дат1) AND (ТабБло.ACCDTID = СчД3) AND (ТабБло.ACCKTID = СчК4) 


я не могу наложить необходимую блокировку?
2. Как решить даную задачу?
Спасибо.
  
Наверх
ICQ  
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как обойти блокировку таблицы _1SBKTTLC?
Ответ #1 - 18. Сентября 2009 :: 14:01
Печать  
Откажись от UPDATE: http://www.softpoint.ru/article_id339.htm
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
alexdd
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 347
Зарегистрирован: 25. Июня 2007
Re: Как обойти блокировку таблицы _1SBKTTLC?
Ответ #2 - 18. Сентября 2009 :: 14:02
Печать  
FROM _1SBKTTLC AS ТабБло WITH (INDEX(PK__1SBKTTLC), ROWLOCK, XLOCK,HOLDLOCK)
?
  
Наверх
 
IP записан
 
chicago
Senior Member
****
Отсутствует


1C++, I have nothing to
say more!

Сообщений: 316
Местоположение: Тернополь-Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как обойти блокировку таблицы _1SBKTTLC?
Ответ #3 - 18. Сентября 2009 :: 16:10
Печать  
berezdetsky писал(а) 18. Сентября 2009 :: 14:01:
Откажись от UPDATE: http://www.softpoint.ru/article_id339.htm

Спасибо, это было бы круто реализовать
Цитата:
...
для каждой из двух таблиц бухгалтерских итогов создается дополнительная пара таблиц, которые объединяются путем общего представления по этим таблицам
...

был бы пример реализации...
  
Наверх
ICQ  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Как обойти блокировку таблицы _1SBKTTLC?
Ответ #4 - 21. Сентября 2009 :: 04:27
Печать  
chicago писал(а) 18. Сентября 2009 :: 16:10:
berezdetsky писал(а) 18. Сентября 2009 :: 14:01:
Откажись от UPDATE: http://www.softpoint.ru/article_id339.htm

Спасибо, это было бы круто реализовать
Цитата:
...
для каждой из двух таблиц бухгалтерских итогов создается дополнительная пара таблиц, которые объединяются путем общего представления по этим таблицам
...

был бы пример реализации...


вот пример
http://www.1csql.ru/materials/articles/develop.html~bafd447e-bdfd-2e14-40e6-8501...

  
Наверх
 
IP записан
 
classic
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 330
Местоположение: г. Харьков
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Как обойти блокировку таблицы _1SBKTTLC?
Ответ #5 - 21. Сентября 2009 :: 07:59
Печать  
Интересно. Если удалить таблицу _1SBKTTL и подложить вместо нее View такой же структуры, 1С вылетает при запуске при загрузке 1cpp.dll
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как обойти блокировку таблицы _1SBKTTLC?
Ответ #6 - 21. Сентября 2009 :: 08:15
Печать  
classic писал(а) 21. Сентября 2009 :: 07:59:
Интересно. Если удалить таблицу _1SBKTTL и подложить вместо нее View такой же структуры, 1С вылетает при запуске при загрузке 1cpp.dll

1C++ v3.0.1.23 - не вылетает.
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
chicago
Senior Member
****
Отсутствует


1C++, I have nothing to
say more!

Сообщений: 316
Местоположение: Тернополь-Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как обойти блокировку таблицы _1SBKTTLC?
Ответ #7 - 21. Сентября 2009 :: 08:42
Печать  
Z1 писал(а) 21. Сентября 2009 :: 04:27:


И где же там пример "отказа от UPDATE"?
  
Наверх
ICQ  
IP записан
 
chicago
Senior Member
****
Отсутствует


1C++, I have nothing to
say more!

Сообщений: 316
Местоположение: Тернополь-Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как обойти блокировку таблицы _1SBKTTLC?
Ответ #8 - 21. Сентября 2009 :: 08:48
Печать  
classic писал(а) 21. Сентября 2009 :: 07:59:
Интересно. Если удалить таблицу _1SBKTTL и подложить вместо нее View такой же структуры, 1С вылетает при запуске при загрузке 1cpp.dll


А зачем удалять то? Можно:
- оставить таблицу _1SBKTTL;
- сделать свое представление, например "_1SBKTTL_vw";
- поправить в BkEnd.dll все "1SBKTTL" на "_1SBKTTL_vw".
  
Наверх
ICQ  
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как обойти блокировку таблицы _1SBKTTLC?
Ответ #9 - 21. Сентября 2009 :: 08:59
Печать  
Не забывай, что её периодически надо будет возвращать обратно для всяких реструктуризаций.  Подмигивание Да и в монопольном режиме этот механизм будет лишним.
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
chicago
Senior Member
****
Отсутствует


1C++, I have nothing to
say more!

Сообщений: 316
Местоположение: Тернополь-Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как обойти блокировку таблицы _1SBKTTLC?
Ответ #10 - 21. Сентября 2009 :: 09:19
Печать  
berezdetsky писал(а) 21. Сентября 2009 :: 08:59:
Не забывай, что её периодически надо будет возвращать обратно для всяких реструктуризаций.  Подмигивание Да и в монопольном режиме этот механизм будет лишним.


Как мне видится, модель (для "_1SBKTTL") такова:
- создаем таблицу "_1SBKTTL_ins";
- в хран. проц. "_1sp__1SBKTTL_ChangeTotal" убираем "Update" и все перенапрявляем в "_1SBKTTL_ins" как "INSERT INTO";
- поскольку в "_1SBKTTL" у нас в рабочее время не будет акт. итогов делаем представление "_1SBKTTL_vw". В этом предсталении будут итоги из табл. "_1SBKTTL", но с учетом "_1SBKTTL_vw";
- заменяем в BkEnd.dll все "1SBKTTL" на "_1SBKTTL_vw";
- пишем скрипт, который по шедулеру (в не раб. время) будет переносить все данные из "_1SBKTTL_ins" в "_1SBKTTL".

Все. Да в мон. режиме это все лишнее.
  
Наверх
ICQ  
IP записан
 
classic
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 330
Местоположение: г. Харьков
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Как обойти блокировку таблицы _1SBKTTLC?
Ответ #11 - 21. Сентября 2009 :: 13:07
Печать  
Как-то неаккуратненько с патчингом длл. Если ты сисадмин и постоянно держишь руку на пульсе - это может быть и прокатит. А продавать патченые длл как готовое решение как-то стремно. Найдется же обязательно шибко умный пользователь, который запустит свою копию 1С - и записи пойдут не в те таблицы.
  
Наверх
 
IP записан
 
chicago
Senior Member
****
Отсутствует


1C++, I have nothing to
say more!

Сообщений: 316
Местоположение: Тернополь-Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как обойти блокировку таблицы _1SBKTTLC?
Ответ #12 - 21. Сентября 2009 :: 13:59
Печать  
classic писал(а) 21. Сентября 2009 :: 13:07:
Как-то неаккуратненько с патчингом длл. Если ты сисадмин и постоянно держишь руку на пульсе - это может быть и прокатит. А продавать патченые длл как готовое решение как-то стремно. Найдется же обязательно шибко умный пользователь, который запустит свою копию 1С - и записи пойдут не в те таблицы.


Кто мешает (запрещает) написать механизм проверки (верификации) загрузки нужной dll? Так сказать "защиту от дурака" или от "шибко умного пользователя"?
В глоб. модуле, при начеле работы проверка dll, если "не та" - иди кури. В чем вопрос то?
  
Наверх
ICQ  
IP записан
 
classic
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 330
Местоположение: г. Харьков
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Как обойти блокировку таблицы _1SBKTTLC?
Ответ #13 - 21. Сентября 2009 :: 15:19
Печать  
Звучит логично, нужно экспериментировать.
Насколько упадет производительность после дня активной работы? Это ж таблица _1SBKTTL_ins выростет до огромных размеров.
  
Наверх
 
IP записан
 
classic
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 330
Местоположение: г. Харьков
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Как обойти блокировку таблицы _1SBKTTLC?
Ответ #14 - 23. Сентября 2009 :: 08:38
Печать  
Не могу сообразить, как написать запрос - объединяющий данные из двух таблиц... Конечно, можно делать копию - view в еще одну таблицу, потом удалить из основной и копировать копию в основную - но такие дела выполняются несколько минут при десятке записей в таблицах движений...
Есть ощущение, что это должно делаться красиво и аккуратно через update, да что-то не выходит каменный цветок.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 3 
ОтправитьПечать