0
- 28.01.2015 - 11:12
|
Добрый день! Помогите решить задачку - необходимо в реквизит документа СуммаДокумента записывать сумму всех его проводок. Не понимаю куда воткнуть эту обработку, понятное дело, что сумму имеет смысл записывать только после того, когда процедура ОбработкаПроведения завершена. Я делаю в процедуре ОбработкаПроведения: ПроводкиБУ = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗапис ей(); ПроводкиБУ.Отбор.Регистратор.Установить(Ссылка); ПроводкиБУ.Прочитать(); ИтогоСуммаПоПроводкам = 0; Для Каждого Проводка Из ПроводкиБУ Цикл ИтогоСуммаПоПроводкам = ИтогоСуммаПоПроводкам + Проводка.Сумма; КонецЦикла; СуммаДокумента = ИтогоСуммаПоПроводкам; ОбъектДок.Записать(РежимЗаписиДокумента.Запись); Однако в ряде случаев не отрабатывает, как будто проводок нет, хотя они создаются. Подписка на событие записи регистра бухгалтерии Хозрасчетный не интересна, т.к. это в целом затормозит систему из-за одного документа, который не так часто проводят. Подскажите, плз! | |
1
- 28.01.2015 - 11:19
|
А ПриЗаписи? Посмотри винимательно в каких случаях вызывается ОбработкаПроведения | |
2
- 28.01.2015 - 11:22
| ПриЗаписи - вызывается до процедуры ОбработкаПроведения - не пойдет! После ОбработкаПроведения вызывается только Подписка на событие записи регистра накопления, или в форме документа ПослеЗаписи, что вообще не пойдет! | |
3
- 28.01.2015 - 11:22
|
Описание: Возникает при проведении документа. Основное назначение процедуры-обработчика данного события - генерация движений по документу. Выполняется в транзакции записи. Примечание: Если для данного вида документа в конфигурации установлено автоматическое удаление движений, то перед возникновением события все движения по документу будут удалены. | |
4
- 28.01.2015 - 11:26
| есть вариант что часть проводок делается в подписке, поэтому при проведении их ещё нет. | |
5
- 28.01.2015 - 11:31
|
Да нет, ничего не делается в подписке, процедура ОбработкаПроведения вполне стандартна: Процедура ДвиженияПоРегистрам() ... ДвиженияПоРегистрамРегл(РежимПроведения, СтруктураШапкиДокумента, ТаблицаПоТоварам, Отказ, Заголовок); ДвиженияПоРегистрамУпр(РежимПроведения, СтруктураШапкиДокумента, ТаблицаПоТоварам, Отказ, Заголовок); ... КонецПроцедуры Все делается в процедурах модуля документа, или вызываются процедуры общих модулей | |
6
- 28.01.2015 - 11:33
|
То есть все выглядит так: Процедура ОбработкаПроведения(Отказ, РежимПроведения) ... ДвиженияПоРегистрам(...) ... КонецПроцедуры | |
7
- 28.01.2015 - 12:14
| А ничего, что транзакция ещё не завершена и в базе в регистре может храниться "устаревшая" информация, а ты её оттуда, из базы, набором читаешь (ПроводкиБУ.Прочитать())? | |
8
- 28.01.2015 - 13:02
| Вот я и спрашиваю совета, как это сделать правильно? Понимаю, что то, что сейчас абсолютно не верно. | |
9
- 28.01.2015 - 13:14
| (8) Так всё ж прозрачно - анализируй записываемые сейчас движения, а не записанные ранее. | |
10
- 28.01.2015 - 13:19
| То есть ты предлагаешь отлавливать все движения по БУ, которые совершаются в обработке проведения? А эти движения могут быть конкретно разбросаны в разных процедурах, тем более модулях, что то очень муторно, эта идея была, но была сразу же отброшена ввиду трудоемкости | |
11
- 28.01.2015 - 13:31
| эти движения могут быть конкретно разбросаны в разных процедурах - разбросан алгоритм их формирования, а вот сами движения живут компактно, в наборе. | |
12
- 28.01.2015 - 13:33
| Приведи пример модуля, как мне эти движения отловить, пока не понимаю. Как мне прочитать этот набор, в какой процедуре - ОбработкаПроведения? ДвиженияПоРегистрамРегл? | |
13
- 28.01.2015 - 16:18
|
Движения.МойРегистр Если в процессе проведения специально в базу набор не сбрасывался методом Записать(Ложь) - они там, болезные. | |
14
- 28.01.2015 - 16:25
|
(6) так у тебя в обработке проведения и не будет видно что есть подписка. сумму считай из таблиц которые пишутся в регистры а не из регистра. если у тебя автозапись, то оно же в обработке проведения не записано ещё | |
15
- 28.01.2015 - 18:06
| Чем подписка плоха? | |
16
- 28.01.2015 - 18:15
|
Процедура МЗ_СписаниеОбработкаПроведения(Источник, Отказ, РежимПроведения) Экспорт Если не (***твое условие на корректировку документа****) тогда возврат конецесли; ТаблицаСпроводками = ИСточник.Движения.ЕПСБУ.Выгрузить(); иСТОЧНИК.МеняйЧтоХочешь. Источник.Записать(); КонецПроцедуры | |
17
- 29.01.2015 - 10:27
| В том то и дело, что я не выловлю Движения.Хозрасчетный, потому что в него запись происходит из тех самых далеких процедур, а не в одном месте. Что касается подписки - это в любом случае дополнительный тормоз, такой регистр, как Регистр бухгалтерии Хозрасчетный, используется в 99% при проведении документов. Лишние проверки и тормоза из-за документа, который используется совсем не часто - нет, так не хочу. | |
18
- 29.01.2015 - 12:06
| В подписке выловешь. Она подписка работает после всех алгоритмов. Подписка в примере не на регистр бухгалтерии а на конкретный документ и на 99% записей не влияет. Посмотри сколько подписок в типовой конфигурации. | |
19
- 29.01.2015 - 13:48
|
Проверил в подписке моего документа ОбработкаПроведения, действительно, код обработчика подписки вызывается в последнюю очередь, после процедуры ОбработкаПроведения в модуле документа, текст моей процедуры: ПроводкиБУ = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗапис ей(); ПроводкиБУ.Отбор.Регистратор.Установить(Источник.С сылка); ПроводкиБУ.Прочитать(); ИтогоСуммаПоПроводкам = 0; Для Каждого Проводка Из ПроводкиБУ Цикл ИтогоСуммаПоПроводкам = ИтогоСуммаПоПроводкам + Проводка.Сумма; КонецЦикла; Однако, все равно, никаких записей набора регистра я не получаю, пусто... | |
20
- 29.01.2015 - 14:50
| Замени в 16 епсбу на хозрасчетный и получишь тз с проводками. | |
21
- 29.01.2015 - 16:00
| (19) Обработка работает до того как записи попадают в регистр. Тебе нужны движения документа. | |
| Интернет-форум Краснодарского края и Краснодара |