![]() |
|
Просветите про механизм отложенной записи в регистр накопления. | ☑ | ||
---|---|---|---|---|
0
Prog111
20.04.16
✎
16:38
|
Сразу скажу, что, возможно, неправильно назвал суть вопроса в теме. Предыстория вопроса в этой ветке: Как дозаписать реквизит документа после его проведения?
Кратко: после проведения документа «Реализация товаров и услуг» путем арифметического подсчета движений этого документа по регистру «Продажи» и «ПродажиСебестоимость» я получаю некоторую цифру вознаграждения менеджера по этому документу и хочу записать эту цифру в отдельный регистр сведений. Изучая процедуру ОбработкаПроведения в документе обнаружил, что в конце процедуры не все регистры заполняются: // Движения по документу Если Не Отказ Тогда // Подготовим таблицу скидок для проведения. ТаблицаПоСкидкам = ПодготовитьТаблицуСкидок(ТаблицаПоТоварам, ТаблицаПоУслугам, СтруктураШапкиДокумента); ДвиженияПоРегистрам(РежимПроведения, СтруктураШапкиДокумента, ТаблицаПоТоварам, ТаблицаПоСкидкам, ТаблицаПоТаре, ТаблицаПоУслугам, ТаблицаПоВзаиморасчетам, ТаблицаПоРасчетам, Отказ, Заголовок); КонецЕсли; Сообщить(ЭтотОбъект); КонецПроцедуры// ОбработкаПроведения() Когда в отладчике останавливаюсь на Сообщить(ЭтотОбъект), то движения по некоторым регистрам документа уже есть (например, РН "Продажи"), а по РН "ПродажиСебестоимость" движений ещё нет. А в следующем шаге, когда вроде ничего уже и не происходит - то движения в РН "ПродажиСебестоимость" появляются. Вопрос первый – что за механизм отложенной записи используется в данном случае? Почему в какой-то момент регистр пустой, а в следующем шаге, вроде никаких команд и нет, но регистр заполняется, процедура заканчивается и документ закрывается. Вопрос второй – как мне отловить этот момент, чтобы прочитать уже заполненный регистр "ПродажиСебестоимость", вычислить и записать нужную мне цифру в свой регистр сведений? При подписке на событие с видом события «ОбработкаПроведения» регистр ещё не заполнен… Отладчиком ковырялся, долго и упорно... но до сути не докопался) Уважаемый Лефмихалыч , просьба не закрывать тему, так как вопрос у меня по совершенно другому механизму 1С, а ту ветку привёл в качестве напоминания, откуда у меня родился этот абсолютно новый вопрос. |
|||
1
zak555
20.04.16
✎
16:40
|
Зачем курочить базу ради ерунды ?
сделай всё штатно |
|||
2
Лефмихалыч
20.04.16
✎
16:42
|
![]() |
|||
3
lubitelxml
20.04.16
✎
16:43
|
(2) LOL
|
|||
4
lubitelxml
20.04.16
✎
16:43
|
я видимо что-то пропустил сегодня ))
|
|||
6
Prog111
20.04.16
✎
16:45
|
(1) В этой ветке у меня вопрос не про курочиние базы, а про суть механизма, когда запись в регистры идёт хитрым образом)
|
|||
7
Лефмихалыч
20.04.16
✎
16:49
|
(6) отложенное проведение - это ни каких хитрых образов. Это когда при интерактивном проведении у тебя пишутся какие-то самые самые быстрые регистры (например без партий которые) и документ где-то заханыривается (в регистре там, или в плане обмена), а потом ночером регламентное задание достает заныканные документы и начинает из поочереди проводить по грузовым регистрам.
Тебе это нахрен не надо потому, что у тебя все должно (ОБЯЗАНО!!!!!!!) записываться и считаться до проведения. Да, я знаю, что ты думаешь, что это не возможно. Но ты ошибаешься. |
|||
8
Prog111
20.04.16
✎
16:53
|
(7) Значит, это не отложенное проведение (в начале темы написал, что, возможно, неправильно написал название темы). Не знаю тогда, как этот механизм называется.... А симптомы его таковы, что в обработке проведения документа в конце часть регистров уже заполнены (например, РН "Продажи"), а вот РН "ПродажиСебестоимость" ещё пустой. Затем отладчик как бы останавливается, видно, что где-то что-то считается... потом документ становится проведенным и регистр "ПродажиСебестоимость" уже заполнен. Вот не могу отловить этот момент, когда регистр уже заполнен, но его движения ещё можно отловить в процессе проведения или непосредственно после него.
|
|||
9
lubitelxml
20.04.16
✎
16:55
|
подписки смотрел?
|
|||
10
Prog111
20.04.16
✎
16:55
|
(7) Если я пишу какие-либо значения в дополнительно созданный регистр сведений - то почему бы не писать и после проведения?
|
|||
11
Prog111
20.04.16
✎
16:56
|
(9) Подписки смотрел, в типовой УТ 10 вроде ничего такого нет.
|
|||
12
Лефмихалыч
20.04.16
✎
16:58
|
(8) отладчик не останавливается, а просто это ты своими кривыми руками на продуктивном сервере упражняешься, на котором отладка на сервепре не включена (и пусть будет не включена).
Разверни тестовый кластер, добавь ему /debug в командную строку и тестируй-отлаживай на нем, а не на боевом. И из продуктива руки тоже высунь - рано тебе еще. Да! И бэкап сделай сейчас. Лучше два. |
|||
13
Prog111
20.04.16
✎
17:01
|
(12) Это файловая база, и копия, разумеется.
|
|||
14
Cyberhawk
20.04.16
✎
17:32
|
Не понял, в чем вопрос
|
|||
15
Cyberhawk
20.04.16
✎
17:32
|
Внятно, в трех словах
|
|||
16
Лефмихалыч
20.04.16
✎
17:36
|
(15) поциент хочет, чтобы после проведения, когда все регистры заполнены, каким-то образом в документе заполнялся какой-то реквизит значением, полученным из того, что содержится в движениях документа.
|
|||
17
Пикчер
20.04.16
✎
17:39
|
(16) санитары!
|
|||
18
1Снеговик
гуру
20.04.16
✎
17:49
|
(8) "видно, что где-то что-то считается"
Возможно работает фоновое задание. И если в момент проведения документа себестоимость не сразу рассчитывается, а обработкой за определенный период, то и вознаграждение менеджеру считай отчетом за определенный период, возможно доработав отчет по валовой прибыли, а не пиши что-то куда-то при проведении каждого документа. Кто вообще сказал, что это все должно храниться в регистре? |
|||
19
Prog111
20.04.16
✎
17:49
|
(16) Это как следствие...
Вопрос в том - почему в обработке проведения тпового документа Реализация в УТ 10.3 в самом конце процедуры часть регистров уже заполнена (и в отладке видно, как идут записи в эти регистры), а по регистру "ПродажиСебестоимость" в самом конце движений нет, потом в следующем шаге отладка заканчивается, документ проводится - и регистр "ПродажиСебестоимость" оказывается заполненным. |
|||
20
Лефмихалыч
20.04.16
✎
17:50
|
(19) потому, что подписки на события работают
|
|||
21
Prog111
20.04.16
✎
17:50
|
(18) После того, как документ провелся - движения в нем уже все есть.
|
|||
22
Prog111
20.04.16
✎
17:51
|
(20) Перебрал все подписки - ничего не нашёл.... Потому и завёл тему, что может, кто знаком именно с этим механизмом заполнения РН "ПродажиСебестоимость".
|
|||
23
Лефмихалыч
20.04.16
✎
17:52
|
Автор, ты можешь объяснить внятно, почему твоя задача не решается до проведения?
|
|||
24
aleks_default
20.04.16
✎
17:53
|
(23)да потому что он не может/не хочет разбираться в процедуре ДвиженияПоРегистрам()
|
|||
25
Лефмихалыч
20.04.16
✎
17:54
|
и, если не может-таки, то - зачем конкретно ее надо решать именно в транзакции проведения
|
|||
26
Лефмихалыч
20.04.16
✎
17:54
|
(24) сильный аргумент. С победитовым наконечником...
|
|||
27
Prog111
20.04.16
✎
17:57
|
(23) Потому что процедуры расчета себестоимости в конфе достаточно велики, чтобы их копать и преобразовывать для своего расчета. Если можно взять готовую цифру из проведенного документа - то почему бы не взять её процедурой из четырех строк, вместо того, чтобы отдельно рассчитывать себестоимость 3-4 тысячами строк, если не больше?
|
|||
28
Prog111
20.04.16
✎
17:59
|
(25) А как взять эту цифру после транзакции проведения? Вот документ провелся, и мне надо после его проведения записать свою цифру в свой регистр сведений - как тогда поступить?
|
|||
29
Лефмихалыч
20.04.16
✎
17:59
|
(27) ну и чо ты до сих пор ее не взял, если можно-то?
|
|||
30
Пикчер
20.04.16
✎
18:00
|
(0) делаешь отдельный документ. В нем заполнение тч по регистрам продаж, расчет и запись при проведении в свой рс.
|
|||
31
kittystark
20.04.16
✎
18:01
|
(0) а не проще сварганить вычисляющий отчет базирующийся уже на существующих данных? так сильно надо писать кудато ?
|
|||
32
Лефмихалыч
20.04.16
✎
18:01
|
(28) регламентным, например, заданием документы, у которых нет записей в твоем адском регистре, и программно каждому приделать запись. Если уж на то пошло
|
|||
33
Prog111
20.04.16
✎
18:01
|
(29) Я не знаю, как взять и записать эту цифру после проведения документа. Когда создаю подписку на событие "ОбработкаПроведения" - то регистр ещё не заполнен.
|
|||
34
Лефмихалыч
20.04.16
✎
18:01
|
или другим документом, вводимым на основании
|
|||
35
Пикчер
20.04.16
✎
18:01
|
(30) за расчет вознаграждения - живые деньги ,- должен быть ответственный. Без документа это будешь ты
|
|||
36
Лефмихалыч
20.04.16
✎
18:02
|
(33) да и ты во время-то проведения не знаешь как
|
|||
37
aleks_default
20.04.16
✎
18:03
|
(30)им это не подходит, им видите ли нужно иметь актуальную сумму премии (см. предыдущую ветку автора)
|
|||
38
Лефмихалыч
20.04.16
✎
18:03
|
(35) стоп! какое вознаграждение? Речь про рассчет вознаграждения что ли? Если так - то однозначно отдельный документ.
|
|||
39
Лефмихалыч
20.04.16
✎
18:03
|
(37) глупость феерическая...
|
|||
40
Prog111
20.04.16
✎
18:03
|
(36) Согласен, во время проведения - не знаю. Но после проведения появляется нужна мне цифра в РН "ПродажиСебестоимость". Её, арифметически измененую, я и хочу писать в свой дополнительный РС.
|
|||
41
ILM
гуру
20.04.16
✎
18:08
|
Э, при вознаграждении это уже как бы ветка с вакансией? Не?
Лефмихалыч, как то странно ветка была закрыта. |
|||
42
Лефмихалыч
20.04.16
✎
18:09
|
в общем, тут очень бы подошла картинка "школота добывает кумыс".
Такие вещи делаются отдельным документом, которым регистрируется факт расчета сумм с других сумм. Из того, что технически возможно сделать всё в одном документе, не следует, что именно так и надо делать. А бизнес-заказчика, который диктует архитектуру, надо слать далеко и таким образом, чтобы он в следующий раз боялся даже думать о деталях реализации. |
|||
43
Лефмихалыч
20.04.16
✎
18:10
|
(41) не-не, речь про премиальные продавцов с объемов, которые они затащили за период (ну - условно).
|
|||
44
Prog111
20.04.16
✎
18:10
|
(41) Нет, "Вознаграждение" - это реквизит документа)
|
|||
45
ILM
гуру
20.04.16
✎
18:10
|
А отложенное проведение делается фоновым заданием "допровидение по регистрам".
|
|||
46
Prog111
20.04.16
✎
18:12
|
(42) Если отвлечься от бизнес-процессов и их "правильности" - то всё равно остается теоретический вопрос - как устроено заполнение регистра в последний момент обработки проведения, если отладчик не видит этого заполнения...
|
|||
47
Михаил Козлов
20.04.16
✎
18:18
|
Движения по РН "ПродажиСебестоимость" делаются в модуле УправлениеЗапасамиПартионныйУчет и в коллекции движений документа в его модуле их нет.
Эти движения в модуле документа можно получить НаборДвижений.ПродажиСебестоимость.Прочитать() после списания по партиям. |
|||
48
Prog111
20.04.16
✎
19:16
|
(47) Спасибо! Вроде то, что нужно. Вот интересно - почему движений нет в коллекции движений?
|
|||
49
4St
20.04.16
✎
20:50
|
(48) От написания вопроса до получения ответа прошло чуть меньще 2 часов. Неплохой результат, однако отладчиком вышло бы быстрее, уверяю.
Отловить момент записи в интересующий регистр можно, например, точкой останова в событии "ПриЗаписи" в модуле набора записей данного регистра. Дальше стек вызовов покажет, что откуда началось. Разумеется, проверять лучше на копии. |
|||
50
Михаил Козлов
21.04.16
✎
12:09
|
(48) Потому что формируются не в модуле документа.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |