Уведомления
Очистить все
1С:Предприятие 8.x
2
Записи
1
Пользователи
0
Likes
6,067
Просмотры
Создатель темы 29/04/2023 2:07 пп
Проверяем, изменены ли были данные в объектах конфигурации в 1С.
Допустим, нам необходимо проверить, были ли изменения в справочнике "Сотрудники".
Решим эту задачу при помощи планов обмена. Обмениваться ни с чем не будем, а воспользуемся готовым и удобным функционалом регистраций планов обмена.
- Для этого создадим в конфигураторе план обмена с именем: "РегистрацияСотрудниковИзмененных".
- В состав этого плана обмена, включим справочник "Сотрудники".
- Далее создадим такую функцию:
// Проверяет наличие изменений для справочника "Сотрудники" // // Если изменения были, вернет Истина. // При этом очистит, все регистрации. // То есть, следующими (новыми) изменениями, будут считаться другие (после текущего состояния). // А текущее состояния справочника "Сотрудники", станет как с "чистого листа". // // Если изменений не было, вернет Ложь. // // В функции не используется такой типовой способ, как ПланыОбмена.ВыбратьИзменения(). Такой способ работает медленнее, // так как процесс в цикле получает каждый объект отдельно. (На базу нагрузка больше) &НаСервереБезКонтекста Функция ИзмененияСправочникаСотрудникиБыли() ПО_ВыгрузкаНаПортал = ПланыОбмена.РегистрацияСотрудниковИзмененных; УзелПО = ПО_ВыгрузкаНаПортал.НайтиПоКоду("СотрИзм"); //Проверяем наличие узла "СотрИзм" у плана обмена "РегистрацияСотрудниковИзмененных" //Если такого узла нет, создаем. Если УзелПО = ПланыОбмена.РегистрацияСотрудниковИзмененных.ПустаяСсылка() Тогда УзелПО = ПО_ВыгрузкаНаПортал.СоздатьУзел(); УзелПО.Код = "СотрИзм"; УзелПО.Наименование = "СотрИзм"; УзелПО.Записать(); УзелПО = УзелПО.Ссылка; КонецЕсли; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | СотрудникиИзменения.Ссылка КАК Сотрудник |ИЗ | Справочник.Сотрудники.Изменения КАК СотрудникиИзменения |ГДЕ | СотрудникиИзменения.Узел = &УзелКОтбору"; Запрос.УстановитьПараметр("УзелКОтбору", УзелПО); РезультатаЗапроса_ТЗ = Запрос.Выполнить().Выгрузить(); ИзмененияБыли = Ложь; Если РезультатаЗапроса_ТЗ.Количество() > 0 Тогда ИзмененияБыли = Истина; КонецЕсли; Если ИзмененияБыли = Истина Тогда МассивСотрудниковИзмененных = РезультатаЗапроса_ТЗ.ВыгрузитьКолонку("Сотрудник"); ПланыОбмена.УдалитьРегистрациюИзменений(УзелПО, МассивСотрудниковИзмененных); КонецЕсли; Возврат ИзмененияБыли; КонецФункции