Имя: Пароль:
1C
1С v8
Нет движения по регистрам из общего модуля
0 MAPATNK2
 
naïve
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");
        Движение.КодОперации=перечисления.КодыОперацийЗатраты.СписаниеРасходовНаПродажу;
        НаборЗаписей.Записать();
    КонецЕсли;
КонецПроцедуры


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


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

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

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

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