Имя: Пароль:
1C
1С v8
Подскажите какие-нить функции по парсингу модулей. Может есть коллекции =)
0 SeiOkami
 
04.01.13
18:03
Могу, конечно, и самому писать, но это безсмысленное занятие, если они есть уже готовые. К примеру, сейчас нужна функция, получающая из текста модуля вызов определенной функции и её параметры.
1 zak555
 
04.01.13
18:04
для какой цели ?
2 Сергей Д
 
04.01.13
18:06
Есть конфигурация "Автоматизированная проверка конфигураций". Из нее можно выдрать работу с модулями. Если вкратце, то там все модули выгружаются в текстовый файлы (1 модуль - 1 файл), а потом эти файлы обрабатываются. В частности есть там поиск неиспользуемых функций и процедур.
3 SeiOkami
 
04.01.13
18:08
(1), Обработку пишу. Для реализации задачи необходимо, чтобы обработка находила вызов процедуры в предоставленном коде, определяла параметры и заполняла всё в ТЧ
(2), Спасибо, сейчас поищу. А есть что-нить ещё?
4 Сергей Д
 
04.01.13
18:09
(3) Не слышал
5 SeiOkami
 
04.01.13
18:40
Полазил и понял, что легче уж самому написать...
6 ПТР
 
04.01.13
19:25
Может кто ответит на следующий вопрос:
1.Можно ли и если можно, то как,  процедурой открытого приложения выгрузить или загрузить тексты модулей собственной или любой другой конфигурации.
Вариант "выгрузки - загрузки" командой из конфигуратора не предлагать.
7 SeiOkami
 
04.01.13
19:37
(6), сам ооочень долго мучился.

Смотря что тебя интересует. Если именно "конфигурации", т.е. файла-конфигурации, то смотри: http://infostart.ru/public/106310/
(я на чисто для себя сделал простую обработочку для распаковки\упаковки обработок: http://infostart.ru/public/155950/ )
8 acsent
 
04.01.13
19:37
goldparser
9 SeiOkami
 
04.01.13
19:38
Вот функция, которую искал. Только что написал, может кому пригодится:


//Возвращает массив с параметрами, передаваемыми в функцию\процедуру
//
//ПРИМЕР:
//    МассивПараметров = ПолучитьМассивПараметров("Печать(Ссылка, "Счет", КоличествоЭкземпляров, ПолучитьЗаголовокДокумента(Ссылка));
//
//В результате получим МассивПараметров с содержимым:
//                                                        Ссылка
//                                                        "Счет"
//                                                        КоличествоЭкземпляров
//                                                        ПолучитьЗаголовокДокумента(Ссылка)
//
//SeiOkami    01_04_2012
//
Функция ПолучитьМассивПараметров(ТекстВызоваФункции) Экспорт
   
   Текст = СокрЛП(ТекстВызоваФункции);
   
   МассивПараметров = Новый Массив;
   
   Если ПустаяСтрока(Текст) тогда
       Возврат МассивПараметров ;
   КонецЕсли;
   
   //кр - координата
   
   крТочкиСЗапятой = Найти(Текст, ";");
   Текст = Лев(Текст, крТочкиСЗапятой - 1);
   
   крОткрСкобки = Найти(Текст, "(");
   Текст = Прав(Текст, СтрДлина(Текст) - крОткрСкобки);
   
       
   Пока НЕ ПустаяСтрока(Текст) цикл
       
       крЗапятой = Найти(Текст, ",");
       крОткрСкобки = Найти(Текст, "(");
       крЗакрСкобки = Найти(Текст, ")");
       
       Если крЗапятой = 0 и  крОткрСкобки = 0 и крЗакрСкобки = 0 тогда
           Прервать;
       КонецЕсли;        
       
       Если крОткрСкобки = 0 тогда
           Если крЗапятой = 0 тогда
               Если крЗакрСкобки = 0 тогда
                   Прервать;
               Иначе
                   Параметр = Лев(Текст, крЗакрСкобки - 1);
                   Текст =  Прав(Текст, СтрДлина(Текст) - крЗакрСкобки);
               КонецЕсли;
           Иначе
               Параметр = Лев(Текст, крЗапятой - 1);        
               Текст = Прав(Текст, СтрДлина(Текст) - крЗапятой);
           КонецЕсли;
       Иначе
           Если крОткрСкобки < крЗапятой ИЛИ крЗапятой = 0 тогда
               Параметр = Лев(Текст, крЗакрСкобки);
               Текст = Прав(Текст, СтрДлина(Текст) - крЗакрСкобки);
           Иначе
               Параметр = Лев(Текст, крЗапятой - 1);        
               Текст = Прав(Текст, СтрДлина(Текст) - крЗапятой);
           КонецЕсли;            
       КонецЕсли;
       
       Параметр = СокрЛП(Параметр);
       
       Если Не ПустаяСтрока(Параметр) тогда
           МассивПараметров.Добавить(Параметр);        
       КонецЕсли;
       
       Текст = СокрЛП(Текст);
       
   КонецЦикла;
   
   Возврат МассивПараметров;
   
КонецФункции
10 SeiOkami
 
04.01.13
19:40
Вот правильное описание:


//Возвращает массив с параметрами, передаваемыми в функцию\процедуру
//
//ПРИМЕР:
//    ТекстВызоваФункции = "Печать(Ссылка, "Счет", КоличествоЭкземпляров, ПолучитьЗаголовокДокумента(Ссылка)";
//    МассивПараметров = ПолучитьМассивПараметров(ТекстВызоваФункции);
//
//В результате получим МассивПараметров с содержимым:
//                                                        Ссылка
//                                                        "Счет"
//                                                        КоличествоЭкземпляров
//                                                        ПолучитьЗаголовокДокумента(Ссылка)
//
//SeiOkami    01_04_2012
//
11 SeiOkami
 
04.01.13
19:43
Может что-то не верно. Тыкните =)
12 acsent
 
04.01.13
19:47
перенос строк норм отрабатывает?
13 acsent
 
04.01.13
19:47
а строковые литералы с запятыми?
14 SeiOkami
 
04.01.13
19:48
(12), должна, так как постоянно СокрЛП делает.
Я тестил на таком вызове

       
       УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
           КоллекцияПечатныхФорм,
           "АвансовыйОтчет",
           "Авансовый отчет",
           СформироватьПечатнуюФормуАвансовогоОтчета(МассивОбъектов, ОбъектыПечати)
       );
15 SeiOkami
 
04.01.13
19:49
(13), не совсем понял, что есть  "строковые литералы с запятыми" =)
16 hhhh
 
04.01.13
23:14
"Авансовый,, отчет"
17 stal76
 
04.01.13
23:28
18 SeiOkami
 
05.01.13
00:46
(17), Спасибо, сейчас поковыряю !)
(16), не понял что это значит
19 Конфигуратор1с
 
05.01.13
00:47
(18) Если в модуле написано допустим УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
           КоллекцияПечатныхФорм,
           "АвансовыйОтчет",
           "Авансовый . , отчет",
           СформироватьПечатнуюФормуАвансовогоОтчета(МассивОбъектов, ОбъектыПечати)
       );
20 SeiOkami
 
05.01.13
00:50
(19), хм... об этом не подумал. Надо исправить. Спасибо)
21 SeiOkami
 
05.01.13
17:36
(8), нашел я goldparser (в инструментах разработчика) и нашел грамматику восьмерки ( http://itland.ru/forum//index.php?showtopic=16752 ).

Может кто подсказать как с ним теперь оперировать? Киньте ссылку где можно почитать, пожалуйста =)
22 HeroShima
 
05.01.13
18:05
(21) ссенкс за ссыль
23 SeiOkami
 
05.01.13
18:14
(22), теперь бы понять как эта dll работает...
24 HeroShima
 
05.01.13
18:26
+(22) при регистрации спрашивает: "Это контрольный вопрос против ботов. Введите названия фирмы, продуктам которой посвящен данный форум. Вводите на русском"
- вводил тонну вариантов 1c и ITLand - ничего не берёт. Кто может подсказать чего им нужно?
25 SeiOkami
 
05.01.13
18:29
(24), я вводил 1с и зарегало.
26 HeroShima
 
05.01.13
18:41
(25) никак...
27 acsent
 
05.01.13
18:46
(26) по русски/английски?
28 HeroShima
 
05.01.13
18:47
29 acsent
 
05.01.13
18:48
(28) да ты робот просто ))
30 HeroShima
 
05.01.13
18:56
(29) спасибо на добром слове)
(23) насколько я помню, их движку скармливается скомпилированная их же инструментом грамматика и исходник. На выходе получаем дерево структуры, или около того.
31 SeiOkami
 
05.01.13
18:58
Если есть у кого код с примером использования, скиньте пожалуйста.