Общий модуль и Регистр Сведений

1. Menmo 8 16.09.21 16:42 Сейчас в теме
Добрый день! Подскажите пожалуйста, почему если выношу код в общий модуль, то не происходит записи в регистр сведений?

Часть кода - вызываю общую процедуру
//Запись в Регистр об изменении документа
		Если ЭтотОбъект.Проведен Тогда
			Проверка = Истина;
			ПроверкаНаИзменинеДокументов.ЗаписьОбИзменении(Проверка, ЭтотОбъект, Движения, Дата);	
		КонецЕсли;


Сама процедура:

Процедура ЗаписьОбИзменении(Проверка, ЭтотОбъект, Движения, Дата)  Экспорт
	Если Проверка = Истина Тогда
	
		Движения.ИзменениеДокументов.Записывать = Истина;
		Движение = Движения.ИзменениеДокументов.Добавить();
		Движение.Период = Дата;
		Движение.СсылкаНаРедактируемыйДокумент = ЭтотОбъект.Ссылка;
		Движение.ДатаРедактирования = ТекущаяДата();
		Движение.КтоРедактировал = Справочники.Пользователи.НайтиПоНаименованию(ПользователиИнформационнойБазы.ТекущийПользователь());
	КонецЕсли;
КонецПроцедуры 
Показать



Никакой ошибки не выдаёт, однако записи в регистре не появляются. Если вставить тот же самый код, но в обработку проведения документа - все работает великолепно, в чём дело?
По теме из базы знаний
Найденные решения
17. spacecraft 16.09.21 17:48 Сейчас в теме
(12) и вообще это делается не так. Не то место ПередЗаписью, чтобы добавлять движения.
Это решается так:
Процедура ПередЗаписью(Отказ)
    ДополнительныеСвойства.Вставить("БылПроведен", ЭтотОбъект.Проведен);
КонецПроцедуры

Процедура ОбработкаПроведения(Отказ, РежимПроведения)
    Перем БылПроведен;

    ДополнительныеСвойства.Свойство("БылПроведен", БылПроведен);
    Если БылПроведен = Истина Тогда
        // тут вполняем добавление движения. Можно и через общий модуль.
   КонецЕсли;

КонецПроцедуры
Показать

Но это будет работать только при повторном проведении. При отмене проведения не сработает.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
5. spacecraft 16.09.21 17:03 Сейчас в теме
(1)
Часть кода - вызываю общую процедуру

А собственно, откуда эта процедура вызывается? Что то я сомневаюсь, что из обработчика проведения.
6. Menmo 8 16.09.21 17:11 Сейчас в теме
(5) Процедура вызывается из "ПередЗаписью", так как производится проверка, был проведён документ или нет.
8. spacecraft 16.09.21 17:14 Сейчас в теме
(6) ПередЗаписью этот код работать не будет
10. Menmo 8 16.09.21 17:16 Сейчас в теме
(8) Почему? Если создать процедуру в самом модуле документа и вызвать её в том же месте (ПередЗаписью) - всё работает, регистр заполняется..
11. spacecraft 16.09.21 17:19 Сейчас в теме
(10) во время первого проведення в ПередЗаписью ЭтотОбъект.Проведен будет Ложь.
12. Menmo 8 16.09.21 17:20 Сейчас в теме
(11) Да, в этом то и соль, чтобы во время первого проведения запись в регистре не появлялась, а при последующих проведениях - появлялась. Однако запись в регистре ни при первом проведении, ни при третьем не появляется.
15. spacecraft 16.09.21 17:35 Сейчас в теме
(12) именно последующие перепроведения? А не отмена проведения и проведение. И у документа не установлено свойство "УдалениеДвижений" как "УдалятьАвтоматически".
Ну и соответственно в обработчике ОбработкаПроведения так же движения не очищаются.
18. Sashares 34 16.09.21 17:49 Сейчас в теме
(15)Да это вообще должен быть регистр не подчиненный регистратору. Тут изначально не верный подход.
19. spacecraft 16.09.21 17:49 Сейчас в теме
17. spacecraft 16.09.21 17:48 Сейчас в теме
(12) и вообще это делается не так. Не то место ПередЗаписью, чтобы добавлять движения.
Это решается так:
Процедура ПередЗаписью(Отказ)
    ДополнительныеСвойства.Вставить("БылПроведен", ЭтотОбъект.Проведен);
КонецПроцедуры

Процедура ОбработкаПроведения(Отказ, РежимПроведения)
    Перем БылПроведен;

    ДополнительныеСвойства.Свойство("БылПроведен", БылПроведен);
    Если БылПроведен = Истина Тогда
        // тут вполняем добавление движения. Можно и через общий модуль.
   КонецЕсли;

КонецПроцедуры
Показать

Но это будет работать только при повторном проведении. При отмене проведения не сработает.
2. user838744 16.09.21 16:54 Сейчас в теме
попробуйте добавить строку
Движение.Записать();
перед
КонецЕсли;
3. Tommy82 65 16.09.21 16:55 Сейчас в теме
9. Menmo 8 16.09.21 17:15 Сейчас в теме
(3) Метод Объекта не обнаружен (Записать) - ошибку выдаёт.
4. Sashares 34 16.09.21 16:59 Сейчас в теме
Я тоже попробую предложить вариант.

Движения.ИзменениеДокументов.Записать();


Какой-то да сработает (мой)
7. Menmo 8 16.09.21 17:13 Сейчас в теме
(4) К сожалению, не работает, выдаёт ошибку Поле Объектов (ИзменениеДокументов) не обнаружено.
13. Sashares 34 16.09.21 17:31 Сейчас в теме
(7)Тогда у тебя вся процедура не работает))
14. Menmo 8 16.09.21 17:32 Сейчас в теме
(13) Да, вся процедура не работает, если вписать ваш код.
16. Sashares 34 16.09.21 17:45 Сейчас в теме
(14) Значит вписываете не туда

Если вдруг не понятно, то строку из (4) надо вставлять внутрь условия.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот