Внешняя компонента для управления главным окном 1С:Предприятие

Маленькая внешняя компонента для управления главным окном 1С:Предприятие версии 8.2.

Компонента может быть полезной, программистам, использующим в решениях на 1С окна и диалоги других приложений Windows.

Например, при программном открытии документов MS Office или использовании диалогов, вызываемых из WSH, окно 1С может терять фокус или видимость. Вернуть их можно будет с помощью этой компоненты.

Компонента разработана по технологии Native.

Работает только в Windows с 1С v. 8.2 (обычное приложение, толстый и тонкий клиент управляемого приложения).

Пример использования (конфигурация) прилагается (обычное и управляемое приложение).

Методы компоненты

Метод Русский синоним Действие
Minimize   Свернуть Сворачивание окна в панель задач
Maximize   Развернуть Разворачивание окна во весь экран
Hide       Скрыть Сокрытие главного окна 1С
Show       Показать Показ главного окна 1С (после скрытия)
ShowNormal РазвернутьВОкно Показ окна в неполноэкранном режиме
MoveOnTop  ПереместитьНаПереднийПлан Перемещение окна на передний план
SetAlwaysOnTopOn ЗакрепитьПоверхВсехОкон Закрепление окна поверх всех окон (только для обычного приложения)
SetAlwaysOnTopOff СнятьЗакрепление Снятие закрепления (только для обычного приложения)
CloseMessages ЗакрытьОкноСообщений Закрытие окна сообщений
CloseAllChildForms ЗакрытьВсеДочерниеФормы Закрытие всех дочерних форм главного окна 1С (только для обычного приложения)

 

 

 

 

 

 

 

 

 

30 Comments

  1. Spektr

    Не могу распаковать архив.

    Выдает сообщение:

    «Неизвестный метод в 1Cv8.1CD

    Неизвестный метод в MWC.dll

    Ошибка — сбой при операции»

    Reply
  2. le_

    (1) Spektr, добавил архив RAR.

    Reply
  3. koka

    Расширение функционала 1С — однозначно плюс.

    Компонента работает правильно. Но столкнулся с таким моментом. Есть код (вызывается по доп. кнопке в примере):

         ПолноеИмяРабФайла = «C:TempСхема локальной сети.vsd»;
    
    ДокДляБуфераОбмена = Новый COMОбъект(«Visio.Application»);
    ДокДляБуфераОбмена.Visible = False;
    ДокументВизио = ДокДляБуфераОбмена.Documents.OpenEx (ПолноеИмяРабФайла, 2);
    Для i = 1 По ДокДляБуфераОбмена.ActiveWindow.Page.Shapes.Count Цикл
    ДокДляБуфераОбмена.ActiveWindow.Select( ДокДляБуфераОбмена.ActiveWindow.Page.Shapes.Item(i), 2);
    КонецЦикла;
    ДокДляБуфераОбмена.ActiveWindow.Selection.Copy();
    
    // …  Обработка буфера обмена
    
    ДокументВизио.Close();
    
    ГлавноеОкно.ПереместитьНаПереднийПлан();
    //  ГлавноеОкно.Показать();
    

    Показать

    Открывается документ Visio, копируется содержимое в буфер обмена для дальнейшей обработки, закрывается документ.

    Фокус убегает на окно, открытое ПЕРЕД вызовом Главного Окна 1С. Методы компоненты MWC.dll отрабатывают, но не перемещают окно 1С на передний план. Скорее всего что-то в Windows сдвигается. Было бы здорово, поправить этот нюанс.

    Reply
  4. le_

    (3) koka, вечером попробую воспроизвести, доработаю.

    Reply
  5. le_

    (3) koka, попробуйте обновленную компоненту.

    Reply
  6. koka

    (5) Попробовал.

    1. В XP: Первый раз основное окно 1С (вызванное из конфигуратора) переместилось на передний план после вызова и закрытия Visio. Однако после этого не получалось (кроме одного раза) разными ухищрениями: на переднем плане остаётся приложение, бывшее активным ДО вызова приложения на 1С. А на панели задач кнопка управления окном 1С помигала и осталась подсвеченной (просится нажать на неё).

    2. В 7-ке: Работает стабильно. Может и первый вариант работал стабильно? Я не пробовал.

    Выводы: Обработка хорошая, дорабатывать для ХР смысла видимо нет — особенности операционки.

    Reply
  7. defini

    Эх.. такое бы для подчиненных окон внутри самой 1с…

    Reply
  8. le_

    (6) koka, да, я ваш пример под Win7 тестировал. Чуть позже под XP попробую допилить…

    Reply
  9. le_

    Компонента обновлена. Добавлен метод для закрытия окна сообщений.

    Reply
  10. yuraos

    Люблю всякие интерфейсные фишки!

    А нельзя как-нибудь еще управлять и внутренними окнами 1С-ки

    наподобии ВК FormEx.dll которая для 1с-7.7 ???

    Меня в частности интерисует возможность изменения

    места положения окна формы.

    У форм есть свойства Ширина и Высота, которые можно изменять.

    А вот свойств Лево и Верх к сожалению нет.

    А так хочется иногда открыть форму в определенном месте,

    например, выравнять по какому-нибудь элементу другой формы.

    Reply
  11. lev6975

    Помню, пару лет назад, скачал какую — то компоненту, которая позволяла управлять, к примеру, прозрачностью главного окна программы — шутковали у клиентов — бух базу открывает, а она на дисплее бледнеет и полностью растворяется:-)))))))))))))))))))))

    Вот, как называется эта dll, запамятовал… Там ещё можно было вывести аналоговые часы на раб.стол 1с…

    Если помнит кто эту компоненту, то как она называется?Отсюда и качал, по — моему, откуда — то…

    Reply
  12. Dolly_EV

    (11) MiracleV8.dll

    Reply
  13. murat_

    Добрый день! Есть вопросы по данной компоненте:

    1) Кто-нибудь проверял работу данной ВК под ОС x64 ? Пробовал запустить на Server 2008 х64 — компоненту подключает, но не создает объект «Addin.MWC.MainWindowCommander», выдает ошибку «Тип не определен (Addin.MWC.MainWindowCommander)». На Windows 7 х32 все нормально работает.

    Есть в планах у автора доработать компоненту для х64 систем ?

    2) Вопрос автору, чем вызвано ограничение метода «SetAlwaysOnTopOn» только для обычного приложения ?

    Есть возможность доработать для управляемого приложения ?

    Reply
  14. le_

    (13)

    Вопрос автору, чем вызвано ограничение метода «SetAlwaysOnTopOn» только для обычного приложения ?

    Использование этого метода становится неудобным в режиме предприятия, при использовании управляемого приложения, при установке свойства Сервис — Параметры — Режим открытия форм — В отдельных формах.

    Работу компоненты под х64 проверю…

    Reply
  15. le_

    (13) Описанная вами проблема на Server 2008 х64 связана с отсутствием там библиотек среды MS Visual Studio, используемых в компоненте.

    Для решения проблемы либо установите Распространяемый пакет Visual C++,

    либо скачайте вариант компоненты с включенными в неё необходимыми библиотеками (размер компоненты в этом случае уже увеличивается до 103 кб). Смотрите раздел с файлами в этой публикации.

    Reply
  16. murat_

    le_, благодарю за быстрый ответ!

    (14)

    Может конечно ошибаюсь, но просто подумал, зная хендл отдельного окна УФ, наверно можно было бы применить те же настройки к текущему окну как и для главного?

    (15)

    Пакет VC++ я уже устанавливал до этого. Без него моя ВК не подключалась совсем, ОС выдавал ошибку, что нет библиотеки msvcr120.dll.

    Обновленная ВК заработала сразу на Windows Server 2008 R2 Standart, большое спасибо!

    А за вариант компоненты с включенными в неё необходимыми библиотеками еще отдельно спасибо.

    Reply
  17. murat_

    В таблице методов ошибка или действительно метод так называется «ПеременститьНаПереднийПлан» ?

    Reply
  18. murat_

    После некоторых манипуляций с методами компоненты уже хотя бы удалось активизировать окно на передний план после открытия. До этого в Windows 7 окно просто «мигало» в панели задач и не активизировалось. В идеале конечно хотелось бы закрепить поверх остальных окон всегда.

    Reply
  19. murat_
    Использование этого метода становится неудобным в режиме предприятия, при использовании управляемого приложения, при установке свойства Сервис — Параметры — Режим открытия форм — В отдельных формах.

    Смотря какая задача решается. Для меня, например, необходимо скрыть главное окно и показать УФ обработки, закрепив его поверх остальных. Мне кажется, можно было бы закрепить главное окно, открыть УФ в режиме «БлокироватьВесьИнтерфейс», скрыть главное окно. Либо еще лучше, сразу закрепить УФ обработки, а главное — скрыть не показывая сразу.

    Reply
  20. le_
    Может конечно ошибаюсь, но просто подумал, зная хендл отдельного окна УФ, наверно можно было бы применить те же настройки к текущему окну как и для главного?

    Можно, конечно, но в моем случае управляется именно главное окно.

    В таблице методов ошибка или действительно метод так называется «ПеременститьНаПереднийПлан» ?

    Это была опечатка здесь, в описании. Поправил.

    Reply
  21. orlovskiy-a

    Добрый день. Скачал и первый и второй вариант dll, но в сожалению не могу их зарегистрировать. Пробовал через regsvr32 пишет что точка входа DllRegisterServer не найдена, если с ключами i n то точка входа dllInstall не найдена. Если через regasm, то error RA0000 сбой при загрузке из-за недопустимой сборки .net. Подскажите что делать. Пробовалось на win 7 64 и 86 и win2008r2.

    Reply
  22. le_

    (21) orlovskiy-a, это native-компонента, её не нужно регистрировать.

    Reply
  23. CyberWo1f

    А можно узнать, как в С++ получить хендл главного окна 1С?

    Тоже пишу компоненту, но в С++ не силен, просто интересно, как это сделать.

    Reply
  24. le_

    (23) CyberWo1f, ответил личным сообщением.

    Reply
  25. seva1405

    а куда ее нужно положить? никак не получается пишет {Обработка.ПримерРаботыСКомпонентой.Форма.Форма.Форма(22)}: Тип не определен (Addin.MWC.MainWindowCommander)

    Reply
  26. seva1405

    Разобрался.

    Reply
  27. Dvornik

    Один вопрос, она остаётся в папке. Как её удалить потом?

    Reply
  28. le_

    (27) Dvornik, УдалитьФайлы()

    Reply
  29. Dvornik

    (28) Ошибка при вызове метода контекста (УдалитьФайлы): Ошибка удаления файлов: Ошибка доступа к файлу

    Reply
  30. Dvornik

    Отвечу сам. Всё оказалось проще. Методов отключения нет, поэтому присвоил Неопределено.

    ГлавноеОкно=Неопределено;
    Попытка
    УдалитьФайлы(Местоположение);
    ….. и т.д.

    Reply

Leave a Comment

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