Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Помогите новичку.. Проблема с запросом. (число прочтений - 19270 )
PS5
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 32
Зарегистрирован: 26. Июня 2006
Помогите новичку.. Проблема с запросом.
01. Декабря 2008 :: 08:37
Печать  
RS = СоздатьОбъект("ODBCRecordset");   
   
      ТекстЗапроса = "   

     |  select
    |       Резерв.Склад        Склад,
    |       Жур.IDDoc  as    [Док $Документ], 
       |       Жур.IDDocDef as    Док_Вид,
    |       КоличествоОстаток     Резерв,
    |       Неполученные    =    0
    |  from $РегистрОстатки.РезервыТовара(,,,(Товар,Склад,ПоСчету),(Количество)) Резерв       
    |inner JOIN
    | _1SJourn AS Жур ON Резерв.ПоСчету=Жур.IDDoc ";   
   
    RS.ОбратныйРасчетОтТА(1);
      
    ТЗ3=RS.ВыполнитьИнструкцию(ТекстЗапроса);


Подскажите если не трудно почему запрос ругается. Измерение по "счету" может быть документом нескольких видов и типизировать я не имею права.
пишет ошибку "Для типизации поля "Док", не найдено дополнительное типизирующее поле."
хотя в этом случае типизация не требуется
    |select
    |  Жур.IDDoc as [Док $Документ],
    |  Жур.IDDocDef as Док_вид
    |  $Док.Покупатель       [Покупатель $Справочник.Контрагенты]
    |from
       |  _1SJourn as Жур";

Помогите пожалуйста
Вопрос с в том что мне нужно получить именно измерение "Посчету", потому что в него могут писаться не только документ который сделал движение по регитсру но и документ родитель и т.д
  
Наверх
 
IP записан
 
CaBaT
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: Помогите новичку.. Проблема с запросом.
Ответ #1 - 01. Декабря 2008 :: 08:45
Печать  
вроде так надо:
Код
Выбрать все
|  Жур.IDDocDef as Док_вид, 


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


I Love YaBB 2!

Сообщений: 32
Зарегистрирован: 26. Июня 2006
Re: Помогите новичку.. Проблема с запросом.
Ответ #2 - 01. Декабря 2008 :: 09:46
Печать  
     |            select
         |       Резерв.Склад          [Склад $Справочник.МестаХранения],   
         |            Резерв.Товар      [Товар $Справочник.Номенклатура],
    |         Жур.IDDoc        [Док $Документ], 
    |         Жур.IDDocDef      Док_вид,
    |         КоличествоОстаток      Рез
    |  from $РегистрОстатки.РезервыТовара(,,,(Товар,Склад,ПоСчету),(Количество)) Резерв
    |inner JOIN
    | _1SJourn AS Жур ON Резерв.ПоСчету=Жур.IDDoc "

Возвращает пустой запрос хоть ты тресни хотя в регистре полно остатков
  
Наверх
 
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: Помогите новичку.. Проблема с запросом.
Ответ #3 - 01. Декабря 2008 :: 10:08
Печать  
Какой тип значения у Резерв.ПоСчету?
  
Наверх
 
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: Помогите новичку.. Проблема с запросом.
Ответ #4 - 01. Декабря 2008 :: 10:10
Печать  
Все увидел: "Измерение по "счету" может быть документом нескольких видов и типизировать я не имею права".
Так какой судьбой ты хочешь связать 13-ти символьный ПоСчету и 9-тисимвольный IDDOC?
Тогда уж хотя бы
_1SJourn AS Жур ON Right(Резерв.ПоСчету, 9)=Жур.IDDoc
делай.
А в идеале - заведи общий реквизит идДок13. С галкой "Отбор".
  
Наверх
 
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: Помогите новичку.. Проблема с запросом.
Ответ #5 - 01. Декабря 2008 :: 10:11
Печать  
И еще: NoLock-и где?
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Помогите новичку.. Проблема с запросом.
Ответ #6 - 01. Декабря 2008 :: 10:25
Печать  
Код
Выбрать все
select
    Резерв.Склад	  Склад,
    Резерв.ПоСчету [Док $Документ],  
    Резерв.Товар	[Товар $Справочник.Номенклатура],
    Резерв.КоличествоОстаток     Резерв,
    0 Неполученные
from $РегистрОстатки.РезервыТовара(,,,(Товар,Склад,ПоСчету),(Количество)) Резерв 


Улыбка
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: Помогите новичку.. Проблема с запросом.
Ответ #7 - 01. Декабря 2008 :: 10:29
Печать  
Точно... У него же ПоСчету - документ неопределенного вида...
  
Наверх
 
IP записан
 
PS5
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 32
Зарегистрирован: 26. Июня 2006
Re: Помогите новичку.. Проблема с запросом.
Ответ #8 - 01. Декабря 2008 :: 10:38
Печать  
select
    Резерв.Склад        Склад,
    Резерв.ПоСчету [Док $Документ], 
    Резерв.Товар      [Товар $Справочник.Номенклатура],
    Резерв.КоличествоОстаток     Резерв,
    0 Неполученные
from $РегистрОстатки.РезервыТовара(,,,(Товар,Склад,ПоСчету),(Количество)) Резерв


если бы было все просто я не задавал бы вопроса.
вот именно что так не работает пишет вид документа не определн
ругается на     Резерв.ПоСчету [Док $Документ],  типа ему нужно уточнить тип документа...
  
Наверх
 
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: Помогите новичку.. Проблема с запросом.
Ответ #9 - 01. Декабря 2008 :: 10:42
Печать  
Какого типа у тебя  Резерв.ПоСчету ??
  
Наверх
 
IP записан
 
PS5
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 32
Зарегистрирован: 26. Июня 2006
Re: Помогите новичку.. Проблема с запросом.
Ответ #10 - 01. Декабря 2008 :: 10:42
Печать  
документ просто документ без вида...
  
Наверх
 
IP записан
 
PS5
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 32
Зарегистрирован: 26. Июня 2006
Re: Помогите новичку.. Проблема с запросом.
Ответ #11 - 01. Декабря 2008 :: 10:44
Печать  
неопределенного вида короче
  
Наверх
 
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: Помогите новичку.. Проблема с запросом.
Ответ #12 - 01. Декабря 2008 :: 10:44
Печать  
PS5 писал(а) 01. Декабря 2008 :: 10:42:
документ просто документ без вида...

Звиздите, молодой человек...
  
Наверх
 
IP записан
 
PS5
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 32
Зарегистрирован: 26. Июня 2006
Re: Помогите новичку.. Проблема с запросом.
Ответ #13 - 01. Декабря 2008 :: 10:49
Печать  
не понял почему это звиздите? в чем именно?
  
Наверх
 
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: Помогите новичку.. Проблема с запросом.
Ответ #14 - 01. Декабря 2008 :: 10:53
Печать  
PS5 писал(а) 01. Декабря 2008 :: 10:49:
не понял почему это звиздите? в чем именно?


Если документ неопределенного вида, то
Резерв.ПоСчету [Док $Документ]
будет прекрасно работать. Если не работает - требует типизации, то он все-таки определенного вида. Но, в таком случае, работало бы:
_1SJourn AS Жур ON Резерв.ПоСчету=Жур.IDDoc
Так что, либо не все показано, либо...
  
Наверх
 
IP записан
 
PS5
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 32
Зарегистрирован: 26. Июня 2006
Re: Помогите новичку.. Проблема с запросом.
Ответ #15 - 01. Декабря 2008 :: 11:00
Печать  
sadovnikov писал(а) 01. Декабря 2008 :: 10:53:
PS5 писал(а) 01. Декабря 2008 :: 10:49:
не понял почему это звиздите? в чем именно?


Если документ неопределенного вида, то
Резерв.ПоСчету [Док $Документ]
будет прекрасно работать. Если не работает - требует типизации, то он все-таки определенного вида. Но, в таком случае, работало бы:
_1SJourn AS Жур ON Резерв.ПоСчету=Жур.IDDoc
Так что, либо не все показано, либо...

Еще раз повторяю попробуйте сами не работает ругается что тип должен быть определен в регистре измерение "ПоСчету" это документ неопределенного вида. Я очень уважаю Вас так как наслышан, но не работет в том виде как вы говорите.
  
Наверх
 
IP записан
 
PS5
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 32
Зарегистрирован: 26. Июня 2006
Re: Помогите новичку.. Проблема с запросом.
Ответ #16 - 01. Декабря 2008 :: 11:02
Печать  
может это из-за 2005 скуля и еще у нас гибкие блокировкаи стоят
  
Наверх
 
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: Помогите новичку.. Проблема с запросом.
Ответ #17 - 01. Декабря 2008 :: 11:15
Печать  
PS5 писал(а) 01. Декабря 2008 :: 11:00:
Еще раз повторяю попробуйте сами не работает ругается что тип должен быть определен в регистре измерение "ПоСчету" это документ неопределенного вида. Я очень уважаю Вас так как наслышан, но не работет в том виде как вы говорите.

Дык пробовал, и не раз Улыбка
Если ИД-ник 13-тисимвольный, то вид указывать точно не надо. Он уже в ИД-ник зашит Улыбка
И от версии скуля этотоже на зависит.
  
Наверх
 
IP записан
 
GEORG
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 43
Зарегистрирован: 15. Мая 2008
Re: Помогите новичку.. Проблема с запросом.
Ответ #18 - 01. Декабря 2008 :: 11:18
Печать  
посмотри как это измерение регистра в файле 1Cv7.DDS
  
Наверх
 
IP записан
 
PS5
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 32
Зарегистрирован: 26. Июня 2006
Re: Помогите новичку.. Проблема с запросом.
Ответ #19 - 01. Декабря 2008 :: 12:35
Печать  
да молодой человек обломался работает запросец...
     |select
    |Резерв.Склад        Склад,
    |Резерв.ПоСчету [Док $Документ], 
    |Резерв.Товар      [Товар $Справочник.Номенклатура],
    |Резерв.КоличествоОстаток     Резерв
    |from $РегистрОстатки.РезервыТовара(,,,(Товар,Склад,ПоСчету),(Количество)) Резерв";
прошу прощения
  
Наверх
 
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: Помогите новичку.. Проблема с запросом.
Ответ #20 - 01. Декабря 2008 :: 13:13
Печать  
PS5 писал(а) 01. Декабря 2008 :: 12:35:
работает запросец...

Вооот Улыбка)
  
Наверх
 
IP записан
 
PS5
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 32
Зарегистрирован: 26. Июня 2006
Re: Помогите новичку.. Проблема с запросом.
Ответ #21 - 01. Декабря 2008 :: 15:39
Печать  
sadovnikov писал(а) 01. Декабря 2008 :: 10:11:
И еще: NoLock-и где?

подскажите пожалуйста где Nolock и ставить нужно в этом запросе и нужно ли вообще стаить их?

           |      select
           |       $Резерв.Склад          [Склад $Справочник.МестаХранения],  
           |      Жур.IDDoc  as      [Док $Документ],  
           |        Жур.IDDocDef as      [Док_вид $ВидДокумента],
           |            $Резерв.Товар      [Товар $Справочник.Номенклатура],
           |            $Резерв.Количество Количество  
           |  from $Регистр.РезервыТовара as Резерв        
           |INNER JOIN
           |  _1Sjourn as Жур ON Жур.IDDoc = RIGHT($Резерв.ПоСчету,9)";    
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Помогите новичку.. Проблема с запросом.
Ответ #22 - 01. Декабря 2008 :: 15:43
Печать  
Код
Выбрать все
|  _1Sjourn as Жур (NOLOCK) ON Жур.IDDoc = RIGHT($Резерв.ПоСчету,9)";    

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


I Love YaBB 2!

Сообщений: 32
Зарегистрирован: 26. Июня 2006
Re: Помогите новичку.. Проблема с запросом.
Ответ #23 - 01. Декабря 2008 :: 15:45
Печать  
leshik писал(а) 01. Декабря 2008 :: 15:43:
Код
Выбрать все
|  _1Sjourn as Жур (NOLOCK) ON Жур.IDDoc = RIGHT($Резерв.ПоСчету,9)";    


я прошу прощения за глупый вопрос что будет если Nolock не записать здесь чем это может грозить?
  
Наверх
 
IP записан
 
PS5
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 32
Зарегистрирован: 26. Июня 2006
Re: Помогите новичку.. Проблема с запросом.
Ответ #24 - 01. Декабря 2008 :: 15:46
Печать  
PS5 писал(а) 01. Декабря 2008 :: 15:45:
leshik писал(а) 01. Декабря 2008 :: 15:43:
Код
Выбрать все
|  _1Sjourn as Жур (NOLOCK) ON Жур.IDDoc = RIGHT($Резерв.ПоСчету,9)";    


я прошу прощения за глупый вопрос что будет если Nolock не записать здесь чем это может грозить?

и для чего вообще писать NoLock в данном контексте
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Помогите новичку.. Проблема с запросом.
Ответ #25 - 01. Декабря 2008 :: 15:52
Печать  
ну ты и лентяй!!
NOLOCK это хинт - используется для определения уровня блокировки таблиц. В случае без NOLOCK таблица _1sjourn будет заблокирована на время выполнения запроса.
  
Наверх
IP записан
 
PS5
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 32
Зарегистрирован: 26. Июня 2006
Re: Помогите новичку.. Проблема с запросом.
Ответ #26 - 01. Декабря 2008 :: 16:01
Печать  
leshik писал(а) 01. Декабря 2008 :: 15:52:
ну ты и лентяй!!
NOLOCK это хинт - используется для определения уровня блокировки таблиц. В случае без NOLOCK таблица _1sjourn будет заблокирована на время выполнения запроса.

Спасибо огромное... блокировать нам не нужно ))
  
Наверх
 
IP записан
 
Neo
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 327
Зарегистрирован: 12. Ноября 2007
Re: Помогите новичку.. Проблема с запросом.
Ответ #27 - 03. Декабря 2008 :: 12:14
Печать  
> В случае без NOLOCK таблица _1sjourn будет заблокирована на время выполнения запроса.

Разве?  Озадачен
Я вроде читал, что это влияет только на скорость выполнения запроса - без nolock в случае, если выбираемые записи во время выполнения запроса обновляются, то запрос будет ожидать, пока обновления зафиксируются.

Nolock читает даже незафиксированные изменения, т.е., происходит "Грязное чтение".
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Помогите новичку.. Проблема с запросом.
Ответ #28 - 03. Декабря 2008 :: 12:32
Печать  
Neo писал(а) 03. Декабря 2008 :: 12:14:
> В случае без NOLOCK таблица _1sjourn будет заблокирована на время выполнения запроса.

Разве?  Озадачен
Я вроде читал, что это влияет только на скорость выполнения запроса - без nolock в случае, если выбираемые записи во время выполнения запроса обновляются, то запрос будет ожидать, пока обновления зафиксируются.

Nolock читает даже незафиксированные изменения, т.е., происходит "Грязное чтение".

Не совсем верно. Блокировка может быть связана не только с обновлением записи.
Для 1с таблица _1sjourn блокируется и на все время проведение.
Очень легко проверить. На тестовой sql базе в модуле проведения поставь
Предупреждение("Ждите ...");
начни проводить документ когда на экране появиться ждите
запусти с другого экрана или из qa
select top 100  * from _1sjourn  
c и без  (nolock) и увидишь разницу сам.

после эксперементов удали Предупреждение()
  
Наверх
 
IP записан
 
Neo
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 327
Зарегистрирован: 12. Ноября 2007
Re: Помогите новичку.. Проблема с запросом.
Ответ #29 - 03. Декабря 2008 :: 12:51
Печать  
Цитата:
начни проводить документ когда на экране появиться ждите
запусти с другого экрана или из qa
select top 100  * from _1sjourn  
c и без  (nolock) и увидишь разницу сам


Попробовал, с nolock выбирает даже во время блокировки, без nolock висит, пока проведение не закончится.

Но блокирует ведь не сам запрос select, а 1С.

Оператор select ведь никаких блокировок вроде не накладывает  Нерешительный
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Помогите новичку.. Проблема с запросом.
Ответ #30 - 03. Декабря 2008 :: 12:59
Печать  
Neo писал(а) 03. Декабря 2008 :: 12:51:
Цитата:
начни проводить документ когда на экране появиться ждите
запусти с другого экрана или из qa
select top 100  * from _1sjourn  
c и без  (nolock) и увидишь разницу сам


Попробовал, с nolock выбирает даже во время блокировки, без nolock висит, пока проведение не закончится.

Но блокирует ведь не сам запрос select, а 1С.

Оператор select ведь никаких блокировок вроде не накладывает  Нерешительный

неправильно 1с является инициатором блокировки,
а блокирует доступ ко всей таблице _1sjourn sql сервер.

PS и заметь еще ведь при проведении документ может и не изменяться т.е не будет update ни _1sjourn ни dh... таблиц документа а блокировка есть.
  
Наверх
 
IP записан
 
Neo
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 327
Зарегистрирован: 12. Ноября 2007
Re: Помогите новичку.. Проблема с запросом.
Ответ #31 - 03. Декабря 2008 :: 14:38
Печать  
Цитата:
> блокирует доступ ко всей таблице _1sjourn sql сервер.


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

Но по-моему, это можно сделать и без nolock, разве нет?

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


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Помогите новичку.. Проблема с запросом.
Ответ #32 - 03. Декабря 2008 :: 14:50
Печать  
Neo писал(а) 03. Декабря 2008 :: 14:38:
Цитата:
> блокирует доступ ко всей таблице _1sjourn sql сервер.


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

Но по-моему, это можно сделать и без nolock, разве нет?


какой запрос вы подрузамеваете.
Если речь об 1с запросе
Запрос_1 = СоздатьОбъект("Запрос"); то все стандартные
1с запросы (Запрос_1) идут с хинтом (nolock)

а наш свой select без nolock может и остановиться и ждать
как мы видели в примере чуть выше.

и еще Цитата:
Если оператор select блокирует таблицу

как раз наоборот менеджер блокировок ( часть sql сервера )
блокирует таблицу и если есть select без ( nolock ) то select останавливается ждет пока не будет снята блокировка менеджером блокировок,а если у нас есть select c (nolock)
то такому select менеджер блокировок разрешит выполняться дальше и мы получим "грязные" данные. Потому что предполагается что блокировали данные все таки разумные люди (разумные программы) и их не зря ставили.

блокировка select происходит чуть хитрее но я думаю что итак Вас запутал.
  
Наверх
 
IP записан
 
Neo
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 327
Зарегистрирован: 12. Ноября 2007
Re: Помогите новичку.. Проблема с запросом.
Ответ #33 - 03. Декабря 2008 :: 15:00
Печать  
Цитата:
какой запрос вы подрузамеваете.


Имею в виду просто запрос в том же QA. К примеру, если запустить select без nolock к большой таблице, то можно ли паралельно запустить еще один запрос тоже без nolock? И можно ли обновить таблицу во время select?
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Помогите новичку.. Проблема с запросом.
Ответ #34 - 03. Декабря 2008 :: 15:06
Печать  
Neo писал(а) 03. Декабря 2008 :: 15:00:
Цитата:
какой запрос вы подрузамеваете.


Имею в виду просто запрос в том же QA. К примеру, если запустить select без nolock к большой таблице, то можно ли паралельно запустить еще один запрос тоже без nolock? И можно ли обновить таблицу во время select?

Если Вы в qa повторите все дейстия что и в 1с получите тоже самое
для sql сервера все его клиенты равноправны и на поток
входящих sql команд выдается поток выходящих ответов.
имеется в виду
begin tran
declare @i integer select @i=1 from _1SJOURN(TABLOCKX HOLDLOCK) where 0=1  --- а вот это и есть блокировка журнала документов при начале модуля проведения.
если здесь остановимся

а в другом qa выдадим
select top 100 * from _1SJOURN
то зависнем на красном кирпиче пока не завершим транцакцию в первом qa
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Помогите новичку.. Проблема с запросом.
Ответ #35 - 04. Декабря 2008 :: 06:38
Печать  
ps к #34
и еще видите в #34 нет вообще никакой 1с.
а с другой стороны если вы в qa выполните действия  первого qa
то пока Вы их не завершите никто не сможет провести документ.
все 1с.exe будут думать что кто-то другой проводит документ.
  
Наверх
 
IP записан
 
Neo
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 327
Зарегистрирован: 12. Ноября 2007
Re: Помогите новичку.. Проблема с запросом.
Ответ #36 - 04. Декабря 2008 :: 13:05
Печать  
Мда, прикольно.
Поэксперименитировал с select из _1sjorn, действительно, висит ожидание блокировки.

Правда, не понятно, почему когда делаю аналогичный запрос из регистра остатков (select * from RA488), документ проводится без проблем, хотя идет запись в этот регистр.

А блокировка накладывается на всю таблицу во время selectа?
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Помогите новичку.. Проблема с запросом.
Ответ #37 - 04. Декабря 2008 :: 13:48
Печать  
Neo писал(а) 04. Декабря 2008 :: 13:05:
Мда, прикольно.
Поэксперименитировал с select из _1sjorn, действительно, висит ожидание блокировки.

Правда, не понятно, почему когда делаю аналогичный запрос из регистра остатков (select * from RA488), документ проводится без проблем, хотя идет запись в этот регистр.

А блокировка накладывается на всю таблицу во время selectа?

потому что пи проведении документа не надо блокировать
ra таблицы - движения документа т.к. документ твой и так занят
открытой формой ( т.е. на документе есть файловая блокировка )
а для всех изменений ra главной частью первичного ключа
является id документа.
  
Наверх
 
IP записан
 
Neo
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 327
Зарегистрирован: 12. Ноября 2007
Re: Помогите новичку.. Проблема с запросом.
Ответ #38 - 04. Декабря 2008 :: 13:59
Печать  
Цитата:
потому что пи проведении документа не надо блокировать
ra таблицы - движения документа т.к. документ твой и так занят


Давайте не будем привязываться к логике 1С, хотелось бы разобраться именно в блокировках SQL.

Просто если во время во время selecta из RA можно что-то записать в нее, то блокировка не накладывается на всю таблицу, верно?
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Помогите новичку.. Проблема с запросом.
Ответ #39 - 04. Декабря 2008 :: 14:21
Печать  
Neo писал(а) 04. Декабря 2008 :: 13:59:
Цитата:
потому что пи проведении документа не надо блокировать
ra таблицы - движения документа т.к. документ твой и так занят


Давайте не будем привязываться к логике 1С, хотелось бы разобраться именно в блокировках SQL.

Просто если во время во время selecta из RA можно что-то записать в нее, то блокировка не накладывается на всю таблицу, верно?

ну я не такой знаток sql.надо почитать что либо по блокировкам sql.
Если коротко то есть грань между оператором select
и предложением языка t-sql тот же select очень тонкая.
тот же самый Ваш пример
в первом qa пишем
begin tran
update ra... set  lineno_ = lineno_ + 1

в другом qa пишем
select top 100 * from ra...
то второй qa зависнет.
Только пробуйте на тестовой базе какую не жалко.
после того как в этом убедитесь то в первом qa делаем
откат транзакции
rollback

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


I Love YaBB 2!

Сообщений: 327
Зарегистрирован: 12. Ноября 2007
Re: Помогите новичку.. Проблема с запросом.
Ответ #40 - 04. Декабря 2008 :: 14:38
Печать  
Я думаю, что блокировка при selecte если и есть, то скорее всего построчная.

А при проведении документа из 1С ожидается блокировка таблицы _1sjourn (во время selectа) на все время selecta, наверно, потому что 1С пытается наложить монопольную блокировку на всю таблицу, а не потому, что вся таблица заблокирована...  Озадачен
  
Наверх
 
IP записан
 
Neo
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 327
Зарегистрирован: 12. Ноября 2007
Re: Помогите новичку.. Проблема с запросом.
Ответ #41 - 04. Декабря 2008 :: 14:40
Печать  
Цитата:
в первом qa пишем
begin tran
update ra... set  lineno_ = lineno_ + 1

в другом qa пишем
select top 100 * from ra...
то второй qa зависнет.


Это понятно, так как при апдейте блокировка всегда накладывается.

А вот если наоборот: в одном qa запустить select * from ra, а во втором - попробовать проапдейтить, интересно, что будет  Улыбка
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Помогите новичку.. Проблема с запросом.
Ответ #42 - 04. Декабря 2008 :: 15:06
Печать  
Neo писал(а) 04. Декабря 2008 :: 14:40:
Цитата:
в первом qa пишем
begin tran
update ra... set  lineno_ = lineno_ + 1

в другом qa пишем
select top 100 * from ra...
то второй qa зависнет.


Это понятно, так как при апдейте блокировка всегда накладывается.

А вот если наоборот: в одном qa запустить select * from ra, а во втором - попробовать проапдейтить, интересно, что будет  Улыбка

так пока ты второй запустишь
первый qa уже выполниться.
не не понял грань между select и t-sql  select очень тонка.

Меня вообще когда только изучал sql поразило как это в 4 слова
поместили целый "мир"
  
Наверх
 
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Помогите новичку.. Проблема с запросом.
Ответ #43 - 04. Декабря 2008 :: 16:02
Печать  
нужно бы как-то прокомментировать ваши посты, но не могу - вы мне мозг разрушили **crazy**
  
Наверх
ICQ  
IP записан
 
Neo
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 327
Зарегистрирован: 12. Ноября 2007
Re: Помогите новичку.. Проблема с запросом.
Ответ #44 - 05. Декабря 2008 :: 07:07
Печать  
Цитата:
так пока ты второй запустишь
первый qa уже выполниться.


Ну к примеру выборка всех записей из _1Sjourn идет секунд 30, так что можно попробовать  Улыбка
  
Наверх
 
IP записан
 
Neo
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 327
Зарегистрирован: 12. Ноября 2007
Re: Помогите новичку.. Проблема с запросом.
Ответ #45 - 05. Декабря 2008 :: 07:10
Печать  
Цитата:
вы мне мозг разрушили


Ничего, разрушение всегда способствует новому созиданию  Смех
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Помогите новичку.. Проблема с запросом.
Ответ #46 - 08. Декабря 2008 :: 07:38
Печать  
Neo писал(а) 04. Декабря 2008 :: 14:40:
Цитата:
в первом qa пишем
begin tran
update ra... set  lineno_ = lineno_ + 1

в другом qa пишем
select top 100 * from ra...
то второй qa зависнет.


Это понятно, так как при апдейте блокировка всегда накладывается.

А вот если наоборот: в одном qa запустить select * from ra, а во втором - попробовать проапдейтить, интересно, что будет  Улыбка

Если select то и ничего не будет
ДАвай расмотрим ситуации
1. update ra .... where только одна запись.
update вне транзакции.
На время выполнения update создается неявная транзакция
с эклюзивной блокировкой на строку ( точнее на индекс key т.к. есть класт. индекс у ra)
и на очень которкое время select остановится

2 update в транзакции
т.е в первом qa пишем
begin tran
update ra .... where только одна запись.
ждем
во втором qa пишем ( select без хинтов )
select * from ra...
select остановиться т.к в первом qa стоит блокировка key на конкретную строку.

Neo для большего понимания я приведу несколько цитат по хинтам.

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


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Помогите новичку.. Проблема с запросом.
Ответ #47 - 08. Декабря 2008 :: 08:05
Печать  
Цитата:
Принято считать, что указание (хинт,подсказка) является чем-то вроде дружеского совета,
но указания процессору запросов являются скорее директивой, чем предложением.
У sql Server нет выбора: после моего распоряжения оптимизатору запросов ( query optimizer )
использовать указание он будет, как верный слуга,твердо придерживаясь этого порядка.
SQL Server не станет обсуждать мое предложение или называть меня тупицей,
даже если выполнение запроса с моим указанием - ужасная идея.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Помогите новичку.. Проблема с запросом.
Ответ #48 - 08. Декабря 2008 :: 08:14
Печать  
Цитата:
Хорошим примером использования указателя NOLOCK является ситуация, когда вы запускаете отчет,
которому не обязательно быть на 100% точным. Если он работает с изменяющимися таблицами,
эти изменения могут привести к тому, что оператор SELECT вынужден будет ждать завершения
других транзакций.Если вы используете указатель NOLOCK, то ваш запрос не будет ждать:
он прочтет "незафиксированные" записи и будет готов намного быстрее.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Помогите новичку.. Проблема с запросом.
Ответ #49 - 08. Декабря 2008 :: 08:29
Печать  
Цитата:
WITH (NOLOCK). Эта подсказка должна находиться сразу же за псевдонимом таблицы раздела FROM.
Она заставляет SQL Server считывать данные из таблицы с указанным псевдонимом,
не применяя блокировок или каких-либо других мер для обеспечения непротиворечивости.
Блокировки считывания могут создать "узкое место", если их применять во время
активного обновления таблицы.
Эта подсказка предотвращает появление такой проблемы, возможно, за счет стоимости
непротиворечивого представления данных на какой-то конкретный момент времени
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Помогите новичку.. Проблема с запросом.
Ответ #50 - 08. Декабря 2008 :: 08:36
Печать  
Цитата:
Запомните, что использование указателя блокировки, не поддерживающего некоторый оператор,
не вызывает генерацию ошибки.Например, вы можете использовать NOLOCK c UPDATE,
но SQL Server проигнорирует это указание - блокировка будет продолжаться.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Помогите новичку.. Проблема с запросом.
Ответ #51 - 08. Декабря 2008 :: 08:43
Печать  
Цитата:
Конфликтующие между собой указания блокировки генерируют ошибку, как показано в следующем операторе

код мой. В qa запускаем
Код
Выбрать все
begin tran
select top 10 * from sc46 ( holdlock, nolock )
commit
 


sql вернет результат :

Server: Msg 1047, Level 15, State 1, Line 2
Conflicting locking hints specified.

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


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Помогите новичку.. Проблема с запросом.
Ответ #52 - 09. Декабря 2008 :: 05:30
Печать  
Подсказка (NOLOCK) применяется только с оператором SELECT
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 
ОтправитьПечать