Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Как программно снять блокировку 1C? (число прочтений - 9085 )
fly
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 11
Зарегистрирован: 11. Февраля 2008
Как программно снять блокировку 1C?
12. Сентября 2008 :: 03:50
Печать  
Ситуация следующая: в базе есть документ, который при проведении производит жуткие расчеты (типа закрытия месяца, только управленческие - под специфику конторы). Проведение занимает 1-1,5 часа. На это время таблица _1SJOURN блокируется процедурой _1sp__1SJOURN_TLockX, и остальные пользователи курят бамбук... Есть желание при проведении этого документа (только этого! остальные доки остаются по-прежнему) снимать программно блокировку, установленную процедурой _1sp__1SJOURN_TLockX.

Возможно ли такое? Если ДА, то каким образом? Поделитесь механизмом....

Заранее благодарен...
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как программно снять блокировку 1C?
Ответ #1 - 12. Сентября 2008 :: 04:30
Печать  
1,5 часа это серьезно Печаль
В этом случае наверняка есть смысл исправить схему работы документа!

Можно перенести "жуткие" расчеты из модуля проведения в модуль формы дока с использованием реквизитов документа.
Т.е. при нажатии спец.кнопки типа "Заполнить" выыполняются "жуткие" расчеты Улыбка и результаты расчетов заносятся в документ.
Далее пользователь нажимает Провести и документ быстро проводится на основании уже подготовленных данных.
В итоге получаем
1) отсутствие блокировок
2) возможность получения данных (исходных/конечных), на базе которых рассчитывался документ для доп.анализа.

ЗЫ такой подход используется очень часто в 1С - например, в 8 - ЗУП, УПП и т.д. В 7 в комплексной, если не ошибаюсь, вроде бы при заполнение проводок и т.д.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
fly
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 11
Зарегистрирован: 11. Февраля 2008
Re: Как программно снять блокировку 1C?
Ответ #2 - 12. Сентября 2008 :: 04:40
Печать  
Круглые глаза  Как-то я об этом не подумал... Уже сдвиг по фазе на параллельном проведении... ищу самое сложное решение...

Спасибо огромное...

"...Надо жить проще..."
  
Наверх
 
IP записан
 
fly
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 11
Зарегистрирован: 11. Февраля 2008
Re: Как программно снять блокировку 1C?
Ответ #3 - 12. Сентября 2008 :: 04:42
Печать  
А вообще теоретически возможно ли снять 1С-ную блокировку во время проведения документа? Свою поставить, я знаю, можно.... а вот снять...?
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как программно снять блокировку 1C?
Ответ #4 - 12. Сентября 2008 :: 04:51
Печать  
fly писал(а) 12. Сентября 2008 :: 04:42:
А вообще теоретически возможно ли снять 1С-ную блокировку во время проведения документа? Свою поставить, я знаю, можно.... а вот снять...?

А оно тебе надо? Печаль
Можно поиметь огроменное количество проблем !
например, см.соседнюю ветку по 1sqlite
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
fly
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 11
Зарегистрирован: 11. Февраля 2008
Re: Как программно снять блокировку 1C?
Ответ #5 - 12. Сентября 2008 :: 05:10
Печать  
ок, спасибо...
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как программно снять блокировку 1C?
Ответ #6 - 12. Сентября 2008 :: 05:32
Печать  
Ну и алгоритм желательно бы поправить, наверняка ведь не оптимальный используется Печаль
1-1.5 часа это очень много, даже для больших конфигураций.
Мне лично всегда удавалось сократить время подобных операций до приемлемых размеров.

Например, в свое время разбирался с ЗиК - свод проводок также считался несколько часов, путем оптимизации удалось сократить до минут 20 Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
fly
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 11
Зарегистрирован: 11. Февраля 2008
Re: Как программно снять блокировку 1C?
Ответ #7 - 12. Сентября 2008 :: 05:44
Печать  
алгоритм уже вылизан донельзя.... 2 года над ним сидел... такова поставленная задача... просто он на "Встроенном Языке 1С" Улыбка

А на прямых запросах еще нет ничего, нормально заточенного под БИ - только эксперименты... Не хочется жертвовать правильностью результатов ради скорости...

Поэтому буду выносить расчеты из модуля проведения....
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Как программно снять блокировку 1C?
Ответ #8 - 12. Сентября 2008 :: 06:14
Печать  
fly писал(а) 12. Сентября 2008 :: 04:42:
А вообще теоретически возможно ли снять 1С-ную блокировку во время проведения документа? Свою поставить, я знаю, можно.... а вот снять...?

Блокировка снимается только завершением/отменой транзакции в которой она установлена.

в ОбработкаПроведения()
ВыполнитьИнструкцию("IF @@TRANCOUNT > 0 COMMIT TRAN");
Со сжатыми губами если что, то я тебе этого не говорил
  

1&&2&&3
Наверх
 
IP записан
 
Mikeware
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 262
Зарегистрирован: 27. Июля 2006
Пол: Мужской
Re: Как программно снять блокировку 1C?
Ответ #9 - 12. Сентября 2008 :: 06:44
Печать  
trad писал(а) 12. Сентября 2008 :: 06:14:
[quote author=fly link=1221191416/0#3 date=1221194542]
в ОбработкаПроведения()
ВыполнитьИнструкцию("IF @@TRANCOUNT > 0 COMMIT TRAN");
Со сжатыми губами если что, то я тебе этого не говорил

Файлики блокировки 1sjorn/1ssystem останутся залоченными?
  
Наверх
ICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Как программно снять блокировку 1C?
Ответ #10 - 12. Сентября 2008 :: 07:05
Печать  
Mikeware писал(а) 12. Сентября 2008 :: 06:44:
trad писал(а) 12. Сентября 2008 :: 06:14:
[quote author=fly link=1221191416/0#3 date=1221194542]
в ОбработкаПроведения()
ВыполнитьИнструкцию("IF @@TRANCOUNT > 0 COMMIT TRAN");
Со сжатыми губами если что, то я тебе этого не говорил

Файлики блокировки 1sjorn/1ssystem останутся залоченными?
нет не останутся
  

1&&2&&3
Наверх
 
IP записан
 
fly
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 11
Зарегистрирован: 11. Февраля 2008
Re: Как программно снять блокировку 1C?
Ответ #11 - 12. Сентября 2008 :: 07:12
Печать  
trad писал(а) 12. Сентября 2008 :: 06:14:
fly писал(а) 12. Сентября 2008 :: 04:42:
А вообще теоретически возможно ли снять 1С-ную блокировку во время проведения документа? Свою поставить, я знаю, можно.... а вот снять...?

Блокировка снимается только завершением/отменой транзакции в которой она установлена.

в ОбработкаПроведения()
ВыполнитьИнструкцию("IF @@TRANCOUNT > 0 COMMIT TRAN");
Со сжатыми губами если что, то я тебе этого не говорил



ГЫ, попробовал на локальной машине в двух сеансах: в одном запустил "большой документ" на проведение, во втором попробовал создать новый документ - создался без проблем, попробовал его провести - 1С сказала "Ожидание блокировки таблицы 'Проводки'" и сожрала 100% проца. Из-за этого первая 1С-ка не может рассчитать бухгалтерские итоги и пытается отбить у 2-ой эти же 100% проца. .... В результате этой битвы за выживание случился коллапс. Повесился весь комп...

Прикольный эксперимент...  Смех

Лучше буду оптимизировать....
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Как программно снять блокировку 1C?
Ответ #12 - 12. Сентября 2008 :: 08:06
Печать  
fly писал(а) 12. Сентября 2008 :: 07:12:
запустил "большой документ" на проведение, во втором попробовал создать новый документ - создался без проблем, попробовал его провести - 1С сказала "Ожидание блокировки таблицы 'Проводки'"

А это из-за того, что в процессе проведения "большого документа" наверняка началась новая транзакция и блокировки установились автоматически на те объекты по которым ты делаешь DML запросы в этом модуле проведения (например движение в регистры или запись проводок).
Ведь твой коннект по прежнему находится в режиме "неявных транзакций".
Этот режим выключается так "set implicit_transactions off"

!!! код
Код
Выбрать все
ВыполнитьИнструкцию("IF @@TRANCOUNT > 0 COMMIT TRAN");
ВыполнитьИнструкцию("set implicit_transactions off"); 

- грубый сурогат гибких блокировок. Применять его в таком виде на промышленных задачах нельзя. !!!
  

1&&2&&3
Наверх
 
IP записан
 
Mikeware
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 262
Зарегистрирован: 27. Июля 2006
Пол: Мужской
Re: Как программно снять блокировку 1C?
Ответ #13 - 12. Сентября 2008 :: 08:17
Печать  
trad писал(а) 12. Сентября 2008 :: 08:06:
Ведь твой коннект по прежнему находится в режиме "неявных транзакций".
Этот режим выключается так "set implicit_transactions off"

!!! код
Код
Выбрать все
ВыполнитьИнструкцию("IF @@TRANCOUNT > 0 COMMIT TRAN");
ВыполнитьИнструкцию("set implicit_transactions off"); 

- грубый сурогат гибких блокировок. Применять его в таком виде на промышленных задачах нельзя. !!!

"Этоесть можно?
-Можно!
только отравишься..."© Смех
  
Наверх
ICQ  
IP записан
 
sml
Full Member
***
Отсутствует


I Love 1С++!

Сообщений: 186
Зарегистрирован: 28. Февраля 2008
Re: Как программно снять блокировку 1C?
Ответ #14 - 12. Сентября 2008 :: 10:50
Печать  
Все грибы съедобные - это факт.
Правда, некоторые - только один раз  Очень довольный
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать