Подписки на события

1. 21.12.16 10:51 Сейчас в теме
Уважаемые форумчате, подскажите, пожалуйста, начинающему программисту 1С. Ситуация такова:
Есть справочник. При изменении или добавлении в него записей необходимо создавать записи в определенном регистре с полями: 1) действие (Создан, Изменен), 2) датой создания (изменения) и 3) ссылкой на объект. Чтоб не изменять и не снимать справочник с поддержки, я создала две подписки на события ПередЗаписью и ПриЗаписи.
В первой подписки (ПередЗаписью) я анализирую запись на Новая или не новая (переменной1 присваиваю ЛОЖЬ или ИСТИНА) и если запись не новая, то анализирую изменение всех реквизитов. Если не менялись, то переменной2 присваиваю Ложь, если менялись Истина.
А во второй подписке (При записи) мне надо в зависимости от этих переменных создать записи в регистре.
Вопрос состоит в том КАК ПЕРЕДАТЬ ЗНАЧЕНИЯ ЭТИХ ПЕРЕМЕННЫХ ВО ВТОРУЮ ПОДПИСКУ. Буду очень признательна за советы.
Найденные решения
6. spacecraft 21.12.16 11:08 Сейчас в теме
(1) в первой подписке:
Источник.ДополнительныеСвойства.Вставить("п1", Истина);

во второй подписке анализировать наличие:
п1 = Неопределено;
Если Источник.ДополнительныеСвойства.Свойство("п1", п1) Тогда
    // работаем с п1.
КонецЕсли;
Ганс; le0nid; ipoloskov; +3 Ответить
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. nedopro 21.12.16 10:54 Сейчас в теме
(1)делать проверку и запись в одной подписке.
В чем заключается конечный результат задачи? Похоже на версионирование объектов.
3. MarinaChist 21.12.16 11:01 Сейчас в теме
(2) В одной подписке не получается.
В подписке ПередЗаписью еще нет ссылки на новый объект, т.к. объект еще не записан,
а во второй подписке ПриЗаписи, невозможно проанализировать новый или не новый, т.к. объект уже записан и нельзя проанализировать новые и старые значения, т.к. уже записаны новые значения, а старые затерты
5. pvvpvv 10 21.12.16 11:07 Сейчас в теме
(3)
В подписке ПередЗаписью еще нет ссылки на новый объект


Но сам объект у вас есть.
7. Xershi 1091 21.12.16 11:09 Сейчас в теме
(3) не совсем верно!

Для не записанного объекта можно получить ссылку, думаю гугл вам быстро поможет с кодом.
Ну а имея ссылку, думаю проблем у вас дальше не будет, чем ерунду кодить))
8. spacecraft 21.12.16 11:15 Сейчас в теме
(7) а потом кто-то добавит еще одну подписку ПередЗаписью, где будет проверяться нужность вообще записи элемента справочника. И реализуют Отказ.
Подписка проверки может запуститься позже. И в итоге имеем движение по регистру с убитой ссылкой.
Главное же потом долго будут искать, почему там ссылки битые.

Хотя нет. Этот случай не отработает. транзакция откатит.
Но делать движения в ПередЗаписью считаю не верным.
ipoloskov; +1 Ответить
9. ipoloskov 138 21.12.16 11:22 Сейчас в теме
(8)
И реализуют Отказ

по Отказу откатится вся транзакция, в том числе и создание записей регистра.
или ПередЗаписью это еще не транзакция...
10. spacecraft 21.12.16 11:27 Сейчас в теме
(9) все верно. Откатится.
Вне транзакции это ПередЗаписью в модуле формы.
В модуле Объекта уже в транзакции, но до записи объекта.
11. smartem 21.12.16 11:49 Сейчас в теме
(3)
а во второй подписке ПриЗаписи, невозможно проанализировать новый или не новый, т.к. объект уже записан и нельзя


В модуле:

Источник.ЭтоНовый() - В зависимости от результата можно проанализировать Новый или не новый и решить вопрос в одном событии (ПриЗаписи)
12. MarinaChist 21.12.16 12:07 Сейчас в теме
(11) В подписки на событии ПриЗаписи Источник.ЭтоНовый() даже для нового элемента уже Ложь
13. smartem 21.12.16 12:11 Сейчас в теме
(12)Пардон.... сам ошибся... не туда посмотрел :(
4. alex-l19041 8 21.12.16 11:07 Сейчас в теме
(1)
ЕРЕДАТЬ ЗНАЧЕНИЯ ЭТИХ ПЕРЕМЕННЫХ
- как вариант, можно передать через параметры сеанса, или можно через константы...
6. spacecraft 21.12.16 11:08 Сейчас в теме
(1) в первой подписке:
Источник.ДополнительныеСвойства.Вставить("п1", Истина);

во второй подписке анализировать наличие:
п1 = Неопределено;
Если Источник.ДополнительныеСвойства.Свойство("п1", п1) Тогда
    // работаем с п1.
КонецЕсли;
Ганс; le0nid; ipoloskov; +3 Ответить
14. MarinaChist 21.12.16 13:10 Сейчас в теме
(6) Огромное спасибо!!! Ваше предложение - это решение моей проблемы! Единственное во второй подписке я явно сравниваю
Если Источник.ДополнительныеСвойства.НовыйДок = Истина тогда
      // 
КонецЕсли;

Если Источник.ДополнительныеСвойства.ПризнакИзмененияДанных = Истина тогда
      // 
КонецЕсли;
15. tailer2 21.12.16 13:23 Сейчас в теме
надо же
иногда достаточно просто прочитать справку
но миссия невыполнима, пока есть и-старт
Оставьте свое сообщение
Вопросы с вознаграждением