Guest User

Untitled

a guest
May 22nd, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.06 KB | None | 0 0
  1. // @name: Контроль изменений
  2. // @ver: в0м1
  3. // @author: adam.martin
  4.  
  5. Перем Путь, ПутьКОтчету, ПутьКФайлу;
  6. Перем ДатаТекущая;
  7.  
  8.  
  9. Функция МД5(файл)
  10. ScrCtrl = СоздатьОбъект("MSScriptControl.ScriptControl");
  11. ScrCtrl.Language = "vbscript";
  12. ScrCtrl.AddCode("
  13. |Function Hash()
  14. |Dim crypt: Set crypt = CreateObject(""CAPICOM.HashedData"")
  15. |crypt.Algorithm = CAPICOM_HASH_ALGORITHM_SHA_256
  16. |Dim stream: Set stream = CreateObject(""ADODB.Stream"")
  17. |stream.Type = 1 ' adTypeBinary
  18. |stream.Open
  19. |stream.LoadFromFile("""+файл+""")
  20. |Do Until stream.EOS : crypt.Hash stream.Read() : Loop
  21. |Hash = crypt.Value
  22. |End Function
  23. |");
  24. рез = ScrCtrl.Run("Hash");
  25. Возврат рез;
  26. КонецФункции
  27.  
  28. //======================================================================
  29. Процедура ЗадатьПути(Тип, Вид = "")
  30.  
  31. ПутьКОтчету = Путь + Тип + "\";
  32. Если ФС.СуществуетФайл(ПутьКОтчету) = 0 Тогда
  33. ФС.СоздатьКаталог(ПутьКОтчету);
  34. КонецЕсли;
  35.  
  36. Если ПустоеЗначение(Вид) = 0 Тогда
  37.  
  38. ПутьКОтчету = ПутьКОтчету + Вид + "\";
  39. Если ФС.СуществуетФайл(ПутьКОтчету) = 0 Тогда
  40. ФС.СоздатьКаталог(ПутьКОтчету);
  41. КонецЕсли;
  42.  
  43. КонецЕсли;
  44.  
  45. КонецПроцедуры // ЗадатьПути
  46.  
  47. //======================================================================
  48. Процедура ЗадатьПутьВерсии()
  49. ПутьКФайлу = ПутьКОтчету + Строка(ДатаТекущая) + "\";
  50.  
  51. Если ФС.СуществуетФайл(ПутьКФайлу) = 0 Тогда
  52. ФС.СоздатьКаталог(ПутьКФайлу);
  53. КонецЕсли;
  54.  
  55. КонецПроцедуры // ЗадатьПутьВерсии
  56.  
  57. Процедура Сформировать()
  58.  
  59. Путь = "\\srv-2\1cBases\КонтрольИзменений\";
  60.  
  61.  
  62. Хэш1 = МД5( Путь + "MDFiles\1Cv7_old.MD" );
  63. Хэш2 = МД5( Путь + "MDFiles\1Cv7_neo.MD" );
  64.  
  65. Если ( Строка( Хэш1 ) = Строка( Хэш2 ) ) Тогда
  66. Сообщить( "Конфигурации идентичны" );
  67. Возврат;
  68. КонецЕсли;
  69.  
  70. ДатаТекущая = '';
  71. ДатаПредыдущая = '';
  72.  
  73. МДПредыдущая = СоздатьОбъект( "ActiveMD.MDFile" );
  74.  
  75. Сообщить( "" + МДПредыдущая.Открыть( Путь + "MDFiles\1Cv7_old.MD" ) );
  76.  
  77. ФС.АтрибутыФайла( Путь + "MDFiles\1Cv7_old.MD",,,,,ДатаПредыдущая );
  78. ДатаПредыдущая = Лев( ДатаПредыдущая, 10 );
  79.  
  80. Мета = СоздатьОбъект( "СписокЗначений" );
  81.  
  82. Мета.ДобавитьЗначение( МДПредыдущая.ГлобальныйМодуль.Текст, "ГлобальныйМодуль" );
  83.  
  84. // Цикл по документах
  85. Для Индекс = 1 По МДПредыдущая.Документ() Цикл
  86. ДокТекущий = МДПредыдущая.Документ(Индекс);
  87.  
  88. Мета.ДобавитьЗначение(ДокТекущий.Форма.Модуль.Текст, ДокТекущий.Identifier + "_МодульФормы");
  89. Мета.ДобавитьЗначение(ДокТекущий.Модуль.Текст, ДокТекущий.Identifier + "_МодульПроведения");
  90.  
  91. КонецЦикла;
  92.  
  93. // Цикл по справочникам
  94. Для Индекс = 1 По МДПредыдущая.Справочник() цикл
  95. Спр = МДПредыдущая.Справочник(Индекс);
  96.  
  97. Мета.ДобавитьЗначение(Спр.ФормаГруппы.Модуль.Текст, Спр.Identifier + "_МодульГруппы");
  98. Мета.ДобавитьЗначение(Спр.ФормаЭлемента.Модуль.Текст, Спр.Identifier + "_МодульЭлемента");
  99.  
  100. Для y=1 по Спр.ФормаСписка() цикл
  101. Мета.ДобавитьЗначение(Спр.ФормаСписка(y).Модуль.Текст, Спр.Identifier+"_ФормаСписка_"+Спр.FormList(y).Identifier);
  102. КонецЦикла;
  103. КонецЦикла;
  104.  
  105. // Цикл по отчетам
  106. Для Индекс = 1 По МДПредыдущая.Отчет() Цикл
  107. Отчет = МДПредыдущая.Отчет(Индекс);
  108.  
  109. Мета.ДобавитьЗначение(Отчет.Модуль.Текст, Отчет.Identifier + "_Модуль");
  110. Мета.ДобавитьЗначение(Отчет.Диалог.Текст, Отчет.Identifier + "_Диалог");
  111. КонецЦикла;
  112.  
  113. // Цикл по обработкам
  114. Для Индекс = 1 По МДПредыдущая.Обработка() Цикл
  115. Обработка = МДПредыдущая.Обработка(Индекс);
  116.  
  117. Мета.ДобавитьЗначение(Обработка.Модуль.Текст, Обработка.Identifier + "_Модуль");
  118. Мета.ДобавитьЗначение(Обработка.Диалог.Текст, Обработка.Identifier + "_Диалог");
  119. КонецЦикла;
  120.  
  121. // Цикл по видам расчетов
  122. Для Индекс = 1 По МДПредыдущая.ВидРасчета() Цикл
  123. тВидРасчета = МДПредыдущая.ВидРасчета(Индекс);
  124.  
  125. Мета.ДобавитьЗначение(тВидРасчета.Модуль.Текст, тВидРасчета.Identifier + "_Модуль");
  126.  
  127. КонецЦикла;
  128.  
  129. Сообщить(""+МДПредыдущая.Закрыть(0));
  130.  
  131.  
  132. // * * *
  133. МДТекущая = СоздатьОбъект("ActiveMD.MDFile");
  134. Сообщить("" + МДТекущая.Открыть("z:\КонтрольИзменений\MDFiles\1Cv7_neo.md"));
  135. ФС.АтрибутыФайла("z:\КонтрольИзменений\MDFiles\1Cv7_neo.md",,,,,ДатаТекущая);
  136. ДатаТекущая = ЛЕв(ДатаТекущая,10);
  137.  
  138.  
  139. ВФайл = СоздатьОбъект("Текст");
  140.  
  141. Текст = Мета.Получить("ГлобальныйМодуль");
  142.  
  143. Если Текст <> МДТекущая.ГлобальныйМодуль.Текст Тогда
  144.  
  145. ЗадатьПути("ГлобальныйМодуль");
  146. ЗадатьПутьВерсии();
  147.  
  148. ВФайл.Очистить();
  149. ВФайл.ДобавитьСтроку(МДТекущая.ГлобальныйМодуль.Текст);
  150. ВФайл.Записать(ПутьКФайлу + "ГлобальныйМодуль.txt");
  151.  
  152. КонецЕсли;
  153.  
  154.  
  155. Для Индекс = 1 По МДТекущая.Документ() Цикл
  156. ДокТекущий = МДТекущая.Документ(Индекс);
  157.  
  158. ЗадатьПути("Документы", ДокТекущий.Identifier);
  159.  
  160. Текст = Мета.Получить(ДокТекущий.Identifier + "_МодульФормы");
  161.  
  162. Если Текст <> ДокТекущий.Форма.Модуль.Текст Тогда
  163. ЗадатьПутьВерсии();
  164.  
  165. ВФайл.Очистить();
  166. ВФайл.ДобавитьСтроку(ДокТекущий.Форма.Модуль.Текст);
  167. ВФайл.Записать(ПутьКФайлу + ДокТекущий.Identifier + "_МодульФормы.txt");
  168.  
  169. КонецЕсли;
  170.  
  171. Текст = Мета.Получить(ДокТекущий.Identifier + "_МодульПроведения");
  172.  
  173. Если Текст <> ДокТекущий.Модуль.Текст Тогда
  174.  
  175. ЗадатьПутьВерсии();
  176.  
  177. ВФайл.Очистить();
  178. ВФайл.ДобавитьСтроку(ДокТекущий.Модуль.Текст);
  179. ВФайл.Записать(ПутьКФайлу + ДокТекущий.Identifier + "_МодульПроведения.txt");
  180.  
  181. КонецЕсли;
  182. КонецЦикла;
  183.  
  184. //Цикл по справочниках
  185. Для Индекс = 1 По МДТекущая.Справочник() Цикл
  186. Спр = МДТекущая.Справочник(Индекс);
  187.  
  188.  
  189. ЗадатьПути("Справочники", Спр.Identifier);
  190.  
  191. Текст = Мета.Получить(Спр.Identifier + "_МодульГруппы");
  192. Если Текст <> Спр.ФормаГруппы.Модуль.Текст Тогда
  193.  
  194. ЗадатьПутьВерсии();
  195.  
  196. ВФайл.Очистить();
  197. ВФайл.ДобавитьСтроку( Спр.ФормаГруппы.Модуль.Текст );
  198. ВФайл.Записать( ПутьКФайлу + Спр.Identifier + "_МодульГруппы.txt");
  199.  
  200. КонецЕсли;
  201.  
  202. Текст = Мета.Получить(Спр.Identifier + "_МодульЭлемента");
  203. Если Текст <> Спр.ФормаЭлемента.Модуль.Текст Тогда
  204.  
  205. ЗадатьПутьВерсии();
  206.  
  207. ВФайл.Очистить();
  208. ВФайл.ДобавитьСтроку(Спр.ФормаЭлемента.Модуль.Текст);
  209. ВФайл.Записать(ПутьКФайлу + Спр.Identifier + "_МодульЭлемента.txt");
  210. КонецЕсли;
  211.  
  212. Для y=1 по Спр.ФормаСписка() цикл
  213. Текст = Мета.Получить(Спр.Identifier + "_ФормаСписка_" + Спр.FormList(y).Identifier);
  214.  
  215. Если Текст <> Спр.ФормаСписка(y).Модуль.Текст Тогда
  216. ЗадатьПутьВерсии();
  217.  
  218. ВФайл.Очистить();
  219. ВФайл.ДобавитьСтроку(Спр.ФормаСписка(y).Модуль.Текст);
  220. ВФайл.Записать(ПутьКФайлу + Спр.Identifier + "_ФормаСписка_" + Спр.FormList(y).Identifier + ".txt");
  221. КонецЕсли;
  222. КонецЦикла;
  223.  
  224. КонецЦикла;
  225.  
  226. Для Индекс = 1 По МДТекущая.Отчет() Цикл
  227. Отчет = МДТекущая.Отчет(Индекс);
  228.  
  229. ЗадатьПути("Отчеты", Отчет.Identifier);
  230.  
  231. Текст = Мета.Получить(Отчет.Identifier + "_Модуль");
  232. Если ( Текст <> Отчет.Модуль.Текст ) Тогда
  233.  
  234. ЗадатьПутьВерсии();
  235.  
  236. ВФайл.Очистить();
  237. ВФайл.ДобавитьСтроку( Отчет.Модуль.Текст );
  238. ВФайл.Записать(ПутьКФайлу + Отчет.Identifier + "_Модуль.txt");
  239.  
  240. КонецЕсли;
  241.  
  242. Текст = Мета.Получить( Отчет.Identifier + "_Диалог" );
  243. Если ( Текст <> Отчет.Диалог.Текст ) Тогда
  244.  
  245. ЗадатьПутьВерсии();
  246.  
  247. ВФайл.Очистить();
  248. ВФайл.ДобавитьСтроку( Отчет.Диалог.Текст );
  249. ВФайл.Записать( ПутьКФайлу + Отчет.Identifier + "_Диалог.txt" );
  250.  
  251. КонецЕсли;
  252.  
  253. КонецЦикла;
  254.  
  255. Для Индекс = 1 По МДТекущая.Обработка() Цикл
  256. Обработка = МДТекущая.Обработка( Индекс );
  257.  
  258. ЗадатьПути( "Обработки", Обработка.Identifier );
  259.  
  260. Текст = Мета.Получить( Обработка.Identifier + "_Модуль" );
  261. Если ( Строка( Текст ) <> Строка( Обработка.Модуль.Текст ) ) Тогда
  262.  
  263. ЗадатьПутьВерсии();
  264.  
  265. ВФайл.Очистить();
  266. ВФайл.ДобавитьСтроку( Обработка.Модуль.Текст );
  267. ВФайл.Записать( ПутьКФайлу + Обработка.Identifier + "_Модуль.txt" );
  268.  
  269. //ВФайл.Очистить();
  270. //ВФайл.ДобавитьСтроку(Текст);
  271. //ВФайл.Записать(ПутьКФайлу + Обработка.Identifier + "_Модуль2.txt");
  272.  
  273. КонецЕсли;
  274.  
  275. Текст = Мета.Получить(Обработка.Identifier + "_Диалог");
  276. Если ( Текст <> Обработка.Диалог.Текст ) Тогда
  277.  
  278. ЗадатьПутьВерсии();
  279.  
  280. ВФайл.Очистить();
  281. ВФайл.ДобавитьСтроку( Обработка.Диалог.Текст );
  282. ВФайл.Записать( ПутьКФайлу + Обработка.Identifier + "_Диалог.txt" );
  283.  
  284. КонецЕсли;
  285.  
  286. КонецЦикла;
  287.  
  288.  
  289. // Цикл по Видам расчтов
  290. Для Индекс = 1 По МДТекущая.ВидРасчета() Цикл
  291. тВидРасчета = МДТекущая.ВидРасчета( Индекс );
  292.  
  293. Текст = Мета.Получить(тВидРасчета.Identifier + "_Модуль");
  294. Если ( Текст <> тВидРасчета.Модуль.Текст ) Тогда
  295. ЗадатьПути( "ВидыРасчетов", тВидРасчета.Identifier );
  296.  
  297. ВФайл.Очистить();
  298.  
  299. ВФайл.ДобавитьСтроку( тВидРасчета.Модуль.Текст );
  300. ВФайл.Записать( ПутьКФайлу + тВидРасчета.Identifier + "_Модуль.txt" );
  301.  
  302. КонецЕсли;
  303.  
  304. КонецЦикла;
  305.  
  306.  
  307. Сообщить( "" + МДТекущая.Закрыть( 0 ) );
  308.  
  309. ФС.КопироватьФайл( "z:\КонтрольИзменений\MDFiles\1Cv7_neo.md", "z:\КонтрольИзменений\MDFiles\1Cv7_old.md", 0 );
  310.  
  311.  
  312. КонецПроцедуры
  313.  
  314.  
  315. //======================================================================
  316. Процедура ПриОткрытии()
  317.  
  318. Если ( ИмяПользователя() = "ЯРобот" ) Тогда
  319.  
  320. Сформировать();
  321.  
  322. СтатусВозврата(0);
  323. Возврат;
  324.  
  325. КонецЕсли;
  326.  
  327. КонецПроцедуры // ПриОткрытии
Add Comment
Please, Sign In to add comment