Уведомления
Очистить все

Как проверить, были ли изменения данных в объекте конфигурации (Справочнике, документе и т.д.) в 1С?

2 Записи
1 Пользователи
0 Likes
6,067 Просмотры
65-150 Okolokompa Форум
(@kalininalex)
Reputable Member
Присоединился: 4 года назад
Записи: 160
Создатель темы  

Проверяем, изменены ли были данные в объектах конфигурации в 1С.

Допустим, нам необходимо проверить, были ли изменения в справочнике "Сотрудники".

Решим эту задачу при помощи планов обмена. Обмениваться ни с чем не будем, а воспользуемся готовым и удобным функционалом регистраций планов обмена.

- Для этого создадим в конфигураторе план обмена с именем: "РегистрацияСотрудниковИзмененных".

- В состав этого плана обмена, включим справочник "Сотрудники".

- Далее создадим такую функцию:

// Проверяет наличие изменений для справочника "Сотрудники"
//
// Если изменения были, вернет Истина.
//         При этом очистит, все регистрации.
//         То есть, следующими (новыми) изменениями, будут считаться другие (после текущего состояния).
//         А текущее состояния справочника "Сотрудники", станет как с "чистого листа".
//
// Если изменений не было, вернет Ложь.
//
// В функции не используется такой типовой способ, как ПланыОбмена.ВыбратьИзменения(). Такой способ работает медленнее,
// так как процесс в цикле получает каждый объект отдельно. (На базу нагрузка больше)
&НаСервереБезКонтекста
Функция ИзмененияСправочникаСотрудникиБыли()
	
	ПО_ВыгрузкаНаПортал = ПланыОбмена.РегистрацияСотрудниковИзмененных;
	
	УзелПО = ПО_ВыгрузкаНаПортал.НайтиПоКоду("СотрИзм"); 

	//Проверяем наличие узла "СотрИзм" у плана обмена "РегистрацияСотрудниковИзмененных"
	//Если такого узла нет, создаем.
	Если УзелПО = ПланыОбмена.РегистрацияСотрудниковИзмененных.ПустаяСсылка() Тогда
		УзелПО = ПО_ВыгрузкаНаПортал.СоздатьУзел();
		УзелПО.Код          = "СотрИзм"; 
		УзелПО.Наименование = "СотрИзм";
		УзелПО.Записать();
		УзелПО = УзелПО.Ссылка;
	КонецЕсли;
	
	Запрос = Новый Запрос;
	Запрос.Текст =
	"ВЫБРАТЬ
	|	СотрудникиИзменения.Ссылка КАК Сотрудник
	|ИЗ
	|	Справочник.Сотрудники.Изменения КАК СотрудникиИзменения
	|ГДЕ
	|	СотрудникиИзменения.Узел = &УзелКОтбору";
	
	Запрос.УстановитьПараметр("УзелКОтбору", УзелПО);
	
	РезультатаЗапроса_ТЗ = Запрос.Выполнить().Выгрузить();
	
	ИзмененияБыли = Ложь;
	
	Если РезультатаЗапроса_ТЗ.Количество() > 0 Тогда	
		ИзмененияБыли = Истина;
	КонецЕсли;
	
	Если ИзмененияБыли = Истина Тогда
		МассивСотрудниковИзмененных = РезультатаЗапроса_ТЗ.ВыгрузитьКолонку("Сотрудник");
		ПланыОбмена.УдалитьРегистрациюИзменений(УзелПО, МассивСотрудниковИзмененных);	
	КонецЕсли;	
	
	Возврат ИзмененияБыли;	
	
КонецФункции

 


   
Цитата
65-150 Okolokompa Форум
(@kalininalex)
Reputable Member
Присоединился: 4 года назад
Записи: 160
Создатель темы  

Не забываем, чтобы создать такой запрос в конструкторе запроса и отобразить, для выбора, таблицы изменений, нужно включить такую "кнопочку" в конструкторе запроса.

 

1682766790-photo_2023-04-02_20-41-15-min Okolokompa Форум

   
ОтветитьЦитата
Поделиться: