1. MarinaChist 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 402 21.12.16 11:09 Сейчас в теме
(3) не совсем верно!

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

Хотя нет. Этот случай не отработает. транзакция откатит.
Но делать движения в ПередЗаписью считаю не верным.
ipoloskov; +1 Ответить
9. ipoloskov 64 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 9 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 Сейчас в теме
надо же
иногда достаточно просто прочитать справку
но миссия невыполнима, пока есть и-старт
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Программист 1С
Санкт-Петербург
зарплата от 100 000 руб.
Полный день

Руководитель группы сервисов ЭДО, ЭЦП и криптографии
Москва
зарплата от 150 000 руб.
Полный день

Руководитель группы интеграций (1С)
Москва
зарплата от 150 000 руб.
Полный день

Руководитель группы сервисов FRM на 1С
Москва
зарплата от 150 000 руб.
Полный день

Консультант-аналитик 1С (ЗУП)
Санкт-Петербург
Полный день