Переключение на Главную Страницу Страницы: 1 [2]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Блокировка базы SQL в модуле проведения (число прочтений - 7007 )
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Блокировка базы SQL в модуле проведения
Ответ #15 - 01. Февраля 2010 :: 19:33
Печать  
Попробуй удалять строки частями и каждый раз проверяй.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Блокировка базы SQL в модуле проведения
Ответ #16 - 02. Февраля 2010 :: 05:49
Печать  
DimaN писал(а) 01. Февраля 2010 :: 17:13:
Z1 писал(а) 01. Февраля 2010 :: 06:12:
Лучше опиши задачу в обычный терминах.
Также не понятно при переходе на новую базу очищаются ли
ra rg.
Сколько конектов в базе ?
ado для текущей или другой базы ?
Какой размер базы до перехода на новую базу и после перехода
на новую базу ?

Задача в следующем: при проведении расходной накладной необходимо проверить Клиента на его задолженность. Для определения задолженности написана хранимая процедура в базе, которая в параметрах получает ИмяКлиента и ДатуТА. Если у клиента есть задолженность, то документ не проводится.
При переходе на новую базу Ra,Rg не очищаются. Скрипт очистки писал не я, не понял почему так.
К базе примерно 15 коннектов.
ADO для текущей базы.
Размер базы одинаковый практически (примерно 1Гб)

Если эту же обработку оформить как Внешний Отчет, то все работает и соединяется. Тут проблема именно с модулем проведения либо с какими-то полями/параметрами базы.

Может Вам мои советы покажутся и не по теме но вот они
1.Такая свертка базы не нужна.Не сворачивайте базу вообще.
(экономия места при 1Гбнет никакой). Данные Вы тоже не очень прячете они есть в регистрах. Ваша свертка как минимум имеете
нарушение структуры базы - это может привести к разным последствиям.
2.Вашу проверку лучше перенести из модуля проведения в модуль ПриЗаписи или ПриЗакрытии если выполнялось проведение.
3.Модуль на ADO заменить на модуль 1с++ как минимум не будет
лишних коннектов. Заодно и изучите 1с++ и переписав эту Вашу процедуру разберетесь в ней до конца.
4. Создать Регистр или спец справочник и храните Вашу задолжность в текущей базе.
  
Наверх
 
IP записан
 
Leierkastenmann
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 114
Зарегистрирован: 30. Марта 2007
Re: Блокировка базы SQL в модуле проведения
Ответ #17 - 02. Февраля 2010 :: 10:05
Печать  
Конечно будет блокировка при проведении, ведь 1ска стандартная без всяких наворотов, блокирует таблицу журналов, регистры по которым идут движения плюс таблицы этого документа. Вот у вас и получается, что родное 1скино соединение блокирует все эти объекты, а адо пытается до этих объектов добраться, но прочитать не сможет их пока 1ска все не завершит.
То что такое проведение работает в одной базе и не работает в другой, у меня большие сомнения. Если соединение идет к одной базе, то работать не должно в любом случае.
Привели бы модуль проведения и тексты хранимых процедур SQL, было бы понятней в чем проблема.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Блокировка базы SQL в модуле проведения
Ответ #18 - 02. Февраля 2010 :: 10:54
Печать  
+ к 17 помимо этого в транзакции ( в модуле проведения )
если я правильно понял еще и создаются временные таблицы
а в конце они же и удаляются.
  
Наверх
 
IP записан
 
DimaN
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 10
Зарегистрирован: 31. Января 2010
Re: Блокировка базы SQL в модуле проведения
Ответ #19 - 02. Февраля 2010 :: 16:54
Печать  
Вот модуль проведения расходной накладной.
В конце файла идет прямой запрос к базе через АДО.
  

__________________.txt ( 40 KB | Загрузки )
Наверх
 
IP записан
 
DimaN
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 10
Зарегистрирован: 31. Января 2010
Re: Блокировка базы SQL в модуле проведения
Ответ #20 - 02. Февраля 2010 :: 16:55
Печать  
А это файл с хранимой процедурой RestByDocs
  

RestByDocs.txt ( 6 KB | Загрузки )
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Блокировка базы SQL в модуле проведения
Ответ #21 - 02. Февраля 2010 :: 17:22
Печать  
DimaN писал(а) 02. Февраля 2010 :: 16:55:
А это файл с хранимой процедурой RestByDocs

Не создавайте и не удаляйте временные таблицы в хранимой процедуре. При входе в процедуру просто очищайте строки.
Зачем в конце процедуры стоит
SET NOCOUNT OFF
абсолютно не понятно.
Также на таблице  #ПриходыРасходы не помешает кластерный индекс.

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


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Блокировка базы SQL в модуле проведения
Ответ #22 - 02. Февраля 2010 :: 17:37
Печать  
DimaN писал(а) 02. Февраля 2010 :: 16:54:
Вот модуль проведения расходной накладной.
В конце файла идет прямой запрос к базе через АДО.


В обратотке проведения использовать ВвестиСтроку() - я думаю
что Вы сами ответите на вопрос что при этом происходит.

ИХМО Выкинте везде из модуля проведения все
ЗаписьЖурналаРегистрации() - сколько на этом теряется времени ?
Также что у Вас будет в mlg если в конце модуля проведения не важно по какой причине произойдет откат транзакции.
по журналу mlg будет выходить что все успешно выполнилось
а по данным sql как раз наоборот.

далее
ПНК.Новый();
ПНК.Записать();
документ в модуле проведения
а что будет если ПНК.Записать();  будет октат транзакции ?

То что текст Ado стоит вне процедур означает что выполнение
идет до выполнения ОбработкаПроведения, также это означает
что модуль на ADO выполняется и при отмене проведения.
Также это означает что вычисления сделанные на ADO будут напрасно потраченное время если от проведения мы отказываемся по какой либо ошибке данных.


Если Ado не смогли выполнить то
Предупреждение("Критическая ошибка!!! Обратитесь к разработчикам!",180);
остановили всех пользователей максимум на 3 минуты.

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


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Блокировка базы SQL в модуле проведения
Ответ #23 - 02. Февраля 2010 :: 17:40
Печать  
Еще раз перечитайте №16 и постепенно начинайте разбираться ( и переписывать) с конфигурацией
и почаще посещать этот форум.

Если это не постоянная работа а что-то кратковременное то лучше
сразу отказаться чем что либо править в этой конфигурации.
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: Блокировка базы SQL в модуле проведения
Ответ #24 - 02. Февраля 2010 :: 21:45
Печать  
Z1 писал(а) 02. Февраля 2010 :: 17:37:
То что текст Ado стоит вне процедур означает что выполнение
идет до выполнения ОбработкаПроведения, также это означает
что модуль на ADO выполняется и при отмене проведения.
Также это означает что вычисления сделанные на ADO будут напрасно потраченное время если от проведения мы отказываемся по какой либо ошибке данных.

Также это значит, что при штатном групповом проведении этот блок выполниться только для первого документа, для всех последующих - нет (багофича движка)
ЗЫ. За Предупреждение в проведении надо расстреливать без предупреждения.
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Блокировка базы SQL в модуле проведения
Ответ #25 - 05. Февраля 2010 :: 22:49
Печать  
Поток сознания какой-то...
Может сразу дроп датабазе и делу конец?
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 
ОтправитьПечать