1С 8.3 РежимЗамещения.Слияние; Удаление; Обновление - Программист 1С Минск. Автоматизация бизнеса.

Перейти к контенту

1С 8.3 РежимЗамещения.Слияние; Удаление; Обновление

Данные > Примеры кода 1С > 1С 8.3 Регистры сведений
Перейти в раздел примеры кода 1С 8.3:
Для набора записей независимого регистра сведений реализована возможность обновления записей регистра сведений, совпадающих по ключевым полям с записями. Возможно не все в курсе, но в 8.3.26 подвезли несколько новых методов при записи набора записей регистра сведений методом ‘’НаборЗаписей.Записать(Признак)". Ранее была возможность передать только признак "Истина/Ложь", что означало либо добавление новых записей, либо перезапись. Во время перезаписи все значения сначала удалялись, затем записывались новые. Теперь вместо булевого признака можно передадавать "РежимЗамещения" (Добавление , Замещение , Слияние, Удаление и в 8.3.27 добавили "Обновление").
Какой кейс оно решает? Например, добавили новый ресурс в регистр сведений и хотим заполнить только его без перезаписи всех записей, тогда можно использовать этот механизм.
📌 Что значит метод "удаление": Суть в том, что раньше, до эпохи исторического материализма, записи в регистрах сведений нужно было удалять в цикле. Что, как вы понимаете, не комильфо. Понимаете? Например, нужно удалить 100.000 записей из регистра сведений. Это нужно 100.000 раз дергать сервер, что долго и ресурсоёмко. Теперь одним взмахом руки можно удалить всю тысячу.
Пример в 1С 8.5.1:
НачатьТранзакцию();
Попытка
   Блокировка.Заблокировать();
   РезультатыЗапроса = Запрос.ВыполнитьПакет();
   Если Не РезультатыЗапроса[0].Пустой() Тогда

       НаборЗаписей = РегистрыСведений.СоставыГруппПользователей.СоздатьНаборЗаписей();
       НаборЗаписей.Загрузить(РезультатыЗапроса[0].Выгрузить());
       НаборЗаписей.Записать(РежимЗамещения.Удаление); // с версии 8.3.26
       // Будут удалены записи, совпадающие по значению ключевых полей с записями в наборе записей.

   КонецЕсли;
   Если Не РезультатыЗапроса[1].Пустой() Тогда

       НаборЗаписей = РегистрыСведений.СоставыГруппПользователей.СоздатьНаборЗаписей();
       НаборЗаписей.Загрузить(РезультатыЗапроса[1].Выгрузить());
       НаборЗаписей.Записать(РежимЗамещения.Слияние); // с версии 8.3.26
       //Будет выполнено слияние записей из набора записей с существующими записями регистра:
       //* Существующие записи регистра, совпадающие по значениям ключевых полей с записями
       //  из набора записей, будут перезаписаны.
       //* Записи набора, для которых нет соответствия среди существующих записей регистра,
       //  будут добавлены.

   КонецЕсли;
   ЗафиксироватьТранзакцию();
Исключение
   ОтменитьТранзакцию();
   ВызватьИсключение;
КонецПопытки;



// Обновление существующих записей регистра, совпадающих по значениям ключевых полей с записями,
// содержащимися в наборе записей. Добавление новых записей не выполняется.
НачатьТранзакцию();
Попытка
   БлокировкаДанных.Заблокировать();
   Выгрузка = Запрос.Выполнить().Выгрузить();

   НаборЗаписей = РегистрыСведений.ДанныеБизнесПроцессов.СоздатьНаборЗаписей();
   НаборЗаписей.Загрузить(Выгрузка);    // с версии 8.3.27

   ОбновлениеИнформационнойБазы.ЗаписатьНаборЗаписей(НаборЗаписей, РежимЗамещения.Обновление);

   ЗафиксироватьТранзакцию();
Исключение
   ОтменитьТранзакцию();
   //...
КонецПопытки;
0
комментарии
____________________
Copyright©, «Программист 1С в г.Минске», 01.03.2025
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
Яндекс.Метрика
Защищенное соединение ssl
visa
mastercard
Maestro
Яндекс деньги
Назад к содержимому