Имя: Пароль:
1C
1С v8
Корректировка проведения документа
0 Sayan_mi
 
04.04.18
10:28
ЗУП 3.1 Потребовалось при проведении документа увольнение подкорректировать запись в регистр Плановые начисления.
Чтобы не влезать в документ напрямую делаю через подписку на событие при проведении.
Корректирую вот так:
Выборка = РезультатЗапроса.Выбрать();
        
        ткДвижения = Источник.Движения.ПлановыеНачисления.Выгрузить();
        
        Пока Выборка.Следующий() Цикл
            ткСтрока = ткДвижения.Найти(Выборка.Начисление, "Начисление");
            ткСтрока.ДействуетДо             = КонецМесяца(ДобавитьМесяц(Источник.ДатаУвольнения, 1));
            ткСтрока.Используется             = Истина;
            ткСтрока.УдалитьИспользуетсяПоОкончании = Истина;
        КонецЦикла;
        
        Источник.Движения.ПлановыеНачисления.Загрузить(ткДвижения);

Смотрю по отладчику - Источник.Движения.ПлановыеНачисления тот что надо те строки что надо подправлены. После проведения в регистре движения такие будто изменений и не вносил. почему так получается?
Пробовал через создание Набора записей - Создаются нужные но и старые остаются, а не хотелось бы тем паче что при просмотре срез последних по регистру добавленных записей не видно.
1 AlexTim03
 
04.04.18
10:32
Источник.Движения.ПлановыеНачисления.Записывать = Истина
2 Cyberhawk
 
04.04.18
10:43
Если в обработке проведения документа вызывается явная запись движений из коллекции движений регистратора, то признак необходимости записи в этом случае сбрасывается и в твоей подписке хоть заизменяйся, а без возобновления признака необходимости записи ничо не запишется
3 Cyberhawk
 
04.04.18
10:43
(ну, это если записыватьвыбранные = истина у документа-объекта МД)
4 rozer76
 
04.04.18
11:15
(0) явно запиши потом набор
5 Serg_1960
 
04.04.18
11:41
(0) Скорее всего движения уже были записаны в регистр и не имеет смысла их изменять без повторной явной записи в регистр.

PS: а я бы сделал бы через подписку ПередЗаписьюРегистра... оно так надёжнее перехватить все пути к регистру.
6 shuhard
 
04.04.18
11:42
(5)[ а я бы сделал бы через подписку ПередЗаписьюРегистра]
и обновлять куда как проще
7 rozer76
 
04.04.18
11:47
(5) +1
8 Serg_1960
 
04.04.18
11:48
(6) Ну... я вспомнил :) что есть ещё документ "УвольнениеСписком".
9 Serg_1960
 
04.04.18
11:54
Посмотрел алгоритм, там
Вызов процедуры ПрекратитьВсеПлановыеНачисленияПоТаблицеСотрудников() с "Движения.ПлановыеНачисления.Записывать = Истина;" и далее в модуле менеджера - вызов ПроведениеРасширенныйСервер.ЗаписьДвиженийПоУчетам() с записью в регистры:

Для Каждого Движение Из Движения Цикл
   Если СтруктураВидовУчета.ПроведениеПоВсемУчетам Тогда
      Движение.Значение.Записать();    
   Иначе
      Если СтруктураВидовУчета.МассивРегистров.Найти(Движение.Значение.Метаданные()) <> Неопределено Тогда
         Движение.Значение.Записать();            
      КонецЕсли;
   КонецЕсли;
КонецЦикла;
Закон Брукера: Даже маленькая практика стоит большой теории.