Переключение на Главную Страницу Страницы: 1 ... 9 10 [11] 12 13 ... 19 ОтправитьПечать
Очень популярная тема (более 25 ответов) Движения одного документа у другого (число прочтений - 65969 )
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Движения одного документа у другого
Ответ #150 - 25. Ноября 2009 :: 12:37
Печать  
noxxx писал(а) 25. Ноября 2009 :: 12:25:
Того документа "Отказ", который создавался изначально, нет ни в одной базе. Есть уже другой, от другого числа, другого автора. А тот просто исчез. Что с чем сравнивать? Нормальные документы?

Если документ был то его след обязательно есть во второй базе
данных в журнале той mlg при подгрузке этот документ должен создаться b остаться запись.

А так получается по каким то причинам документ не создался
предположим откат sql транзакции sql сервером при этом в файле mlg никакого отката не произойдет. Откат произошел iddoc освободился и далее этот iddoc был выделен другому пользователю.
  
Наверх
 
IP записан
 
noxxx
Full Member
***
Отсутствует


1c++ rocks 8)

Сообщений: 239
Местоположение: Москва
Зарегистрирован: 24. Августа 2007
Пол: Мужской
Re: Движения одного документа у другого
Ответ #151 - 25. Ноября 2009 :: 12:55
Печать  
Noy, прости, не заметил вопроса.
Проведение документов из модуля проведения используется, да.
  
Наверх
ICQ  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Движения одного документа у другого
Ответ #152 - 25. Ноября 2009 :: 13:05
Печать  
noxxx писал(а) 25. Ноября 2009 :: 12:55:
Noy, прости, не заметил вопроса.
Проведение документов из модуля проведения используется, да.

Вот и ответь на вопрос что произойдет
внутрений документ и выдаст откат транзакции.

Отвечу ИХМО В MSsql нет полноценных вложенных транзакций.
При этом произойдет следущее в базе произойдет откат документа и журнала документа как внешнего так и внутреннего.
откроется неявная транзакция и на основании контекста формы
внешний документ проведется.

Если Вам так это нужно то разработайте систему флагов чтобы ловить ситуацию этого поста.
  
Наверх
 
IP записан
 
noxxx
Full Member
***
Отсутствует


1c++ rocks 8)

Сообщений: 239
Местоположение: Москва
Зарегистрирован: 24. Августа 2007
Пол: Мужской
Re: Движения одного документа у другого
Ответ #153 - 25. Ноября 2009 :: 13:30
Печать  
Странно все равно.
При записи документа Отказ произошел откат транзакции по какой-то причине?
Если в журнале есть запись о том, что документ записан, то значит он уже был записан, а потом вдруг куда-то исчез.
  
Наверх
ICQ  
IP записан
 
Noy
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 41
Зарегистрирован: 07. Ноября 2009
Re: Движения одного документа у другого
Ответ #154 - 25. Ноября 2009 :: 13:30
Печать  
noxxx, у меня тоже используется такая конструкция, и симптомы такие же.
Так что давай переписывать этот участок.
Z1, не совсем согласен с твоим предположением про "откат документа", но то что проблема во "вложенных" транзакциях - это факт, и не понимает их по всей видимости не sql, а сама 1С.
Предполагаю что происходит следующее:
открывается одна транзакция, внутри еще одна, а когда внутренняя транзакция закрывается, 1С снимает блокировки не дожидаясь завершения внешней транзакции - т.к. по логике работы 1С транзакция может быть только одна.

вот такое мое ИМХО.
  
Наверх
 
IP записан
 
noxxx
Full Member
***
Отсутствует


1c++ rocks 8)

Сообщений: 239
Местоположение: Москва
Зарегистрирован: 24. Августа 2007
Пол: Мужской
Re: Движения одного документа у другого
Ответ #155 - 25. Ноября 2009 :: 13:31
Печать  
Значит конструкции типа НачатьТранзакцию(), ОткатитьТранзакцию() и ЗафиксироватьТранзакцию() тоже могут привести к такой ситуации?
  
Наверх
ICQ  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Движения одного документа у другого
Ответ #156 - 25. Ноября 2009 :: 13:40
Печать  
Noy писал(а) 25. Ноября 2009 :: 13:30:
noxxx, у меня тоже используется такая конструкция, и симптомы такие же.
Так что давай переписывать этот участок.
Z1, не совсем согласен с твоим предположением про "откат документа", но то что проблема во "вложенных" транзакциях - это факт, и не понимает их по всей видимости не sql, а сама 1С.
Предполагаю что происходит следующее:
открывается одна транзакция, внутри еще одна, а когда внутренняя транзакция закрывается, 1С снимает блокировки не дожидаясь завершения внешней транзакции - т.к. по логике работы 1С транзакция может быть только одна.

вот такое мое ИМХО.


При завершении внутренего проведения
возможны два случая
1. внутрений документ провелся хорошо по commit
надо в этом случае внимательно смотреть уровень транзакций
выполните во время и после успешного проведения врутреннего документа
select  @@trancount после этих результатов можно будет все точно описать.
(Noy) может быть Вы и правы. там же стоит блокировка до  окончания транзакции вопрос только окончилась она или нет.
2. когда внутренний документ откатится по rollback то вроде я тоже прав.

Ихмо придумывайте что нибудь другое а не такие методы
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Движения одного документа у другого
Ответ #157 - 25. Ноября 2009 :: 13:41
Печать  
noxxx писал(а) 25. Ноября 2009 :: 13:31:
Значит конструкции типа НачатьТранзакцию(), ОткатитьТранзакцию() и ЗафиксироватьТранзакцию() тоже могут привести к такой ситуации?

Нет. Давайте мухи отдельно котлеты отдельно.
Мы этот случай до конца не разобрали, а Вы делаете неправильные обобщения.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Движения одного документа у другого
Ответ #158 - 25. Ноября 2009 :: 13:43
Печать  
(noxxx) (Noy) Может быть Вы приведете тестовый пример проведения из одного документа другого ( не для меня), а то может не все понимают о чем идет речь.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Движения одного документа у другого
Ответ #159 - 25. Ноября 2009 :: 14:12
Печать  
Noy писал(а) 25. Ноября 2009 :: 13:30:
noxxx, у меня тоже используется такая конструкция, и симптомы такие же.
Так что давай переписывать этот участок.
Z1, не совсем согласен с твоим предположением про "откат документа", но то что проблема во "вложенных" транзакциях - это факт, и не понимает их по всей видимости не sql, а сама 1С.
Предполагаю что происходит следующее:
открывается одна транзакция, внутри еще одна, а когда внутренняя транзакция закрывается, 1С снимает блокировки не дожидаясь завершения внешней транзакции - т.к. по логике работы 1С транзакция может быть только одна.

вот такое мое ИМХО.

Вложенные транзакции и их специфичная работа это так реализовано в MS sql

пример
begin tran
  update tabl1 set a = 1
  begin tran
  update tabl2 set b = 1
  rollback
commit
откатится и внешняя и внутренняя транзакции.
Можете найти это в книжках на сайтах или кто нибудь еще подтвердит.

В вашем случае не совсем понятно при проведении внутреннего документа создается ли   begin tran(его аналог) или нет(можно дажерассписать оба этих случая в обоих но по разному могут возникать большие проблемы).
В зависимости от этого в разных пограничных ситуациях Вы будете получать несогласованость данных в БД.
  
Наверх
 
IP записан
 
Noy
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 41
Зарегистрирован: 07. Ноября 2009
Re: Движения одного документа у другого
Ответ #160 - 25. Ноября 2009 :: 14:20
Печать  
Z1 писал(а) 25. Ноября 2009 :: 13:43:
(noxxx) (Noy) Может быть Вы приведете тестовый пример проведения из одного документа другого ( не для меня), а то может не все понимают о чем идет речь.


Имеется ввиду код?
у меня примерно так:
ОбработкаПроведения()
ОткрытьФорму(связанныйДокумент,"Провести")
....


В форме документа "связанныйДокумент"
ПриОткрытии()
     Если Форма.Параметр="Провести" тогда
           Форма.ИспользоватьСлой("Проводка",2);
           провести(0);
           СтатусВозврата(0);
           Возврат;
     Конецесли;


Мы говорим об одном и том же?
  
Наверх
 
IP записан
 
Noy
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 41
Зарегистрирован: 07. Ноября 2009
Re: Движения одного документа у другого
Ответ #161 - 25. Ноября 2009 :: 14:25
Печать  
Z1 писал(а) 25. Ноября 2009 :: 14:12:
В вашем случае не совсем понятно при проведении внутреннего документа создается ли   begin tran(его аналог) или нет(можно дажерассписать оба этих случая в обоих но по разному могут возникать большие проблемы).
В зависимости от этого в разных пограничных ситуациях Вы будете получать несогласованость данных в БД.


Тут проблема не в откате транзакции (думаю что при откате все как раз правильно отрабатывает). Проблема, что после завершения внутренней транзакции снимается блокировка с таблицы 1SUIDCTL и при этом не апдейтися до завершения внешней транзакции - и в этот промежуток другой сеанс цепляет из этой таблички тот же самый ID.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Движения одного документа у другого
Ответ #162 - 25. Ноября 2009 :: 14:34
Печать  
Noy писал(а) 25. Ноября 2009 :: 14:25:
Z1 писал(а) 25. Ноября 2009 :: 14:12:
В вашем случае не совсем понятно при проведении внутреннего документа создается ли   begin tran(его аналог) или нет(можно дажерассписать оба этих случая в обоих но по разному могут возникать большие проблемы).
В зависимости от этого в разных пограничных ситуациях Вы будете получать несогласованость данных в БД.

Тут проблема не в откате транзакции (думаю что при откате все как раз правильно отрабатывает). Проблема, что после завершения внутренней транзакции снимается блокировка с таблицы 1SUIDCTL и при этом не апдейтися до завершения внешней транзакции - и в этот промежуток другой сеанс цепляет из этой таблички тот же самый ID.

ты прав если не создается второй транзакции
begin tran ( или ее аналог ). (Т.е нет вообще вложенных транзакций)
я же написал это можно проверить либо разгребая профайлер
либо в начале модуля проведения внутреннего документа надо выполнить прямой запрос
select  @@trancount
Результат в студию (должно быть либо 2 либо 1 ).Тогда можно будет досконально расписать что происходит. Расписывать два варианта один из которых никогда не выполняется мне не хочется.

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


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Движения одного документа у другого
Ответ #163 - 25. Ноября 2009 :: 14:36
Печать  
Noy писал(а) 25. Ноября 2009 :: 14:20:
Z1 писал(а) 25. Ноября 2009 :: 13:43:
(noxxx) (Noy) Может быть Вы приведете тестовый пример проведения из одного документа другого ( не для меня), а то может не все понимают о чем идет речь.


Имеется ввиду код?
у меня примерно так:
ОбработкаПроведения()
ОткрытьФорму(связанныйДокумент,"Провести")
....


В форме документа "связанныйДокумент"
ПриОткрытии()
     Если Форма.Параметр="Провести" тогда
           Форма.ИспользоватьСлой("Проводка",2);
           провести(0);
           СтатусВозврата(0);
           Возврат;
     Конецесли;


Мы говорим об одном и том же?

да об одном и том же.
  
Наверх
 
IP записан
 
Noy
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 41
Зарегистрирован: 07. Ноября 2009
Re: Движения одного документа у другого
Ответ #164 - 25. Ноября 2009 :: 14:41
Печать  
Ладно, считаю что копать дальше не имеет смысла. Буду избавляться от таких конструкций. noxxx, рекомендую тебе тоже избавится от "двойного проведения", а через месяц отписаться сюда по результатам - я тоже "засвечусь".
Z1, спасибо за участие!
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 ... 9 10 [11] 12 13 ... 19
ОтправитьПечать