Открытие управляемой формы внешней обработки (аналогично внешнего отчета)

Много перекопал статей, но везде как то заморочено, и зачастую не полностью рабочий код. Если кому пригодится, то буду очень рад.

Процедуры предназначены для того, чтобы можно было в режиме управляемого приложения открыть произвольную управляемую форму внешнего отчета/ обработки, в том числе и из внешнего отчета/обработки.

&НаСервере
Функция ПодключитьВнешнююОбработкуСервер(мАдресХранилища)
Возврат ВнешниеОбработки.Подключить(мАдресХранилища);
КонецФункции

&НаКлиенте
Процедура ОткрытьФормуВнешнейОбработки()
мИмяФайла = "D:ВнешняяОбработка.epf";
мИмяФормы = "НужнаяФорма";
мАдресХранилища = "";
мРезультат = ПоместитьФайл(мАдресХранилища, мИмяФайла, , Ложь, Новый УникальныйИдентификатор);
мИмяВнешнейОбработки = ПодключитьВнешнююОбработкуСервер(мАдресХранилища);
мФорма = ПолучитьФорму("ВнешняяОбработка." + мИмяВнешнейОбработки + ".Форма." + мИмяФормы, , ЭтаФорма);
мФорма.Открыть();
КонецПроцедуры

63 Comments

  1. anig99

    А как открыть из справочника Дополнительные отчеты и обработки?

    Reply
  2. m-serg74

    (1) anig99, открыть оттуда что?

    Reply
  3. anig99

    (2) да. для открытия обработки по ссылке или коду, а не внешнему файлу.

    Reply
  4. m-serg74

    (3) anig99, так ее ж все равно во временный файл записывать, чем она лучше то совсем внешней?

    Reply
  5. anig99

    (4) ну вот кусок кода записи во внешний файл и нужен. Искать не охота.

    Reply
  6. m-serg74

    (5) anig99,

    АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(Ссылка.ХранилищеОбработки.Получить());

    ИмяОбработки = ВнешниеОбработки.Подключить(АдресВоВременномХранилище, , Истина);

    ОткрытьФорму(«ВнешняяОбработка.»+ ИмяОбработки +».Форма», ПараметрыОбработки, ВладелецФормы);

    ну как то так в общем случае…

    Reply
  7. Поручик

    (1) В БСПЯтине поищи, там всё есть.

    Reply
  8. ShantinTD

    вот если бы в режиме обычного приложения открыть управляемую форму внешней обработки …

    (при условии что в обычном приложении разрешено использование управляемых форм, конечно)

    Reply
  9. m-serg74

    (8) ShantinTD, зачем? вот если бы в Visual Studio можно было 1Совские обработки отлаживать… вот это было б круто… наверное…

    Reply
  10. ksvd

    Спасибо. Пригодилось. Сделал себе запуск из одной формы нужных внешних отчетов и обработок.

    Reply
  11. m-serg74

    (10) ksvd, На здоровье! Спасибо за отзыв.

    Reply
  12. ShantinTD
    вот если бы в Visual Studio можно было 1Совские обработки отлаживать…

    а это кому нужно? 1С или ВизуалСтудии? (знаю я что такое студия. сам в ней редактировал все, что только можно было. еще в версии 2003 или 2005, кажется. и от 1С ждал редактора хотя бы отдаленно похожего.)

    Ну, например: есть у меня база. изначально обычное приложение. веду постепенный перевод на управляемые формы. в частности — не пишу новых форм обычных. так вот если обработку новую нужно — то или встраивать сразу, или запускаться в управляемом режиме (а он почти пустой). Если бы кто поборол запуск управлемой формы внешней обработки из обычного режима — не пришлось бы корячиться.

    Reply
  13. m-serg74

    (12) ShantinTD,

    а это кому нужно?

    точно так же не нужно по большому счету как и

    в режиме обычного приложения открыть управляемую форму внешней обработки

    но это мое личное мнение и с ним не обязательно соглашаться (одно плохо для не согласных — Фирма 1С кажется думает так же)

    и от 1С ждал редактора хотя бы отдаленно похожего

    ну и зря — 1С в первую очередь система учета, а не среда разработки

    ПС. 1С придумали Дополнительную форму, делайте дополнительно к Обычной Управляемую форму, и будет работать в обоих режимах

    Reply
  14. ShantinTD

    Да, то что предложил я (открытие управляемой формы внешней обработки в обычном режиме) — если кому-то и нужно, то только на момент отладки.

    Сделать дополнительную форму — не трудно. Я выше уже говорил как раз о том, что проверять и отлаживать форму в неродном режиме — неудобно.

    Система учета — это когда в режиме предприятия запущена. В режиме конфигуратора — это как раз-таки среда разработки для вышеуказанной системы учета.

    Кстати: не «система учета», а «система автоматизации учета». Мое мнение, конечно.

    Я считаю, что использовать 1С в качестве калькулятора или текстового редактора — неправильно. Но если для автоматизации требуется какулятор или тектовый редактор, то запускать внешнее приложение (калькулятор или блокнот) — совсем не обязательно. Так и писать можно не только «учетные» модули, но любые вещи, которые будут полезны для автоматизации. Даже если это автоматизация не учета, а чего-то еще.

    Reply
  15. m-serg74

    (14) ShantinTD,

    но любые вещи

    ну да, игру например

    Reply
  16. ShantinTD

    (15) если оно действительно полезно для автоматизации, то почему бы и нет?

    Не нужно отрывать часть контекста.

    Reply
  17. m-serg74

    (16) ShantinTD, конечно полезно, игра позволяет, в свободное время отдохнуть человеку.

    Reply
  18. ShantinTD

    (17) именно так

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

    .

    За сим данный диспут останавливаю. Если есть желание — можно перенести в отдельную ветку спор о том, что полезно для автоматизации, что нужно делать на 1С, а что не нужно. Мы и так уже достаточно удалились от темы публикации.

    Reply
  19. kuza_87

    Спасибо, актуальная тема

    Reply
  20. m-serg74

    (19) kuza_87, пожалуйста, на это и рассчитывал, что кому-то да пригодится

    Reply
  21. rasswet

    не понимаю зачем в комментах писать «это никому не нужно»?? ну не нужно тебе лично-не качай, не обсуждай, не используй. Посмотрел обзор еженедельный, так в каждой третье ветке «кому оно надо».

    Reply
  22. m-serg74

    (21) rasswet, а кто сказал что не нужно? и про что?

    Reply
  23. Evil Beaver

    Блин, че за банальщина…. Прям даже минус просится

    Reply
  24. m-serg74

    (23) Evil Beaver, ссылку дай где про это почитать

    Reply
  25. Evil Beaver

    (24) про «это» — про что? про то, как открыть форму внешней обработки? Например, Синтакс-помощник и типовое руководство разработчика.

    Reply
  26. m-serg74

    (25) Evil Beaver, а для чего смотришь такие «банальные» вещи? Если не секрет?

    Reply
  27. Evil Beaver

    (26) хм… висит на главной тема «Открытие управляемой формы внешнего отчета». Думаю, надо же, чего такого интересного решили люди предложить про открытие форм? Лезу, смотрю, а там просто «открытие» т.е. никаких там новостей, оригинальных ходов и прочего. Тупо кусок кода по подключению внешней обработки. Мой камент про «банальщину» прям вырвался, тьфу-ты, думаю, хрень какая, зря только заходил. И кроме того, минуса я-таки не поставил, предлагаю тему свернуть.

    Reply
  28. m-serg74

    (27) Evil Beaver, начал говорить — ставь, мне лично твое личное мнение по барабану, я не для +/- писал

    Reply
  29. Evil Beaver

    (28) 🙂 Ну так ясное дело, что по барабану:) И мне минусить кого-то тоже по барабану. Статья твоя ниачем, вот что я хотел сказать. Ну раз кому-то пригодится, то слава Богу, значит я ошибаюсь.

    Reply
  30. s512

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

    ВнешниеОбработки.Подключить(мАдресХранилища); -регистрирует обработку с сохранением во временную папку сервера. Значит, на клиенте, который работает удаленно, сетевой файл просто не будет доступен, и при вызове Форма.ПолучитьФорму(…) будет ошибка.

    Reply
  31. m-serg74

    (30) s512,

    Значит, на клиенте, который работает удаленно, сетевой файл просто не будет доступен, и при вызове Форма.ПолучитьФорму(…) будет ошибка.

    Значит? Будет? Может пробуем и текст ошибки сюда… а не размышления, если бы у бабки…

    Reply
  32. s512

    Пробовал неоднократно, поэтому и пишу. Сервер 1С находится на удаленном компе, подключение к нему по локалке. При вызове «ПоместитьФайл» обработка создается во временных файлах Сервера, а не на клиенте у юзера, и при «Форма.ПолучитьФорму» сразу вылетает «файл не обнаружен: «+ путь к файлу на удаленном сервере 1С (C:UsersUSR1CV82…)

    Reply
  33. m-serg74

    (32) s512,

    Сервер 1С находится на удаленном компе

    но

    подключение к нему по локалке

    что за …?

    если Сервер, то значит клиент-серверная, 99% что он на удаленном компе(с серверной ОС), тогда не понятно что значит «по локалке»???

    Reply
  34. s512

    (33)

    Все ок, код работает, у меня проблема была в правах доступа к файлам.

    Т.е. спасибо — пригодилось.

    Reply
  35. NittenRenegade

    Спс, пригодилось. По поводу того, то в СП всё есть, так это не совсем так. Раз уж зашла речь о Visual Studio, то можно вспомнить и шикарную справку с многочисленными подробными примерами, в сравнении с которыми можно подтереться и СП и ИТС заодно, если сравнить её с MSDN. Я когда переходил с .NET на 1С был просто в шоке от справочной информации.

    Как отладить эту внешнюю обработку? Весь сыр бор мне нужен был чтобы отладить заполнение ТЧ из формы.

    Reply
  36. m-serg74

    (35) NittenRenegade,

    Как отладить эту внешнюю обработку? Весь сыр бор мне нужен был чтобы отладить заполнение ТЧ из формы.

    как обычно — отладчиком, а вот про заполнение ТЧ что то не понял

    Reply
  37. NittenRenegade

    Отладчик не заходит в вызываемую обработку. Возможно оттого, что вызывается по сути не тот файл обработки, который я указал для вызова, а тот, который теперь находится в хранилище

    Reply
  38. m-serg74

    (37) NittenRenegade, так а что там отлаживать то собрались, если там заполнение ТЧ, то делайте его в модуле менеджера нужного документа, и отлаживайте

    Reply
  39. NittenRenegade

    УТ 11 на поддержке. Хочу вызвать методы, которые обычно отрабатывают при изменении номенклатуры, чтобы заполнились остальные значения, но что-то с ними не ладится. Вот и пытаюсь это дело отладить.

    Документ — Поступление товаров услуг

    Reply
  40. NittenRenegade

    Идея была написать обработку — отладчик заполнителей ТЧ, т.к. задача явно будет повторяться в том или ином виде ещё не раз.

    Сейчас пришел к тому, что через Файл / Открыть открываю обработку, указываю ей документ поступления, получаю его форму, открываю и заполняю. Чтобы отладить заполнение ТЧ, заполнять-то надо с клиента, форму поступления.

    Reply
  41. sidr

    +1

    Reply
  42. Beerk@

    m-serg74, Спасибо за код по открытию формы внешней обработки.

    Reply
  43. Гость

    у меня не открывается

    Reply
  44. m-serg74

    (43) Гость, не открывается что именно?

    Reply
  45. LivingStar

    (44.) если не выбрано имя файла то пишет

    {Форма.НужнаяФорма.Форма(26)}: Ошибка при вызове метода контекста (ПоместитьФайл)

    мРезультат = ПоместитьФайл(мАдресХранилища, мИмяФайла, , Ложь, Новый УникальныйИдентификатор);

    по причине:

    Ошибка сохранения файла. Файл не обнаружен ‘D:ВнешняяОбработка.epf’. 2(0x00000002): Не удается найти указанный файл.

    А что в коде нельзя получить путь к файлу? А если обработка будет загружена во внешние отчеты конфигурации, как тогда?

    А если выбрать обработку по требуемому пути , и нажать кнопку пишет «Использование модальных окон в данном режиме запрещено!». Я открываю в толстом клиенте.

    Reply
  46. LivingStar

    вот что ещё пишет

    {Форма.НужнаяФорма.Форма(27)}: Ошибка при вызове метода контекста (ПодключитьВнешнююОбработкуСервер)

    мИмяВнешнейОбработки = ПодключитьВнешнююОбработкуСервер(мАдресХранилища);

    по причине:

    Неизвестный идентификатор формы

    Reply
  47. m-serg74

    (45) LivingStar,

    А что в коде нельзя получить путь к файлу?

    Кто ж Вам может запретить? Конечно можно. Цель публикации — показать как открыть, а не как выбрать файл обработки, форму которой нужно открыть, и не как работать с справочником внешние обработки…

    Чувствую скоро будут задавать вопросы типа — а почему она документы не проводит, мне нужно чтоб она проводила…

    Reply
  48. Гость

    (47) так форму то как открыть???? Она у меня не открывается же!!!!

    Reply
  49. LivingStar

    (47) вы про форму скажите мне, что бы открылась без ошибок

    Reply
  50. m-serg74

    (49) LivingStar, путь к обработке из которой открывать форму хотите укажите… любым доступным Вам способом.

    Reply
  51. LivingStar

    (50) да я делаю как у вас, но я указываю путь к этой же обработке, пишет использование модальных окон запрещено

    Reply
  52. LivingStar

    (50) {Форма.НужнаяФорма.Форма(27)}: Ошибка при вызове метода контекста (ПодключитьВнешнююОбработкуСервер)

    мИмяВнешнейОбработки = ПодключитьВнешнююОбработкуСервер(мАдресХранилища);

    по причине:

    Неизвестный идентификатор формы

    Reply
  53. m-serg74

    (51) LivingStar,

    но я указываю путь к этой же обработке

    Зачем Вам открывать Форму которая уже открыта?

    ПС. Для новомодных немодальных режимов код:

    &НаСервере
    Функция ПодключитьВнешнююОбработкуСервер(мАдресХранилища)
    Возврат ВнешниеОбработки.Подключить(мАдресХранилища);
    КонецФункции
    
    &НаКлиенте
    Процедура Команда1(Команда)
    мИмяФайла = «d:\_wrkЯчейки.epf»;
    мИмяФормы = «Форма»;
    мАдресХранилища = «»;
    Оп = Новый ОписаниеОповещения(«ВыполнитьПосле», ЭтотОбъект, мИмяФормы);
    НачатьПомещениеФайла(Оп, мАдресХранилища, мИмяФайла, Ложь, УникальныйИдентификатор);
    КонецПроцедуры
    
    &НаКлиенте
    Процедура ВыполнитьПосле(Выбрано, мАдресХранилища, Результат, мИмяФормы) Экспорт
    мИмяВнешнейОбработки = ПодключитьВнешнююОбработкуСервер(мАдресХранилища);
    мФорма = ПолучитьФорму(«ВнешняяОбработка.» + мИмяВнешнейОбработки + «.Форма.» + мИмяФормы, , ЭтаФорма);
    мФорма.Открыть();
    КонецПроцедуры
    

    Показать

    Reply
  54. serq82

    (3) вот так например

    Reply
  55. serq82
    &НаКлиенте
    Процедура ОткрытьОбработкуИзСправочника(Команда)
    мИмяФайла = ИмяФайла();
    //мИмяФайла = «d:\_wrkЯчейки.epf»;
    мИмяФормы = «Форма»;
    мАдресХранилища = «»;
    Оп = Новый ОписаниеОповещения(«ВыполнитьПосле», ЭтотОбъект, мИмяФормы);
    НачатьПомещениеФайла(Оп, мАдресХранилища, мИмяФайла, Ложь, УникальныйИдентификатор);
    КонецПроцедуры
    
    &НаСервере
    Функция ПодключитьВнешнююОбработкуСервер(мАдресХранилища)
    Возврат ВнешниеОбработки.Подключить(мАдресХранилища);
    КонецФункции
    
    
    &НаКлиенте
    Процедура ВыполнитьПосле(Выбрано, мАдресХранилища, Результат, мИмяФормы) Экспорт
    мИмяВнешнейОбработки = ПодключитьВнешнююОбработкуСервер(мАдресХранилища);
    мФорма = ПолучитьФорму(«ВнешняяОбработка.» + мИмяВнешнейОбработки + «.Форма.» + мИмяФормы, , ЭтаФорма);
    мФорма.Открыть();
    КонецПроцедуры
    
    &НаСервере
    Функция ИмяФайла()
    ТекСсылка=Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию(«ЗаказПокупателя1»);
    ИмяФайла = ПолучитьИмяВременногоФайла();
    ДвоичныеДанные = ТекСсылка.ХранилищеОбработки.Получить();
    ДвоичныеДанные.Записать(ИмяФайла);
    Возврат ИмяФайла;
    КонецФункции

    Показать

    Reply
  56. m-serg74

    (54) в (6) давным давно все написано как из Доп. Обработок открывать

    Reply
  57. serq82

    (56) не знай. я так и не нашел способ используя только обработки в справочники. ругается на безопасный режим.опять с помощью костылей только. из одной обработки вызывать другую.а расширение пока не охото использовать

    Reply
  58. m-serg74

    (57)

    ругается на безопасный режим

    а что смущает в не безопасном режиме работать?

    Reply
  59. serq82

    (58) попробуйте в типовой добавить в расширении в какой нибудь документ кнопку.и по кнопке открыть форму обработки из справочника, у меня не получилось хотя везде Ложь прописано

    Reply
  60. m-serg74

    (59) вот как думаете зачем мне разворачивать какую-то типовую базу, делать какую-то обработку, которую потом загружать в справочник доп. обработок, потом пробовать там что-то, ведь не факт, что я повторю те же условия что получились у Вас? По-моему будет проще, если Вы, то что уже сделали, выложите на какой-нибудь обменник, и я на Вашем примере уже буду смотреть что там не так…. Верно?

    ПС. Посмотрите рисунок — если у Вас у расширения, например, стоит галка — Безопасный режим, то думаю, чтобы Вы потом, где не пытались сделать для изменения режима, платформа оставит все в безопасном режиме.

    Reply
  61. serq82

    (60) действительно, вы правы. вся бяда была в галочке, ну или прокладку сменить надо)))

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

    Reply
  62. m-serg74

    (61) бывает 🙂

    Reply
  63. ppdron

    Спасибо!

    Reply

Leave a Comment

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