(7) Посмотри как это работает в БСП ВерсионированиеОбъектов.
Нам наоборот пришлось уйти от стандартной схемы, т.к. в документах есть общий реквизит "ДатаОперации" и другие, незначащие - и у нас писалось даже и при перезаписи объекта.
Функция ВерсияОтличаетсяОтРанееЗаписанной(Объект)
	
	ТекстЗапроса = 
	"ВЫБРАТЬ ПЕРВЫЕ 1
	|	ВерсииОбъектов.КонтрольнаяСумма
	|ИЗ
	|	РегистрСведений.ВерсииОбъектов КАК ВерсииОбъектов
	|ГДЕ
	|	ВерсииОбъектов.Объект = &Объект
	|
	|УПОРЯДОЧИТЬ ПО
	|	ВерсииОбъектов.НомерВерсии УБЫВ";
	
	Запрос = Новый Запрос(ТекстЗапроса);
	Запрос.УстановитьПараметр("Объект", Объект.Ссылка);
	Выборка = Запрос.Выполнить().Выбрать();
	Если Выборка.Следующий() И Не ПустаяСтрока(Выборка.КонтрольнаяСумма) Тогда
		Возврат Выборка.КонтрольнаяСумма <> КонтрольнаяСумма(ДанныеДляХранения(Объект));
	КонецЕсли;
	
	Возврат Объект.ЭтоНовый() Или КонтрольнаяСумма(ДанныеДляХранения(Объект)) <> КонтрольнаяСумма(ДанныеДляХранения(Объект.Ссылка.ПолучитьОбъект()));
	
КонецФункции
Функция КонтрольнаяСумма(Данные) Экспорт
	ХешированиеДанных = Новый ХешированиеДанных(ХешФункция.MD5);
	
	Если ТипЗнч(Данные) = Тип("Структура") Тогда
		ХешированиеДанных.Добавить(Данные.Объект);
		Если Данные.Свойство("ДополнительныеРеквизиты") Тогда
			ХешированиеДанных.Добавить(ОбщегоНазначения.ЗначениеВСтрокуXML(Данные.ДополнительныеРеквизиты));
		КонецЕсли;
	Иначе
		ХешированиеДанных.Добавить(Данные);
	КонецЕсли;
	
	Возврат СтрЗаменить(ХешированиеДанных.ХешСумма, " ", "");
КонецФункции
(8) Да с чего тормоза. Версионирование во всех типовых работает и норм.