Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: TurboMD выгрузить макет

v7: TurboMD выгрузить макет
Я
   Хрюкин
 
23.09.21 - 15:56
Подскажите, как в turbo md выгрузить макеты. Нажимаю Ctrl-M Форма и модуль выгружаются, а макеты нет.
   Volodja
 
1 - 23.09.21 - 16:38
TurboMD это вроде не умеет.
Но можно макет вытаскивать Gcomp-ом  или Йокселем.
   Volodja
 
2 - 23.09.21 - 16:42
Вообще я себе вот такую функцию написал:
Функция ПолучитьТаблицуMXL(Знач ТаблицаMXL="",Знач поУмолчанию="") Экспорт
    ТаблицаMXL=СокрЛП(?(ПустаяСтрока(ТаблицаMXL)=1,поУмолчанию,ТаблицаMXL));
    поУмолчанию=СокрЛП(?(ПустаяСтрока(поУмолчанию)=1,ТаблицаMXL,поУмолчанию));
    ТаблицаMXL=ТаблицаMXL+?(Найти(вРег(ТаблицаMXL),".MXL")>0,"",".MXL");
    ФайлТаблицы=РекурсивныйПоискФайла(ПолучитьКаталогMXL(1),ТаблицаMXL);
    Если ФС.СуществуетФайл(ФайлТаблицы)=0 Тогда
        ФайлТаблицы=РекурсивныйПоискФайла(ПолучитьКаталогMXL(2),ТаблицаMXL);
        Если ФС.СуществуетФайл(ФайлТаблицы)=0 Тогда
            ФайлТаблицы=поУмолчанию;
        КонецЕсли;
    КонецЕсли;
    Возврат ФайлТаблицы;
КонецФункции

Программа сначала ищет нужный макет в условном каталоге и если не находит его, то берет из метаданных. Это позволяет редактировать внешние макеты на лету, не выгоняя пользователей
   Volodja
 
3 - 23.09.21 - 16:44
Использую так

    Таб=СоздатьОбъект("Таблица");
    ФайлПН=ПолучитьТаблицуMXL("ПриходнаяНакладная");
    Таб.ИсходнаяТаблица(ФайлПН);
   Ёпрст
 
4 - 23.09.21 - 20:55
(0) использовать свой класс таблица.
Была тема на 1cpp
   acanta
 
5 - 23.09.21 - 21:03
А докфайл в фаре разве не макеты копирует? Расширение добавить и все..
   ADirks
 
6 - 24.09.21 - 07:33
для выгрузки макетов в скрипте TurboMD_Artur.vbs можно добавить

Sub UnloadCurrentWndMXL()
    Dim w, d, page
    
    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

    'анализ файла turbomd.prm
    AnalyzeTurboMDPrm 1

    If d = docText Then     ' Просто модуль
        Exit Sub
    Else
        If d = docWorkBook Then ' Форма
            For i = 2 To d.CountPages - 1
                set page = d.Page(i)
                If page = docTable Then
                    name = page.name
                    pos = InStrRev(name, ".")
                    name = Left(name, pos-1) & "." & d.NamePage(i)
                    UnloadDoc page, name ' Выгружаем mxl
                End If
            Next

        End If
    End If

    WriteToTurboMDPrm 1
End Sub
   Volodja
 
7 - 24.09.21 - 08:28
(6) У меня данный скрипт выдал ошибку.
Поправил на:
             UnloadDoc  page 
            'UnloadDoc page, name 
т.к.
Sub UnloadDoc(doc)
принимает 1 параметр
   ADirks
 
8 - 24.09.21 - 09:43
(7) ну тогда весь скрипт. что-то допиливали там, вдруг пригодится

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

Dim BaseDir
BaseDir = IBDir & "unpack\" ' Базовый каталог для выгрузки

Dim TurboMdPrmName
TurboMdPrmName = IBDir & "TurboMd.prm"

Dim Collection

' Процедура создания ветки каталогов
Sub MakeDir(Dir)
    Set fso = CreateObject("Scripting.FileSystemObject")
    If Left(Dir, 2) = "\\" Then
        'UNC Path
        pos = InStr(3, Dir, "\")    'Server name
        p = Left(Dir, pos)
        Dir = Mid(Dir, pos + 1)
    Else
        p = ""
    End If
    pos = 1
    While pos <> 0
        pos = InStr(Dir, "\")
        If pos = 0 Then
            p = p & Dir
        Else
            p = p & Left(Dir, pos)
            Dir = Mid(Dir, pos + 1)
        End If
        If fso.FolderExists(p) = False Then fso.CreateFolder p
    Wend
End Sub

' функции работы со списком модулей
Sub AddDocToList(ModuleName, FileName)
        if Collection.Exists(ModuleName) then
            Collection.Remove ModuleName
        end if
        Collection.Add ModuleName, FileName
end sub 'AddDocToList

Sub RemoveDocFromList(doc)
        if Collection.Exists(doc.Name) then
            Collection.Remove doc.Name
        end if
End Sub 'RemoveDocFromList()

' Анализ файла turbomd.prm
Sub AnalyzeTurboMDPrm(NullParam) ' параметр нужен, чтобы не был виден в списке макросов
    set Collection = CreateObject("Scripting.Dictionary")

    Set fso = CreateObject("Scripting.FileSystemObject")
    
    On Error Resume Next
    set file = fso.OpenTextFile(TurboMdPrmName, 1) 'чтение
    On Error Goto 0
    If IsEmpty(file) Then Exit Sub

    Do While file.AtEndOfStream <> True
        CurrLine = file.ReadLine
        pos = InStr(CurrLine,"=")
        if pos <> 0 then
            ModuleName = Left(CurrLine, pos-1)
            FileName = Mid(CurrLine, pos+1)
            AddDocToList ModuleName, FileName
        end if
    Loop
    file.Close
end sub 'AnalyzeTurboMDPrm

' добавление соответствия в файл TurboMD.prm
Sub WriteToTurboMDPrm(NullParam)
    Set fso = CreateObject("Scripting.FileSystemObject")
    set file = fso.CreateTextFile(TurboMdPrmName, 2) 'запись

        items = Collection.Items
        keys = Collection.Keys
        For i = 0 To Collection.Count -1
            file.WriteLine keys(i) & "=" & items(i)
        Next
        file.Close
end sub 'WriteToTurboMDPrm

'Выгрузка документа
Sub UnloadDoc(doc, Name)
    'Формируем имя файла
    fName = Replace(Name, ".", "\")
    If doc = docTable Then fName = fName & ".mxl" Else fName = fName & ".txt"
    FullName = BaseDir & fName
    
    'Из имени файла выделяем каталог
    lastdec = InStrRev(FullName, "\")
    Dir = Left(FullName, lastdec - 1)
    'И создаем этот каталог
    MakeDir Dir
    ' Выгружаем документ в файл
    doc.SaveToFile FullName

    'Message Name & "   " & FullName
    AddDocToList Name, "unpack\" & fName

End Sub

'Собственно макрос для выгрузки активного окна
Sub UnloadCurrentWnd()
    Dim w, d, page
    
    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

    'анализ файла turbomd.prm
    AnalyzeTurboMDPrm 1

    If d = docText Then     ' Просто модуль
        UnloadDoc d, d.Name
    Else
        If d = docWorkBook Then ' Форма
            UnloadDoc d.Page(0), d.Page(0).Name ' Выгружаем диалог
            UnloadDoc d.Page(1), d.Page(1).Name ' Выгружаем модуль
            
            'For i = 2 To d.CountPages - 1
            '    set page = d.Page(i)
            '    If page = docTable Then
            '        name = page.name
            '        pos = InStrRev(name, ".")
            '        name = Left(name, pos-1) & "." & d.NamePage(i)
            '        UnloadDoc page, name ' Выгружаем mxl
            '    End If
            'Next

        End If
    End If

    WriteToTurboMDPrm 1

End Sub

Sub UnloadCurrentWndMXL()
    Dim w, d, page
    
    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

    'анализ файла turbomd.prm
    AnalyzeTurboMDPrm 1

    If d = docText Then     ' Просто модуль
        Exit Sub
    Else
        If d = docWorkBook Then ' Форма
            For i = 2 To d.CountPages - 1
                set page = d.Page(i)
                If page = docTable Then
                    name = page.name
                    pos = InStrRev(name, ".")
                    name = Left(name, pos-1) & "." & d.NamePage(i)
                    UnloadDoc page, name ' Выгружаем mxl
                End If
            Next

        End If
    End If

    WriteToTurboMDPrm 1
End Sub

Sub RemoveAllFromTurboMD()
    set Collection = CreateObject("Scripting.Dictionary")
    WriteToTurboMDPrm 1
End Sub

'Собственно макрос для выгрузки активного окна
Sub RemoveLinkToCurrentWnd()
    Set w = Windows.ActiveWnd
    If w Is Nothing Then
        MsgBox "Нет активного окна", vbOKOnly, "TurboMD"
        Exit Sub
    End If
    Set d = w.Document
    If d.ID < 1 Then
        MsgBox "Окно ни форма, ни модуль", vbOKOnly, "TurboMD"
        Exit Sub
    End If

    'анализ файла turbomd.prm
    AnalyzeTurboMDPrm 1

    If d = docText Then     ' Просто модуль
        RemoveDocFromList d
    Else
        If d = docWorkBook Then ' Форма
                RemoveDocFromList d.Page(0) ' Выгружаем диалог
                RemoveDocFromList d.Page(1) ' Выгружаем модуль
        End If
    End If

    WriteToTurboMDPrm 1
End Sub 'RemoveLink_to_CurrentWnd

'Макрос для загрузки всех распакованных файлов обратно в мдшник
Sub LoadFromFilesToMD()
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set f = fso.OpenTextFile(IBDir & "turbomd.prm", 1, True)
    On Error Resume Next
    While f.AtEndOfStream = False
        t = f.ReadLine()
        eq = InStr(t, "=")
        If eq > 0 Then
            dName = Trim(Left(t, eq - 1))
            fName = Trim(Mid(t, eq + 1))
            If Mid(fName, 2, 1) <> ":" And Left(fName, 2) <> "\\" Then fName = IBDir & fName
            Set doc = Documents(dName)
            If Err <> 0 Then
                Message Err.Description, mRedErr
                Err.Clear
            Else
                If doc.LoadFromFile(fName) <> True Then
                    Message "Не удалось загрузить " & doc.Name & " из " & fName, mBlackErr
                Else
                    Message doc.Name & " загружен из " & fName, mInformation
                End If
                If Err <> 0 Then
                    Message Err.Description, mRedErr
                    Err.Clear
                End If
            End If
        End If
    Wend
End Sub

' Макрос для быстрого открытия файла TurboMD.prm
Sub OpenTurboMDPrm()
    Documents.Open IBDir & "turbomd.prm"
End Sub

Sub SaveMD()
    MetaData.SaveMDToFile IBDir & "1cv7new.md", False
End Sub



Sub ClearTurboMDPrm()
    Set FSO = CreateObject("Scripting.FileSystemObject")
    
    If FSO.FileExists(TurboMdPrmName) Then
        Set fCur = FSO.GetFile(TurboMdPrmName)
        If fCur.Size > 0 Then
            FSO.CopyFile TurboMdPrmName, TurboMdPrmName & "~", True
            set File = FSO.CreateTextFile(TurboMdPrmName, 2)
            File.Close
        End If
    End If 
End Sub
                                                                   
'------------------------------------------------------------------
Sub Configurator_MetaDataSaved(FileNAme)
    ClearTurboMDPrm
End Sub
   Хрюкин
 
9 - 24.09.21 - 14:43
(2) Спасибо. А можно еще модуль функции РекурсивныйПоискФайла()?
Ругается, что функция не обнаружена.
   Volodja
 
10 - 24.09.21 - 14:55
(9) Держи
//  ***********************************************************

// Приводит строку каталога к виду: _Каталог\
Функция СтрокаКаталога(Знач _ИмяКаталога) Экспорт
    _ИмяКаталога=СокрЛП(_ИмяКаталога);
    Если ПустаяСтрока(_ИмяКаталога)=1 Тогда
        Возврат "";
    КонецЕсли;
    Возврат _ИмяКаталога+?(Прав(_ИмяКаталога,1)="\","","\");
КонецФункции
//  ***********************************************************

//    _Размещение=1, получить каталог внутри инф.базы - локальная
//    _Размещение=2, получить каталог - общий

//  ***********************************************************
Функция ПолучитьКаталогДляИБ(_ИмяПапки,_Размещение=1) Экспорт
    Если _Размещение=1 Тогда
        Каталог=КаталогИБ()+_ИмяПапки;
    Иначе
        Каталог=Лев(КаталогИБ(),СтрДлина(КаталогИБ())-1);
        Каталог=Лев(Каталог,НайтиПрав(Каталог,"\"));
        Каталог=Каталог+_ИмяПапки;
    КонецЕсли;
    Если ФС.СуществуетФайл(Каталог)=0 Тогда
        ФС.СоздатьКаталог(Каталог);
    КонецЕсли;
    Возврат Каталог;
КонецФункции
//  ***********************************************************

Функция ПолучитьКаталогMXL(_Размещение=1) Экспорт
    Возврат ПолучитьКаталогДляИБ("ExtMXL",_Размещение);
КонецФункции
//  ***********************************************************


// Находит файл начиная с _сКаталога. Возвращает полное имя файла

Функция РекурсивныйПоискФайла(Знач _сКаталога,_ИмяФайла) Экспорт
    _сКаталога=СтрокаКаталога(СокрЛП(_сКаталога));        //+?(Прав(СокрЛП(_сКаталога),1)="\","","\");

    Состояние("# "+_сКаталога);

    Если ФС.СуществуетФайл(_сКаталога+_ИмяФайла)=1 Тогда
        Возврат _сКаталога+_ИмяФайла;
    КонецЕсли;
    _ФС=СоздатьОбъект("ФС");
    _Файл=_ФС.НайтиПервыйФайл(_сКаталога+"*.*");
    Пока ПустаяСтрока(_Файл) = 0 Цикл
        Если Лев(_Файл,1)<>"." Тогда
            _АтрибутыФайла="";
            _ФС.АтрибутыФайла(_сКаталога+_Файл,,_АтрибутыФайла);
            _ЭтоКаталог=Число(Сред(_АтрибутыФайла,4,1));
            Если _ЭтоКаталог=1 Тогда
                _Файл=РекурсивныйПоискФайла(_сКаталога+_Файл,_ИмяФайла);
                Если ПустаяСтрока(_Файл)=0 Тогда
                    Возврат _Файл;
                КонецЕсли;
            КонецЕсли;
        КонецЕсли;
        _Файл=_ФС.НайтиСледующийФайл();
    КонецЦикла;
    Возврат "";
КонецФункции
   Volodja
 
11 - 24.09.21 - 15:12
(8) А можно файлом сразу кинуть? а то здесь эти блоки [+ Code] Что-то раскрыл, что-то пропустил, запутался
   Ёпрст
 
12 - 24.09.21 - 16:38
(6)охренеть.. посмотрел у себя, аж целых 3 скрипта для турбомд, и в одном таки да, есть выгрузка мокселя :)))

(0) на вот, занимайся
https://cloud.mail.ru/public/xC6h/TY7rQRghj
   Ёпрст
 
13 - 24.09.21 - 17:01
Единственный минус скрипта, если просто выгрузить моксель, то он его прекрасно выгрузит.
А вот при загрузке, если нет выгруженной формы или текста модуля - не загрузит.
Т.е вместе с мокселем надо хотя бы форму\модуль выгрузить
   Volodja
 
14 - 27.09.21 - 10:15
(13) А в этом скрипте можно отключить возможность, чтобы все-таки не заставлял принудительно сохранять конфигурацию?
А то кое-что проверил, закрываю конфу а он не выпускает меня без сохранения.
   Ёпрст
 
15 - 27.09.21 - 10:35
(14) так не сохраняй
   Volodja
 
16 - 27.09.21 - 10:48
(15) выйти не дает без сохранения
   Volodja
 
17 - 27.09.21 - 10:49
я макрос выгружаю, тогда и закрываю без сохранения

Список тем форума
 
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс, 1996 г.
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.