CfProject – декомпиляция/компиляция конфигураций 1С:Предприятие

CfProject – декомпиляция/компиляция конфигураций 1С:Предприятие

CfProject выгружает CF-файлы в удобочитаемые Xml и текстовые файлы, а также загружает их обратно. Утилита предназначена для организации контроля версий через SVN, GIT, Mercurial , для помощи при восстановлении испорченных файлов конфигураций, а также для изучения внутренней структуры cf-совместимых файлов. Самым близким аналогом утилиты является V8Unpack.


06.01.2012 08:54 [15.05.2012 08:09] (Elisy) Elisy 45 [+] [−] Перейти к публикации

Страницы: 1
1.
yandextesting 06.01.12 16:24 URL

Разработчики платформы на последнем семинаре анонсировали выгрузку/загрузку конфигурации в XML-формате средствами самой платформы в одном из ближайших релизов - предположительно уже в 8.2.16.

Ответили: (2) (5)

2.
tormozit 06.01.12 16:50 URL

(1) Скорее всего там будет опять же лишь небольшой процент содержимого конфигурации (модули, тексты интерфейса и т.д.).

Ответили: (4) (11)

3.
8SiriuS8 07.01.12 1:46 URL

(xml) все это конечно круто. Но как собрать сие добро обратно. Сейчас самая актуальная проблема это выгрузка форм и макетов так как с программным кодом более мене все понятно 5есть стандартный механизм есть V8Unpack которые выгружают все в более менее удобочитаемом виде.

Ответили: (6)

4.
tango 07.01.12 1:55 URL

соглашусь с (2)
ВСЮ конфу в екемель? - да никогда.
это ж барабан на встречу

Изменено: tango - 07.01.12 2:03
5.
Elisy 07.01.12 8:37 URL

(1) Это отличная новость - выгрузка XML проблему контроля версий охватит. На повестку дня встанет программный доступ к объектам конфигураций для создания "на лету". CfProject и MdInternals будут переориентированы в этом направлении.

Ответили: (8)

6.
Elisy 07.01.12 8:44 URL

(3) CfProject собирает все, что нараспаковывал, обратно

7.
Misanets 07.01.12 21:48 URL

А, собственно зачем такие танцы??? Ни кто не отменял бэкап скула или дт.

Ответили: (13)

8.
German 07.01.12 23:56 URL

(5)
http://main.1c-ei.ru/Home/help/object_config/depot

Изменено: German - 07.01.12 23:57
9.
zavedeev 08.01.12 0:05 URL

Молодец

10.
anton.fly7 08.01.12 15:15 URL

а что эта программа сделает с модулями, которые не включены в поставку?
и с запаролеными обработками?

Ответили: (15)

11.
BabySG 08.01.12 19:00 URL

(2) Вся конфа будет выгружаться, во всяком случае - так было заявлено.
Ибо звучало так: "можно выгрузить и загрузить обратно".
Таким образом, если хоть что-то не выгрузили - что мы же мы потом загрузим? :)

12.
softest 08.01.12 20:13 URL

Интересно что оно делает из формой или с макетом или с запароленными модулями, нужно будет посмотреть!

13.
Elisy 09.01.12 7:46 URL

(7) Как-то работа с cf и ваше предложение о dt- sql- архивах не согласуются. Не могли бы вы мысль немного развернутей описать? :) Спасибо

14.
Degastantrag 09.01.12 10:12 URL

не плохо, респект

15.
Elisy 09.01.12 11:57 URL

(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С.

Изменено: Elisy - 09.01.12 12:00
16.
Maks_Payn 10.01.12 11:19 URL

Спасибо! Интересная вещь!

17.
Гость 10.01.12 22:52 URL

Можнло поэсперементировать при загрузке. Серьёзная штука

18.
Elisy 11.01.12 14:37 URL

Кому тяжело скачивать Elisy .Net Bridge 4.0.3 с англоязычного форума, выложили дистрибутив на Инфостарт здесь:
http://infostart.ru/public/20035/

19.
Imm 12.01.12 4:13 URL

За старания +. Очень интересная штуковина

20.
Maks888 12.01.12 9:17 URL

Всем спасибо за комменты!

21.
V0fka 19.01.12 13:13 URL

А исходничков не будет?

22.
MMF 16.05.12 16:16 URL

Плохая идея, пока выгрузишь, а тем более соберешь, УПП - состаришься. Кому оно вообще нужно - конфа в xml?

Ответили: (23)

23.
Elisy 17.05.12 7:11 URL

(22)

Цитата
Плохая идея, пока выгрузишь, а тем более соберешь, УПП - состаришься. Кому оно вообще нужно - конфа в xml?

В первую очередь нужна конфа в xml или другом читаемом формате для систем версионирования. 1С-ники работают с хранилищем конфигурации, не догадываясь, что научный прогресс шагнул далеко вперед.
На втором месте - испорченные конфигурации, которые можно выгрузить и руками исправить.
Далее - автоматическое создание конфигураций и обработок, автоматизация операций конфигуратора.
Как-то так.

Ответили: (24)

Изменено: Elisy - 17.05.12 7:12
24.
pumbaE 17.05.12 11:36 URL

(23) Elisy, именно xml плохая идея. Покажите мне нормальную diff алку для xml файлов, а потом говорите, что xml хорош для систем версионирования. Hg, git, bzr рекомендуют для xml файлов ставить признак binary, что бы система не делала автоматических merge.

автоматизация операций конфигуратора: каких интерестно?

Ответили: (25)

25.
Elisy 17.05.12 12:14 URL

(24) pumbaE,
xml хорош тем, что можно проверить целостность каждого файла через соответствие открывающих и закрывающих тэгов. Это распространенный формат, поддерживаемый многими в мире. Имеет текстовое наглядное представление, поэтому распознается и хранится системами версионирования как родной формат. Первый раз слышу о рекомендации ставить на него признак binary. Будьте добры предоставьте ссылку на такую рекомендацию, а то непонятно в каком контексте это нужно понимать. Тысячи проектов на Asp.Net, PHP живут в СВН без этого признака, являясь по сути XML-подобными (html со вставками кода).

К слову сказать, не вся функциональность CFProject документирована. Этот проект позволяет делать выгрузку не только в xml, но и в родной для 1С формат со множеством фигурных скобок.

Навскидку - автоматизировать замену всех комментариев реквизитов Организация в документах или поиск и замена во всех ячейках в макетах конфигурации. Написание своих визардов по созданию форм, макетов.

Ответили: (26)

26.
pumbaE 17.05.12 13:04 URL

(25) Elisy, мне понятно стало, что с xml и версионым контролем вы активно не работали.
Поясню:
Для затравки , svn покажет красиво различия в xml, если структура не менялась, а только содержимое элементов, то конечно все просто и красиво, пример Не svn но принцип думаю понятен , но вот такой распространенный случай как : в объект конфигурации добавили слово удалить и добавили новый объект с тем же именем, svn не решит и понять в выводе diff будет сложно, т.к. автоматическая решалка конфликтов, предложит оставить наименование без "удалить".

Ответили: (27)

27.
Elisy 17.05.12 15:59 URL

(26) pumbaE,
понятно, что всегда бывают конфликты и не только в xml, но и с исходным кодом других проектов.
Напомню, что обсуждение началось с того, что было высказано сомнение в формате xml, как взятого за основу в обработке. Как обоснование приведено сравнение версий в (26). Но тогда возникает вопрос, какой формат будет более подходящим? Сколько приходит на ум потенциальных форматов, везде будут конфликты с переименованием реквизита в "удалить" и добавлением нового одноименного при автоматическом решении конфликтов.
Не проверял, но писали где-то, что проект Mercurial более стойкий к такому виду конфликтов, так как спроектирован был специально для этого.

Страницы: 1

45 [+] [−] Перейти к публикации