Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Движения одного документа у другого (вариант 2) (число прочтений - 4951 )
noxxx
Full Member
***
Отсутствует


1c++ rocks 8)

Сообщений: 239
Местоположение: Москва
Зарегистрирован: 24. Августа 2007
Пол: Мужской
Движения одного документа у другого (вариант 2)
05. Февраля 2010 :: 13:18
Печать  
Документы с чужими движениями периодически появляются.
Последний (вчерашний) случай:

Поступила заявка, мол, документ "Отказ" не проведен, а в отчете есть его движения. Смотрю записи в регистре - движение сделал документ "Списание денежных средств". Смотрю - действительно так.
Распровел оба документа - движение в регистре осталось!  

Запрос SELECT * FROM [RA39822] WHERE [IDDOC] = '  JBOFCEN' (ИД документа "Списание ден. средств") по таблице RA39822 (Движения регистра "Отказ") дает строку при обоих непроведенных документах. Получается, что при распроведении документа "Списание ден. средств" эта таблица даже не просматривается, но почему тогда не создается еще одна запись от нужного документа при его проведении?

Скачал отчет (http://www.1cpp.ru/forum/YaBB.pl?num=1228926967/) Z1, проверил - на всё по косячному регистру пишет "Все ОК".
  
Наверх
ICQ  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Движения одного документа у другого (вариант 2)
Ответ #1 - 05. Февраля 2010 :: 13:27
Печать  
noxxx писал(а) 05. Февраля 2010 :: 13:18:
Скачал отчет (http://www.1cpp.ru/forum/YaBB.pl?num=1228926967/) Z1, проверил - на всё по косячному регистру пишет "Все ОК".

Такого не может быть если у документа выключена галка rf и есть
движение по таблице ra отчет это найдет.
Проверить легко. (Лучше конечно проверять не на раб базе)
Сбросьте в  _1sjourn ( через Enterprice Menedger )  флаг у rf запустите отчет. Востановите значение rf
  
Наверх
 
IP записан
 
noxxx
Full Member
***
Отсутствует


1c++ rocks 8)

Сообщений: 239
Местоположение: Москва
Зарегистрирован: 24. Августа 2007
Пол: Мужской
Re: Движения одного документа у другого (вариант 2)
Ответ #2 - 05. Февраля 2010 :: 13:36
Печать  
Копия в процессе создания, буду мутить.
  
Наверх
ICQ  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Движения одного документа у другого (вариант 2)
Ответ #3 - 10. Февраля 2010 :: 07:14
Печать  
noxxx писал(а) 05. Февраля 2010 :: 13:18:
Документы с чужими движениями периодически появляются.
Последний (вчерашний) случай:

Поступила заявка, мол, документ "Отказ" не проведен, а в отчете есть его движения. Смотрю записи в регистре - движение сделал документ "Списание денежных средств". Смотрю - действительно так.
Распровел оба документа - движение в регистре осталось!  

Запрос SELECT * FROM [RA39822] WHERE [IDDOC] = '  JBOFCEN' (ИД документа "Списание ден. средств") по таблице RA39822 (Движения регистра "Отказ") дает строку при обоих непроведенных документах. Получается, что при распроведении документа "Списание ден. средств" эта таблица даже не просматривается, но почему тогда не создается еще одна запись от нужного документа при его проведении?

Скачал отчет (http://www.1cpp.ru/forum/YaBB.pl?num=1228926967/) Z1, проверил - на всё по косячному регистру пишет "Все ОК".


1.Приведите точные  строки по таблице ra и _1sjourn.
Мой отчет должен ловить эту ситуацию.
2.Вам надо пересчитать итоги. Т.е должно выполняться соотношение
Rg(i) = Rg(i-1) + Ra(i)
итоги текущег периода равны движения текущего периода плюс
итоги предыдущего периода.
Может написать отчет который каждую ночь проверял бы это.
3. RG и RA основной базы и ПБ после полного обмена должны совпадать.
4. Может у Вас в основной базе есть некие тригеры которые все портят или у кого-то остался доступ к ручному редактированию sql
таблиц.
5.Если 4 нет тогда может написать тригер(а) фиксирующий изменения в ra и rg. Этот тригер нужет до тех пор пока Вы не обнаружите и не устраните "блуждающие" ошибки.

« Последняя редакция: 10. Февраля 2010 :: 13:36 - Z1 »  
Наверх
 
IP записан
 
noxxx
Full Member
***
Отсутствует


1c++ rocks 8)

Сообщений: 239
Местоположение: Москва
Зарегистрирован: 24. Августа 2007
Пол: Мужской
Re: Движения одного документа у другого (вариант 2)
Ответ #4 - 11. Февраля 2010 :: 11:40
Печать  
Я прошу прощения за мою "тормознутось" - чисто физически некогда заняться, разрывают. Как время появится - обязательно отпишусь.  Смущённый
  
Наверх
ICQ  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Движения одного документа у другого (вариант 2)
Ответ #5 - 16. Февраля 2010 :: 10:02
Печать  
Кстати может у тебя в модуле проведения есть и такое
Док = СоздатьДокумент("РасходнаяБН");
Док.НайтиДокумент(КонкрДок);
Док.Рекв = 1;

Док.Записать();
Док.Провести();

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


1c++ rocks 8)

Сообщений: 239
Местоположение: Москва
Зарегистрирован: 24. Августа 2007
Пол: Мужской
Re: Движения одного документа у другого (вариант 2)
Ответ #6 - 18. Февраля 2010 :: 12:31
Печать  
Нашел такой код:
Код
Выбрать все
Попытка
	ДокПр.Провести();
	Сообщить("Заявка проведена","i");
Исключение
	Сообщить(ОписаниеОшибки());
	ОтменитьТранзакцию();
	СтатусВозврата(0);
	Возврат;
КонецПопытки;
 



Я так понимаю, надо от него избавляться? Печаль
  
Наверх
ICQ  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Движения одного документа у другого (вариант 2)
Ответ #7 - 18. Февраля 2010 :: 13:15
Печать  
noxxx писал(а) 18. Февраля 2010 :: 12:31:
Нашел такой код:
Код
Выбрать все
Попытка
	ДокПр.Провести();
	Сообщить("Заявка проведена","i");
Исключение
	Сообщить(ОписаниеОшибки());
	ОтменитьТранзакцию();
	СтатусВозврата(0);
	Возврат;
КонецПопытки;
 



Я так понимаю, надо от него избавляться? Печаль

Я считаю что надо избавляться этот код надо выполнять при закрытии если успешно прошло проведение документа.
И тогда в нем не нужна будет ОтменитьТранзакцию.

Вторая странность в том что НачатьТранзакцию и ОтменитьТранзакцию
парные операции( открывающая и закрывающая скобки )
Одно без другого лучше не использовать.
  
Наверх
 
IP записан
 
noxxx
Full Member
***
Отсутствует


1c++ rocks 8)

Сообщений: 239
Местоположение: Москва
Зарегистрирован: 24. Августа 2007
Пол: Мужской
Re: Движения одного документа у другого (вариант 2)
Ответ #8 - 18. Февраля 2010 :: 13:18
Печать  
Z1 писал(а) 18. Февраля 2010 :: 13:15:
Я считаю что надо избавляться этот код надо выполнять при закрытии если успешно прошло проведение документа.
И тогда в нем не нужна будет ОтменитьТранзакцию.
Вторая странность в том что НачатьТранзакцию и ОтменитьТранзакцию
парные операции( открывающая и закрывающая скобки )
Одно без другого лучше не использовать.


Т.е. ПриЗакрытии() выполняется после ОбработкаПроведения()?

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


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Движения одного документа у другого (вариант 2)
Ответ #9 - 18. Февраля 2010 :: 13:29
Печать  
noxxx писал(а) 18. Февраля 2010 :: 13:18:
Z1 писал(а) 18. Февраля 2010 :: 13:15:
Я считаю что надо избавляться этот код надо выполнять при закрытии если успешно прошло проведение документа.
И тогда в нем не нужна будет ОтменитьТранзакцию.
Вторая странность в том что НачатьТранзакцию и ОтменитьТранзакцию
парные операции( открывающая и закрывающая скобки )
Одно без другого лучше не использовать.


Т.е. ПриЗакрытии() выполняется после ОбработкаПроведения()?

НачатьТранзакцию есть далеко-далеко в начале модуля. Кстати, как это работает? Появляется вложенная транзакция?



MS sql не поддерживает в обычном понимании вложенные транзакции.
Откат  из любой глубины отменяет ВСЕ внешние транзакции.
С другой стороны если открыто 5 транзакций то для успешного завершения надо выдать 5 commit.

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

Документ у тебя и так не записался
В этом случае надо и не начинать транзакцию
а отказ от проведения делать через
НеПроводитьДокумент();
return;

У тебя же получается
когда в модуле проведения вызовешь
ОтменитьТранзакцию()
все что было сделано до текущего момента будет забыто.
Все блокировки будут сняты.
Все дальнейшие движениярегистров
запишутся в базу в в RG будут ошибки потому что
ClearRG что выполняются в начале модуле проведения автоматически будут отменены.
При этом хвост регистров будет перенесен во все другие ПБ и в ПБ будут RG соответствовать этому хвосту RA.

Вот тебе и еще причина твоих других бед.

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


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Движения одного документа у другого (вариант 2)
Ответ #10 - 18. Февраля 2010 :: 13:39
Печать  
noxxx писал(а) 18. Февраля 2010 :: 12:31:
Нашел такой код:
Код
Выбрать все
Попытка
	ДокПр.Провести();
	Сообщить("Заявка проведена","i");
Исключение
	Сообщить(ОписаниеОшибки());
	ОтменитьТранзакцию();
	СтатусВозврата(0);
	Возврат;
КонецПопытки;
 



Я так понимаю, надо от него избавляться? Печаль

кстати все сказаное (9) верно если по каким либо причинам
откат транзакции произойдет в
ДокПр.Провести();
и при этом мы не попадем в исключение.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Движения одного документа у другого (вариант 2)
Ответ #11 - 18. Февраля 2010 :: 14:03
Печать  
Т.е. вывод все тот же
нельзя в модуле проведения документа ни итерактивно ни через встроенный объект проводить другой документ.

Также нельзя ни в каких вариантах в модуле проведения использовать
ОтменитьТранзакцию();
и после этого продолжать выполнение модуля проведения.

В крайнем случае
ОтменитьТранзакцию();
return;


  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать