Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

Нет движения по регистрам из общего модуля

Нет движения по регистрам из общего модуля
Я
   MAPATNK2
 
05.12.18 - 08:31
Всем добрый день. УПП 1.3.

Процедура ЗаратыПоКурсовымРазницамПриЗаписи(Источник, Отказ) Экспорт
    СуммаДенежныеСредства=0;    
    Запрос = новый запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ
    |    ДенежныеСредства.СуммаУпр КАК СуммаУпр
    |ИЗ
    |    РегистрНакопления.ДенежныеСредства КАК ДенежныеСредства
    |ГДЕ
    |    ДенежныеСредства.Регистратор = &ДокументРегистратор";
    Запрос.УстановитьПараметр("ДокументРегистратор", Источник.Ссылка);
    Результат = Запрос.Выполнить().Выгрузить();
    Результат.Свернуть(,"СуммаУпр");    
    Если результат.Количество()> 0 тогда
        СуммаДенежныеСредства =Результат[0].СуммаУпр*(-1);
    КонецЕсли;
    
    
    Запрос1 = новый запрос;
    Запрос1.Текст = 
    "ВЫБРАТЬ
    |    ВзаиморасчетыСКонтрагентами.СуммаУпр
    |ИЗ
    |    РегистрНакопления.ВзаиморасчетыСКонтрагентами КАК ВзаиморасчетыСКонтрагентами
    |ГДЕ
    |    ВзаиморасчетыСКонтрагентами.Регистратор = &Регистратор";
    Запрос1.УстановитьПараметр("Регистратор", Источник.Ссылка);
    Результат1 = Запрос1.Выполнить().Выгрузить();
    Результат1.Свернуть(,"СуммаУпр");    
    Если Результат1.Количество()> 0 тогда
        НаборЗаписей  = РегистрыНакопления.Затраты.СоздатьНаборЗаписей();
        НаборЗаписей.Отбор.Регистратор.Установить(Источник.Ссылка);
        Если  результат1[0].СуммаУпр<0 тогда    
            Движение = НаборЗаписей.ДобавитьПриход();    
            Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
            Движение.Сумма =Результат1[0].СуммаУпр*(-1)+СуммаДенежныеСредства;
        Иначе
            Движение = НаборЗаписей.ДобавитьРасход();
            Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
            Движение.Сумма =Результат1[0].СуммаУпр+СуммаДенежныеСредства;
        КонецЕсли;
        Движение.Регистратор = Источник.Ссылка;    
        Движение.Период = Источник.Дата;
        Движение.Подразделение = Источник.Подразделение.Ссылка;
        Движение.СтатьяЗатрат = Справочники.СтатьиЗатрат.НайтиПоКоду("БП0000067");
        Движение.КодОперации=перечисления.КодыОперацийЗатраты.СписаниеРасходовНаПродажу;
        НаборЗаписей.Записать();
    КонецЕсли;
КонецПроцедуры


Делаю так в общем модуле, подписка на событие (ПриЗаписи) документа ПереоценкаВалютныхСредств. Если я положу данную процедуру в модуль формы - всё отлично записывается, но когда я запихиваю это дело в подписку на событие никакого движения по регистру не происходит. Я в отладчике смотрю - всё великолепно, считает как надо, записывает. А после записи документа заходишь в регистр - нет ничего. Что делать?
 
 
   НЕА123
 
1 - 05.12.18 - 09:02
(0)
ПриЗаписи - оно такое (с).
   MAPATNK2
 
2 - 05.12.18 - 09:11
(1) и какие варианты есть?
   НЕА123
 
3 - 05.12.18 - 09:20
(2)
>Если я положу данную процедуру в модуль формы - всё отлично записывается
это правда?
   MAPATNK2
 
4 - 05.12.18 - 09:22
По факту мне необходимо после проведения документа ПереоценкаВалютныхСредств добавитьдвижение этого документа по регистру Затрат. (Требование руководства). Когда я на форму "После записи" записал данную процедуру - работало всё хорошо, а вот когда решил данную процедуру повесить в общий модуль в подписк на событие, движение перестало происходит. Я думаю проблема заключается в том, что т.к. добавлено в документе движение по регистру затраты, после выполнения подписки на событие он создает пустое движение и пеерзаписывает строку регистра накоплений на пустое значение.
   MAPATNK2
 
5 - 05.12.18 - 09:22
(3) да
   НЕА123
 
6 - 05.12.18 - 09:42
(4)
ничего он в РН Затраты не пишет (похоже).


СП
призаписи
Описание:

Возникает при записи объекта. Процедура-обработчик вызывается после записи объекта в базу данных, но до окончания транзакции записи.
   MAPATNK2
 
7 - 05.12.18 - 09:44
(6) Я отладчиком иду, НаборЗаписей.Записать() всё хорошо, после тоже никаких ошибок не выдает. Черт знает в чем пробелма, второй день уже долблю.
   zuza
 
8 - 05.12.18 - 09:49
(7) А других подписок для этого документа нет?
   MAPATNK2
 
9 - 05.12.18 - 09:52
(8)нет
   catena
 
10 - 05.12.18 - 09:52
(7)Может быть потому, что ПриЗаписи отрабатывает до обработки проведения?

https://its.1c.ru/db/pubdevguide83/content/612/hdoc
 
 Рекламное место пустует
   НЕА123
 
11 - 05.12.18 - 09:52
(8)
ПослеЗаписи у объект нет.
   loololool
 
12 - 05.12.18 - 09:54
Мне что-то подсказывает, что автор создаёт не движения, а набор записей, т.е. после окончания транзакции - его набор записи перетирается подготовленными к записи движениями.
   loololool
 
13 - 05.12.18 - 09:55
А подготовленные движения - пусты.
   MAPATNK2
 
14 - 05.12.18 - 10:00
(13) Ну я про то же и писал выше. Как этого избежать?
   MAPATNK2
 
15 - 05.12.18 - 10:01
В общем тут просто вопрос, как вызвать процедуру после записи объекта?
   ZDenis
 
16 - 05.12.18 - 10:06
(15) А в модуле объекта в "ОбработкуПроведения" добавить свои записи в регистры уже не гламурно?
   loololool
 
17 - 05.12.18 - 10:20
(16) Это всегда было овнокодерство

(14) Записывать движения в Источник.Движения
   MAPATNK2
 
18 - 05.12.18 - 10:21
(16) Да нужно было после записи вызывать данную процедуру а не во время. Ну ладно уж, думал можно так, коль нет, буду "Гламурно" делать.
   MAPATNK2
 
19 - 05.12.18 - 10:21
Всем спасибо
   loololool
 
20 - 05.12.18 - 10:23
В отдельных конфах были замечены некие временные таблицы для движений, передающиеся в модуль менеджера регистра. Т.е. модуль менеджера перезаписывать Движения из данных временной таблицы, но это не точно.
   Windyhead
 
21 - 05.12.18 - 10:40
(17)По мне так, движения в подписках это говнокодерство.
уж лучше красиво встроиться в модуль объекта и в модуль менеджера объекта.


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует