artbear писал(а) 10. Июля 2010 :: 04:49:... мой скрипт для сравнения текста модулей с текстом файла.
ВерсионныйКонтроль\Сравнить модуль.vbs
работает с использованием kdiff3
можно как сравнивать файл, так и сразу объединять изменения.
Спасибо, скрестил ужа с ежом, может кому-то пригодится:
из лайт-пак сборки позаимствовал код скрипта "Открыть файл из директивы ЗагрузитьИзФайла.vbs" (Автор - AlexQC) и по-лоховски допилил твой скрипт, а именно: ничего не меняя в нём (твоем скрипте), просто между DiffCurrentModuleWithFileSelection и GetKDiff3Folder вставил код:
Sub DoCompare(name)
Set fs = CreateObject("Scripting.FileSystemObject")
If left(name,2)="\\" or mid(name,2,1)=":" then ' Абсолютный путь:
str = name
Else ' Относительный путь:
' избавляемся от имени файла в конце пути к обработке, если это внешняя обработка или внешний отчет,
' и строи иначе - это модуль объекта конфигурации - и тогда путь надо разрешать относительно каталога базы:
Set re = New RegExp
re.Pattern = "\\[\w\s]+\.ert$"
re.IgnoreCase = true
Path = re.Replace(DocPath, "")
If Path = DocPath Then ' это модуль внутреннего объекта конфигурации, поэтому путь смотреть относительно каталога базы
Path = IBDir
End If
str = CommonScripts.ResolvePath(Path, name)
End If
If Not fs.FileExists(str) Then
Set w = Windows.ActiveWnd
If w Is Nothing Then
MsgBox "Нет активного окна", vbOKOnly, "TurboMD"
Exit Sub
End If
Set d = w.Document
If d.ID < 2 Then
MsgBox "Окно ни форма, ни модуль", vbOKOnly, "TurboMD"
Exit Sub
End If
If d = docText Then ' Просто модуль
d.SaveToFile str
Else
If d = docWorkBook Then ' Форма
Set m = d.Page(1) ' Выгружаем модуль
m.SaveToFile str
End If
End If
End If
DiffCurrentModuleWithFile str
End Sub 'DoCompare
Sub DiffCurModuleWithLoaded()
Set doc = CommonScripts.GetTextDoc(0)
If doc Is Nothing Then Exit Sub
Set srv = CreateObject("Svcsvc.Service")
For I = 0 To 1 'doc.LineCount-1 ' Перебираем строки
sDiffFileName = trim(doc.range(i,0)) ' & vbCRLF)
If UCase(left(sDiffFileName,18)) = UCase("#ЗагрузитьИзФайла ") then ' Нашли загрузку - открываем:
sDiffFileName = trim(mid(sDiffFileName,19))
if left(sDiffFileName,1) = """" then sDiffFileName = mid(sDiffFileName,2)
if right(sDiffFileName,1) = """" then sDiffFileName = left(sDiffFileName, len(sDiffFileName)-1)
DoCompare sDiffFileName
Exit Sub
End If
If UCase(left(sDiffFileName,14)) = UCase("#LoadFromFile ") then ' И то же с англ. вариантом:
sDiffFileName = trim(mid(sDiffFileName,15))
if left(sDiffFileName,1) = """" then sDiffFileName = mid(sDiffFileName,2)
if right(sDiffFileName,1) = """" then sDiffFileName = left(sDiffFileName, len(sDiffFileName)-1)
DoCompare sDiffFileName
Exit Sub
End If
sDiffFileName=""
Next
End Sub 'DiffCurModuleWithLoaded
-- и юзаю теперь DiffCurModuleWithLoaded.
ЗЫ: с vbs я вообще не знаком, если что, так что не судите строго.