Проверка изменения полей регистра сведений ПередЗаписью с использованием кеширования исходных данных через БСП (БуферОбмена). Сложность в том, что при изменении данных регистра сведений сперва происходит запись пустого набора данных и когда записывается итоговый набор данных, прежние данные запросом уже не получить. Данный код кеширует прежние данные в первой итерации во временном хранилище и передает его адрес второй итерации через параметр сеанса (встроенными средствами БСП).
Блог Жёлтая тетрадь 📒 http://t.me/yellow_pad
Процедура ПередЗаписью(Отказ, Замещение)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
ИмяИсточника = ОбщегоНазначения.КонтрольнаяСуммаСтрокой(Новый Структура("Пользователь, Отборы", ИмяПользователя(), Отбор.Задача.Значение));
Если ЭтотОбъект.Количество() = 0 Тогда
ОбщегоНазначения.СкопироватьВБуферОбмена(ПолучитьНачальныеДанные(Отбор.Задача.Значение), ИмяИсточника);
Иначе
БуферОбмена = ОбщегоНазначения.СтрокиИзБуфераОбмена();
Если БуферОбмена.Источник = ИмяИсточника Тогда // новая запись
НачальныеДанные = БуферОбмена.Данные;
Иначе
НачальныеДанные = Неопределено;
КонецЕсли;
ТекущаяДата = ТекущаяДата();
Для каждого Запись Из ЭтотОбъект Цикл
ТекНачальныеДанные = ?(НачальныеДанные = Неопределено, Неопределено, НачальныеДанные.Найти(Запись.Задача, "Задача"));
Если ТекНачальныеДанные = Неопределено Тогда // запись создана
Запись.ДатаСоздания = ТекущаяДата;
Продолжить;
КонецЕсли;
Если ЗначениеЗаполнено(Запись.Ссылка)
И НЕ Запись.Ссылка = ТекНачальныеДанные.Ссылка Тогда // получена новая ссылка
Запись.ДатаПолученияСсылки = ТекущаяДата;
КонецЕсли;
КонецЦикла;
// очистим буфер обмена
ОбщегоНазначения.СкопироватьВБуферОбмена(Неопределено, ИмяИсточника);
КонецЕсли;
КонецПроцедуры
Функция ПолучитьНачальныеДанные(Задачи)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| *
|ИЗ
| РегистрСведений.ЗадачиДляОбмена КАК ЗадачиДляОбмена
|ГДЕ
| ЗадачиДляОбмена.Задача В (&Задачи)";
Запрос.УстановитьПараметр("Задачи", Отбор.Задача.Значение);
Возврат Запрос.Выполнить().Выгрузить();
КонецФункции
ПроверитьДатуЗапретаИзмененияПередЗаписьюНабораЗаписейРегистраБухгалтерии (БСП)
ПроверитьДатуЗапретаИзмененияПередЗаписьюНабораЗаписейРегистраРасчета (БСП)
Групповое изменение Измерения в НабореЗаписей регистра сведений
ПроверитьДатуЗапретаИзмененияПередЗаписьюНабораЗаписей (БСП)
Этот тип является менеджером записи регистра сведений
ПроверитьДатуЗапретаИзмененияПередЗаписью (БСП)
ПроверитьДатуЗапретаИзмененияПередЗаписьюДокумента (БСП)