CfProject – декомпиляция/компиляция конфигураций 1С:Предприятие
CfProject выгружает CF-файлы в удобочитаемые Xml и текстовые файлы, а также загружает их обратно. Утилита предназначена для организации контроля версий через SVN, GIT, Mercurial , для помощи при восстановлении испорченных файлов конфигураций, а также для изучения внутренней структуры cf-совместимых файлов. Самым близким аналогом утилиты является V8Unpack.
06.01.2012 08:54 [15.05.2012 08:09] 45 [+] [−] Перейти к публикации
(xml) все это конечно круто. Но как собрать сие добро обратно. Сейчас самая актуальная проблема это выгрузка форм и макетов так как с программным кодом более мене все понятно 5есть стандартный механизм есть V8Unpack которые выгружают все в более менее удобочитаемом виде.
Ответили: (6)
а что эта программа сделает с модулями, которые не включены в поставку?
и с запаролеными обработками?
Ответили: (15)
(10)(12) Не стоит слишком много ждать от прототипа. Думаю, что утилита поместит такие модули в Unresolved-каталог "как есть".
Хотя в Elisy MdInternals есть зачатки функционала декомпиляции opcode-модулей, которого хватает, чтобы понять суть декомпилированного модуля, но CfProject этот функционал не использует.
На C# декомпиляция через объект класса Elisy.MdInternals.Cil.CodeReader выглядит примерно так:
| Код |
|---|
public static void UnloadCommonModules(Image image, string folder)
{
MetadataPackage md = new MetadataPackage(image);
var requestModules = from o in md.MetadataObjects.AsParallel()
where o is CommonModule
select new {Content = o.ImageRow.Body.ToString(), FileName = o.ImageRow.FileName };
var requestContent = from module in requestModules.AsParallel()
join ir in image.Rows.AsParallel() on module.FileName + ".0" equals ir.FileName
//orderby module.Content
select new { Module = module.Content, Image = ((Image)ir.Body).Rows.Where(i => i.FileName == "image").FirstOrDefault() };
var files = requestContent.ToArray();
foreach (var file in files)
{
if (file.Image == null)
continue;
string fileName = file.Module;
fileName = fileName.Substring(fileName.IndexOf('"') + 1);
fileName = fileName.Substring(0, fileName.IndexOf('"'));
string opCodeString = file.Image.Body.ToString();
using (StreamWriter outfile =
new StreamWriter(folder + fileName + ".opcode"))
{
outfile.Write(opCodeString);
}
CodeReader reader = new CodeReader(opCodeString, true);
string decompiledString = reader.GetSourceCode();
using (StreamWriter outfile =
new StreamWriter(folder + fileName + ".txt"))
{
outfile.Write(decompiledString);
}
}
|
В общем - декомпиляция модулей - это тема отдельной статьи. Если будет интерес, постараемся сделать примеры с кодом 1С.
| Цитата |
|---|
| Плохая идея, пока выгрузишь, а тем более соберешь, УПП - состаришься. Кому оно вообще нужно - конфа в xml? |
В первую очередь нужна конфа в xml или другом читаемом формате для систем версионирования. 1С-ники работают с хранилищем конфигурации, не догадываясь, что научный прогресс шагнул далеко вперед.
На втором месте - испорченные конфигурации, которые можно выгрузить и руками исправить.
Далее - автоматическое создание конфигураций и обработок, автоматизация операций конфигуратора.
Как-то так.
Ответили: (24)
(23) Elisy, именно xml плохая идея. Покажите мне нормальную diff алку для xml файлов, а потом говорите, что xml хорош для систем версионирования. Hg, git, bzr рекомендуют для xml файлов ставить признак binary, что бы система не делала автоматических merge.
автоматизация операций конфигуратора: каких интерестно?
Ответили: (25)
(24) pumbaE,
xml хорош тем, что можно проверить целостность каждого файла через соответствие открывающих и закрывающих тэгов. Это распространенный формат, поддерживаемый многими в мире. Имеет текстовое наглядное представление, поэтому распознается и хранится системами версионирования как родной формат. Первый раз слышу о рекомендации ставить на него признак binary. Будьте добры предоставьте ссылку на такую рекомендацию, а то непонятно в каком контексте это нужно понимать. Тысячи проектов на Asp.Net, PHP живут в СВН без этого признака, являясь по сути XML-подобными (html со вставками кода).
К слову сказать, не вся функциональность CFProject документирована. Этот проект позволяет делать выгрузку не только в xml, но и в родной для 1С формат со множеством фигурных скобок.
Навскидку - автоматизировать замену всех комментариев реквизитов Организация в документах или поиск и замена во всех ячейках в макетах конфигурации. Написание своих визардов по созданию форм, макетов.
Ответили: (26)
(25) Elisy, мне понятно стало, что с xml и версионым контролем вы активно не работали.
Поясню:
, svn покажет красиво различия в xml, если структура не менялась, а только содержимое элементов, то конечно все просто и красиво, пример , но вот такой распространенный случай как : в объект конфигурации добавили слово удалить и добавили новый объект с тем же именем, svn не решит и понять в выводе diff будет сложно, т.к. автоматическая решалка конфликтов, предложит оставить наименование без "удалить".
Ответили: (27)
(26) pumbaE,
понятно, что всегда бывают конфликты и не только в xml, но и с исходным кодом других проектов.
Напомню, что обсуждение началось с того, что было высказано сомнение в формате xml, как взятого за основу в обработке. Как обоснование приведено сравнение версий в (26). Но тогда возникает вопрос, какой формат будет более подходящим? Сколько приходит на ум потенциальных форматов, везде будут конфликты с переименованием реквизита в "удалить" и добавлением нового одноименного при автоматическом решении конфликтов.
Не проверял, но писали где-то, что проект Mercurial более стойкий к такому виду конфликтов, так как спроектирован был специально для этого.
45 [+] [−] Перейти к публикации
Разработчики платформы на последнем семинаре анонсировали выгрузку/загрузку конфигурации в XML-формате средствами самой платформы в одном из ближайших релизов - предположительно уже в 8.2.16.
Ответили: (2) (5)