V8 Viewer. Открытие и сравнение внешних обработок в Проводнике + исходники
Разработка - Инструментарий разработчика
Файлы
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний
Оформите подписку на компанию для решения рабочих задач
Оформить подписку и скачать решение со скидкойВы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
О чем идет речь?
Вам приходилось отправлять внешнюю обработку по почте и в самый последний момент перепроверить - та ли это версия? Вам приходилось задаваться вопросом - какая из этих обработок с именами "Обработка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 Files\v8viewer.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. Если понравится, не забывайте вернуться на эту страницу и поставить "плюсик" :)
Спасибо за внимание!
UPD 30.04.2020
Исправлена ошибка открытия обработок, созданных современными версиями платформы
Вступайте в нашу телеграмм-группу Инфостарт
См. также
Разработка Инструментарий разработчика Групповая разработка (Git, хранилище) Разработчик Платные (руб)
Практический курс по работе с AI-агентами для разработчиков 1С уровня middle и senior, а также тимлидов команд: от постановки задач и передачи контекста до создания расширений, интеграций, MCP-инструментов, тестов и проверки готового решения.
50000 руб.
10.09.2026 13822 124 0
Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Разработчик Руководитель проекта 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)
Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы, интерфейс 8.5. Может выполнять свертку одновременно в несколько потоков, а также без непосредственного участия пользователя. Решение в Реестре отечественного ПО.
24900 руб.
20.08.2024 83401 432 171
Инструментарий разработчика Роли и права Запросы СКД Разработчик Руководитель проекта 1С:Предприятие 8 Платные (руб)
Инструменты для разработчиков 1С 8.3 и 8.5: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.
16500 руб.
02.09.2020 285956 1608 423
Инструментарий разработчика Разработка Администрирование веб-серверов Системный администратор Разработчик Аналитик Руководитель проекта 1С 8.3 Платные (руб)
Analyzer 1C сводит выгрузку 1С — основную конфигурацию и все расширения — в единый граф знаний. Любой запрос по связям за доли секунды, с пометками «Доб.» / «Заимств.» / «Переопределено». Новое в 2.0 — обновление поставки: сравнение и объединение версий деревом «как в Конфигураторе» с выгрузкой плана решений; поиск конфликтов из-за перехватов расширений и висячих ссылок; загрузка из бинарных .cf/.cfe; циклические зависимости. Плюс анализ влияния, запросы BSL, роли и RLS, граф вызовов. Минута на развёртывание через Docker без необходимости подключения к Интернет. Любая 1С:Предприятие 8.3+.
14000 руб.
17.04.2026 16938 63 62
Пакетная печать Печатные формы Инструментарий разработчика Разработчик 1С:Предприятие 8 Платные (руб)
Расширение для создания и редактирования печатных форм в системе 1С:Предприятие 8.3. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и прозрачность разработки, а также навести порядок в многообразии корпоративных печатных форм. Обновление версии от 21.04.26
22570 руб.
06.10.2023 44283 122 54
Инструментарий разработчика Нейросети Платные (руб)
Первые попытки разработки на 1С с использованием больших языковых моделей (LLM) могут разочаровать. LLMки сильно галлюцинируют, потому что не знают устройства конфигураций 1С, не знают нюансов синтаксиса. Но если дать им подсказки с помощью MCP, то результат получается кардинально лучше. Далее в публикации: MCP для поиска по метаданным 1С, справке синтакс-помощника и проверки синтаксиса.
15250 руб.
25.08.2025 77102 147 41
Разработка Инструментарий разработчика Разработчик Руководитель проекта 1С 8.3 Платные (руб)
Pilot 1C превращает задачу, поставленную обычными словами, в техническое задание, код на встроенном языке и сценарии проверки. Прежде чем что-то предложить, он сверяется с устройством вашей конфигурации через граф Analyzer 1C: существует ли объект, из чего он состоит, кто его вызывает, какие роли дают права. Чего найти не удалось – спрашивает, а не выдумывает. Готовый код проходит более полутора сотен проверок по справочнику языка и стандартам разработки, который приезжает вместе с продуктом. Модель – ваша: любой сервер, совместимый с программным интерфейсом OpenAI, в том числе локальный. Правки в конфигурацию Pilot не вносит – их применяет разработчик.
18300 руб.
11.09.2026 3813 5 0
Инструменты администратора БД Инструментарий разработчика Роли и права Разработчик 1С:Предприятие 8 1C:Бухгалтерия Россия Платные (руб)
Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.
17000 руб.
10.11.2023 28809 103 46
4-го фрэймворка по умолчанию нет в WinXP SP3, по крайней мере, на оф.диске с СП3 у меня вшит только 2.0
Вернее, у меня есть образ диска, на котором я тестировал "чистый запуск". Диск вроде родной, не "ремикс". Все запускается, работает.
При открытии формы в обработке под 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)
Редактор AvalonEdit. Но Вам им пользоваться нельзя, у вас аллергия :):):)
P.S. у самого дома - линукс, не стоит разводить старый, как мир холивар.
(0) , круто! Спасибо! Пожелания:
1. Сравнение начинать не только правой кнопкой мыши - Показать различия в диалогах, а просто двойным щелчком. Ну или в настройках указать метод (возможно, при двойном ЛКМ открывать сам модуль).
2. В сравнении SVN передавать не темповые файлы вида tmpCEE5.tmp, а нормальные названия. Я долго вкуривал, что файл слева - более поздняя версия ((. Или это зависит от настроек tortoise?
3. В описании привели только англоязычный интерфейс SVN. 1С-ники к сожалению не все владеют английским, уточните что есть русификация
Поведение содрал с родного "одинэсовского". Ваше предложение интересно, подумаю.
Да, это самого напрягало. В новой версии сделано более умное именование. Новая версия готовится, но пока на работе завал, руки не доходят.
У меня английский интерфейс, скриншоты с него и снимал. Руссификация есть, но когда я ее вижу, то как слепой котенок пытаюсь переводить с русского обратно на английский. Дело привычки. Хотя айтишник, имхо, должен владеть английским, даже если он пишет "Если Тогда" :)
4. За ошибку спасибо. Посмотрю.
Это сейчас уже не так критично, а вот помню свой Athlon 700 MHz с 320M RAM - там разница была, что называется, на лицо.
(13) Пока что мешает доработать нехватка времени и отсутствие всего требуемого функционала в Снегопате. С Сашей по этому поводу общались, но у него времени мало сейчас - так что быстро не получится.
Для специалистов, способных написать приложение такого уровня, изучение C# не предоставит большого труда. Точно так же не составит труда фирме 1С нанять программистов, которые уже его знают :)
Тогда почему не наймет и не сделает качественный продукт?
Почему не напишет свою СУБД? Почему не использует СУБД уже готовые?
Одни почему, почему...
В платформе 1С зачастую не могут месяцами поправить флаг! Флаг!!!
Используют бесплатные компоненты, вместо написания своих.
А вы говорите о каком-то профессионализме разработчиков.
Не поставили задачу программистам пофиксить что-то - вот и не пофиксили. Всё просто :)
А вот [quote]Используют бесплатные компоненты, вместо написания своих.[/quote]это наоборот хорошо. Зачем изобретать велосипеды?
Текстовый файл с историей версий, описание, версии обработок в архиве.
SVN - нужны только при групповой работе (и тогда да, ставить SVN какой-нить, просмоторщик вроде этого и т.д.), но никак не одному программисту.
Все :)
А сравнивать обработки можно вполне и типовыми средствами.
Вопрос: Сколько кликов мышкой у вас получается от момента сохранения файла до момента регистрации новой версии?
Ну или не кликов, а элементарных действий?
А при откате к предыдущей версии? Короче, Вы либо тролль, либо системой контроля версий не пользовались ни разу. При всем уважении.
все столько же, как и создавать-нажимать кнопки и писать описание в SVN.
кто вам делает откат? SVN? точно такой же "откат" - берете старую версию из архива и делаете с ней, что хотели.
НО: зато все просто, всегда знаешь - как все устроено и где лежит, простейшая структура, возможность создания перекрестных "ссылок", виден размер всего и в частности, можно "подключать" любые файлы, компоновать все в какой душе угодно последовательности и структуре, могу поменять структуру как требуется, а не как заложили разработчики, если нужно по другому скопоновать файлы или время требует перемен, быстрое создание архива всей библиотеки и перенос и развертывание - в общем, полная свобода.
И никаких ограничений :)
так вот, никакой SVN вам не позволит:
- при смене ссылок - найти их ВСЕ и обновить (только Линукс так умеет, да и то - потому что у него используются непосредственно ССЫЛКИ-метки)
- пометить, что каталог - пустой, и требует инфо
... и многое, многое другое, что недоступно вашим SVN-ам..
А я делаю все это - влегкую. Так что минусы - всем "защитникам" SVN.
- пометить, что каталог - пустой, и требует инфо -- для какой структуры каталогов это необходимо, пометить, что каталог должен быть пустым и т.д.
- при смене ссылок - найти их ВСЕ и обновить -- какие ссылки, что менять и на что, что обновлять.
"- пометить, что каталог"
если заранее сделана структура, но там нет инфо. Делаешь пометку на каталоге, потом можно его по пометке найти - где пустые.
"- - какие ссылки, что менять и на что, что обновлять."
а потому что не просто набор обработок и прочего, а с пояснениями и ссылками по пересекающимся работам.
А ты отвечаешь малопонятными и неубедительными фразами ни о чем. Или объясни толком, с самого начала или не парь мозги, ок?
Потому как из (18) непонятно где вы храните ссылки на пустые каталог в текстовом файлике или же архиве.
Как архиве лежат версии обработок и по описанию можно быстрой найти необходимую версию, как с помощью перекресных ссылок вы знаете, что для этого клиента в этой обработке сделано то, для другого другое, при этом базой является вот та версия обработки и дополнительно у третьего клиента стоит еще старая версия.
p.s.: мне реально интересен чужой опыт. Прошу именно публикацию или развернутый ответ с примером, потому как не могу понять как из (18) (26) (48) (50) получается конфетка.
Хранение в обычных тестктовых файлах + структура каталогов.
Главное - продуманная структура + структурированность в голове: не забывать делать пометки и краткие пояснения своих действий.
И все.
Тексты, обработки, картинки, пояснения - все хранится вместе (а можно и врозь).
Только путь скопируй (или еще как пометь, это - смотреть там-то, главное, чтобы понятно было, хоть одним словом помечай), где лежит - и пусть оно там лежит, хоть у соседа.
все хранится в открытом виде (или архивируется стандартно).
И никаких лишних программ + можно рубить как хочешь контент (если большой слишком - взял, и по алфавиту разделил на равные части) + про исправление ссылок уже писал.
Все делается ТИПОВЫМИ, СТАНДАРТНЫМИ, НЕ 1совыми средствами и прочей лабудой.
Важнейший пункт - структурированность в голове.
Версии обработок - помечаются v1, v2, v3...
Рядом - файл истории: что, зачем, почему, какую версию смотреть.
Обработки, во-первых, разделяются для разных клиентов (если дописки только для одного, но второму не нужны), а, во-вторых, все записывается - что, сколько, на сколько.
Тут же пометка - базой является вот эта обработка, находится тут, версия базовая - такая-то, почему именно она принята за базу, а не последняя версия, которая лежит там-то.
Если клиенты запутались в обработках - отдельный файл "Распределение обработок", где - дата, кто, чего отдано.
И когда требуется на что заменить.
Т.е., зная, где лежит обработка - я найду все остальные связанные + узнаю, зачем я столько версий понаделал и кому.
И базу найду. Или наоброт, помня, где лежит базовая - по ссылке найду потомков с их историей.
А то и просто - помечу в текстовике, что сделаны потомки, лежат там-то, обращаться к ним в случае таком-то. А нет - пусть и дальше лежат, трогать не надо.
Главное - структурированность в голове. :)
да-да, я имено так и делаю. Это вообще мое жизненное кредо :)
8.2 win xp
System.Windows.Markup.XamlParseException: Предоставление значения для "System.Windows.Baml2006.TypeConverterMarkupExtension" вызвало исключение. ---> System.IO.FileFormatException: Формат изображения не распознан. ---> System.Runtime.InteropServices.COMException: Исключение из HRESULT: 0x88982F07
--- Конец трассировки внутреннего стека исключений ---
в System.Windows.Media.PixelFormat.GetPixelFormat(SafeMILHandle bitmapSource)
в System.Windows.Media.Imaging.BitmapSource.UpdateCachedSettings()
в System.Windows.Media.Imaging.BitmapSource.set_WicSourceHandle(BitmapSourceSafeMILHandle value)
в System.Windows.Media.Imaging.BitmapFrameDecode.FinalizeCreation()
в System.Windows.Media.Imaging.BitmapSource.CompleteDelayedCreation()
в System.Windows.Media.Imaging.BitmapSource.get_WicSourceHandle()
в System.Windows.Media.Imaging.BitmapFrameDecode..ctor(Int32 frameNumber, BitmapCreateOptions createOptions, BitmapCacheOption cacheOption, BitmapFrameDecode frameDecode)
в System.Windows.Media.Imaging.BitmapDecoder.SetupFrames(BitmapDecoder decoder, ReadOnlyCollection`1 frames)
в System.Windows.Media.Imaging.BitmapDecoder.Initialize(BitmapDecoder decoder)
в System.Windows.Media.Imaging.BitmapDecoder..ctor(SafeMILHandle decoderHandle, BitmapDecoder decoder, Uri baseUri, Uri uri, Stream stream, BitmapCreateOptions createOptions, BitmapCacheOption cacheOption, Boolean insertInDecoderCache, Boolean isOriginalWritable, Stream uriStream, UnmanagedMemoryStream unmanagedMemoryStream, SafeFileHandle safeFilehandle)
в System.Windows.Media.Imaging.IconBitmapDecoder..ctor(SafeMILHandle decoderHandle, BitmapDecoder decoder, Uri baseUri, Uri uri, Stream stream, BitmapCreateOptions createOptions, BitmapCacheOption cacheOption, Boolean insertInDecoderCache, Boolean originalWritable, Stream uriStream, UnmanagedMemoryStream unmanagedMemoryStream, SafeFileHandle safeFilehandle)
в System.Windows.Media.Imaging.BitmapDecoder.CreateFromUriOrStream(Uri baseUri, Uri uri, Stream stream, BitmapCreateOptions createOptions, BitmapCacheOption cacheOption, RequestCachePolicy uriCachePolicy, Boolean insertInDecoderCache)
в System.Windows.Media.Imaging.BitmapFrame.CreateFromUriOrStream(Uri baseUri, Uri uri, Stream stream, BitmapCreateOptions createOptions, BitmapCacheOption cacheOption, RequestCachePolicy uriCachePolicy)
в System.Windows.Media.ImageSourceConverter.ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, Object value)
в System.Windows.Baml2006.TypeConverterMarkupExtension.ProvideValue(IServiceProvider serviceProvider)
в MS.Internal.Xaml.Runtime.ClrObjectRuntime.CallProvideValue(MarkupExtension me, IServiceProvider serviceProvider)
--- Конец трассировки внутреннего стека исключений ---
в System.Windows.Markup.XamlReader.RewrapException(Exception e, IXamlLineInfo lineInfo, Uri baseUri)
в System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader, IXamlObjectWriterFactory writerFactory, Boolean skipJournaledProperties, Object rootObject, XamlObjectWriterSettings settings, Uri baseUri)
в System.Windows.Markup.WpfXamlLoader.LoadBaml(XamlReader xamlReader, Boolean skipJournaledProperties, Object rootObject, XamlAccessLevel accessLevel, Uri baseUri)
в System.Windows.Markup.XamlReader.LoadBaml(Stream stream, ParserContext parserContext, Object parent, Boolean closeStream)
в System.Windows.Application.LoadComponent(Object component, Uri resourceLocator)
в V8Reader.Editors.CodeEditorWnd.InitializeComponent()
в V8Reader.Editors.CodeEditorWnd..ctor()
в V8Reader.Editors.ModuleEditor.Edit(Window Owner)
в V8Reader.Editors.ModuleEditor.Edit()
в V8Reader.Editors.DataProcEditorWnd.btnObjectModule_Click(Object sender, RoutedEventArgs e)
в System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
в System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
в System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
в System.Windows.UIElement.RaiseEvent(RoutedEventArgs e)
в System.Windows.Controls.MenuItem.InvokeClickAfterRender(Object arg)
в 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.DispatcherOperation.InvokeImpl()
в System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(Object state)
в System.Threading.ExecutionContext.runTryCode(Object userData)
в System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)
в System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
в 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.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.Threading.Dispatcher.PushFrame(DispatcherFrame frame)
в System.Windows.Threading.Dispatcher.Run()
в System.Windows.Application.RunDispatcher(Object ignore)
в System.Windows.Application.RunInternal(Window window)
в System.Windows.Application.Run(Window window)
в V8Reader.Program.<>c__DisplayClass7.<OpenFile>b__5()
в V8Reader.Program.SafeMessageLoop(Action DoMessageLoop)
Ну во-первых, непосредственно чужие я не использовал. Все сырцы написаны мной, хотя документация на формат epf и пример реализации да, брал в V8Unpack. Непонятно, почему недовольный смайлик? Это разве плохо? Тут как-бы признаваться мне не в чем, наоборот, все по-честному. Ну а во-вторых, сорцы я не даю, т.к. в них надо порядок навести, доделать кое что. Если есть желание попилить - милости прошу в личку, обсудим. Просто в открытое скачивание выкладывать пока не буду.
А я - AlexO, познакомились уже.
Сами себе создают трудности, и потом героически их преодолевают...
ВК на 1С - зло для 1С: она и не работает с ними путем, и держать ВК надо постоянно под рукой. А то и вообще - придумывать, как подключить при жестко ограниченном доступе.
Но "тролло-ло", как они себя называют и представляются, играются дальше :))
Все у него автоматически и мысленно, никаких доп.средств не использует.
Тем, кто в теме, предлагаю тупо пропускать его посты :)
пишет
в 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)
Кстати, сам кодил на .NET около года. Удобная среда для программирования, но как отправишь продукт в большое плавание, так и начинаются траблы: framework есть далеко не у всех и он реально много весит; MS постоянно придумывает новые, малоприспособленные для реальной разработки технологии, которые бросает в погоне за новыми призраками, так и не внедрив прежние. При этом на разных платформах независимая вроде бы среда начинает выдавать разные фокусы в поведении. В общем, у меня тоже на него аллергия осталась. Но это так, лирика.
Evil Beaver, успехов и упорства в продолжении начатого.
Разумеется, при условии, что автообновление работает :) Заодно и проверим.
Классная вещь, но так хочется написать нечто подобное на 1с...
Ну или хотя бы открыть из 1с свою внешнюю обработку с возможностью просмотра её кода...)))
Какой у вас полный путь к каталогу Temp?
А может в каких-то случаях испортить.
Предпочитаю просматривать обработки через стандартные возможности предоставляемые платформой 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, всё проходит гладко.
Внутри у нее другая структура, я таких обработок не видел пока. Скорее всего, это все-таки 8.0, у меня нет ее дистрибутива и, честно говоря, не уверен, что стоит поддерживать такие обработки. Кто-то еще пользуется 8.0?
Почему? Что плохого в публичном тестировании? Разработка бесплатная и планирует таковой оставаться. Что плохого в том, чтобы сообща сделать ее лучше? Я пилю ее из энтузиазма и с целью изучить .Net, трачу свое время и кроме "плюсов" на инфостарте ничего за нее не получаю. Что плохого в том, что я сэкономлю на всестороннем тестировании?
Под знаменем великого Бориса, в жёлтых майках - к новым трудовым свершениям !
Я хочу сказать, что бета-версия нужно писать не в середине а в начале КРУПНЫМИ буквами.
Теперь по делу: то, что бета-версия НУЖНО писать, где и когда - решать мне. Не нравится - не пользуйтесь. Ну правда - я всегда послушаю совет, особенно толковый, но когда находится умник, который меня учит - что мне нужно делать и как - хочется его послать. Тебе "нужно" - ты и делай. Без обид.
Претензии по поводу бесплатной программы, про которую прямо сказано, что она сырая и тестовая, мне предъявлять глупо. Шлите мне ошибки, пожелания, советы. Беспредметные поучения - своему психоаналитику.
1. Нужно подключиться к хранилищу кода. Для этого устанавливаем себе на машину TortoiseSVN, в любой пустой папке щелкаем правой кнопкой и выбираем: SVN Checkout. Далее, вводим адрес репозитория "https://svn.code.sf.net/p/v8reader/code/trunk" и нажимаем ОК. Исходники будут загружены в указанную папку.
2. Выбираете себе задачу. Например, берем какой-нибудь баг со странички "https://sourceforge.net/p/v8reader/tickets/" и исправляете его.
3. Регистрируете аккаунт на Sourceforge.net, присылаете мне письмо с именем аккаунта, чтобы я дал доступ на запись.
4. После получения доступа, правите код, а затем закладываете его в хранилище командой SVN Commit.
Удачи.
- 1. В репозитории нужен код. Только код, текстом. Как он попадает в репозиторий, в какой момент?
2. Сама обработка будет храниться в репозитории?
3. Использование другого интерфейса к гит возможно?
(см. рисунок)
p.s.: извините может и обидел, но вопрос просто тупейший. Пока не будет возможности выгружать в 8.3 внешние обработки - это проблемно сделать. А вот для конфигурации уже можно такое смотреть.
V8Viewer подключается к клиенту git в качестве хука для файлов *.epf. И можно сравнивать модули, с точностью до измененной буквы.
Проблемная обработка -
Версия программы 1.0.2.6 (актуальная судя по
System.FormatException: Input string was not in a correct format.
at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
at V8Reader.Core.ManagedFormElements.LoadElements(SerializedList elementsList, MDObjectsCollection`1 itemsPrototype, Int32 idIndex, String uuid)
at V8Reader.Core.ManagedFormElements.ReadFromList(SerializedList elementsList)
at V8Reader.Core.MDManagedForm.LoadFormContent()
at V8Reader.Core.MDManagedForm.get_Module()
at V8Reader.Editors.ManagedFormWnd.Window_Loaded(Object sender, RoutedEventArgs e)
at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
at System.Windows.UIElement.RaiseEvent(RoutedEventArgs e)
at System.Windows.BroadcastEventHelper.BroadcastEvent(DependencyObject root, RoutedEvent routedEvent)
at System.Windows.BroadcastEventHelper.BroadcastLoadedEvent(Object root)
at MS.Internal.LoadedOrUnloadedOperation.DoWork()
at System.Windows.Media.MediaContext.FireLoadedPendingCallbacks()
at System.Windows.Media.MediaContext.FireInvokeOnRenderCallbacks()
at System.Windows.Media.MediaContext.RenderMessageHandlerCore(Object resizedCompositionTarget)
at System.Windows.Media.MediaContext.RenderMessageHandler(Object resizedCompositionTarget)
at System.Windows.Media.MediaContext.Resize(ICompositionTarget resizedCompositionTarget)
at System.Windows.Interop.HwndTarget.OnResize()
at System.Windows.Interop.HwndTarget.HandleMessage(WindowMessage msg, IntPtr wparam, IntPtr lparam)
at System.Windows.Interop.HwndSource.HwndTargetFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)
at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
at MS.Win32.UnsafeNativeMethods.ShowWindow(HandleRef hWnd, Int32 nCmdShow)
at System.Windows.Window.ShowHelper(Object booleanBox)
at System.Windows.Window.Show()
at V8Reader.Editors.ManagedFormEditor.Edit(Window Owner)
at V8Reader.Editors.ManagedFormEditor.Edit()
at V8Reader.Editors.MDObjectEditorWnd.<>c__DisplayClass1.<twElements_MouseDoubleClick>b__0()
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)
at System.Windows.Threading.DispatcherOperation.InvokeImpl()
at System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Windows.Threading.DispatcherOperation.Invoke()
at System.Windows.Threading.Dispatcher.ProcessQueue()
at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)
at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
at System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame)
at System.Windows.Threading.Dispatcher.Run()
at System.Windows.Application.RunDispatcher(Object ignore)
at System.Windows.Application.RunInternal(Window window)
at System.Windows.Application.Run(Window window)
at V8Reader.Program.<>c__DisplayClass7.<OpenFile>b__5()
at V8Reader.Program.SafeMessageLoop(Action DoMessageLoop)
Можно открыть модули на сравнение (запустится внешний diff-ер), объединить модули и сохранить в файл или буфер обмена. Затем вставить объединенный модуль в конфигуратор. С учетом того, что теперь в платформе можно тоже запускать внешние diff-еры и редактировать результат слияния - можно попробовать, как это там работает. Я не смотрел.
Обработки простые - реквизит, да функция в общем модуле. Создавал 8.3.6
На рисунках показаны результаты сравнения платформой 1С и v8-viewer.exe
ТестоваяОбработка-7.epf
При выполнении режима "Показать различия в модулях" выдает ошибку.
System.ComponentModel.Win32Exception (0x80004005): Не удается найти указанный файл
в System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo)
в V8Reader.Comparison.ExternalTextDiffViewer.ShowDifference(String NameCurrent, String NameComparand)
Подскажите, с чем может быть связано. Вроде изначально не было, позже начала проявляться.
Цитирую: Вы хотите получить возможность быстро посмотреть содержимое внешней обработки и сравнить ее с другой? И все это без запуска 1С:Предприятия, только из оболочки ОС? Тогда мы идем к вам! :)
Посмотреть содержимое внешней обработки я тоже могу в конфигураторе.
Тем более, я не настаиваю, что это прямо сейчас надо доделать.
Из замечаний.
1. После обновления платформы всегда слетают галки файловых ассоциаций.
2. Нашлась такая обработка, которая с недавних пор стала выдавать ошибку при просмотре.
P.S. увидел в новостной рассылке, что разработка попала в выбор экспертов. Заглянул на страницу публикации, но не увидел, а что собственно изменено/доработано (публикация действительно обновлена 14/02/18). Поэтому скачивать пока не стал. Если можно добавьте описание изменений.
Файловые ассоциации разумеется будут слетать, т.к. платформа пишет свои поверх наших.
Ошибки открытия обработок возможны, но доработок скорее всего не будет. Код программы открыт много лет, пожалуй, я переведу его на гитхаб, для большего удобства. Исправить ошибку можно самостоятельно.
Хотели перенести проект на ГитХаб? Сделали? Я бы с удовольствием сделал Push_Request со своими правками. Если не переносили, есть предложение все-таки перенести
Из хорошо забытого старого. |
|---|
| В фаре у нас было настройка на запуск 1с из проводника по ассоциации с файлом .md.
Если бы я работала тогда с 8кой - наверное бы настроила автоматическое создание новой ИБ по ассоциации с файлом dt. Во избежание ошибок новичками при работе с загрузкой тестовых баз. |
при diff-e модулей временные файлы создаются в UTF-8, но без BOM-метки.
Из-за этого у kdiff-а, например, несколько сносит башню (дефолтные настройки в части кодировок: system, autodetect unicode).
Конкретно с kdiff-ом лечится созданием отдельного конфига и добавлением параметра --config [файл]
PS правда, мне пришлось создавать батник с текстом "start kdiff.exe --config "config.cfg" %1 %2" и запускать оный, ибо если прописать запуск kdiff-а с такими параметрами - ему сносит башню и он пытается сравнить 3 файла (один из которых конфиг). Сильно не разбирался, но смахивает на потерю кавычек у параметра за ключом --config.
PPS в остальном - утилита прям огонь!
Вы можете заказать платную консультацию или разработку у автора. Будет создан приватный заказ на «Бирже заказов» для автора.
№ 176775
Создание 06.03.13 12:55
Обновление 30.04.20 16:14
Просмотры 85405
Загрузки 750
Рейтинг
359
Комментарии 161
Код открыт Да
Рубрики Инструментарий разработчика
Кому
Системный администратор
,
Разработчик
Тип файла Приложение (exe)
Платформа 1С:Предприятие 8
Конфигурация 1C:Бухгалтерия
Операционная система Windows
Страна Не имеет значения
Отрасль Не имеет значения
Налоги Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Абонемент ($m)