Работа с регистрами сведений

Обработать набор записей регистра сведений

НаборЗаписей = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Тип.Установить(Перечисления.ТипыКонтактнойИнформации.EMail);
НаборЗаписей.Прочитать();
	
Для Каждого ТекЗапись Из НаборЗаписей Цикл
	ТекЗапись.ЗначениеСтрока = ТекЗапись.ЗначениеEmail.Код;
КонецЦикла;
	
НаборЗаписей.Записать();

Обработать одну запись регистра сведений

МенеджерЗаписи = РегистрыСведений.НастройкиПользователей.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Пользователь = Пользователь;
МенеджерЗаписи.Настройка = ПланыВидовХарактеристик.НастройкиПользователей.ОсновнаяОрганизация;
МенеджерЗаписи.Прочитать();
МенеджерЗаписи.Значение = ОсновнаяОрганизация;
МенеджерЗаписи.Записать();

Записать в регистр сведений с замещением

Отличие от предыдущего примера в том, что мы не будем читать запись, а просто добавим ее. Если была запись с теми же измерениями, она будет замещена.

МенеджерЗаписи = РегистрыСведений.УВ_НоменклатураМагазинов.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Магазин = Магазин;
МенеджерЗаписи.Номенклатура = Номенклатура;
МенеджерЗаписи.Минимум = Минимум;
МенеджерЗаписи.Максимум = Максимум;
МенеджерЗаписи.Использование = Использование;
МенеджерЗаписи.Записать(Истина);

Очистка регистра сведений

Отбор в наборе записей — это вообще важная вещь. Например, чтобы очистить регистр, нам достаточно записать набор записей без отбора.

НаборЗаписей = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей();
НаборЗаписей.Записать();

Логирование записей в регистр сведений

Ну и под конец интересненькое. Предположим, мы хотим записывать в лог все изменения записей регистра. Для хранения лога подойдет файл mxl, расположенный на сервере. Также нам понадобится макет. Макет и файл лога у меня не сохранились, но из кода все довольно очевидно.

Код будем вставлять в модуль набора записей регистра сведений.

Процедура ПриЗаписи(Отказ, Замещение)
	
	//<-Уманский Виктор 19.02.2016
	Если ЭтотОбъект.Количество() > 0 Тогда
		Попытка	
			ТабДок = Новый ТабличныйДокумент;
			ИмяФайла = "\\7flowers.local\company\Transfer\Transfer rules in UT11 log\log.mxl";
			ТабДок.Прочитать(ИмяФайла);  
			Макет = РегистрыСведений.ПравилаДляОбменаДанными.ПолучитьМакет("ЛогИзменений_7ЦВ");
			ОбластьМакета = Макет.ПолучитьОбласть("ПриЗаписи");
			ОбластьМакета.Параметры.ВремяСобытия = ТекущаяДата();
			ОбластьМакета.Параметры.Пользователь = ПараметрыСеанса.ТекущийПользователь;
			ОбластьМакета.Параметры.Заполнить(ЭтотОбъект[0]);
			ТабДок.Вывести(ОбластьМакета);
			ТабДок.Записать(ИмяФайла);
		Исключение
			ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Ошибка при записи лога изменения правил обмена: " + ОписаниеОшибки());
		КонецПопытки;
	КонецЕсли;
	//->Уманский Виктор 19.02.2016
	
КонецПроцедуры

Процедура ПередЗаписью(Отказ, Замещение)
	
	//<-Уманский Виктор 19.02.2016
	Если ЭтотОбъект.Количество() = 0 Тогда
		Попытка
			ТабДок = Новый ТабличныйДокумент;
			ИмяФайла = "\\7flowers.local\company\Transfer\Transfer rules in UT11 log\log.mxl";
			ТабДок.Прочитать(ИмяФайла);  
			Макет = РегистрыСведений.ПравилаДляОбменаДанными.ПолучитьМакет("ЛогИзменений_7ЦВ");
			ОбластьМакета = Макет.ПолучитьОбласть("ПередЗаписью");
			ОбластьМакета.Параметры.ВремяСобытия = ТекущаяДата();
			ОбластьМакета.Параметры.Пользователь = ПараметрыСеанса.ТекущийПользователь;
			
			Запрос = Новый Запрос;
			Запрос.Текст = 
				"ВЫБРАТЬ ПЕРВЫЕ 1
				|	ПравилаДляОбменаДанными.ИмяПланаОбмена,
				|	ПравилаДляОбменаДанными.ВидПравил,
				|	ПравилаДляОбменаДанными.ИмяМакетаПравил,
				|	ПравилаДляОбменаДанными.ИмяМакетаПравилКорреспондента,
				|	ПравилаДляОбменаДанными.ИмяПланаОбменаИзПравил,
				|	ПравилаДляОбменаДанными.ИмяФайлаОбработкиДляОтладкиВыгрузки,
				|	ПравилаДляОбменаДанными.ИмяФайлаОбработкиДляОтладкиЗагрузки,
				|	ПравилаДляОбменаДанными.ИмяФайлаПравил,
				|	ПравилаДляОбменаДанными.ИмяФайлаПротоколаОбмена,
				|	ПравилаДляОбменаДанными.ИнформацияОПравилах,
				|	ПравилаДляОбменаДанными.ИсточникПравил,
				|	ПравилаДляОбменаДанными.НеОстанавливатьПоОшибке,
				|	ПравилаДляОбменаДанными.ПравилаXML,
				|	ПравилаДляОбменаДанными.ПравилаXMLКорреспондента,
				|	ПравилаДляОбменаДанными.ПравилаЗачитанные,
				|	ПравилаДляОбменаДанными.ПравилаЗачитанныеКорреспондента,
				|	ПравилаДляОбменаДанными.РежимОтладки,
				|	ПравилаДляОбменаДанными.РежимОтладкиВыгрузки,
				|	ПравилаДляОбменаДанными.РежимОтладкиЗагрузки,
				|	ПравилаДляОбменаДанными.РежимПротоколированияОбменаДанными,
				|	ПравилаДляОбменаДанными.ИспользоватьФильтрВыборочнойРегистрацииОбъектов,
				|	ПравилаДляОбменаДанными.ПравилаЗагружены
				|ИЗ
				|	РегистрСведений.ПравилаДляОбменаДанными КАК ПравилаДляОбменаДанными
				|ГДЕ
				|	ПравилаДляОбменаДанными.ИмяПланаОбмена = &ИмяПланаОбмена
				|	И ПравилаДляОбменаДанными.ВидПравил = &ВидПравил";
			
			Запрос.УстановитьПараметр("ВидПравил", ЭтотОбъект.Отбор.ВидПравил.Значение);
			Запрос.УстановитьПараметр("ИмяПланаОбмена", ЭтотОбъект.Отбор.ИмяПланаОбмена.Значение);
		
			Выборка = Запрос.Выполнить().Выбрать();
			Если Выборка.Следующий() Тогда
				ОбластьМакета.Параметры.Заполнить(Выборка);
				ТабДок.Вывести(ОбластьМакета);
				ТабДок.Записать(ИмяФайла);	
			КонецЕсли;
		Исключение
			ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Ошибка при записи лога изменения правил обмена: " + ОписаниеОшибки());
		КонецПопытки;
	КонецЕсли;
	//->Уманский Виктор 19.02.2016
		
КонецПроцедуры