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



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Немного не по теме, проведение документа из модуля проведения другого?
16. Сентября 2010 :: 12:20
Печать  
Есть задача перенести проведение документа из самого документа в подчиненные документы по каждой строке (Банковская выписка). Так например в документе 300 строк, на каждую строку создается подчиненный документ и потому уже подчиненный формирует движения и проводки.
Как можно наиболее оптимально реализовать такой функционал?

Сейчас все реализовано, но есть одна проблема, проведение документа, если пользователь открыл документ уже проведенный документ, что то в нем поменял и пытается его закрыть, при этом должна вызваться процедура ПриЗаписи (она вызывается), а потом проведение документа (она тоже вызывается), но затем надо перепровести подчиненные по строкам, вот здесь и получается проблема, в это время (между проведением редактируемого документа и документа по строкам) кто то может заблокировать таблицу журналов и подчиненные документы могут быть не проведены. Как сделать чтобы откатывалась транзакция и редактируемый документ не записывался до тех пор, пока не проведуться подчиненные?
  
Наверх
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Немного не по теме, проведение документа из модуля проведения другого?
Ответ #1 - 16. Сентября 2010 :: 12:24
Печать  
А смысл ?
заместо одной транзакции при проведении, получить кучу мелких на создание/проведение каждого документа ?
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Немного не по теме, проведение документа из модуля проведения другого?
Ответ #2 - 16. Сентября 2010 :: 12:36
Печать  
1. не понятно почему ПриЗаписи два раза. Этого не должно быть.

2.Ты не можешь управлять наложением блокировок.
блокировки накладывет сам ms sql.

была тема год назад к чему приводит проведение одного из модуля другого смысл такой
ничего хорошо из этого не выйдет. дело в том что ms sql не поддерживает вложенные транзакции и при roolback ( не важно по какой причине ) в середине главного документа получишь что от начала документа до этого места все откатится от
этого места до конца документа все проведется.

Меняй логику - чтобы все проводилось в одном документе главном.
(у меня очень большие банковские выписки  > 150 строк разбивается на два документа ).
  
Наверх
 
IP записан
 
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Немного не по теме, проведение документа из модуля проведения другого?
Ответ #3 - 16. Сентября 2010 :: 12:41
Печать  
Z1 писал(а) 16. Сентября 2010 :: 12:36:
1. не понятно почему ПриЗаписи два раза. Этого не должно быть.

2.Ты не можешь управлять наложением блокировок.
блокировки накладывет сам ms sql.

была тема год назад к чему приводит проведение одного из модуля другого смысл такой
ничего хорошо из этого не выйдет. дело в том что ms sql не поддерживает вложенные транзакции и при roolback ( не важно по какой причине ) в середине главного документа получишь что от начала документа до этого места все откатится от
этого места до конца документа все проведется.

Меняй логику - чтобы все проводилось в одном документе главном.
(у меня очень большие банковские выписки  > 150 строк разбивается на два документа ).


Бухгалтерия против разбивки, один документ в день по каждому РС, так должно быть.

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


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Немного не по теме, проведение документа из модуля проведения другого?
Ответ #4 - 16. Сентября 2010 :: 12:54
Печать  
начни решать проблему с малого
ПриЗаписи два раза не должно быть.
если где то на кнопке висит Записать(); - то это надо убирать.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Немного не по теме, проведение документа из модуля проведения другого?
Ответ #5 - 16. Сентября 2010 :: 12:56
Печать  
+ проверить на ПриЗаписиПерепроводить(1)
  
Наверх
 
IP записан
 
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Немного не по теме, проведение документа из модуля проведения другого?
Ответ #6 - 16. Сентября 2010 :: 13:02
Печать  
ПриЗаписи - решил. Создал свою процедуру на кнопку Записать и Провести, а если вызывается ПриЗаписи - СтатусВозврата(0) и сообщение о том что надо пользоваться кнопкой Ok на форме.
  
Наверх
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Немного не по теме, проведение документа из модуля проведения другого?
Ответ #7 - 16. Сентября 2010 :: 13:04
Печать  
Я б всё же подумал тогда в сторону частичного проведения, это всё лучше чем плодить кучу документов .
Даже проводки они потом как глядеть будут ?
Улыбка
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Немного не по теме, проведение документа из модуля проведения другого?
Ответ #8 - 16. Сентября 2010 :: 13:09
Печать  
pvase писал(а) 16. Сентября 2010 :: 13:02:
ПриЗаписи - решил. Создал свою процедуру на кнопку Записать и Провести, а если вызывается ПриЗаписи - СтатусВозврата(0) и сообщение о том что надо пользоваться кнопкой Ok на форме.

не надо так делать
надо
#Записать? Провести  Закрыть
ну и естественно

ПриОткрытии()
ПриЗаписиПерепроводить(1);
...
КонецПроцедуры

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


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Немного не по теме, проведение документа из модуля проведения другого?
Ответ #9 - 16. Сентября 2010 :: 13:25
Печать  
  
Наверх
 
IP записан
 
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Немного не по теме, проведение документа из модуля проведения другого?
Ответ #10 - 16. Сентября 2010 :: 13:50
Печать  
Z1 писал(а) 16. Сентября 2010 :: 13:09:
pvase писал(а) 16. Сентября 2010 :: 13:02:
ПриЗаписи - решил. Создал свою процедуру на кнопку Записать и Провести, а если вызывается ПриЗаписи - СтатусВозврата(0) и сообщение о том что надо пользоваться кнопкой Ok на форме.

не надо так делать
надо
#Записать? Провести  Закрыть
ну и естественно

ПриОткрытии()
ПриЗаписиПерепроводить(1);
...
КонецПроцедуры

В модуле проведения не должно быть уже никаких проверок
т.е что проверили при записи уже не зачем проверять что либо там проверять терять время ( все же висят на  блокировке)
Проверки в модуле проведения нужны только на контроль остатков если он нужен а по банковской выписке вроде и не нужен
ведь по банку провели именно так значит ошибка если и есть то в другом месте.


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



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Немного не по теме, проведение документа из модуля проведения другого?
Ответ #11 - 16. Сентября 2010 :: 13:52
Печать  
Почему нельзя ? Всё можно.
Можно хоть кучу создать и провести, через открытие формы.

ЗЫ:
http://my1c-archive.narod.ru/knowhow/post_drd.html
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Немного не по теме, проведение документа из модуля проведения другого?
Ответ #12 - 16. Сентября 2010 :: 14:02
Печать  
pvase писал(а) 16. Сентября 2010 :: 13:50:
Z1 писал(а) 16. Сентября 2010 :: 13:09:
pvase писал(а) 16. Сентября 2010 :: 13:02:
ПриЗаписи - решил. Создал свою процедуру на кнопку Записать и Провести, а если вызывается ПриЗаписи - СтатусВозврата(0) и сообщение о том что надо пользоваться кнопкой Ok на форме.

не надо так делать
надо
#Записать? Провести  Закрыть
ну и естественно

ПриОткрытии()
ПриЗаписиПерепроводить(1);
...
КонецПроцедуры

В модуле проведения не должно быть уже никаких проверок
т.е что проверили при записи уже не зачем проверять что либо там проверять терять время ( все же висят на  блокировке)
Проверки в модуле проведения нужны только на контроль остатков если он нужен а по банковской выписке вроде и не нужен
ведь по банку провели именно так значит ошибка если и есть то в другом месте.


Но в модуле проведения нельзя провести другой документ. А проводить приЗАкрытии - не проходит, потому что может возникнуть блокировка и подчиненный не проведеться.

мне очень трудно представить всю логику, а без этого давать какие-то советы практически невозможно.

Как бы общая идея ( она может и не подходит но  нет общей картины)
бери данные из подчиненных документом и проводи в одном документе.( это может не получиться только если подч. доки другими датами  тогда наверное надо менять структуру регистра)

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


ну и третий способ
делаем на кнопке только #Записать
далее приоткрытии()
ФлагЗаписи = 0;

далее призаписи()
Все проверки документа
.....
ФлагЗаписи = 1;

ПриЗАкрытии делаешь
Код
Выбрать все
Если ФлагЗаписи = 1 Тогда
СписокДокДляПроведения  в этом списке и твой док и все другие документы для проведения

ВсеОк = 1;
НачатьТранзакцию()
Цикл по всем документам из СписокДокДляПроведения
 Док = СпозиционироватьСлед. док из СписокДокДляПроведения
 Попытка
   Док.Провести()
Исключение
   ВсеОк = 0;
   Прервать;
КонецПопытки;
КонецЦикла;
Если ВсеОк = 1 Тогда
ЗафиксироватьТранзакцию();
Иначе
ОтменитьТранзакцию();
Оповестить пользователя о провале проведения.
КонецЕсли;

КонецЕсли; // ФлагЗаписи = 1

 

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


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Немного не по теме, проведение документа из модуля проведения другого?
Ответ #13 - 16. Сентября 2010 :: 14:14
Печать  
Eprst писал(а) 16. Сентября 2010 :: 13:52:
Почему нельзя ? Всё можно.
Можно хоть кучу создать и провести, через открытие формы.

ЗЫ:
http://my1c-archive.narod.ru/knowhow/post_drd.html

об этом способе знаю но лучше так не делать потому что это
может привести к очень труднообнаруживаемым ошибкам
(подробности в #9)

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



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Немного не по теме, проведение документа из модуля проведения другого?
Ответ #14 - 17. Сентября 2010 :: 11:19
Печать  
Z1 писал(а) 16. Сентября 2010 :: 14:14:
об этом способе знаю но лучше так не делать потому что это
может привести к очень труднообнаруживаемым ошибкам
(подробности в #9)



Подобным образом сделал, и уже есть и глюки. В документе родителе есть поле в строке, которое имеет тип документ и определенный вид. При одной из попыток провести 1С вылетила с ошибкой SQL (ошибки не видел). После чего в этом документе в этом поле вместо документов определенного вида появилась куча других документов с другими видами. Причем ПолеДокумента.Вид() - возвращает правильное значение, а вот если получить данные с этого поля - то там данные совсем другого документа. Если получить ИД документа - то он действительно совсем другого документа. Вот такой глюк.
  
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать