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

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

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

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

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

Программист 1С
Нижний Новгород
зарплата до 120 000 руб.
Полный день

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