Утилита для открытия файлов в 1С (v7 и v8)

Утилита для открытия файлов в 1С
Выложено по мотивам http://www.infostart.ru/projects/1558. Сделано без .NET, исходники прилагаются. См. также http://openconf.1cpp.ru/ (сайт проекта OpenConf) и http://1c.alterplast.ru/files/ocs/ (ежедневная сборка репозитария скриптов для OpenConf).

Утилита OpenIn1C.exe служит для открытия файлов и форм некоторых внутренних объектов в 1С.
Принцип действия — имитация действий пользователя при открытии файла или обработки.
При старте утилита ищет все запущенные экземпляры 1С, и если их больше 1, то выдаётся список
для выбора нужного экземпляра. Если экземпляр 1С всего один, то объект откроется в нём без
вопросов. Если утилита запускается из конфигуратора, то в первую очередь анализируются
дочерние процессы (т.е. 1С в режиме предприятия, запущеная по F11).

Если нет ни одного запущенного экземпляра 1С, то утилита сканирует ветку реестра
[HKEY_CURRENT_USERSoftware1C1Cv77.7Titles], и выводит список всех баз, которые существуют
на диске (проверяется наличие файла 1cv7.md в каталоге). После выбора базы запускается 1С
с указанной базой, и в этом экземпляре открывается объект. Для запуска 1С используются настройки,
хранящиеся в реестре [HKEY_CURRENT_USERSoftwareOpenIn1C]. Значение «1CExecutable» — полный путь
к исполняемому файлу 1С (по умолчанию «C:Program Files1Cv77Bin1cv7.exe»),
«ExecParameters» — дополнительные параметры для запуска (по умолчанию «config»)

Утилита может принимать 3 параметра командной строки. Параметры позиционные
1) имя объекта, который нужно открыть — обязательный аргумент
2) тип объекта:
-r — отчёт
-p — обработка
-s — справочник
-j — журнал
любое другое значение — внешний отчёт
*примечание* эта опция предназначена только для режима предприятия, в конфигураторе можно открывать только внешние файлы.
3) время паузы после открытия основного окна (если 1С только что запущена). В миллисекундах.

Примеры:

1) Открываем внешний отчёт
OpenIn1C.exe «c:1C BasesИнструментыadmin_service.ert»

2) Открываем встроенную обработку. В качестве имени объекта при этом передаётся представление объекта,
как оно отображается в меню «Операции/Обработка…».
OpenIn1C.exe «Обработка документов» -p

Для удобства использования утилиту можно ассоциировать с расширениями .ert и .mxl — тогда эти файлы можно
будет открывать прямо из проводника. Можно сделать это вручную, а можно воспользоваться скриптом
Register_OpenIn1C.vbs.

В среде OpenConf также существует скрипт для запуска отчётов/обработок прямо из конфигуратора.
Называется ОткрытьВПредприятии.vbs (см. http://openconf.1cpp.ru/ а также http://kuntashov.narod.ru/openconf-installer.html)

11.02.2008: Изменения от artbear — версия утилиты с возможностью открывать внешние файлы в 1С v8 (OpenIn1Cv8.exe).

14.04.2008: Более интеллектуальный поиск 1cv7(8).exe с использованием информации из реестра.

42 Comments

  1. tarasenkov

    Спасибо за ссылки…особенно за ссылку на OpenConf PowerPack!

    покопавшись на набрел на страничку с юмором:

    OFF: Как вы относитесь к «лицензионному» и «пиратскому» ПО?

    http://forum.script-coding.info/viewtopic.php?pid=1050#p1050

    Reply
  2. ADirks

    По просьбам трудящихся добавлена возможность запуска 1С, если ничего ещё не запущено.

    Reply
  3. artbear

    Полезнейшая штуковина, очень-очень всем рекомендую 🙂

    ЗЫ юзаю ее с первых альфа-версий 🙂

    ЗЗЫ еще бы для восьмерки ее доработать, никак времени не найду 🙂

    Reply
  4. support

    при запуске ругнулась на то, что не найдено C:Program Files1Cv77Bin1cv7.exe,

    , когда исправил в реестре путь на C:Program Files1Cv77Bin1cv7s.exe,

    выскочило заголовок окошка, было непонятно, что его надо растянуть вниз.

    после выбора базы, ничего не произошло.

    Reply
  5. ADirks

    > …выскочило заголовок окошка, было непонятно, что его надо растянуть вниз.

    Вообще то размер окошка автоматически подстраивается как по ширине, так и по высоте. Но есть одна странность — при первом запуске в виндовозном сеансе список баз формируется довольно долго. У меня в реестре штук 40 баз, первый запуск 4-5 сек. До этого окошко остаётся в первоначальном состоянии.

    На всякий случай всё же спрошу: какой виндовоз? и есть ли возможность собрать утилитку из исходников именно под этим виндовозом?

    >после выбора базы, ничего не произошло.

    Исправлено. Это на мышку такая реакция была, а я мышкой не пользуюсь 🙂

    Reply
  6. artbear

    (ADirks) Алексей, я доработал проект для возможности открытия внешних файлов в среде 1С версии 8 -Конфигураторе/Предприятии.

    .

    Положил в репозитарий как исходники, так и сам бинарный файл.

    .

    Алексей, прошу выложить сюда сам бинарник OpenIn1Cv8.exe как второй вариант + написать, что он для работы с v8

    .

    PS нужно же как-то и восьмерку к красотам приобщать 🙂

    Reply
  7. artbear

    Алексей, как-то обозначь через категорию факт работы с восьмеркой, тогда пользователей и плюсов больше будет 🙂

    Reply
  8. ADirks

    Категория — это ты имеешь в виду «Администрирование 1С (сервисные утилиты)»? Так ведь других подходящих в списке нету. А галку в разделе «для» я поставил.

    Reply
  9. tormozit

    Пробую на 8.1.

    Не работает. При перетаскивании любой epf-ки на OpenIn1C или OpenIn1Cv8 ничего не происходит, кроме 100% загрузки проца этим процессом. Приходится его убивать.

    Reply
  10. Abadonna

    Потестил, есть глючок:

    Файл «c:Program Files1Cv77BIN1cv7.exe» не найден!

    А бывают еще экзюки с буковкой s — c:Program Files1Cv77BIN1cv7s.exe

    При запущенных базах — все ОК

    Да и вообще лучше проверить прогой, где лежит экзюк, он и не на С может быть

    Reply
  11. Abadonna

    +(10) Все таки сделай проверку инсталлированных прог [SOFTWAREMicrosoftWindowsCurrentVersionUninstall], а то ж лениво реестр править, да и не всем там положено бывать 😉

    Reply
  12. ADirks

    (9) Извиняюсь за задержку с ответом. Замотался что-то… К сожалению, у меня нет 8.хх вообще, так что проверить не могу. Попробую Артуру сказать, может он разберётся. И ещё есть вариант — собрать из исходников отладочный вариант, и посмотреть чего там происходит.

    (10, 11) Постараюсь. Неприятность однако в том, что ветка с exe-шником может по разному называться (у меня это «1С:Предприятие для SQL», но может ведь быть ещё как минимум 2 варианта. А для 8.хх я вообще не имею информации.)

    P.S. блин, как тяжко на чистом WinAPI то программировать, после всяких фрэймворков 🙂

    Reply
  13. artbear

    (12) Леха, ты сам такой вариант вроде выбрал, я про чистое ВинАПИ 🙂

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

    Reply
  14. artbear

    (10) Желательно бы все-таки изучить доку 🙂 и один раз выполнить необходимую настройку проги

    Для запуска 1С используются настройки,

    хранящиеся в реестре [HKEY_CURRENT_USERSoftwareOpenIn1C]. Значение «1CExecutable» — полный путь

    к исполняемому файлу 1С (по умолчанию «C:Program Files1Cv77Bin1cv7.exe»),

    «ExecParameters» — дополнительные параметры для запуска (по умолчанию «config»)

    Reply
  15. ADirks

    (13) Ну, понятно что сам.

    Во первых — да, размер. Кто в наше время может похвастаться размером exe-шника в 17к?! А я могу :))

    Во вторых, я ведь не планировал столько функционала туда запихивать! А вот поди-ж ты…

    В третьих, полезно иногда спускаться на нижние этажи, а то и в подвалы, дабы не расслабляться (дыры в абстракциях там, и всё такое ;)).

    Reply
  16. Abadonna

    >P.S. блин, как тяжко на чистом WinAPI то программировать, после всяких фрэймворков 🙂

    Чистый WinAPI — rules and cool :))))

    Reply
  17. Abadonna

    (14) Я потому и добавил (11), что после (10) увидал где путь прописан 😉

    Но это не есть совсем гуд, т.к. узнать куда заинсталлирована 1С — никаких проблем! 3 минуты кодинга

    Reply
  18. ADirks

    (17) Ну, за три минуты кодинга можно сделать пргу, которая узнает где находится 1С [b]на моём компе[]. А нехило бы, чтобы она на всех работала.

    Покопался вчера в реестре, и думаю вот что: надо анализаровать ветки с записями о COM-серверах, которые живут в 1cv7.exe. Уж эти то точно будут на своих местах.

    Для семёрки анализирую v77.Application: SOFTWARE\Classes\CLSID\{63112D80-94F0-11D2-9F39-008048DA120F}\LocalServer32 в HKCU и HKLM. А чего для восьмёрки анализировать?

    Reply
  19. ADirks

    Блин, с тегами как-то всё неблагополучно… Слэш не тот, и GUID сожрало 🙂

    v77.Application: SOFTWARE\Classes\CLSID\63112D80-94F0-11D2-9F39-008048DA120F\LocalServer32

    GUID на самом деле в фигурных скобках

    Reply
  20. Abadonna

    (18,19) UKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersion­Uninstall

    параметр DisplayIcon, там как раз полное имя лежит: C:Program Files1Cv77BIN1cv7s.exe (у меня)

    Reply
  21. ADirks

    (20) Ветку Uninstall использовать не совсем корректно. Потому что этой ветки может вообще не быть, если я тупо скопировал файлы, ничего не устанавливая. И пути там запросто могут быть кривыми, если инсталляцию перенесли в другой каталог. А вот COM-объекты будут по любому, после первого запуска 1С, и с правильными путями.

    Reply
  22. artbear

    CLSID

    Для 8

    [HKEY_CLASSES_ROOTV8.ApplicationCLSID]

    @=»{FB17AD3E-5F20-453A-AE83-2711006155CF}»

    Для 8.1

    [HKEY_CLASSES_ROOTV81.ApplicationCLSID]

    @=»{b3a7d9db-3cba-47f4-b80a-5dda79d8925a}»

    Reply
  23. artbear

    CLSID

    Для 8

    [HKEY_CLASSES_ROOTV8.ApplicationCLSID]

    @=»FB17AD3E-5F20-453A-AE83-2711006155CF»

    Для 8.1

    [HKEY_CLASSES_ROOTV81.ApplicationCLSID]

    @=»b3a7d9db-3cba-47f4-b80a-5dda79d8925a»

    Гуид в фигурных скобках !

    Reply
  24. artbear

    Новости на 14.04.2008: Более интеллектуальный поиск 1cv7(8).exe с использованием информации из реестра.

    .

    ЗЫ Лех, «интеллетуальный» поправь 🙂

    Reply
  25. tormozit

    Не открывает сама конфигуратор, если он не запущен.

    8.1.10.50.

    Reply
  26. artbear

    (25) Для восьмерочного варианта это штатное поведение, другого не делал 🙁

    Reply
  27. tormozit

    В терминале (Windows 2003 Server) очень долго происходит поиск процесса (запущено много процессов 1с8 от разных пользователей) — до минуты. И хотя если даже находится только один процесс, то автоматически он не выбирается и появляется окно для выбора из одной строки.

    Reply
  28. tormozit

    Прошу дать мне исходники утилиты для 8-ки. Очень надо исправить тормоза в работе под терминалом.

    Reply
  29. ADirks

    Все исходники — в архиве. Для восьмёрки надо просто собирать конфигурацию «OpenIn1Cv8». Либо где-нибудь задефайнить _VERSION_FOR_1CV8

    Reply
  30. tormozit

    Какие средства разработки мне потребуется установить?

    Reply
  31. ADirks

    Проект сделан на MS Visual C++ 6.0. Но собирается и GNU C++, там даже makefile лежит :). Думаю, что он соберётся любым компилятором, который имеет библиотеки для доступа к WIN API, только проект придётся заново сделать.

    В общем, если совсем уж ничего под руками нет, то проще всего будет найти любую MS Visual Studio.

    Reply
  32. tormozit

    Закомментировал вызов WaitForOpen1C. Теперь вместо 2-х минут открывается 1 сек. То, что мне это не нужно я уже понял, но все равно интересно, зачем нужен такой хитрый цикл ожидания?

    Reply
  33. ADirks

    Это когда из конфигуратора по хоткею открываешь чего-то, а 1С ещё не запущена. Процесс-то быстро появляется, а главное окно не очень — и получается облом. Правда, и с таким хитрым циклом тоже иногда облом получается, но всё-таки реже 🙂

    Reply
  34. Bosma

    А можно ли каким либо образом прикрутить эту штуку к одной базе? То есть мне не надо чтобы внешний отчет запускался в каком то имеющемся экземпляре 1С. А именно в нужной базе. Если она запущена, то внешний отчет запускается в ней, если нет, то сначала нужная база открывается.

    Reply
  35. courageous

    Други, подскажите, а нельзя ли еще и Параметры передать в запускаемую обработку? вообще цены бы не было…

    Reply
  36. semyfelx

    А эта программа вообще не запускается на тех компах где нет установленных 1С-ок???

    Просто я правлю нужные файлы у себя на компе и потом несу к бухам. И по описанию программка как-раз для меня.

    Может подскажите как запустить ее без предустановленной 1с ?

    Reply
  37. artbear

    (0) Алексей, новые доработки есть?

    И напомни, пожалуйста, адрес репозитария утилиты.

    Хочу из cvs в гит все переложить

    (32) Сергей, пришли мне свои исходники, если они еще остались 🙂

    Reply
  38. tormozit

    (37) Прислал в личку

    Reply
  39. ADirks

    (37) всё что было переложил на http://sourceforge.net/projects/openconf-scripts/

    в самой открывалке вроде ничего не делал, немного правок в скриптах было.

    забирать так:

    svn co svn://anonymous@svn.code.sf.net/p/openconf-scripts/code

    Reply
  40. artbear

    (39) не удается сделать импорт в tortoisesvn

    Import T:Projectssvnopenconf-scripts to svn://anonymous@svn.code.sf.net/p/openconf-scripts/code, Ignored items included

    Authorization failed
    Reply
  41. artbear

    (40) artbear, упс, все удалось, как обычно, нужно было делать простой checkout

    Reply
  42. 1v7

    Так долго искал Вашу разработку!!! Пол инфостарта скачал пока нашёл! Супер!

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *