|
v7: TurboMD выгрузить макет | ☑ | ||
---|---|---|---|---|
0
Хрюкин
23.09.21
✎
15:56
|
Подскажите, как в turbo md выгрузить макеты. Нажимаю Ctrl-M Форма и модуль выгружаются, а макеты нет.
|
|||
1
Volodja
23.09.21
✎
16:38
|
TurboMD это вроде не умеет.
Но можно макет вытаскивать Gcomp-ом или Йокселем. |
|||
2
Volodja
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 Тогда ФайлТаблицы=поУмолчанию; КонецЕсли; КонецЕсли; Возврат ФайлТаблицы; КонецФункции Программа сначала ищет нужный макет в условном каталоге и если не находит его, то берет из метаданных. Это позволяет редактировать внешние макеты на лету, не выгоняя пользователей |
|||
3
Volodja
23.09.21
✎
16:44
|
Использую так
Таб=СоздатьОбъект("Таблица"); ФайлПН=ПолучитьТаблицуMXL("ПриходнаяНакладная"); Таб.ИсходнаяТаблица(ФайлПН); |
|||
4
Ёпрст
23.09.21
✎
20:55
|
(0) использовать свой класс таблица.
Была тема на 1cpp |
|||
5
acanta
23.09.21
✎
21:03
|
А докфайл в фаре разве не макеты копирует? Расширение добавить и все..
|
|||
6
ADirks
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 |
|||
7
Volodja
24.09.21
✎
08:28
|
(6) У меня данный скрипт выдал ошибку.
Поправил на: UnloadDoc page 'UnloadDoc page, name т.к. Sub UnloadDoc(doc) принимает 1 параметр |
|||
8
ADirks
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) Спасибо. А можно еще модуль функции РекурсивныйПоискФайла()?
Ругается, что функция не обнаружена. |
|||
10
Volodja
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 Тогда Возврат _Файл; КонецЕсли; КонецЕсли; КонецЕсли; _Файл=_ФС.НайтиСледующийФайл(); КонецЦикла; Возврат ""; КонецФункции |
|||
11
Volodja
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
|
Единственный минус скрипта, если просто выгрузить моксель, то он его прекрасно выгрузит.
А вот при загрузке, если нет выгруженной формы или текста модуля - не загрузит. Т.е вместе с мокселем надо хотя бы форму\модуль выгрузить |
|||
14
Volodja
27.09.21
✎
10:15
|
(13) А в этом скрипте можно отключить возможность, чтобы все-таки не заставлял принудительно сохранять конфигурацию?
А то кое-что проверил, закрываю конфу а он не выпускает меня без сохранения. |
|||
15
Ёпрст
27.09.21
✎
10:35
|
(14) так не сохраняй
|
|||
16
Volodja
27.09.21
✎
10:48
|
(15) выйти не дает без сохранения
|
|||
17
Volodja
27.09.21
✎
10:49
|
я макрос выгружаю, тогда и закрываю без сохранения
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |