Имя: Пароль:
1C
1С v8
Подскажите как отловить событие
0 mzelensky
 
02.10.13
08:22
Доброго всем!
Имеется докумен, который делает определенные движения по регистрам. Задача - проанализировать данные одного из регистров, сразу после того, как документ сделает по нему движения. Т.е. проблема в том, что в 1С нет события "После проведения" (ну или нечто подобное).

Как-то задавался уже такой проблемой, нормального решения тогда не нашлось и пришлось делать немного через одно место.

Возможные варианты:
1) В процедуре проведения сделать ручную запись в регистр. Делать это не хочется, т.к. из-за этого одни и теже данные будут записываться в регистр дважды (при ручной записи и автоматически)
2) В алгоритме расчета дополнить данные регистра данными, которые должен внести документ. Сделать можно, но это усложняет процесс расчета.

Вот собственно и все, что приходит в голову. Есть еще какие-нибудь варианты?
1 shuhard
 
02.10.13
08:29
(0) для Рг событие После проведения = После записи
2 Defender aka LINN
 
02.10.13
08:30
(0) "одни и теже данные будут записываться в регистр дважды" - а можно узнать, на основании чего сделан этот глубокомысленный выс... вывод?
3 Philix
 
02.10.13
08:33
(0) В модуль набора записей регистра можно поставить точку остановки на процедуру ПередЗаписью() или ПриЗаписи().
Только учти - если стоит автоматическое удаление движений - в эти процедуры будет два визита: 1. Удалить данные; 2. Добавить данные. И далее в отладчике смотри ЭтотОбъект (набор записей регистра)
4 mzelensky
 
02.10.13
08:35
(2) На основании того, что первый раз данные запишутся в ручную, а второй раз автоматически после окончания процедуры "Проведение". Я не сказал, что данные задвоятся. Просто они будут записаны дважды (одни поверх других)
5 mzelensky
 
02.10.13
08:36
(3) Таким образом я получу данные, которые "планируется" внести в регистр, но по факту их там еще не будет. А мне нужно событие, когда "они уже там". Чтобы отработать запрос к таблице остатков этого регистра.
6 mzelensky
 
02.10.13
08:37
(1) Что-то я не вижу у регистра накопления событие "После записи".
7 AllJoke
 
02.10.13
08:39
(4) ,htl
8 AllJoke
 
02.10.13
08:41
в конце обработкипроведения поставить то что тебе нужно, не?
9 kosts
 
02.10.13
08:41
В середине процедуры проведения можно насильно выполнить запись. Попробовать сделать запрос. Я если что не в курсе увидит ли запрос новые записи, т.к. транзакция еще не зафиксирована...
10 kosts
 
02.10.13
08:41
(9) + Но проверить можно.
11 mzelensky
 
02.10.13
08:48
(8) (9) (10) читайте (4)
12 kosts
 
02.10.13
08:48
13 Defender aka LINN
 
02.10.13
08:50
(4) Ну вот на основании чего ты говоришь, что "а второй раз автоматически после окончания процедуры "Проведение""? На каком холме ты стоял, когда с неба ударила молния и Глас Нуралиев раскрыт лебе глаза?
15 mzelensky
 
02.10.13
08:54
(13) Теперь по вопросу

Ну вот на основании чего ты говоришь, что "а второй раз автоматически после окончания процедуры "Проведение""?

А почему собственно НЕТ? При окончании процедуры проведения автоматически происходит запись движений. Извини, сейчас нет под рукой книги, чтобы процетировать данную мысль.
17 Defender aka LINN
 
02.10.13
08:55
(15) Ну а ты потрудись ее найти. Правда, прочитанное может тебя шокировать.
Ну или хотя бы СП открой:

РегистрСведенийНаборЗаписей.<Имя регистра сведений> (InformationRegisterRecordSet.<Имя регистра сведений>)
Записывать (Write)
Использование:

Чтение и запись.
Описание:

Тип: Булево.
Ложь - не происходит записи набора в информационную базу при вызове Записать коллекции движений документа, которой принадлежит набор, а также при стандартной обработке проведения документа, если значение свойства метаданного документа "Запись движений при проведении" в Конфигураторе выставлено в "Записывать выбранные".

Доступность:

Сервер, толстый клиент, внешнее соединение.
18 AlexITGround
 
02.10.13
08:56
(16) он не несет бред, так оно и есть, в процедуре не нужно принудительно записывать данные, они автоматически запишутся в регистр
19 Funeral_Worm
 
02.10.13
08:56
(0) Посмотреть в сторону подписок на события
20 mzelensky
 
02.10.13
08:57
(16) на сколько я помню - эта фишка появилась в 8.2
Меня интересует 8.1
21 mzelensky
 
02.10.13
08:58
(19) нет такой подписки.
22 Funeral_Worm
 
02.10.13
09:00
(21) А чем мешает подписка на событие ОбработкаПроведения?
23 mzelensky
 
02.10.13
09:06
(22) тем, что она вызывается ДО окончания транзакции. А следовательно данных в регистре еще нет.

По крайней мере у меня так получалось. Проверь.
24 mzelensky
 
02.10.13
09:07
(17) ну и куда ты пропал, о великий пророк всемогущего "Нуралиева"? Больше мыслей не будет?
25 mzelensky
 
02.10.13
09:10
(17) и кстати, даже если пользоваться данной фишкой, то нужно делать:

Движения.ОстаткиТоваров.Записывать = Истина;
...
наполняем набор записей
...
Движения.Записать();

А потом выставялем

Движения.ОстаткиТоваров.Записывать = ЛОЖЬ;

так получается???
26 Defender aka LINN
 
02.10.13
09:30
(25) Ну, можешь сначала "Ложь" выставить. Можешь вообще не устанавливать, оно какбе по умолчанию.
(20) Такие вещи обычно уточняют, актуальная версия нынче 8.2, если уже не 8.3
27 mzelensky
 
02.10.13
09:32
(26) если сразу в "ложь", то "Движения.Записать();" тоже не внесет данные, ибо:

"Ложь - не происходит записи набора в информационную базу при вызове Записать коллекции движений документа"
28 mzelensky
 
02.10.13
09:32
(26) Ок, тут согласен - тупонул.

Ищется вариант для платформы 8.1

еще идеи будут?
29 Defender aka LINN
 
02.10.13
09:33
(27) Не вижу никаких причин, почему бы благородному дону не записывать конкретное движение
30 mzelensky
 
02.10.13
09:38
(29) т.е все-таки забить на эту "двойную" запись и все?
34 Sammo
 
модератор
02.10.13
09:47
Правило 2. Флейм в тематике
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн