Механизм проверки изменения объекта существует ? (до и после записи)

1. Vitaly1C8 10.09.20 17:54 Сейчас в теме
Добрый день !
Требуется реализовать следующее: при открытии карточки элемента справочника, - запомнить все "интересующие нас поля"
Когда юзер нажимает кнопку [Записать и закрыть] (или записать) сравниваем "интересующие нас поля" с ранее сохраненными; Если изменений нет - не записываем элемент, а просто закрываем.
Это необходимо, чтобы не срабатывала подписка на события по которой происходит обмен.
Подскажите как это реализовать ? И есть ли какие-нибудь стандартные методы (например где хранятся все данные элемента на момент открытия, до записи) для удобной реализации ?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. chipazawra 10.09.20 18:27 Сейчас в теме
(1)
например где хранятся все данные элемента на момент открытия, до записи
хранятся в БД если объект не новый, получить ты это можешь по ссылке, а то что ты пытаешься записать храниться в записываемом Объекте.
Vitaly1C8; +1 Ответить
6. PerlAmutor 158 10.09.20 19:09 Сейчас в теме
(1)
Это необходимо, чтобы не срабатывала подписка на события по которой происходит обмен.

Если обмен написан через КД 2.1, то обычно изменения реквизитов объектов, которые не участвуют в правилах конвертации не приводят к регистрации объекта к обмену.

А если участвуют, то было бы странно не регистрировать объект к обмену, раз уж изменились реквизиты, которые должны быть одинаковы в синхронизируемых базах.
Vitaly1C8; +1 Ответить
2. chipazawra 10.09.20 18:23 Сейчас в теме
Из БД по ссылке ты можешь получить то что сохранено, а из объекта получить то что записываешь и произвести сверку. А вообще просто вроде флаг Модифицирован проверить методом Модифицированность().
4. farengeit00 10.09.20 18:27 Сейчас в теме
&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
Если Проверка() Тогда
Отказ = Истина;
Закрыть();
КонецЕсли;
КонецПроцедуры

&НаСервере
Функция Проверка()
Если Объект.Ссылка.Наименование = Объект.Наименование Тогда
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли;
КонецФункции
Рамзес; Vitaly1C8; chipazawra; +3 Ответить
5. VictorRGB2 14 10.09.20 18:28 Сейчас в теме
такого типового механизма не знаю
по любому придется писать свой код и придумывать как сравнить элемент ПОСЛЕ открытия и ДО записи
вариантов всего два
1. сравнивать ВСЕ реквизиты
2. сравнивать КЛЮЧЕВЫЕ реквизиты

тут главное получить состояние ДО изменения
1. можно при открытии куда-нибудь их "запомнить"
2. можно перед записью их же получить запросом по ссылке

ну а дальше уже дело техники, сравнить значения из двух наборов не сложно
Vitaly1C8; +1 Ответить
8. Риник 15 30.01.21 21:34 Сейчас в теме
(5) Да ну. Перед записью нам доступна Ссылка со старыми значениями и Объект, с теми, которые пытаемся записать. Перед записью мы можем просто сравнить реквизиты Объекта с реквизитами Ссылки
7. dj_tol 104 11.09.20 02:09 Сейчас в теме
При открытии прсвоим в переменные значения
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ВалютаДокумента = Объект.ВалютаДоговораЛизинга;
.......
.......
КонецПроцедуры

Можно воспользоваться БСП (выше 2.5) например Объект в структуру

ВыбранныеРеквизитыОбъекта =ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ВыбСсылка,"Ссылка, КассаККМ, Магазин, Организация, СуммаДокумента, СуммаВозвратов",Ложь);

А перед записью сравнить новую структуру. Потом принять решение.
Vitaly1C8; +1 Ответить
9. kraynev-navi 683 11.06.24 12:30 Сейчас в теме
Еще в копилку.
Из БСП ОбщегоНазначения.КоллекцииИдентичны()
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот