|
Внести изменение в документ при обработке проведения | ☑ | ||
---|---|---|---|---|
0
salvator
10.10.22
✎
19:00
|
Здравствуйте.
Есть задача: при проведении документа пересчитывать определенные проводки и полученные данные (сумму проводки) изменять в табличной части документа. Вопрос именно по второй части: чтобы изменения сохранились, необходимо записать документ. А это, по сути, уже будет вторая запись. Есть ли другие способы, чтобы два раза не записывать? |
|||
1
Dmitry1c
10.10.22
✎
19:03
|
Стоматология через задний проход, спешите видеть
|
|||
2
PR
10.10.22
✎
19:04
|
(0) Есть
Не хранить в документе |
|||
3
Фрэнки
10.10.22
✎
19:23
|
Т.е. я так могу попробовать дозаписать ваши действия:
1) Открыта интерактивная форма документа и в ней заполняются строки исходных данных. 2) идет Запись с выставлением параметра РежимЗаписиДокумента Проведение Так вот уже после того, как документ Записан, происходит запись движений в виде наборов записей регистров. Соответственно, нужно дожидаться закрытия Транзакции, т.е. обработка должна быть в фоновом задании, которое запускается обработчиком события После записи объекта. Но нужно и форму объекта закрывать, чтоб она не пыталась закрываться с перепроведением еще раз. После всего этого можно выполнить расчеты и произвести запись в поля Объекта и записать его с режимом записи документа Запись (не проведение, а только запись) Но если это у вас такая прикольная самописка... Не храните дополнительные сведения внутри ДокументОбъект. Храните их в дополнительных сведениях. А на форме пользователю и в обработках везде вам все равно придется прописывать заново, что данные сведения должны или читаться и выводится в отчетах или отображаться в формах. |
|||
4
salvator
10.10.22
✎
20:25
|
(3) В дополнительных сведениях хранить можно, конечно. Но хотелось бы, чтобы данные были именно в табличной части.
|
|||
5
Фрэнки
10.10.22
✎
20:28
|
Можно где угодно хранить. РежимЗаписиДокумента.Запись и храни. Но так хотеть не нужно. Больше минусов, чем плюсов от такого хранения.
|
|||
6
salvator
10.10.22
✎
21:07
|
(5) Я согласен с тем, что так не комильфо. Буду искать пути альтернативного решения. Можете вкратце описать минусы, ну, кроме того, что увеличивается время проведения документа?
|
|||
7
Фрэнки
10.10.22
✎
21:28
|
А вермя проведения документа не увеличивается. Но изменение данных в табличной части объекта перезаписывает весь объект. Не перепроводит, а перезаписывает.
Например, сегодня я возился с документами реализации, в которых были тысячи строк. Для них перезапись объекта не очень приятная процедура. Ну и перепроведение тоже. Т.е. ты пишешь выше - будет дважды перезаписываться документ. Зачем? Перепроводится он будет один раз, если с режимом записи документа не промахнешься. Кроме собственно времени перезаписи, при этом же выполняются разные действия над полями в ТЧ документов. Если документы почти не насыщены разными подробностями, то и не страшно. Но мы же говорим о неких типовых конфигурациях? Когда говоришь о самописной, то ситуация может сильно отличаться. У меня был опыт умышленного отказа от хранения подробных данных результатов расчетов в ТЧ документов. В самописной конфе. И там все данные действительно были записаны в движениях по регистрам. А движения формировались по данным из объекта и по табчастям объекта. Есть смысл модифицировать данные объекта после проведения по регистрам? Нет. Рисковано, что на огромных количествах строк в оперативных таблицах могут появляться расхождения, если при этом в оперативном контуре будут работать множество пользователей. |
|||
8
salvator
10.10.22
✎
22:17
|
(7) "Т.е. ты пишешь выше - будет дважды перезаписываться документ. Зачем? Перепроводится он будет один раз, если с режимом записи документа не промахнешься."
Ну так перед проведением документа выполняется запись, затем еще после изменения реквизита я добавлю метод "Записать" с режимим "Запись". |
|||
9
RomanYS
10.10.22
✎
22:39
|
(8) можно посчитать всё перед записью, тогда запись после проведения не понадобится.
Раскрыл бы прикладную задачу, может твой велосипед уже давно обкатан |
|||
10
rudnitskij
10.10.22
✎
23:27
|
(0) Если нужно иметь доступ к этой цифре только в открытой форме - сделайте на форме реквизит и получайте значение из регистра при открытии формы
Если нужно иметь возможность к этой цифре запросом - она и так лежит в регистре, зачем ее еще куда-то писать? |
|||
11
roman52
10.10.22
✎
23:29
|
если хотите гланды потрогать, то хотя бы гуманно:
1. взводить доп.свойство-флаг при проведении 2. регл.заданием сбрасывать флаг и при необходимости записывать данные в таб.часть (с ОбменДанными.Загрузка = Истина) выигрыш = транзакцию проведения не будет растягивать повторной записью всего объекта в общем случае достаточно варианта (10) |
|||
12
ДедМорроз
11.10.22
✎
00:54
|
Тут все просто.
Если результат,который будет записываться,зависит только от данных документа,то его хранят в документе и рассчитывают до его записи. Если результат зависит от документа и от данных регистров,то хранить такой результат нужно в регистре,так как он может измениться,и его можно будет обновить без перезаписи документа. Отход от этого правила приводит к куче проблем. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |