TurboMD: синхронизация MD и текстовичков #117293


#0 by romix
TurboMD - это внешняя компонента Александра Орефкова, которая (в комплекте с OpenConf) позволяет сохранять тексты модулей и внешний вид форм (расположение кнопок, процедуры-обработчики нажатий и т.п.), не перезапуская 1С и не выгоняя пользователей из 1С. Я внес некоторые улучшения в оригинальный скрипт TurboMD.vbs, хотел бы ими поделиться (возможно, я не оригинален, но в поставке этого, к сожалению, нет, или же я этого там не нашел). При работе с турбо МД возможны следующие приколы: 1) Я сохраняю конфу, но не сохраняю текстовички. Приоритет имеют текстовички, и я волшебным образом теряю (пока не сохраню текстовик) свои изменения в конфе. То есть, надо не забывать всякий раз, как дятел, :-) их сохранять. 2) Я сохраняю текстовички, но не сохраняю конфу (например, сбойнуло электропитание). При открытии несохраненной конфы надо не забыть подгрузить текстовички. Поэтому я внес такие исправления (добавления) в скрипт, которые позволяют всегда иметь синхронные MD и текстовички: Sub Configurator_MetaDataSaved(FileName) 'Делаем так, чтобы при сохранении конфигурации "убивались" 'устаревшие текстовички (переименовываем в turbomd.prm в turbomd.bak).    'При изменении структуры метаданных (например, я создал новую константу)    'папка почему-то NEW_STRU Sub Configurator_ConfigWindowCreate 'Загружаем все текстовички при открытии конфигурации Дополнительно я сократил (закомментировал) в скрипте "лишние" вопросы (добавить ли модуль в PRM и т.п.), а также появилась возможность убрать многочисленные вопросы при сохранении метаданных и самой 1С: '/////////////////////////////////////////////////////////////// Sub Configurator_OnMsgBox(Text, Style, DefAnswer, Answer) 'Делаем так, чтобы 1С-ка не задавала много лишних вопросов                If InStr(Text, "Сохранить изменения?") <> 0 Then        If InStr(Text, "Реорганизация информации закончена!") <> 0 Then        If InStr(Text, "Выполнить сохранение метаданных?") <> 0 Then ------------------------ Также (инсталлятором) я прописал горячие клавиши Alt-S и Alt-L на процедуры выгрузки и загрузки текстовичков из/в MD. Новички долго тыкаются, пока не находят, а как же назначить горячие клавиши. Почему бы не назначить их штатно по умолчанию? :-) Вот такое предложение.
#1 by Скользящий
А нельзя ли вывесить на всеобщий доступ?
#2 by romix
Просто воткни эти процедуры в конец turbomd.vbs и перезапусти конфигуратор. (только сохрани его резервную копию). Насчет сократить вопросы - их можно просто закомментировать - это каждый может сделать по вкусу. Вставлю это в свой инсталлятор, как только у меня исчезнут приколы с телепатом, и если не будет здесь замечаний.
#3 by romix
Интересно, а можно ли автоматически скидывать все в текстовички по факту закрытия или деактивизации окна с текстом конфигуратора... Вроде бы виндовые события... И посылать этим окнам какое-нибудь нажатие, чтобы оно активизировало скрипт выгрузки... Тогда вообще все будет фоново и без вопросов... Набрал код (или поправил форму) в конфигураторе - перешел в 1С, а там уже все обновилось... :-)
#4 by Скользящий
Это ты загнул. Это лишнее.
#5 by romix
Ну как, получилось сделать , полет нормальный? :-)
#6 by Скользящий
Да, я тоже с этими глюками столкнулся. Все время выдает, "модуль не скомпилирован". Теперь правлю vbs код. О результате скажу дополнитлеьно. :-)
#7 by romix
блин, не парься, давай я тебе почтой зашлю... Народ.ру че-то у меня сейчас недоступен...
#8 by Скользящий
Почта в карточке.
#9 by romix
Там недоступно... Щас выложу скрипт целиком тут...
#10 by romix
'$ENGINE {B54F3741-5B07-11CF-A4B0-00AA004A55E8} 'Пример скрипта, позволяющего выгрузить в файл 'текущую редактируемую форму и модуль '(либо просто модуль проведения или вида расчета) 'во внешний файл. 'При этом выгружается текущее состояние формы/модуля 'без необходимости сохранять конфигурацию '--------------------------------------------------------- 'Изменения (с) Romix 2005.08.16 '1) При сохранении конфы убивает (переименовывает в .BAK) файл .PRM 'Это нужно, чтобы при сохранении конфы не оставалось левых (устаревших) текстовичков. '2) При открытии конфы подгружает текстовички из .PRM (если закрыли 1С, не сохраняя конфу) 'Это нужно, если закрыли 1С, но есть актуальные текстовички. 'Таким образом, любые действия пользователя не приведут к рассинхронизации MD и текстовичков. 'И по-мелочи: '3) Не задает вопросов, добавить ли строку в файл .PRM (вопрос закомментирован). '4) Вместо двух вопросов: о сохранении формы и сохранении модуля теперь только один общий вопрос. '--------------------------------------------------------- Dim BaseDir BaseDir = IBDir & "unpack" ' Базовый каталог для выгрузки ' Процедура создания ветки каталогов        If fso.FolderExists(p) = False Then fso.CreateFolder p    If f.AtEndOfStream = True Then t = "" Else t = f.ReadAll    If InStr(t, doc.Name) = 0 Then        'If MsgBox("Добавить " & doc.Name & " в turbomd.prm ?", vbQuestion + vbYesNo) = vbYes Then            If Len(t) > 0 And Right(t, 2) <> vbCrLf Then f.WriteBlankLines 1 'Собственно макрос для выгрузки активного окна    Else        If d = docWorkBook Then ' Форма            If MsgBox("Выгрузить форму и модуль?", vbQuestion + vbYesNo, "TurboMD") = vbYes Then                UnloadDoc d.Page ' Выгружаем диалог            'End If            'If MsgBox("Выгрузить модуль?", vbQuestion + vbYesNo, "TurboMD") = vbYes Then                UnloadDoc d.Page ' Выгружаем модуль 'Макрос для загрузки всех распакованных файлов обратно в мдшник    On Error Resume Next            Else                If doc.LoadFromFile(fName) <> True Then ' Макрос для быстрого открытия файла TurboMD.prm Sub Configurator_ConfigWindowCreate 'Загружаем все текстовички при открытии конфигурации Sub Configurator_OnMsgBox(Text, Style, DefAnswer, Answer) 'Делаем так, чтобы 1С-ка не задавала много лишних вопросов                If InStr(Text, "Сохранить изменения?") <> 0 Then        If InStr(Text, "Реорганизация информации закончена!") <> 0 Then        If InStr(Text, "Выполнить сохранение метаданных?") <> 0 Then Sub Configurator_MetaDataSaved(FileName) 'Делаем так, чтобы при сохранении конфигурации "убивались" текстовички    'При изменении структуры метаданных (например, я создал новую константу)    'папка почему-то NEW_STRU
#11 by romix
Это был turboMD.vbs в папке BINconfigscripts
#12 by Скользящий
Вставил. Вери сенкс, пока вроде работает. :-) Кста, по редактированию vbs скриптов можешь литературу посоветовать? Или ссылку на инфу об этом?
#13 by Скользящий
А кстати, почему он при выгрузке модуля формы и формы спрашивает, сохранять или нет, а при правке модуля документа и выгрузке молчит? Должен бы по идее сигналить. И раньше так было, и после вставки твоего кода.
#14 by romix
А я сам первый раз (если не считать VBA в ёкселе в 1998 году) поюзал эту штуку: смотрел в OpenConf.chm и отыскивал образцы скриптов в том большом комплекте, который распространяет kuntashov(собака)яндекс.ру.
#15 by romix
щас заценю...
#16 by romix
Да, действительно сохраняет, но сообщение не выводит. Может у Орефкова и нету этого предупреждения? :-)
#17 by Crew
- Не гоните. Вы модуль формы и форму перед этим выгрузили - турбомд каталоги создал и вопросы задавал. Че ему еще спрашивать? Попробуйте эти каталоги грохнуть и выгрузить модуль дока.
#18 by Скользящий
Я про модуль проведения документа.
#19 by Crew
не модуль проведения документа, а модуль документа (если быть точным) проверь...
#20 by Скользящий
проверил, выгрузку делает, но предупреждающего сообшения нет. Может у тя старая версия Опенкофа?
#21 by romix
Хочу воткнуть вместо предупреждения вызов MS-Агента (как в книжке MAV'а) :-)
#22 by Crew
не просто ты неправильно делаешь. Ты каталоги с выгружеными формами и модулями грохни и попробуй еще раз, да еще и запись он делает в *.pm файле...
#23 by romix
Добавил вопрос про выгрузку модуля проведения:    If d = docText Then     ' Просто модуль        If MsgBox("Выгрузить модуль проведения?", vbQuestion + vbYesNo, "TurboMD") = vbYes Then
#24 by romix
Файл TurboMD.vbs целиком выложу постом ниже.
#25 by romix
'$ENGINE {B54F3741-5B07-11CF-A4B0-00AA004A55E8} 'Пример скрипта, позволяющего выгрузить в файл 'текущую редактируемую форму и модуль '(либо просто модуль проведения или вида расчета) 'во внешний файл. 'При этом выгружается текущее состояние формы/модуля 'без необходимости сохранять конфигурацию '--------------------------------------------------------- 'Изменения (с) Romix 2005.08.16 '1) При сохранении конфы убивает (переименовывает в .BAK) файл .PRM 'Это нужно, чтобы при сохранении конфы не оставалось левых (устаревших) текстовичков. '2) При открытии конфы подгружает текстовички из .PRM (если закрыли 1С, не сохраняя конфу) 'Это нужно, если закрыли 1С, но есть актуальные текстовички. 'Таким образом, любые действия пользователя не приведут к рассинхронизации MD и текстовичков. 'И по-мелочи: '3) Не задает вопросов, добавить ли строку в файл .PRM (вопрос закомментирован). '4) Вместо двух вопросов: о сохранении формы и сохранении модуля теперь только один общий вопрос. '--------------------------------------------------------- Dim BaseDir BaseDir = IBDir & "unpack" ' Базовый каталог для выгрузки ' Процедура создания ветки каталогов        If fso.FolderExists(p) = False Then fso.CreateFolder p    If f.AtEndOfStream = True Then t = "" Else t = f.ReadAll    If InStr(t, doc.Name) = 0 Then        'If MsgBox("Добавить " & doc.Name & " в turbomd.prm ?", vbQuestion + vbYesNo) = vbYes Then            If Len(t) > 0 And Right(t, 2) <> vbCrLf Then f.WriteBlankLines 1 'Собственно макрос для выгрузки активного окна    If d = docText Then     ' Просто модуль        If MsgBox("Выгрузить модуль проведения?", vbQuestion + vbYesNo, "TurboMD") = vbYes Then    Else        If d = docWorkBook Then ' Форма            If MsgBox("Выгрузить форму и модуль?", vbQuestion + vbYesNo, "TurboMD") = vbYes Then                UnloadDoc d.Page ' Выгружаем диалог            'End If            'If MsgBox("Выгрузить модуль?", vbQuestion + vbYesNo, "TurboMD") = vbYes Then                UnloadDoc d.Page ' Выгружаем модуль 'Макрос для загрузки всех распакованных файлов обратно в мдшник    On Error Resume Next            Else                If doc.LoadFromFile(fName) <> True Then ' Макрос для быстрого открытия файла TurboMD.prm Sub Configurator_ConfigWindowCreate 'Загружаем все текстовички при открытии конфигурации Sub Configurator_OnMsgBox(Text, Style, DefAnswer, Answer) 'Делаем так, чтобы 1С-ка не задавала много лишних вопросов                If InStr(Text, "Сохранить изменения?") <> 0 Then        If InStr(Text, "Реорганизация информации закончена!") <> 0 Then        If InStr(Text, "Выполнить сохранение метаданных?") <> 0 Then Sub Configurator_MetaDataSaved(FileName) 'Делаем так, чтобы при сохранении конфигурации "убивались" текстовички    'При изменении структуры метаданных (например, я создал новую константу)    'папка почему-то NEW_STRU
#26 by Оупенконфовец
Сохранение в любой папке (в случае краха сети и если есть несохранен изменения)
#27 by Оупенконфовец
Кидай потом в репозитарий Оупенконф.
#28 by romix
Позволяет сохранить MD в другой файл, если я поправил метаданные, но юзера еще сидят в 1С? А это где?
#29 by romix
(+28-1) вроде уже есть штатная SaveMD, которая сохраняет MD-шник под другим именем...
#30 by Оупенконфовец
Там просто спрашивает каталог куда выгружать. По умолчанию выгрузка в каталого ИБ - имхо не совсем верно - см - сетка отвалилась, тормозит и еще что-то, каталог ИБ занят.
#31 by Начинающий ТурбоМДшн
Так где можно взять последнюю "самую рабочую" версию скрипта? Какая версия ТурбоМД.длл наименее глючная?
#32 by Нежный Лизун
шалунишки
#33 by Грубый Грызун
Ну, где все знающие люди?
#34 by Скользящий
Есть яндекс. последняя версия 1.05. или типа того.
#35 by Грубый Грызун
Последняя версия 1.0.1.2 на самом то деле. Вопросы в аХтуальны.
#36 by Скользящий
Ты прав. 1.0.1.2 Если честно, уверенности, что глючить не будет, нет ни с одной версией. Но вроде работает. Самая лучшая версия Опенкофа- на проклабе. Какие еще вопросы.
#37 by Грубый Грызун
Есть ли жизнь на Марсе? ЗЫ. Какие плагины ты используешь?
#38 by Скользящий
Телепат. Комментирование по клавише. Выгружаю в турбо, потом сразу проверяю. Там хренова туча возможностей, но плохо документированных. Поставь, узнаешь.
#39 by romix
Последняя версия опенконфа лежит на: / Вроде не глючит, хотя не факт что заработает с любым отдельно взятым дистрибутивом 1С.
#40 by romix
если про мои изменения, то полностью весь скрипт я положил в . Щас его юзаю, вроде удобно. :-)
#41 by Скользящий
Кста, а ты какими плагинами пользуешься? Просто интересно, может я мимо каких то возможностей прошел.
#42 by romix
Телепат, ТурбоМД, недавно решил а не попробовать ли плагин Intellisence, т.к. он позволяет вводить реквизиты метаданных. Например, я пишу слово Константа. и выпадает список констант. Аналогично для реквизитов документов, справочников и т.д.
#43 by Скользящий
аналогично. А конструкторы юзаешь?
#44 by romix
Только штатные конструкторы, которые уже есть в 1С. :-) А че, типа удобно? Я просто в них немножко не въехал, и пока не юзал...
#45 by Скользящий
Просто подумал, если есть вместо штатных, то они типа удобнее.:-) Поэтому и спросил. А что там за подсистемы, так и не врубился?
#46 by romix
Я тоже не врубился, и на всякий случай решил все лишнее пока выключить. :-) Ну и на рабочую базу натравливать только оригинальный 1С, а то как бы чего с ней не вышло. :-)
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям