Утилита для открытия файлов в 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 не будет опубликован. Обязательные поля помечены *