1С: Событие «ПриКопировании» в регистре сведений

А вот не обрабатывает 1С такое событие в регистре сведений, поэтому одним из решений будет обработка параметров формы записи при событии «При создании на сервере». Например так:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	если ЗначениеЗаполнено(Параметры.ЗначениеКопирования.uuid) = истина тогда
		этотобъект.запись.uuid=Новый УникальныйИдентификатор();
	конецесли;	
КонецПроцедуры

Т.е. если это «копирование», то значение заполнено «старыми» данными и их можно перезаписать.

1С: Сохранение логов изменений регистра сведений

Задача: вести журнал логов изменения записей регистра сведений

Решение:

Штатного механизма как в Документа или Справочниках нет (ну собственно и правильно, т.к. запись сейчас есть, через минуту её нет). Потому разработаем собственный механизм. Общий алгоритм будет следующий:

  • при открытии форма регистра — запоминаем структуру и значения данных записи регистра
  • при записи регистра из формы — сравниваем новые данные с охраненными, и при выявлении изменений, записываем оные в отдельный регистр «изменений».

При открытии формы регистра, получаем его структуру из метаданных, и запоминаем значения:

&НаКлиенте
Перем ДанныеФормыДоИзменения;

&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
	СохранитьИзмененияЕслиТаковыеЕсть(ДанныеФормыДоИзменения)
КонецПроцедуры

&НаСервере
Функция ПолучитьДанныеДоОбновления()
	ДанныеПоРегистру=Метаданные.РегистрыСведений.СГ_ГР_ТранспортныйФайлПриборыУчета;
	ДоступныеПоля=Новый Структура();
	для каждого стр из ДанныеПоРегистру.Измерения цикл
		ДоступныеПоля.Вставить(стр.имя,неопределено);
	конеццикла;	
	для каждого стр из ДанныеПоРегистру.Ресурсы цикл
		ДоступныеПоля.Вставить(стр.имя,неопределено);
	конеццикла;	
	
	Данные=Новый Структура();
	для каждого стр из ДоступныеПоля цикл
		 ключ=стр.Ключ;
		 значение=ЭтотОбъект.Запись[Стр.Ключ];
		 Данные.Вставить(ключ,Строка(значение));
	 конеццикла;		
	 возврат Данные;
КонецФункции

При сохранении данных из формы регистра:

НаСервере
Функция СохранитьИзмененияЕслиТаковыеЕсть(ДанныеФормыДоИзменения)
	для каждого стр из ДанныеФормыДоИзменения цикл
		если стр.Значение<>Строка(ЭтотОбъект.Запись[Стр.Ключ]) тогда
			СК_ГР_РаботаСТранспортнымиФайлами.СделатьЗаписьОбИзменении(
				ЭтотОбъект.Запись["dt"],
				перечисления.СК_ГР_РегистрДляОбработки.Приборы,
				Строка(Стр.Ключ),
				Строка(стр.Значение),
				Строка(ЭтотОбъект.Запись[Стр.Ключ])
			);
		конецесли;	
	конеццикла;
КонецФункции	

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	ДанныеФормыДоИзменения=ПолучитьДанныеДоОбновления();
КонецПроцедуры

В сам регистр «изменений», пишем так:

// Запись в регистр данных об изменении какого то поля в регистрах
// Вход:
//		Период - Дата загрузки из регистра
//		Изменяемый регистр - перечисления.СК_ГР_РегистрДляОбработки
//		Поле - изменяемое поле (строка)
//		Было - значение которое было (строка)
//		Стало - значение которое стало (строка)
Функция СделатьЗаписьОбИзменении(Период,Регистр,Поле,Было,Стало) экспорт
		
	МенеджерЗаписи = РегистрыСведений.СК_ГР_ИсторияИзменений.СоздатьМенеджерЗаписи(); 
		МенеджерЗаписи.Период=ТекущаяДата();
		МенеджерЗаписи.ПериодЗагрузки = Период; 
		МенеджерЗаписи.ИзменяемыйРегистр = Регистр; 
		МенеджерЗаписи.ИзменяемоеПоле = Поле; 
		МенеджерЗаписи.Было = Было; 
		МенеджерЗаписи.Стало = Стало; 
		МенеджерЗаписи.Исполнитель = Пользователи.ТекущийПользователь(); 
	МенеджерЗаписи.Записать();    			
КонецФункции	

Добавление записи в регистр сведений

Есть такой регистр сведений — Значения свойств обьектов. Спектр его применения — ну например хранения каких-то значений внешних отчетов и обработок. В моем случае, я буду хранить свойстово «1» в том случае если некое действие уже совершено над документом внешней обработкой, т.е. проверка «чтоб не два раза». Вот наглядный кусок кода: