1С:Підприємство 8.x: Відстеження зміни регістру

Відстеження зміни регістру залишків можна здійснити за допомогою підписки на подію ПриЗаписи та ПередЗаписью. Однак, якщо є необхідність відслідковувати зміни, що виникають у результаті проведення документу, необхідно використати саме підписку ПередЗаписью. Це пов'язано з тим, що на момент виникнення цієї події об'єкт, який записується ще відрізняється від об'єкту у базі, що надає можливість порівняти їх.

Відрізнити проведення та відміну проведення можна перевіривши на наявність рухів параметр обробника Источник (мТаблицаДвижений): якщо він порожній - відбувається відміна проведення. Якщо ж містить таблицю рухів - проведення.

Але, як отримати рухи документу, проведення якого відміняється? Адже, набір записів рухів - порожній.

У цьому випадку може допомогти посилання на реєстратор, що міститься у властивості "Отбор", що дасть можливість отримати рухи документу, що розпроводиться.

Наводжу приклад коду обробника:


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

Недоліком описаного вище способу є неможливість відстеження відмови, що була ініційована у обробнику події ПриЗаписи.

Додати новий коментар

Фото Капча
Введіть символи з картинки.