В конце заметки — ссылка на исходники.
О чем идет речь?
Вам приходилось отправлять внешнюю обработку по почте и в самый последний момент перепроверить — та ли это версия? Вам приходилось задаваться вопросом — какая из этих обработок с именами "Обработка1", "Обработка1 (новая)" и "Обработка1 (новая2)" является актуальной? А чем они отличаются? Если вы уже познакомились с системами контроля версий, то наверняка, сталкиваетесь с вопросом — какие изменения внесены между версиями обработки?
Вы хотите получить возможность быстро посмотреть содержимое внешней обработки и сравнить ее с другой? И все это без запуска 1С:Предприятия, только из оболочки ОС? Тогда мы идем к вам! 🙂
Благодарности
Толчком к созданию программы V8 Viewer стала публикация V8Reader (//infostart.ru/public/106310/) — внешняя обработка, отображающая содержимое файлов 1С и сравнивающая их. Огромное спасибо автору утилиты V8Unpack (//infostart.ru/public/15695/) за открытый исходный код. Это круто! Наличие исходников позволило перетащить логику чтения к себе и не включать в дистрибутив саму утилиту V8Unpack в первозданном виде. Кроме того, в отличие от V8Unpack чтение выполняется без распаковки во временный каталог, напрямую из файла 1С.
Задачи на разработку
Итак, я хотел чтобы у меня была возможность:
- Просматривать историю изменений версий в хранилище SVN (Subversion), в котором у меня лежат все мои внешние обработки. Причем просматривать не просто как "Двоичные файлы", а видеть, что находится внутри.
- Сравнивать изменения во внешних обработках
- Открывать двойным щелчком в проводнике (и в любой другой программе) файлы внешних обработок
- Просматривать содержимое "внутренних" файлов контейнера cf/epf.
- Кстати, совсем недавно наткнулся на (//infostart.ru/public/124213/), когда собственный велосипед уже был написан 🙂
- Все вышеперечисленное должно работать без установки 1С на машину.
Результат
Поставленные самому себе задачи были достигнуты. Написан инструмент "V8 Viewer".
Ниже располагается инструкция по применению.
Возможности программы
На данный момент, актуальная версия 1.0.2.6 умеет:
- Регистрироваться в системе, как обработчик открытия внешних отчетов и обработок. Это означает, что в любом месте системы, где есть возможность открыть файл на просмотр, можно открыть и посмотреть содержимое внешнего отчета(обработки).
- Просматривать содержимое файла, открывать макеты, модули форм и объектов. Для управляемых форм возможен просмотр элементов формы.
- Выполнять сравнение двух файлов, аналогично тому, как сделано в самой платформе. Имеется возможность сравнения дерева метаданных, содержимого макетов и модулей.
- Предусмотрен "отчет по свойствам" — в дереве сравнения можно отобразить отчет, похожий на стандартный "Отчет о сравнении объектов".
- В редакторе модуля есть возможность навигации по перечню процедур и функций, сворачивание/разворачивание всех блоков кода (по аналогии со стандартным редактором кода)
- Отображать внутреннее содержимое контейнера — низкоуровневый "просмотр" файла. Запускается правым щелчком на файле, пункт "Browse".
- Предусмотрено автоматическое обновление. При запуске проверяется наличие обновлений и выдается предложение об обновлении.
Tortoise SVN
Итак, основная задача — взаимодействие с системой контроля версий SVN, а главное — замечательной оболочки для нее — TortoiseSVN. Если вы еще не знакомы с системами контроля версий, то самое время этим заняться. На мой взгляд — жизненно необходимая вещь, когда вам нужно хранить всю свою работу и время от времени возвращаться к предыдущим версиям.
Программа TortoiseSVN — это графическая оболочка для системы контроля версий Subversion. Скачать можно с официального сайта — http://tortoisesvn.net/downloads.html.
Принципы работы с SVN.
Поскольку статья все-таки не про SVN, то подробно останавливаться не буду. Тем не менее, кажется, что пару слов сказать стоит.
При работе с SVN вы создаете где-нибудь репозитарий — хранилище, в котором будет лежать вся история версий. Это может быть каталог на компьютере, но лучше — где-то в сети Интернет. Допустим, мы хотим хранить версии просто на машине. Заходим в пустой каталог (пусть будет D:REPO) и в контекстном меню выбираем пункт TortoiseSVN->Create repository here. Теперь, этот каталог будет нашей базой данных со всей историей версий.
Далее, есть понятие "рабочего каталога". "Рабочий каталог", это то место, в котором вы ведете непосредственно разработку. Этот каталог "подключен" к репозиторию и может обмениваться с ним изменениями (фиксировать новые изменения, откатываться к предыдущим).
Заходим в любой пустой каталог, выбираем в контекстном меню "SVN Checkout" и указываем путь до репозитория. Теперь, каталог подключен к репозиторию.
Мы можем добавлять туда файлики, изменять их и отправлять на хранение в репозиторий. Вся изменения теперь сохраняется и возможен откат до любого предыдущего состояния.
Прелесть в том, что можно сравнивать 2 любые версии файла. Меню "Tortoise SVN->Show log->Compare with..".Кроме того, Tortoise позволяет сравнивать вообще любые 2 файла, не только в рабочем каталоге, а вообще везде.
В качестве объектов сравнения понимает текстовые файлы и картинки, но, разумеется, не понимает устройство внешних обработок 1С. Наша задача — научить его.
Настройка Tortoise SVN
1. Устанавливаем V8 Viewer
2. В любом каталоге щелкаем правой кнопкой и выбираем TortoiseSVN->Settings->Advanced
3. В окне Advanced добавляем расширение .epf и указываем командную строку запуска V8 Viewer C:Program Filesv8viewer.exe -diff %base %mine
Обратите внимание на параметры командной строки:
- ключ -diff запускает программу в режиме сравнения
- шаблоны %base и %mine — это ключевые слова Tortoise. Вместо них он подставит пути к выбранным Вами файлам.
По умолчанию, при сравнении модулей программа распаковывает их во временный каталог. При сравнении внешним diff-инструментом видны имена временных файлов, которые неинформативны.
В версии 1.0.1 и старше возможно указание дополнительных ключей -name1 и -name2. В этих аргументах можно передать заголовки сравниваемых файлов, которые будут отображены в интерфейсе. Для TortoiseMerge можно воспользоваться макросами %bname и %yname. В них Tortoise передает заголовки сравниваемых файлов, по которым их можно идентифицировать.
В конечном итоге, строка запуска сравнения может иметь следующий вид:
v8viewer.exe -diff %base %mine -name1%bname -name2%yname
символами процента (%) отмечены ключевые слова Tortoise вместо которых он подставляет конкретные значения имен сравниваемых файлов и заголовков к ним. Рекомендуется настроить ключи -name1 и -name2, чтобы повысить информативность сравнения двух файлов 1С, чтобы видеть — где какой. Примеры настройки командной строки можно прочесть ниже.
4. Сохраняем изменения.
Теперь, если мы войдем в каталог с внешними обработками и выделим две из них, то в контекстном меню "Tortoise SVN ->" появится пункт "Diff", который запустит сравнение файлов.
Особенности программы
Системные требования
Требуется Microsoft .NET Framework версии 4.0 или выше.
Вся работа со внутренними файлами 1С, такими как табличные документы и графические схемы, выполняется программой "1С:Работа с файлами". Ее наличие необязательно, но просмотреть и сравнить табличные макеты будет нельзя.
Настройка V8 Viewer
Какой-то специфической настройки не требуется, тем не менее, пару слов сказать хочется. Все настройки выполняются в соответствующем окне, назначение настроек описано там же:
Для работы с файлами 1С, такими, как табличные документы и графические схемы требуется наличие программы "1С:Работа с файлами". Программа бесплатная, скачать можно с сайта 1С, перейдя по ссылке прямо из окна настроек. Сравнение табличных документов также выполняется этой утилитой. Без нее, нельзя будет просмотреть табличный макет, но при сравнении двух обработок все равно будет видно, что макеты различаются.
Для сравнения текстов используется любой сторонний diff-viewer. В настройках необходимо указать командную строку для запуска. Метки "%1" и "%2" замещают имена файлов, передаваемые для сравнения. Необязательные метки %name1 и %name2 используются в качестве заголовков файлов.
Ну и рекомендуется настроить соответствие типу файла — с помощью флажка "файловые ассоциации".
Примеры настройки командной строки для diff-просмотрщика
1. Путь к файлу *.exe должен быть заключен в кавычки. Это стандартное условие для запуска программ, если путь к ним содержит пробелы.
2. Подавляющее большинство инструментов для сравнения файлов понимают синтаксис:
[путь к exe] [первый файл] [второй файл]
Строка запуска для такого случая должна иметь вид: "C:[путь к exe]" %1 %2
Многие современные программы для сравнения позволяют также указывать дополнительные опции, например — читабельный текст в заголовке сравниваемых файлов. Такие заголовки упрощают жизнь, т.к. видно — где какой файл в окне сравнения. Для TortoiseMerge строка запуска будет иметь следующий вид:
"C:[путь к exe]" /base:%1 /mine:%2 /bname:%name1 /yname:%name2
Более подробно о командных параметрах популярных diff программ можно прочитать здесь: http://ashamray.blog.ru/79251381.html
Гарантии производителя
Со своей стороны я гарантирую отсутствие в коде программы шпионских закладок и умышленно вредоносного кода. Тем не менее, программа поставляется "как есть" и Вы используете ее на свой страх и риск.
Исходные коды
Исходные коды Вы можете скачать по адресу http://sourceforge.net/p/v8reader/code/HEAD/tree/.
Вы можете использовать исходники по своему усмотрению, однако, обязаны обеспечить упоминание авторства. Исходный код предоставляется на условии лицензии GPL3. Если захотите поместить свой код в основной проект — напишите мне, я дам доступ к репозиторию на запись.
Благодарности
Хочется выразить искреннюю благодарность и большущее человеческое спасибо Виктории Дорохиной (//infostart.ru/community/profile/355360/) и Свирепому Бамбру (//infostart.ru/profile/128365/) за разработку V8Reader.epf, с которой все началось, указание на мои ошибки, ссылку на параметры diff-viewer-ов и чуткое тестирование программы V8Viewer.
Заключение
Мне хочется получить отзыв сообщества на тему полезности данного инструмента. Писался он, в основном, ночами, под косыми взглядами супруги. Осталось довольно много задач на реализацию, в частности, поддержка редактирования модулей и макетов, а также открытие файлов *.cf. Приглашаются желающие помочь в разработке.
Мне хотелось бы, чтобы V8 Viewer стал полезным инструментом, который помогает многим людям в ежедневной работе.
От себя добавлю, что испытываю неподдельный восторг, когда, прикрепляя файл к письму в Outlook, я щелкаю по иконке вложения *.epf и получаю возможность перед отправкой посмотреть содержимое модулей, макетов и т.п.
P.S. Если понравится, не забывайте вернуться на эту страницу и поставить "плюсик" 🙂
Спасибо за внимание!
Посмотрел. Круто!
Теперь в моем наборе «must have».
Почему сразу не подвязаны файлы отчетов *.erf ?
Не хватает просмотра макетов СКД)
*.cf даже открывает, можно узнать название конфигурации и почитать глобальный модуль)
(1) Serj1C, читаем статью: это предварительная версия. Отчеты намеренно не подвязаны, ради экономии времени. Обязательно будут. Макеты СКД должны открываться. Разве нет?
Внушает!
Эх, когда ж ктонить уже на JavaScript сравнение форм портирует 🙁
(3) orefkov, польщен, спасибо!
замысел хорош, хотя, как справедливо замечено, идея не новая и уже есть несколько реализаций. (хотя в данной разработке конечные цели поставлены, конечно, более глобальные, чем в уже имеющихся)
4-го фрэймворка по умолчанию нет в WinXP SP3, по крайней мере, на оф.диске с СП3 у меня вшит только 2.0
(5) andrewks, странно, у меня есть. Но у меня тестовый образ диска кхм… не совсем официальный…
Вернее, у меня есть образ диска, на котором я тестировал «чистый запуск». Диск вроде родной, не «ремикс». Все запускается, работает.
Вот ошибка выпала.
При открытии формы в обработке под 8.2. Система win 7.
System.ArgumentException: Folding must be within document boundary
в ICSharpCode.AvalonEdit.Folding.FoldingManager.CreateFolding(Int32 startOffset, Int32 endOffset)
в ICSharpCode.AvalonEdit.Folding.FoldingManager.UpdateFoldings(IEnumerable`1 newFoldings, Int32 firstErrorOffset)
в V8Reader.Controls.CodeControl.foldingUpdateTimer_Tick(Object sender, EventArgs e)
в System.Windows.Threading.DispatcherTimer.FireTick(Object unused)
в System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
в MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)
в System.Windows.Threading.Dispatcher.WrappedInvoke(Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
в System.Windows.Threading.DispatcherOperation.InvokeImpl()
в System.Threading.ExecutionContext.runTryCode(Object userData)
в System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)
в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
в System.Windows.Threading.DispatcherOperation.Invoke()
в System.Windows.Threading.Dispatcher.ProcessQueue()
в System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
в MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
в MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
в System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
в MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)
в System.Windows.Threading.Dispatcher.WrappedInvoke(Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
в System.Windows.Threading.Dispatcher.InvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
в MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
в MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
в System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
в System.Windows.Application.RunInternal(Window window)
в V8Reader.Program.<>c__DisplayClass7.<OpenFile>b__5()
в V8Reader.Program.SafeMessageLoop(Action DoMessageLoop)
(7) Nio, если не затруднит, приложите проблемный файл
(0) Выглядит интересно, респект 🙂 Правда на .NET у меня аллергия, но это так, к слову.
А чем сделан просмотр кода? Что за редактор? Подсветку, сворачивание сами делали, или готовое где-то взяли?
(8)
Вот. Но это честно был первый файл в который я ткнул.
(0) Маленькое уточнение: не только SVN но и для всей линейки Tortoise применима данная настройка (git, mercurial, bzr).
(3) orefkov, сравнение ведь это пол дела, захотите сразу же и merge форм 🙂
(9) Magister, аллергия? И в чем она выражается? Скорее религиозные убеждения… А это очень спорный аргумент против .NET
Редактор AvalonEdit. Но Вам им пользоваться нельзя, у вас аллергия :):):)
(12) под линуксом не работает . Я надеюсь, что все-таки у Magister получиться доработать редактор и запустить его в linux версии конфигуратора.
(13) pumbaE, под Линуксом, ага, не работает. и на Макоси тоже. Хотя есть Mono, можно вспомнить и пресловутый 1% компьютеров 🙂
P.S. у самого дома — линукс, не стоит разводить старый, как мир холивар.
(14) я не развожу, я просто уточняю.
p.s.: вам скоро захочется делать merge для обработок ибо бранчи это удобно, еще захочется посмотреть историю изменения определенного куска модуля.
(13) pumbaE, а что за редактор?
(16) andrewks, на базе SynEdit, альтернатива SciColorer — это в снегопате. Если партнеры продавят api в конфигураторе, то когда-нибудь думаю можно будет и без снегопата.
А зачем все это нужно?
Текстовый файл с историей версий, описание, версии обработок в архиве.
SVN — нужны только при групповой работе (и тогда да, ставить SVN какой-нить, просмоторщик вроде этого и т.д.), но никак не одному программисту.
Все 🙂
А сравнивать обработки можно вполне и типовыми средствами.
(18) AlexO, хотел написать подробно, вот ваше
отбило охоту кормить троля.
Отвечу кратко — удобство.
Недосыпание очень вредит здоровью, а работа по вечерам вредит семейным отношениям. Поэтому хочу попросить автора все же поберечь себя и семью и работать в рабочее время 🙂 Я серьезно.
(20) AlexO, кхм… история версий в архиве, а описание — в txt???
Вопрос: Сколько кликов мышкой у вас получается от момента сохранения файла до момента регистрации новой версии?
Ну или не кликов, а элементарных действий?
А при откате к предыдущей версии? Короче, Вы либо тролль, либо системой контроля версий не пользовались ни разу. При всем уважении.
(20) AlexO, прочтите (11) , автор предпочитает «громоздкий» svn (но svn развивается, посмотрите на версию 1.7 уже даже .svn в корне лежит, а не в каждой папке) , я использую bzr и git.
(21) ZLENKO.PRO, Спасибо. Я уже берегу 🙂
(0) зачётная штука ! было бы здорово научить её вносить и сохранять изменения. Т.е. по сути на компе с отсутствующей платформой можно было бы по-быстрому поправить обработку, отчёт или макет. А в дальнейшем переложить функционал и на cf/1cd..
(22)
все столько же, как и создавать-нажимать кнопки и писать описание в SVN.
кто вам делает откат? SVN? точно такой же «откат» — берете старую версию из архива и делаете с ней, что хотели.
НО: зато все просто, всегда знаешь — как все устроено и где лежит, простейшая структура, возможность создания перекрестных «ссылок», виден размер всего и в частности, можно «подключать» любые файлы, компоновать все в какой душе угодно последовательности и структуре, могу поменять структуру как требуется, а не как заложили разработчики, если нужно по другому скопоновать файлы или время требует перемен, быстрое создание архива всей библиотеки и перенос и развертывание — в общем, полная свобода.
И никаких ограничений 🙂
Ок, флаг Вам, как говорится в руки! 😀
Сдался. Я ожидал, что дойдет до обсуждения хранения обработок на дискетах и признания того что малый размер дискет дисциплинирует всякое Г не деражать.
(12) В том, что он медленный, по сравнению с «родным» кодом. Вот 1С пишут почему-то на C++, а не на .NET. Как вы думаете, почему? 🙂
Это сейчас уже не так критично, а вот помню свой Athlon 700 MHz с 320M RAM — там разница была, что называется, на лицо.
(13) Пока что мешает доработать нехватка времени и отсутствие всего требуемого функционала в Снегопате. С Сашей по этому поводу общались, но у него времени мало сейчас — так что быстро не получится.
(29) Magister, не только из-за скорости, думаю. Кажется, что независимость от MS не последнюю роль играет. Ну и конечно, более полный контроль над кодом.
(31) Зря вы так, на самом деле платформа 1С (по моему непрофессиональному мнению) — это достаточно высокотехнологичная разработка, и «школьных знаний» для написания такого продукта явно не хватит.
Для специалистов, способных написать приложение такого уровня, изучение C# не предоставит большого труда. Точно так же не составит труда фирме 1С нанять программистов, которые уже его знают 🙂
(31) sanches; kuntashov; srv7; Evil Beaver;
Судя по массовым минусам — вы все согласны, т.е. вам тоже всем хватает только школьных знаний? 🙂
(33) Потому что цель 1С — зарабатывать деньги. И пока что эта цель вполне достигается.
Не поставили задачу программистам пофиксить что-то — вот и не пофиксили. Всё просто 🙂
А вот [quote]Используют бесплатные компоненты, вместо написания своих.[/quote]это наоборот хорошо. Зачем изобретать велосипеды?
(34) AlexO, а вы все зарабатываете стартмани троллингом )))
(31) а меня в институте учили что Си и С++ это как бы не одно и тоже.
И еще — а в какой это школе С++ дают или С ? Вы скажите — я постараюсь туда сына перевести, а то мы все по книжкам, да по книжкам и дома…
ура — наконец таки реализуем svn для внешних обработок 🙂
Огромное спасибо.
Спасибо!
AlexO вообще чересчур «красноречив»
(41) flash2k, Так на всех обработках или на конкретных? Правильно ли я понял, что падает при открытии какого-нибудь модуля, что просто окно обработки все-таки открывается?
окно открывается, ошибка возникает при открытии модуля обработки/формы
пробовал на первых 5 попавшихся
(43) flash2k, Спасибо. Пока записал в загадки. Какая версия XP?
xp sp3
Разработка хорошая, надеюсь так и станется бесплатной, и будет радовать разработчиков исправлением багов и добавлением возможностей. За это плюс+
Ставлю плюс за идею.
(48) AlexO, расшифруйте плиз
— пометить, что каталог — пустой, и требует инфо — для какой структуры каталогов это необходимо, пометить, что каталог должен быть пустым и т.д.
— при смене ссылок — найти их ВСЕ и обновить — какие ссылки, что менять и на что, что обновлять.
(50) AlexO, дружище, может хватит троллить? Был задан довольно конкретный вопрос — расскажи что ты имеешь в виду, как организован твой супер-пупер рабочий процесс?
А ты отвечаешь малопонятными и неубедительными фразами ни о чем. Или объясни толком, с самого начала или не парь мозги, ок?
(52) AlexO, может сподобитесь на публикацию «Как я у меня структурировано располагаются обработки».
Потому как из (18) непонятно где вы храните ссылки на пустые каталог в текстовом файлике или же архиве.
Как архиве лежат версии обработок и по описанию можно быстрой найти необходимую версию, как с помощью перекресных ссылок вы знаете, что для этого клиента в этой обработке сделано то, для другого другое, при этом базой является вот та версия обработки и дополнительно у третьего клиента стоит еще старая версия.
p.s.: мне реально интересен чужой опыт. Прошу именно публикацию или развернутый ответ с примером, потому как не могу понять как из (18) (26) (48) (50) получается конфетка.
Увы, но для Win XP SP3 с установленным Net Framework 4 не работает, выдает ошибку, как у (41) :
System.IO.FileFormatException: The image format is unrecognized. —>
и т.д.
Установил, открыл, зашел в настройки.
со второго раза нормально окрылась
(55) dour-dead, ухты, как интересно. Знать бы еще что это, гыгы 🙂
(53) pumbaE,
Хранение в обычных тестктовых файлах + структура каталогов.
Главное — продуманная структура + структурированность в голове: не забывать делать пометки и краткие пояснения своих действий.
И все.
Тексты, обработки, картинки, пояснения — все хранится вместе (а можно и врозь).
Только путь скопируй (или еще как пометь, это — смотреть там-то, главное, чтобы понятно было, хоть одним словом помечай), где лежит — и пусть оно там лежит, хоть у соседа.
все хранится в открытом виде (или архивируется стандартно).
И никаких лишних программ + можно рубить как хочешь контент (если большой слишком — взял, и по алфавиту разделил на равные части) + про исправление ссылок уже писал.
Все делается ТИПОВЫМИ, СТАНДАРТНЫМИ, НЕ 1совыми средствами и прочей лабудой.
Важнейший пункт — структурированность в голове.
(53) pumbaE,
Версии обработок — помечаются v1, v2, v3…
Рядом — файл истории: что, зачем, почему, какую версию смотреть.
Обработки, во-первых, разделяются для разных клиентов (если дописки только для одного, но второму не нужны), а, во-вторых, все записывается — что, сколько, на сколько.
Тут же пометка — базой является вот эта обработка, находится тут, версия базовая — такая-то, почему именно она принята за базу, а не последняя версия, которая лежит там-то.
Если клиенты запутались в обработках — отдельный файл «Распределение обработок», где — дата, кто, чего отдано.
И когда требуется на что заменить.
Т.е., зная, где лежит обработка — я найду все остальные связанные + узнаю, зачем я столько версий понаделал и кому.
И базу найду. Или наоброт, помня, где лежит базовая — по ссылке найду потомков с их историей.
А то и просто — помечу в текстовике, что сделаны потомки, лежат там-то, обращаться к ним в случае таком-то. А нет — пусть и дальше лежат, трогать не надо.
Главное — структурированность в голове. 🙂
(53) pumbaE,
вы все это из (58 ) можете реализовать в жестких рамках, которые недорисовали разработчики SVN?
(58) AlexO, спасибо, поржал. А сам-то понял, что сказал?
(60)
спасибо, тоже поржал.
А ты сам-то понимаешь вообще, что ты делаешь? или так, абы-что понаделать, а там и ладно?
Ну тогда тебе никакой ни SVN, ни Билл Гейтс, ни Нуралиев, никто не поможет.
(61) AlexO,
да-да, я имено так и делаю. Это вообще мое жизненное кредо 🙂
При открытии WIn 7 64bit Платформа 8.2.14.537
пишет
в V8Reader.Controls.CodeControl.foldingUpdateTimer_Tick(Object sender, EventArgs e)
в System.Windows.Threading.DispatcherTimer.FireTick(Object unused)
в System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
в MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)
в System.Windows.Threading.Dispatcher.WrappedInvoke(Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
в System.Windows.Threading.DispatcherOperation.InvokeImpl()
в System.Threading.ExecutionContext.runTryCode(Object userData)
в System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)
в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
в System.Windows.Threading.DispatcherOperation.Invoke()
в System.Windows.Threading.Dispatcher.ProcessQueue()
в System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
в MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
в MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
в System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
в MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)
в System.Windows.Threading.Dispatcher.WrappedInvoke(Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
в System.Windows.Threading.Dispatcher.InvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
в MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
(63) karakozov, на всех файлах или на некоторых? Если на некоторых, то это похоже на (7). У себя уже исправил, если можете дать файл, проверю еще и на нем.
(46) gr0ck, Сырцы автор пока не дает, хотя и признался, что непосредственно использовал чужие 🙁
(3) orefkov, это для Снегопата?
(65)
Для него, родимого.
(63) karakozov, (66) orefkov,
При открытии WIn 7 64bit и тд пока так и не работает?
Замысел старый реализация посмотрим)
(65) alest,
Ну во-первых, непосредственно чужие я не использовал. Все сырцы написаны мной, хотя документация на формат epf и пример реализации да, брал в V8Unpack. Непонятно, почему недовольный смайлик? Это разве плохо? Тут как-бы признаваться мне не в чем, наоборот, все по-честному. Ну а во-вторых, сорцы я не даю, т.к. в них надо порядок навести, доделать кое что. Если есть желание попилить — милости прошу в личку, обсудим. Просто в открытое скачивание выкладывать пока не буду.
Классная штука, развивать однозначно стоит.
Кстати, сам кодил на .NET около года. Удобная среда для программирования, но как отправишь продукт в большое плавание, так и начинаются траблы: framework есть далеко не у всех и он реально много весит; MS постоянно придумывает новые, малоприспособленные для реальной разработки технологии, которые бросает в погоне за новыми призраками, так и не внедрив прежние. При этом на разных платформах независимая вроде бы среда начинает выдавать разные фокусы в поведении. В общем, у меня тоже на него аллергия осталась. Но это так, лирика.
Evil Beaver, успехов и упорства в продолжении начатого.
(69) AlexO, Трололошечки-трололо… еще какие идеи будут?
неплохо было бы в описании указывать — что именно было обновлено
(72) andrewks, На Инфостарте не указал, но при автообновлении должно указываться. Вы на основании чего сделали вывод, что вообще есть обновление?
(73) ну так в свойствах публикации указано, что она была обновлена сегодня [17.03.2013 10:46]
А вы внимательный 😉 Расчет был такой, что вновь скачивающие будут получать более свежий файл. А те кто уже скачали, получат его через автообновление, где и будет указано — что поменялось.
Разумеется, при условии, что автообновление работает 🙂 Заодно и проверим.
(75)
Классная вещь, но так хочется написать нечто подобное на 1с…
Ну или хотя бы открыть из 1с свою внешнюю обработку с возможностью просмотра её кода…)))
(76) PrinzOfMunchen,
эмм… а что мешает?
если такое написать на чистом 1с — это будет безбожно тормозить. как минимум, нужна ВК.
Хм, v8reader имхо для внешних обработок не тормозит.http://infostart.ru/public/106310/
(76) PrinzOfMunchen, так уже есть! Ссылка в моей статье. Очень любопытная разработка.
(79) м-да? Благодарю!
проверил новую версию, работает 🙂
текст модуля открывает, но при сравнении (когда делаешь показать различие в модулях) выдает
(83) flash2k, судя по ошибке система не нашла внешний diff-viewer. Т.е. у Вас в настройках, скорее всего, указан путь к несуществующей программе сравнения. Я прав?
вроде все настроено, все есть
(85) flash2k, Где же есть? В окне настроек указан путь к TortoiseMerge, а папку показываете с KDiff. если хотите сравнивать с помощью KDiff, так и путь пропишите к KDiff. И параметры командной строки для него.
за правым окном настройки окно с TortoiseMerge
(87) flash2k, все, я понял. Путь к TortoiseMerge нужно заключить в кавычки.
ага, с кавычками разобрался
только еще проблема 🙂
при сравнении выдает
ощущение, что он не видит параметров…
Попробуйте параметры тоже в кавычки. Автоматом они не «кавычатся» пока. Хотя, у меня параметры в кавычках не работали, уже не помню почему. Разберусь.
Какой у вас полный путь к каталогу Temp?
в параметрах кавычки не помогли
%temp% = C:Documents and SettingsuserLocal SettingsTemp
Интересная вещица. Но думаю платформа развивается и много нюансов которые можно не предусмотреть.
А может в каких-то случаях испортить.
Предпочитаю просматривать обработки через стандартные возможности предоставляемые платформой 1С:Предприятие.
(82) artbear,
Увы, 1С не дает пощады и не делает скидок… будь то мегатру1сник или простой новичок…
Новая версия работает на XP ! автор, спасибо!!!!
(17) pumbaE, а можно подробнее ? Есть определённые пожелания к api в конфигуратор? Давай составим петицию, главное чтобы она разумной была.
(0)Evil Beaver , круто! Спасибо! Пожелания:
1. Сравнение начинать не только правой кнопкой мыши — Показать различия в диалогах, а просто двойным щелчком. Ну или в настройках указать метод (возможно, при двойном ЛКМ открывать сам модуль).
2. В сравнении SVN передавать не темповые файлы вида tmpCEE5.tmp, а нормальные названия. Я долго вкуривал, что файл слева — более поздняя версия ((. Или это зависит от настроек tortoise?
3. В описании привели только англоязычный интерфейс SVN. 1С-ники к сожалению не все владеют английским, уточните что есть русификация
(95) Cratos2, поподробней можете посмотреть в снегопате, я как скриптописатель могу показать мощь api снегопата и скриптов.
При попытке открыть файл 8.1 выдаёт ошибку:
в V8Reader.Core.MDFileItem..ctor(IImageLister imgLister, String itemName)
в V8Reader.Core.MDReader.GetElement(String Name)
в V8Reader.Core.MDDataProcessor.Create(String ImageFile)
в V8Reader.Program.<>c__DisplayClass7.<OpenFile>b__5()
в V8Reader.Program.SafeMessageLoop(Action DoMessageLoop)
Сконвертировав под 8.2, всё проходит гладко.
(95) Cratos2, спасибо за конструктив. По пунктам:
Поведение содрал с родного «одинэсовского». Ваше предложение интересно, подумаю.
Да, это самого напрягало. В новой версии сделано более умное именование. Новая версия готовится, но пока на работе завал, руки не доходят.
У меня английский интерфейс, скриншоты с него и снимал. Руссификация есть, но когда я ее вижу, то как слепой котенок пытаюсь переводить с русского обратно на английский. Дело привычки. Хотя айтишник, имхо, должен владеть английским, даже если он пишет «Если Тогда» 🙂
4. За ошибку спасибо. Посмотрю.
(97) Cratos2, не знаю, как у Вас, а у меня при открытии обработки 8.1 в конфигураторе 8.1.15.14 просит конвертировать обработку. Может она от 8.0, а не от 8.1.
Внутри у нее другая структура, я таких обработок не видел пока. Скорее всего, это все-таки 8.0, у меня нет ее дистрибутива и, честно говоря, не уверен, что стоит поддерживать такие обработки. Кто-то еще пользуется 8.0?