К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

Обновить реквизит СуммаДокумента = сумма проводок БУ

Гость
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) Обработка работает до того как записи попадают в регистр. Тебе нужны движения документа.


К списку вопросов
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск




Copyright ©, Все права защищены