Снегопат

Обсуждение Снегопата
Текущее время: 22 ноя 2024, 21:52

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 24 ]  На страницу 1, 2, 3  След.
Автор Сообщение
СообщениеДобавлено: 23 апр 2014, 10:01 
Не в сети
Аватара пользователя

Зарегистрирован: 24 авг 2011, 15:36
Сообщения: 1085
Народ, как в скрипте обойти все метаданные и получить модули объектов + модули форм и другие модули для возможности изменения ?
Вроде где-то видел пример.
Хочу сделать массовую вставку кода.
Есть старые легасу-конфигурации, в которых, например, в ПередЗаписью и в ПриЗаписи не учитывается ОбменДанными.Загрузка. Нужно это исправить.
Поможете?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 23 апр 2014, 10:14 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 авг 2011, 15:04
Сообщения: 2052
Смотри в stdlib forAllMdObjects, там и пример есть с модулями менеджера.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 23 апр 2014, 10:17 
Не в сети

Зарегистрирован: 20 дек 2011, 10:31
Сообщения: 588
Откуда: Украина, Запорожье
Накидал за пару минут, не проверял.


Код:
stdlib.forAllMdObjects(metadata.current.rootObject, function(mdObj){
        try{
            sourceText = mdObj.getModuleText("МодульОбъекта");
            if(sourceText.length){
        //Анализируем текст, находим необходимый модуль.
        context = SyntaxAnalysis.AnalyseModule(sourceText, true);
        var method = context.getMethodByName("ПередЗаписью");
        if (!method){
          newText = sourceText + "\nПроцедура ПередЗаписью(Отказ)\n Если ОбменДанными.Загрузка Тогда \n   Возврат;\n КонецЕсли; \nКонецПроцедуры"
         } else {
         Lines = sourceText.split("\n");
                beforeLines = Lines.slice(0, method.StartLine+1);
                afterLines = Lines.slice( method.StartLine+2);
               
                newLines = "\n Если ОбменДанными.Загрузка Тогда \n   Возврат;\n КонецЕсли;";
                newText = beforeLines.join("\n")+"\n" + mdObj.newText+"\n"+ afterLines.join("\n");
 
         }
         mdObj.setModuleText("МодульОбъекта", newText);


       

                Message(mdObj.mdclass.name(1) + "." + mdObj.name)
        }catch(e){}
    })


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 23 апр 2014, 11:16 
Не в сети
Аватара пользователя

Зарегистрирован: 24 авг 2011, 15:36
Сообщения: 1085
Спасибо. Начал смотреть.
А как добраться до модулей форм?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 23 апр 2014, 11:21 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 авг 2011, 15:04
Сообщения: 2052
Жень,
Код:
if(sourceText.length){

надо убирать - модуль может быть пустой, а обработчик надо вставить.
Справедливости ради, на 8.3 можно штатно выгрузить конфу в файлы, обработать тексты модулей и загрузить обратно.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 23 апр 2014, 11:24 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 авг 2011, 15:04
Сообщения: 2052
artbear писал(а):
А как добраться до модулей форм?

У объекта метаданных "Форма" есть свойство - "Форма", вот getModuleText("Форма") и даст модуль.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 23 апр 2014, 11:32 
Не в сети
Аватара пользователя

Зарегистрирован: 24 авг 2011, 15:36
Сообщения: 1085
orefkov писал(а):
artbear писал(а):
А как добраться до модулей форм?

У объекта метаданных "Форма" есть свойство - "Форма", вот getModuleText("Форма") и даст модуль.

Не понял.
У метаданного несколько форм.
Как перебрать модуль каждой из них?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 23 апр 2014, 11:36 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 авг 2011, 15:04
Сообщения: 2052
artbear писал(а):
Не понял.
У метаданного несколько форм.
Как перебрать модуль каждой из них?

forAllMdObjects в процессе обхода как-раз все формы и обойдет.
Ведь каждая форма - это такой-же объект метаданных, подчиненный основному объекту.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 23 апр 2014, 11:36 
Не в сети
Аватара пользователя

Зарегистрирован: 24 авг 2011, 15:36
Сообщения: 1085
orefkov писал(а):
Жень,
Код:
if(sourceText.length){

надо убирать - модуль может быть пустой, а обработчик надо вставить.
Справедливости ради, на 8.3 можно штатно выгрузить конфу в файлы, обработать тексты модулей и загрузить обратно.

  • ИМХО В пустой модуль сабжевый обработчик не нужно вставлять :) этот модуль и так ничего не делает!
  • По выгрузке в 8.3. - нужно выгружать конфу, перебирать файлы, поиск процедур и т.п. - куча доп.действий, который не нужно делать в Снегопате :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 23 апр 2014, 12:02 
Не в сети
Аватара пользователя

Зарегистрирован: 24 авг 2011, 15:36
Сообщения: 1085
Выполняю код (на скобки не обращайте внимание)
Код:
stdlib.forAllMdObjects(metadata.current.rootObject,
   function(mdObj){
      try{
           var mdc = mdObj.mdclass;
          for(var i = 0, c = mdc.propertiesCount; i < c; i++)
          {
              var mdProp = mdc.propertyAt(i)

              var mdPropName = mdProp.name(1);
              if(mdObj.isPropModule(mdPropName)) {
               Message(mdObj.mdclass.name(1) + "." + mdObj.name + "." + mdPropName)

Почему-то возвращается следующий текст
РегистрСведений.СтоимостьДиагностики.МодульНабораЗаписей
РегистрСведений.СтоимостьДиагностики.МодульМенеджера
Форма.ФормаСписка.Форма
Форма.ФормаЗаписи.Форма
т.е. для последних 2 записей не видно реального метаданного для форм (т.е. РегистрСведений.СтоимостьДиагностики)

Как получить реальное имя метаданного для формы?


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 24 ]  На страницу 1, 2, 3  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB