|
Восстановление последовательности | ☑ | ||
---|---|---|---|---|
0
Enya
04.05.12
✎
12:15
|
Добрый день. Нужна помощь!!! Пишу, для себя удобную, обработку восстановления последовательности!
Суть такая, иду по таблице со списком организаций и дат, и выбираю запросом документы которые необходимо провести, провожу. Не могу понять где не так, так как к некоторых днях останавливается на некоторых документах (связи между доками не найду) и дальше этой обработкой не двигается. Хотя если за этот день запустить восстановление стандартной обработкой, то все ок. Прилагаю код. Критика приветствуется! Для каждого стр из Табка цикл Если стр.ФлагВосстановления тогда Если НЕ (ЗначениеЗаполнено(стр.Организация) И ЗначениеЗаполнено(стр.ДатаПо)) Тогда Возврат; КонецЕсли; Отбор = новый структура; отбор.Вставить("Организация", стр.Организация); МоментВремени = Последовательности.ОбщаяПоследовательность.ПолучитьГраницу(Отбор); МоМентВремениК = новый МоментВремени(КонецДня(стр.ДатаПо)); запрос = новый запрос; запрос.Текст = "ВЫБРАТЬ | ОбщаяПоследовательность.Регистратор, | ОбщаяПоследовательность.Период КАК Период, | ОбщаяПоследовательность.Организация, | ОбщаяПоследовательность.МоментВремени КАК МоментВремени |ИЗ | Последовательность.ОбщаяПоследовательность КАК ОбщаяПоследовательность |ГДЕ | ОбщаяПоследовательность.МоментВремени >= &МоментВремени | И ОбщаяПоследовательность.Организация = &Организация | И ОбщаяПоследовательность.МоментВремени <= &МоМентВремениК | |УПОРЯДОЧИТЬ ПО | МоментВремени" ; запрос.УстановитьПараметр("МоментВремени",МоментВремени); запрос.УстановитьПараметр("МоМентВремениК",МоМентВремениК); Запрос.УстановитьПараметр("Организация",стр.Организация); выборка = запрос.Выполнить().Выбрать(); Пока выборка.Следующий() цикл Документ = Выборка.Регистратор.ПолучитьОбъект(); Попытка Документ.Записать (РежимЗаписиДокумента.Проведение,РежимПроведенияДокумента.Неоперативный); Состояние("Восстановление последовательности по организациии "+ стр.Организация+" ("+выборка.Регистратор+")"); Исключение Сообщить("Восстановление последовательности по "+стр.Организация+ " прервано на документе "+Документ.ссылка+"!!!"); Прервать; КонецПопытки; КонецЦикла; Сообщить("Восстановление последовательности по "+стр.Организация+ " завершено."); КонецЕсли; КонецЦикла; |
|||
1
ptrtss
04.05.12
✎
12:24
|
Не понял. Почему просто не проанализировать причины по которым не проводится конкретный документ?
|
|||
2
Enya
04.05.12
✎
12:26
|
(1) в том и дело, что документ проводится! Если вручную проводить не каких проблем, что программно проводится тоже не проблем, что стандартной обработкой восстанавливается - нет проблем.
|
|||
3
mikecool
04.05.12
✎
12:28
|
а последовательности не пересекаются в момент проведения? с какой нить другой
|
|||
4
Enya
04.05.12
✎
12:29
|
нет. это исключено.
|
|||
5
ptrtss
04.05.12
✎
12:39
|
(3) какая разница, она просто перепроводит зарегистрированные в последовательности документы за определенный период
|
|||
6
ptrtss
04.05.12
✎
12:40
|
(2) То что его перепроводит стандартная обработка - не факт, она хитро написана, может его и пропускать
|
|||
7
ptrtss
04.05.12
✎
12:44
|
(0)
Может банальные блокировки? Остановка на ошибке где встает? А если натыкать в разные обработчики событий документа и регистров сообщалок, чтобы было видно после которой все встанет? |
|||
8
Enya
04.05.12
✎
12:44
|
(6)хитро?!
если пользоваться методом Последовательности.ОбщаяПоследовательность.Восстановить(Момент, ТаблицаОтбора); где Момент тот же мой параметр МоментВремениК а в таблице отбора задана организация то все проходит! |
|||
9
Enya
04.05.12
✎
12:45
|
(7) ошибок нет. доки просто проводятся и все, за тем доком на котором последовательность останавливается может еще проводится не один документ.
|
|||
10
Enya
04.05.12
✎
12:57
|
сейчас для эксперимента попробовала запустить по 6 организациям, в итоге 4 из 6 не сдвинулись, где остановилось на ПТУ, где на РКО, где вообще на списании с расчетного счета.
|
|||
11
mikecool
04.05.12
✎
13:03
|
(10) у меня робот работал по твоему принципу - проводил нормально, границу устанавливал на последнем проведенном без ошибок
|
|||
12
Enya
04.05.12
✎
13:05
|
(11)...видимо что то не так, раз не двигает. И причина не понятна =(
А ты случаем не пользовался УстановитьГраницу(<МоментВремени>, <Отбор>) ?! |
|||
13
mikecool
04.05.12
✎
13:11
|
ТекущаяПоследовательность.УстановитьГраницу(Новый МоментВремени(ПоследнийПроведенныйБезОшибок.Дата, ПоследнийПроведенныйБезОшибок), СтруктураОтбора);
|
|||
14
mikecool
04.05.12
✎
13:12
|
полностью кусок с условиями
Если ПараметрыРаботы.РаботуЗавершить Тогда Если Не ПараметрыСеанса.ВозниклаОшибкаПриВосстановлении И Не ПоследнийПроведенныйБезОшибок = Неопределено Тогда ТекущаяПоследовательность.УстановитьГраницу(Новый МоментВремени(ПоследнийПроведенныйБезОшибок.Дата, ПоследнийПроведенныйБезОшибок), СтруктураОтбора); КонецЕсли; ДобавитьСообщениеВФайл("Восстановление последовательности " + ВыборкаГраниц.ИмяПоследовательности + ", окончание " + ТекущаяДата() + Символы.ПС); Прервать; КонецЕсли; |
|||
15
ptrtss
04.05.12
✎
13:38
|
(9)
1. Кроме организации там есть еще Измерение "ПроведенВХронологическомПорядке", хотя хз, может быть метод "Восстановить..." фигачит по всем значениям измерения 2. Данная последовательность не предназначена чтобы пользовались платформенным методом "Восстановить...", она восстанавливается обработкой "ПроведениеПоПартиям", глянь какой там код "Останавливается" - это как я понял что документ все-таки проводится, но граница не сдвигается. Честно говоря, я уже и сам не помню, должна ли последовательность сдвигаться сама при последовательном проведении или нет. Она часом не программно сдвигается из какой-нибудь процедурки проведения по партиям? |
|||
16
Enya
04.05.12
✎
13:46
|
(15)1. в бухе 1но изменение!
(15)2. я об этом уже задумывалась (12). Решила использовать метод и посмотреть как дела сдвинутся. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |