Доработка механизма версионирования объектов

09.05.15

База данных - Инструменты администратора БД

Пара небольших доработок:
1. Исправлена ошибка построения отчета по версиям объектов для случая, когда реквизиты имеют составной тип.
2. Доработан механизм сохранения версий - при записи неизмененных объектов новые версии не создаются.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Исправление
.rar 138,36Kb
11
11 Скачать (1 SM) Купить за 1 850 руб.

Ошибка построения отчета по версиям объектов присутствует в "Библиотеке стандартных подсистем" и, как следствие, в типовых конфигурациях.  В этом можно убедиться на конфигурации Бухгалтерия предприятия, редакция 3.0 (3.0.39.56), если включить версионирование документа "СчетФактураВыданный".

На Рис.1 отображен результат ошибочного построения. Этот же отчет после исправления ошибки показан на Рис.2.

В архивном файле публикации:
  - файл ""Общий модуль ВерсионированиеОбъектов_ Модуль.txt" " содержит исправленную функцию  ВерсионированиеОбъектов.РазборПредставленияОбъектаXML(), которая участвует в построении корректного отчета о версии объекта.
  - файл ""Общий модуль ВерсионированиеОбъектовСобытия_ Модуль.txt" " включает доработанный механизм сохранения версий объектов, неизмененные версии объектов не создаются.

Изменения в указанных двух файлах независимы и могут применяться раздельно. Все изменения включены в комментирующие скобки // +AZ , // -AZ


См. также

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя. Решение в Реестре отечественного ПО

8400 руб.

20.08.2024    14720    108    46    

108

Инструменты администратора БД Инструментарий разработчика Роли и права Программист Платформа 1С v8.3 1C:Бухгалтерия Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

15000 руб.

10.11.2023    11971    45    33    

67

Инструменты администратора БД Роли и права Системный администратор Программист Пользователь 8.3.14 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Документооборот 1С:Зарплата и кадры государственного учреждения 3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Роли… Вы тратите много времени и сил на подбор ролей среди около 2400 в ERP или 1500 в Рознице 2, пытаясь понять какими правами они обладают? Вы все время смотрите права в конфигураторе или отчетах чтоб создать нормальные профили доступа? Вы хотите наглядно видеть какие права дает профиль и редактировать все в простом виде? А может хотите просто указать подсистему и дать права на просмотр и добавление на объекты и не лезть в дебри прав и чтоб обработка сама подобрала нужные роли? Все это теперь стало возможно! Обновление от 18.09.2024, версия 1.2

18000 руб.

06.12.2023    10772    47    8    

78

SALE! %

Инструментарий разработчика Инструменты администратора БД Системный администратор Программист Платформа 1С v8.3 Управляемые формы 1C:Бухгалтерия Россия Платные (руб)

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

4800 3840 руб.

14.01.2013    191391    1153    0    

920

Закрытие периода Инструменты администратора БД Корректировка данных Бухгалтер Пользователь Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Расширение «Оперативное проведение» в 4 раза уменьшает время проведения документов и закрытия месяца. Является комплексным решением проблем 62 и 60 счетов. Оптимизирует проведение при включенной функциональной опции «Раздельный учет НДС». Используется в более 10 организациях уже 2 года. Совместимо с конфигурацией Бухгалтерия 3.0 (+КОРП).

14400 руб.

29.04.2020    33874    108    152    

75

Инструменты администратора БД Системный администратор Программист Платформа 1С v8.3 1C:Бухгалтерия Платные (руб)

Брандмауэр для сервера 1С включает в себя управление возможностью начала и возобновления сеансов пользователей по различным условиям, ограничение общего числа возможных сеансов для работы с информационной базой, резервирование возможности работы с информационной базой определенных польззователей, запрет запуска нескольких сеансов для пользователя, журнализация событий начала (возобновления) и завершения (гибернации) сеансов, ведение списка активных сеансов для информационных баз кластера серверов

3600 руб.

06.02.2017    32684    145    18    

51

Архивирование (backup) Инструменты администратора БД Платформа 1С v8.3 Управляемые формы 1C:Бухгалтерия 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Управление торговлей 11 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Данная разработка позволит решить вопрос с резервным копированием Ваших баз в автоматическом режиме, расположенных на сервере 1С. Система умеет ставить блокировки на вход, блокировать фоновые задания, принудительно отключать сеансы пользователей. И все это система делает в автоматически при создании бэкапа (или через команду). Выгрузка происходит в родной формат 1С - .dt. Так же система умеет архивировать данные выгрузки с установкой пароля. Умеет менять расширение файла zip или dt на любое указанное вами, что позволит сохранить выгрузки от шифровальщика. Может удалять старые копии выгрузок, оставляя указанное количество резервных копий, начиная с самой поздней. Только для WINDOWS!

6000 руб.

06.11.2012    73784    629    45    

88

Инструменты администратора БД Пользователь Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Платные (руб)

Многие сталкиваются с проблемой когда изображения, находящиеся в базе разные по объему и размерам. Менеджеры могут добавить файлы в очень высоком разрешении, объемом свыше 20 Мегабайт. База данных становится слишком большой, выгрузка на сайт идёт медленно и требуется много место на хостинге. Как сжать картинки и уменьшить размер базы 1С? Это можно сделать с помощью данной обработки. Существует возможность выбрать различные варианты для того чтобы уменьшить картинки: в разы, в процентах от первоначального объема, а также сделать картинки одинаковой ширины. В результате размер базы 1С значительно сократится (в зависимости от количества и размера картинок), а изображения станут небольшого объема, равными по ширине, почти без потери качества. Работает на управляемых формах для УТ 11, КА, ERP.

3000 руб.

21.07.2022    10183    10    4    

18
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. ojiojiowka 10.05.15 13:43 Сейчас в теме
Вся суть инфостарта: народ жмется даже кусочек кода выложить просто так.
2. webester 26 10.05.15 14:12 Сейчас в теме
(1)Это не вся суть, :) но такое иногда имеет место быть.
3. hobi 616 10.05.15 14:42 Сейчас в теме
(1) ojiojiowka, кусочек не жалко, но он большой и их два :)
Кусочек общего модуля ВерсионированиеОбъектов с исправлением ошибки в функции РазборПредставленияОбъектаXML():

// +AZ 
Функция ПроверитьСоставныеТипы(ЧтениеXML,МетаданныеОбъекта,ИмяРеквизита,ЗначенияРеквизитов,ОписаниеРеквизита,УровеньЧтения,НовоеЗР,ВызовИзТЧ,ЗначениеПоля)
	
	ОписаниеРеквизита = МетаданныеОбъекта.Реквизиты.Найти(ИмяРеквизита);
	ЗначениеРеквизитаДобавлено = Ложь;
	Если ЧтениеXML.КоличествоАтрибутов() > 0 Тогда
		ЧтениеXML.Прочитать();  // Текст
		ТипЗР = Неопределено;
		ЗнРеквизита = Неопределено;
		//НовоеЗР = ЗначенияРеквизитов.Добавить();
		//НовоеЗР.НаименованиеРеквизита = ИмяРеквизита;
		// Переберем возможные типы реквизита и попытаемся среди них найти реквизит с правильной ссылкой
		Для каждого ОдинИзТипов Из ОписаниеРеквизита.Тип.Типы() Цикл
			ТипЗР = ОдинИзТипов;
			Попытка
				УИД = Новый УникальныйИдентификатор(ЧтениеXML.Значение);
				// если это не УИД, будет исключение
				ЗнРеквизита = XMLЗначение(ТипЗР, ЧтениеXML.Значение);
				Если  ЗнРеквизита.ПолучитьОбъект() <> Неопределено Тогда
					Прервать; // Это нужный тип из составного типа
				КонецЕсли;	  
			Исключение
				// Это не УИД
				ЗнРеквизита = ЧтениеXML.Значение;
				Прервать;
			КонецПопытки;
		КонецЦикла;
		Если ВызовИзТЧ Тогда
			ЗначениеПоля = ЗнРеквизита;
		Иначе	
			НовоеЗР = ЗначенияРеквизитов.Добавить();
			НовоеЗР.НаименованиеРеквизита = ИмяРеквизита;
			НовоеЗР.ЗначениеРеквизита = ЗнРеквизита;
			НовоеЗР.Тип = ТипЗР;
		КонецЕсли;	
		ЗначениеРеквизитаДобавлено = Истина;
		Если ЧтениеXML.Имя <> "Row" И ЧтениеXML.Имя <> "" Тогда
			УровеньЧтения = УровеньЧтения - 1;
		КонецЕсли;  
	КонецЕсли;
	Возврат ЗначениеРеквизитаДобавлено;

КонецФункции
// -AZ 

Функция РазборПредставленияОбъектаXML(ДвоичныеДанные, Ссылка) Экспорт
	
	// Содержит имя метаданного измененного объекта.
	Перем ИмяОбъекта;
	
	// Содержит положение маркера в дереве XML.
	// Требуется для идентификации текущего элемента.
	Перем УровеньЧтения;
	
	// Содержат значения реквизитов справочников / документов.
	ЗначенияРеквизитов = Новый ТаблицаЗначений;
	
	ЗначенияРеквизитов.Колонки.Добавить("НаименованиеРеквизита");
	ЗначенияРеквизитов.Колонки.Добавить("ЗначениеРеквизита");
	ЗначенияРеквизитов.Колонки.Добавить("ТипРеквизита");
	ЗначенияРеквизитов.Колонки.Добавить("Тип");
	
	ТабличныеЧасти = Новый Соответствие;
	
	ЧтениеXML = Новый ЧтениеFastInfoSet;
	
	ЧтениеXML.УстановитьДвоичныеДанные(ДвоичныеДанные);
	
	// Уровень позиции маркера в иерархии XML:
	// 0 - уровень не задан
	// 1 - первый элемент (имя объекта)
	// 2 - описание реквизита или табличной части
	// 3 - описание строки табличной части
	// 4 - описание поля строки табличной части.
	УровеньЧтения = 0;
	
	МетаданныеОбъекта = Ссылка.Метаданные();
	ТабличныеЧастиМТД = МетаданныеОбъекта.ТабличныеЧасти;
	
	ТипЗначения = "";
	
	ТипЗначенияПоляТЧ = "";
	
	// Основной цикл разбора по XML.
	Пока ЧтениеXML.Прочитать() Цикл
		
		Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
			УровеньЧтения = УровеньЧтения + 1;
			Если УровеньЧтения = 1 Тогда // Указатель на первом элементе XML - корень XML.
				ИмяОбъекта = ЧтениеXML.Имя;
			ИначеЕсли УровеньЧтения = 2 Тогда // Указатель на втором уровне - это реквизит или имя табличной части.
				ИмяРеквизита = ЧтениеXML.Имя;
				ОписаниеРеквизита = Неопределено;
				НовоеЗР = Неопределено;
				ЗначениеПоля = Неопределено;
				ЗначениеРеквизитаДобавлено = ПроверитьСоставныеТипы(ЧтениеXML,МетаданныеОбъекта,ИмяРеквизита,ЗначенияРеквизитов,ОписаниеРеквизита,УровеньЧтения,НовоеЗР,Ложь,ЗначениеПоля);
				
				// Любой реквизит "может оказаться" табличной частью, поэтому на всякий случай его запомним.
				ИмяТабличнойЧасти = ИмяРеквизита;
				Если МетаданныеОбъекта.ТабличныеЧасти.Найти(ИмяТабличнойЧасти) <> Неопределено И ТабличныеЧасти[ИмяТабличнойЧасти] = Неопределено Тогда
					ТабличныеЧасти.Вставить(ИмяТабличнойЧасти, Новый ТаблицаЗначений);
				КонецЕсли;
				
				Если Не ЗначениеРеквизитаДобавлено Тогда
					НовоеЗР = ЗначенияРеквизитов.Добавить();
					НовоеЗР.НаименованиеРеквизита = ИмяРеквизита;
				КонецЕсли;
				
// +AZ 
				//Если ЧтениеXML.КоличествоАтрибутов() > 0 Тогда
				//	Пока ЧтениеXML.ПрочитатьАтрибут() Цикл
				//		Если ЧтениеXML.ТипУзла = ТипУзлаXML.Атрибут 
				//		   И ЧтениеXML.Имя = "xsi:type" Тогда
				//			НовоеЗР.ТипРеквизита = ЧтениеXML.Значение;
				//			
				//			XMLТип = ЧтениеXML.Значение;
				//			
				//			Если Лев(XMLТип, 3) = "xs:" Тогда
				//				НовоеЗР.Тип = ИзXMLТипа(Новый ТипДанныхXML(Прав(XMLТип, СтрДлина(XMLТип)-3), "http://www.w3.org/2001/XMLSchema"));
				//			Иначе
				//				НовоеЗР.Тип = ИзXMLТипа(Новый ТипДанныхXML(XMLТип, ""));
				//			КонецЕсли;
				//			
				//		КонецЕсли;
				//	КонецЦикла;
				//КонецЕсли;
// -AZ 
				
				Если Не ЗначениеЗаполнено(НовоеЗР.Тип) Тогда
// +AZ ОписаниеРеквизита получены значение выше по коду 					
//                  ОписаниеРеквизита = МетаданныеОбъекта.Реквизиты.Найти(НовоеЗР.НаименованиеРеквизита);
// -AZ					
					Если ОписаниеРеквизита = Неопределено Тогда
						
						НаименованиеРеквизита = ПолучитьПредставлениеРеквизитаНаЯзыке(НовоеЗР.НаименованиеРеквизита);
						
						Если ОбщегоНазначения.ЭтоСтандартныйРеквизит(МетаданныеОбъекта.СтандартныеРеквизиты, НаименованиеРеквизита) Тогда
							
							ОписаниеРеквизита = МетаданныеОбъекта.СтандартныеРеквизиты[НаименованиеРеквизита];
							
						КонецЕсли;
						
					КонецЕсли;
					
					Если ОписаниеРеквизита <> Неопределено
						И ОписаниеРеквизита.Тип.Типы().Количество() = 1 Тогда
						НовоеЗР.Тип = ОписаниеРеквизита.Тип.Типы()[0];
					КонецЕсли;
					
				КонецЕсли;
				
			ИначеЕсли (УровеньЧтения = 3) И (ЧтениеXML.Имя = "Row") Тогда // Указатель на поле табличной части.
				Если ТабличныеЧасти[ИмяТабличнойЧасти] = Неопределено Тогда
					ТабличныеЧасти.Вставить(ИмяТабличнойЧасти, Новый ТаблицаЗначений);
				КонецЕсли;
				
				ТабличныеЧасти[ИмяТабличнойЧасти].Добавить();
			ИначеЕсли УровеньЧтения = 4 Тогда // Указатель на поле табличной части.
				
				ТипЗначенияПоляТЧ = "";
				
				ИмяПоляТЧ = ЧтениеXML.Имя; // 
// +AZ 
				ОписаниеРеквизита = Неопределено;
				НовоеЗР = Неопределено;
				ЗначениеПоля = Неопределено;
				ЗначениеРеквизитаДобавлено = ПроверитьСоставныеТипы(ЧтениеXML,МетаданныеОбъекта,ИмяПоляТЧ,ЗначенияРеквизитов,ОписаниеРеквизита,УровеньЧтения,НовоеЗР,Истина,ЗначениеПоля);
// -AZ 
				Таблица   = ТабличныеЧасти[ИмяТабличнойЧасти];
				Если Таблица.Колонки.Найти(ИмяПоляТЧ)= Неопределено Тогда
					Таблица.Колонки.Добавить(ИмяПоляТЧ);
				КонецЕсли;
				
// +AZ 
				Если ЗначениеРеквизитаДобавлено Тогда
				    ПоследняяСтрока = ТабличныеЧасти[ИмяТабличнойЧасти].Получить(ТабличныеЧасти[ИмяТабличнойЧасти].Количество()-1);
				    ПоследняяСтрока[ИмяПоляТЧ] = ЗначениеПоля;
				КонецЕсли;	
				//Если ЧтениеXML.КоличествоАтрибутов() > 0 Тогда
				//	Пока ЧтениеXML.ПрочитатьАтрибут() Цикл
				//		Если ЧтениеXML.ТипУзла = ТипУзлаXML.Атрибут 
				//		   И ЧтениеXML.Имя = "xsi:type" Тогда
				//			XMLТип = ЧтениеXML.Значение;
				//			
				//			Если Лев(XMLТип, 3) = "xs:" Тогда
				//				ТипЗначенияПоляТЧ = ИзXMLТипа(Новый ТипДанныхXML(Прав(XMLТип, СтрДлина(XMLТип)-3), "http://www.w3.org/2001/XMLSchema"));
				//			Иначе
				//				ТипЗначенияПоляТЧ = ИзXMLТипа(Новый ТипДанныхXML(XMLТип, ""));
				//			КонецЕсли;
				//			
				//		КонецЕсли;
				//	КонецЦикла;
				//КонецЕсли;
// -AZ 
				
			КонецЕсли;
		ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда
			УровеньЧтения = УровеньЧтения - 1;
			ТипЗначения = "";
		ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.Текст Тогда
			Если (УровеньЧтения = 2) Тогда // значение реквизита
				Попытка
					НовоеЗР.ЗначениеРеквизита = ?(ЗначениеЗаполнено(НовоеЗР.Тип), XMLЗначение(НовоеЗР.Тип, ЧтениеXML.Значение), ЧтениеXML.Значение);
				Исключение
					НовоеЗР.ЗначениеРеквизита = ЧтениеXML.Значение;
				КонецПопытки;
			ИначеЕсли (УровеньЧтения = 4) Тогда // значение реквизита
				ПоследняяСтрока = ТабличныеЧасти[ИмяТабличнойЧасти].Получить(ТабличныеЧасти[ИмяТабличнойЧасти].Количество()-1);
				
				Если ТипЗначенияПоляТЧ = "" Тогда
					ОписаниеРТЧ = Неопределено;
					Если ТабличныеЧастиМТД.Найти(ИмяТабличнойЧасти) <> Неопределено Тогда
						ОписаниеРТЧ = ТабличныеЧастиМТД[ИмяТабличнойЧасти].Реквизиты.Найти(ИмяПоляТЧ);
						
						Если ОписаниеРТЧ <> Неопределено
						   И ОписаниеРТЧ.Тип.Типы().Количество() = 1 Тогда
							ТипЗначенияПоляТЧ = ОписаниеРТЧ.Тип.Типы()[0];
						КонецЕсли;
					КонецЕсли;					
				КонецЕсли;
				
				ПоследняяСтрока[ИмяПоляТЧ] = ?(ЗначениеЗаполнено(ТипЗначенияПоляТЧ), XMLЗначение(ТипЗначенияПоляТЧ, ЧтениеXML.Значение), ЧтениеXML.Значение);
				
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;
	
	// Й-й этап: из списка реквизитов исключаем табличные части.
	Для Каждого Элемент Из ТабличныеЧасти Цикл
		ЗначенияРеквизитов.Удалить(ЗначенияРеквизитов.Найти(Элемент.Ключ));
	КонецЦикла;
	// ТабличныеЧастиМТД
	Для Каждого ЭлементСоответствия Из ТабличныеЧасти Цикл
		Таблица = ЭлементСоответствия.Значение;
		Если Таблица.Колонки.Количество() = 0 Тогда
			ТаблицаМТД = ТабличныеЧастиМТД.Найти(ЭлементСоответствия.Ключ);
			Если ТаблицаМТД <> Неопределено Тогда
				Для Каждого ОписаниеКолонки Из ТаблицаМТД.Реквизиты Цикл
					Если Таблица.Колонки.Найти(ОписаниеКолонки.Имя)= Неопределено Тогда
						Таблица.Колонки.Добавить(ОписаниеКолонки.Имя);
					КонецЕсли;
				КонецЦикла;
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;
	
	Результат = Новый Структура;
	Результат.Вставить("Реквизиты", ЗначенияРеквизитов);
	Результат.Вставить("ТабличныеЧасти", ТабличныеЧасти);
	
	Возврат Результат;
	
КонецФункции
Показать
5. AlexO 136 12.05.15 09:11 Сейчас в теме
(3) на баг-треккер 1С отправили "привет"?
6. hobi 616 12.05.15 12:30 Сейчас в теме
(5) AlexO, не отправил.
О проблеме на Инфостарте рассказал, здесь живое обсуждение :)
7. AlexO 136 12.05.15 12:46 Сейчас в теме
(6) можете и не отправлять ))
Все равно получите дежурное "мы приняли к сведению". Разве что так, моральное удовлетворение...
4. dgolovanov 12.05.15 09:01 Сейчас в теме
(1) ojiojiowka, что-то твоих публикаций бесплатных не видно. Жлоб, или показать нечего?
8. Pawlick 10 20.10.15 04:06 Сейчас в теме
У меня КА 1.1, платформа 8.3.5.1517.

Функция НеСовпадаетСПредыдущейВерсией хоть убей всегда возвращает ИСТИНА, потому как у меня всегда
Источник = Источник.Ссылка = Источник.Ссылка .ПолучитьОбъект(), даже если объект был изменен.

Попытка версионирования происходит ПриЗаписи объекта (может в БСП по другому?).
04.00 - понять уже ничего не могу...

Получаю XML строкой для заведомо неизмененного объекта - всё равно:
Строка1 <> Строка2,
хотя визуально файлы одинаковые. Может потому что получены из разных временных файлов?...

Короче закончилось вот чем:

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