Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Запрос к заблокированной _1sjourn (число прочтений - 2166 )
Электроник
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 57
Зарегистрирован: 24. Июля 2009
Запрос к заблокированной _1sjourn
29. Марта 2010 :: 07:59
Печать  
Здравствуйте. У меня такой вопрос: может ли запрос вида
Код
Выбрать все
SELECT TOP 1
	НомерДок
FROM
(
SELECT TOP 1
	Жур.DocNo as НомерДок
FROM _1sjourn as Жур
	INNER JOIN dh1611 as Док ON Док.IdDoc=Жур.IdDoc
		AND Док.sp1583 <> :idРозницы
ORDER BY Жур.DocNo DESC
UNION ALL
SELECT TOP 1
DNL.DocNo as НомерДок
FROM _1sDNLock as DNL
WHERE DNL.DNPrefix='      16112010    '
ORDER BY DNL.DocNo DESC
) as q
ORDER BY НомерДок DESC 


"не видеть" некоторых строк в _1sjourn и _1sDNLock. Запрос выполняется в транзакции:
Код
Выбрать все
SET implicit_transactions ON
EXEC _1sp__1SJOURN_TLockX
EXEC _1sp__1SDNLOCK_TLock 


т.е. никакие документы проводиться не могут и новые не вводятся. Однако иногда возвращается не максимальный номер, а предыдущий, причем док-т с таким номером во время "сбоя" был либо открыт, либо недавно закрывался.
Спасибо.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Запрос к заблокированной _1sjourn
Ответ #1 - 29. Марта 2010 :: 09:00
Печать  
какое значение имеет тип и длина номера документов  dh1611 ?
Контроль уникальности ?
Переодичность документов ?

PS
В первом запросе Вы вообще не учитываете год
значит и запрос дольше выполняется и результат вообще непредсказуемый.
  
Наверх
 
IP записан
 
Электроник
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 57
Зарегистрирован: 24. Июля 2009
Re: Запрос к заблокированной _1sjourn
Ответ #2 - 29. Марта 2010 :: 09:44
Печать  
Извиняюсь, что не полностью описал ситуацию. Исправляюсь.
Стоит задача присвоения номеров документам в зависимости от значения рекв-а "Контрагент" (префикс "Р"). Я в процедуре ВводНового() и ВвводНаОсновании() делаю следующее:
1. Блокирую табл. _1sJourn и _1sdnlock (TABLOCKX).
2. Выбираю из них максимальный номер согласно заданному условию, НЕ УЧИТЫВАЯ тот номер, который дала сама 1С. Причем т.к. в _1sdnlock (естественно) нет поля "Контрагент", то поле DOCNO анализируется на наличие/отсутствие нужного префикса.
3. Удаляю из _1sdnlock номер, который дала сама 1С.
4. Определяю следующий номер и проверяю его уникальность.
5. Если номер уникален, то присваиваю его доку.
6. Снимаю блокировку с таблиц.
Проблема в том, что иногда у пользователей появляется "Номер не уникален" при попытке записи док-а.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Запрос к заблокированной _1sjourn
Ответ #3 - 29. Марта 2010 :: 09:57
Печать  
Электроник писал(а) 29. Марта 2010 :: 09:44:
Извиняюсь, что не полностью описал ситуацию. Исправляюсь.
Стоит задача присвоения номеров документам в зависимости от значения рекв-а "Контрагент" (префикс "Р"). Я в процедуре ВводНового() и ВвводНаОсновании() делаю следующее:
1. Блокирую табл. _1sJourn и _1sdnlock (TABLOCKX).
2. Выбираю из них максимальный номер согласно заданному условию, НЕ УЧИТЫВАЯ тот номер, который дала сама 1С. Причем т.к. в _1sdnlock (естественно) нет поля "Контрагент", то поле DOCNO анализируется на наличие/отсутствие нужного префикса.
3. Удаляю из _1sdnlock номер, который дала сама 1С.
4. Определяю следующий номер и проверяю его уникальность.
5. Если номер уникален, то присваиваю его доку.
6. Снимаю блокировку с таблиц.
Проблема в том, что иногда у пользователей появляется "Номер не уникален" при попытке записи док-а.

1. Вы сами или 1с блокирует 1. Блокирую табл. _1sJourn и _1sdnlock (TABLOCKX). ??? Если сами то приведите полностью текст.

Так пока Вы не записали документ запись в таблице _1sJourn
не создается а во второй таблице Вы уже все удалили.

Делайте все тоже самое только на своих таблицах а не на сатндартных 1с таблицах( На мой взгляд ) так будет гораздо проще решить Вашу задачу при этом также выключите галку
АвтоматическаяНумерация.

  
Наверх
 
IP записан
 
Электроник
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 57
Зарегистрирован: 24. Июля 2009
Re: Запрос к заблокированной _1sjourn
Ответ #4 - 29. Марта 2010 :: 10:07
Печать  
Блокирую таблицы сам:
Код
Выбрать все
SET implicit_transactions ON
EXEC _1sp__1SJOURN_TLockX
EXEC _1sp__1SDNLOCK_TLock 


По поводу Цитата:
Так пока Вы не записали документ запись в таблице _1sJourn
не создается а во второй таблице Вы уже все удалили.
- тоже пришло это в голову. Сейчас поставил п.3 после п.5. Если не получится, буду использовать свои таблицы.
Спасибо за ответы. Улыбка
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать