Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // @name: Контроль изменений
- // @ver: в0м1
- // @author: adam.martin
- Перем Путь, ПутьКОтчету, ПутьКФайлу;
- Перем ДатаТекущая;
- Функция МД5(файл)
- ScrCtrl = СоздатьОбъект("MSScriptControl.ScriptControl");
- ScrCtrl.Language = "vbscript";
- ScrCtrl.AddCode("
- |Function Hash()
- |Dim crypt: Set crypt = CreateObject(""CAPICOM.HashedData"")
- |crypt.Algorithm = CAPICOM_HASH_ALGORITHM_SHA_256
- |Dim stream: Set stream = CreateObject(""ADODB.Stream"")
- |stream.Type = 1 ' adTypeBinary
- |stream.Open
- |stream.LoadFromFile("""+файл+""")
- |Do Until stream.EOS : crypt.Hash stream.Read() : Loop
- |Hash = crypt.Value
- |End Function
- |");
- рез = ScrCtrl.Run("Hash");
- Возврат рез;
- КонецФункции
- //======================================================================
- Процедура ЗадатьПути(Тип, Вид = "")
- ПутьКОтчету = Путь + Тип + "\";
- Если ФС.СуществуетФайл(ПутьКОтчету) = 0 Тогда
- ФС.СоздатьКаталог(ПутьКОтчету);
- КонецЕсли;
- Если ПустоеЗначение(Вид) = 0 Тогда
- ПутьКОтчету = ПутьКОтчету + Вид + "\";
- Если ФС.СуществуетФайл(ПутьКОтчету) = 0 Тогда
- ФС.СоздатьКаталог(ПутьКОтчету);
- КонецЕсли;
- КонецЕсли;
- КонецПроцедуры // ЗадатьПути
- //======================================================================
- Процедура ЗадатьПутьВерсии()
- ПутьКФайлу = ПутьКОтчету + Строка(ДатаТекущая) + "\";
- Если ФС.СуществуетФайл(ПутьКФайлу) = 0 Тогда
- ФС.СоздатьКаталог(ПутьКФайлу);
- КонецЕсли;
- КонецПроцедуры // ЗадатьПутьВерсии
- Процедура Сформировать()
- Путь = "\\srv-2\1cBases\КонтрольИзменений\";
- Хэш1 = МД5( Путь + "MDFiles\1Cv7_old.MD" );
- Хэш2 = МД5( Путь + "MDFiles\1Cv7_neo.MD" );
- Если ( Строка( Хэш1 ) = Строка( Хэш2 ) ) Тогда
- Сообщить( "Конфигурации идентичны" );
- Возврат;
- КонецЕсли;
- ДатаТекущая = '';
- ДатаПредыдущая = '';
- МДПредыдущая = СоздатьОбъект( "ActiveMD.MDFile" );
- Сообщить( "" + МДПредыдущая.Открыть( Путь + "MDFiles\1Cv7_old.MD" ) );
- ФС.АтрибутыФайла( Путь + "MDFiles\1Cv7_old.MD",,,,,ДатаПредыдущая );
- ДатаПредыдущая = Лев( ДатаПредыдущая, 10 );
- Мета = СоздатьОбъект( "СписокЗначений" );
- Мета.ДобавитьЗначение( МДПредыдущая.ГлобальныйМодуль.Текст, "ГлобальныйМодуль" );
- // Цикл по документах
- Для Индекс = 1 По МДПредыдущая.Документ() Цикл
- ДокТекущий = МДПредыдущая.Документ(Индекс);
- Мета.ДобавитьЗначение(ДокТекущий.Форма.Модуль.Текст, ДокТекущий.Identifier + "_МодульФормы");
- Мета.ДобавитьЗначение(ДокТекущий.Модуль.Текст, ДокТекущий.Identifier + "_МодульПроведения");
- КонецЦикла;
- // Цикл по справочникам
- Для Индекс = 1 По МДПредыдущая.Справочник() цикл
- Спр = МДПредыдущая.Справочник(Индекс);
- Мета.ДобавитьЗначение(Спр.ФормаГруппы.Модуль.Текст, Спр.Identifier + "_МодульГруппы");
- Мета.ДобавитьЗначение(Спр.ФормаЭлемента.Модуль.Текст, Спр.Identifier + "_МодульЭлемента");
- Для y=1 по Спр.ФормаСписка() цикл
- Мета.ДобавитьЗначение(Спр.ФормаСписка(y).Модуль.Текст, Спр.Identifier+"_ФормаСписка_"+Спр.FormList(y).Identifier);
- КонецЦикла;
- КонецЦикла;
- // Цикл по отчетам
- Для Индекс = 1 По МДПредыдущая.Отчет() Цикл
- Отчет = МДПредыдущая.Отчет(Индекс);
- Мета.ДобавитьЗначение(Отчет.Модуль.Текст, Отчет.Identifier + "_Модуль");
- Мета.ДобавитьЗначение(Отчет.Диалог.Текст, Отчет.Identifier + "_Диалог");
- КонецЦикла;
- // Цикл по обработкам
- Для Индекс = 1 По МДПредыдущая.Обработка() Цикл
- Обработка = МДПредыдущая.Обработка(Индекс);
- Мета.ДобавитьЗначение(Обработка.Модуль.Текст, Обработка.Identifier + "_Модуль");
- Мета.ДобавитьЗначение(Обработка.Диалог.Текст, Обработка.Identifier + "_Диалог");
- КонецЦикла;
- // Цикл по видам расчетов
- Для Индекс = 1 По МДПредыдущая.ВидРасчета() Цикл
- тВидРасчета = МДПредыдущая.ВидРасчета(Индекс);
- Мета.ДобавитьЗначение(тВидРасчета.Модуль.Текст, тВидРасчета.Identifier + "_Модуль");
- КонецЦикла;
- Сообщить(""+МДПредыдущая.Закрыть(0));
- // * * *
- МДТекущая = СоздатьОбъект("ActiveMD.MDFile");
- Сообщить("" + МДТекущая.Открыть("z:\КонтрольИзменений\MDFiles\1Cv7_neo.md"));
- ФС.АтрибутыФайла("z:\КонтрольИзменений\MDFiles\1Cv7_neo.md",,,,,ДатаТекущая);
- ДатаТекущая = ЛЕв(ДатаТекущая,10);
- ВФайл = СоздатьОбъект("Текст");
- Текст = Мета.Получить("ГлобальныйМодуль");
- Если Текст <> МДТекущая.ГлобальныйМодуль.Текст Тогда
- ЗадатьПути("ГлобальныйМодуль");
- ЗадатьПутьВерсии();
- ВФайл.Очистить();
- ВФайл.ДобавитьСтроку(МДТекущая.ГлобальныйМодуль.Текст);
- ВФайл.Записать(ПутьКФайлу + "ГлобальныйМодуль.txt");
- КонецЕсли;
- Для Индекс = 1 По МДТекущая.Документ() Цикл
- ДокТекущий = МДТекущая.Документ(Индекс);
- ЗадатьПути("Документы", ДокТекущий.Identifier);
- Текст = Мета.Получить(ДокТекущий.Identifier + "_МодульФормы");
- Если Текст <> ДокТекущий.Форма.Модуль.Текст Тогда
- ЗадатьПутьВерсии();
- ВФайл.Очистить();
- ВФайл.ДобавитьСтроку(ДокТекущий.Форма.Модуль.Текст);
- ВФайл.Записать(ПутьКФайлу + ДокТекущий.Identifier + "_МодульФормы.txt");
- КонецЕсли;
- Текст = Мета.Получить(ДокТекущий.Identifier + "_МодульПроведения");
- Если Текст <> ДокТекущий.Модуль.Текст Тогда
- ЗадатьПутьВерсии();
- ВФайл.Очистить();
- ВФайл.ДобавитьСтроку(ДокТекущий.Модуль.Текст);
- ВФайл.Записать(ПутьКФайлу + ДокТекущий.Identifier + "_МодульПроведения.txt");
- КонецЕсли;
- КонецЦикла;
- //Цикл по справочниках
- Для Индекс = 1 По МДТекущая.Справочник() Цикл
- Спр = МДТекущая.Справочник(Индекс);
- ЗадатьПути("Справочники", Спр.Identifier);
- Текст = Мета.Получить(Спр.Identifier + "_МодульГруппы");
- Если Текст <> Спр.ФормаГруппы.Модуль.Текст Тогда
- ЗадатьПутьВерсии();
- ВФайл.Очистить();
- ВФайл.ДобавитьСтроку( Спр.ФормаГруппы.Модуль.Текст );
- ВФайл.Записать( ПутьКФайлу + Спр.Identifier + "_МодульГруппы.txt");
- КонецЕсли;
- Текст = Мета.Получить(Спр.Identifier + "_МодульЭлемента");
- Если Текст <> Спр.ФормаЭлемента.Модуль.Текст Тогда
- ЗадатьПутьВерсии();
- ВФайл.Очистить();
- ВФайл.ДобавитьСтроку(Спр.ФормаЭлемента.Модуль.Текст);
- ВФайл.Записать(ПутьКФайлу + Спр.Identifier + "_МодульЭлемента.txt");
- КонецЕсли;
- Для y=1 по Спр.ФормаСписка() цикл
- Текст = Мета.Получить(Спр.Identifier + "_ФормаСписка_" + Спр.FormList(y).Identifier);
- Если Текст <> Спр.ФормаСписка(y).Модуль.Текст Тогда
- ЗадатьПутьВерсии();
- ВФайл.Очистить();
- ВФайл.ДобавитьСтроку(Спр.ФормаСписка(y).Модуль.Текст);
- ВФайл.Записать(ПутьКФайлу + Спр.Identifier + "_ФормаСписка_" + Спр.FormList(y).Identifier + ".txt");
- КонецЕсли;
- КонецЦикла;
- КонецЦикла;
- Для Индекс = 1 По МДТекущая.Отчет() Цикл
- Отчет = МДТекущая.Отчет(Индекс);
- ЗадатьПути("Отчеты", Отчет.Identifier);
- Текст = Мета.Получить(Отчет.Identifier + "_Модуль");
- Если ( Текст <> Отчет.Модуль.Текст ) Тогда
- ЗадатьПутьВерсии();
- ВФайл.Очистить();
- ВФайл.ДобавитьСтроку( Отчет.Модуль.Текст );
- ВФайл.Записать(ПутьКФайлу + Отчет.Identifier + "_Модуль.txt");
- КонецЕсли;
- Текст = Мета.Получить( Отчет.Identifier + "_Диалог" );
- Если ( Текст <> Отчет.Диалог.Текст ) Тогда
- ЗадатьПутьВерсии();
- ВФайл.Очистить();
- ВФайл.ДобавитьСтроку( Отчет.Диалог.Текст );
- ВФайл.Записать( ПутьКФайлу + Отчет.Identifier + "_Диалог.txt" );
- КонецЕсли;
- КонецЦикла;
- Для Индекс = 1 По МДТекущая.Обработка() Цикл
- Обработка = МДТекущая.Обработка( Индекс );
- ЗадатьПути( "Обработки", Обработка.Identifier );
- Текст = Мета.Получить( Обработка.Identifier + "_Модуль" );
- Если ( Строка( Текст ) <> Строка( Обработка.Модуль.Текст ) ) Тогда
- ЗадатьПутьВерсии();
- ВФайл.Очистить();
- ВФайл.ДобавитьСтроку( Обработка.Модуль.Текст );
- ВФайл.Записать( ПутьКФайлу + Обработка.Identifier + "_Модуль.txt" );
- //ВФайл.Очистить();
- //ВФайл.ДобавитьСтроку(Текст);
- //ВФайл.Записать(ПутьКФайлу + Обработка.Identifier + "_Модуль2.txt");
- КонецЕсли;
- Текст = Мета.Получить(Обработка.Identifier + "_Диалог");
- Если ( Текст <> Обработка.Диалог.Текст ) Тогда
- ЗадатьПутьВерсии();
- ВФайл.Очистить();
- ВФайл.ДобавитьСтроку( Обработка.Диалог.Текст );
- ВФайл.Записать( ПутьКФайлу + Обработка.Identifier + "_Диалог.txt" );
- КонецЕсли;
- КонецЦикла;
- // Цикл по Видам расчтов
- Для Индекс = 1 По МДТекущая.ВидРасчета() Цикл
- тВидРасчета = МДТекущая.ВидРасчета( Индекс );
- Текст = Мета.Получить(тВидРасчета.Identifier + "_Модуль");
- Если ( Текст <> тВидРасчета.Модуль.Текст ) Тогда
- ЗадатьПути( "ВидыРасчетов", тВидРасчета.Identifier );
- ВФайл.Очистить();
- ВФайл.ДобавитьСтроку( тВидРасчета.Модуль.Текст );
- ВФайл.Записать( ПутьКФайлу + тВидРасчета.Identifier + "_Модуль.txt" );
- КонецЕсли;
- КонецЦикла;
- Сообщить( "" + МДТекущая.Закрыть( 0 ) );
- ФС.КопироватьФайл( "z:\КонтрольИзменений\MDFiles\1Cv7_neo.md", "z:\КонтрольИзменений\MDFiles\1Cv7_old.md", 0 );
- КонецПроцедуры
- //======================================================================
- Процедура ПриОткрытии()
- Если ( ИмяПользователя() = "ЯРобот" ) Тогда
- Сформировать();
- СтатусВозврата(0);
- Возврат;
- КонецЕсли;
- КонецПроцедуры // ПриОткрытии
Add Comment
Please, Sign In to add comment