Имя: Пароль:
1C
1С v8
Просветите про механизм отложенной записи в регистр накопления.
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) Потому что формируются не в модуле документа.
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.