Кеширование текущей строки для сравнения при окончании редактирования

AlexMir 7 2

Сохранить кеш строки до её изменения пользователем. Сравнить после окончания редактирования, если надо выполнить нужные действия.

//1. На форме необходимо создать реквизит: КешТекущейСтроки - ПроизвольныйТип.

//2. В нужной табличной части создаём процедуру ПередНачаломИзменения, например такую:

&НаКлиенте
Процедура ПрикреплённыеФайлыНаСервереПередНачаломИзменения(Элемент, Отказ)
    КешТекущейСтроки = ПреобразоватьСтрокуТаблицыВСтруктуру(Элемент.ТекущиеДанные, Элементы.ГруппаСтраницы.ПодчиненныеЭлементы.ГруппаПрисоединенныеФайлы.ПодчиненныеЭлементы.ПрикреплённыеФайлыНаСервере.ПодчиненныеЭлементы, "ПрикреплённыеФайлыНаСервере");
КонецПроцедуры

// 3. Добавить  Процедуру  ПреобразоватьСтрокуТаблицыВСтруктуру. В этой процедуре необходимо пропускать обработку колонок, которые взяты по ссылке из какого-то ссылочного реквизита (Ссылка.Реквизит), они не главные и их не обязательно помещать в структуру

// Возвращает структуру с ключами, соответствующими колонкам таблицы значений.
// Значения в структуре заполняются значениями полей из переданной строки таблицы.
//
// Параметры:
//	ТекущаяСтрока - СтрокаТаблицыЗначений
//      ПодчиненныеЭлементы - полный путь к подчиненным элементам табличной части (колонкам) на управляемых формах
//      ИмяТаблица - имя таблицы на управляемой форме
// Возвращаемое значение:
//	Структура
//      лучше вынести  функцию в общий модуль НаКлиенте
&НаКлиенте
Функция ПреобразоватьСтрокуТаблицыВСтруктуру(ТекущаяСтрока,ПодчиненныеЭлементы, ИмяТаблицы) Экспорт 
	
	РезультатСтруктура = Новый Структура;
	
    Для Каждого Колонка Из ПодчиненныеЭлементы Цикл
        Если Колонка.Имя = ИмяТаблицы+"Артикул" ИЛИ Колонка.Имя = ИмяТаблицы+"НомерСтроки" Тогда // вложенные в ссылку реквизиты исключаем, их пользователь не меняет
            Продолжить;
        КонецЕсли; 
        ИмяКолонки = СтрЗаменить(Колонка.Имя,ИмяТаблицы,"");
		РезультатСтруктура.Вставить(ИмяКолонки, ТекущаяСтрока[ИмяКолонки]);
	КонецЦикла;
	
	Возврат РезультатСтруктура;
	
КонецФункции

// 4. Создаём процедуру ПриОкончанииРедактирования и в ней уже смотрим что изменилось в строке, после её редактирования, сопоставляем с кешированными данными в строке, например так:

&НаКлиенте
Процедура ПрикреплённыеФайлыНаСервереПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ)
    
    Если  НоваяСтрока = Ложь И КешТекущейСтроки <> Неопределено Тогда
        
        // проверяем сравниваем с кешированной строкой перед изменениями
        Если КешТекущейСтроки.Имя <> "" И КешТекущейСтроки.Имя <> Элемент.ТекущиеДанные.Имя Тогда
            // пишете код что надо сделать

        КонецЕсли; 
     КонецЕсли;

КонецПроцедуры
0
{7} Переменной КешТекущейСтроки присвоено значение, но оно нигде не используется

См. также

ЗначенияДоступаПриОкончанииРедактирования (БСП)

ВидыДоступаПриОкончанииРедактирования (БСП)

Сравнение двух строк

ВосстановитьПорядокСтрокКоллекцииПослеРедактирования (БСП)

ТекущаяНастройкаРезервногоКопирования (БСП)

Выделение текущей строки в отчете

Проверка совпадения таблиц путем сравнения полного и внутреннего соединения

Сравнение плановых и фактических дней отпуска

ЭтоВидСравненияСписка (БСП)

Модератору