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

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

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

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

&НаКлиенте
Процедура ОткрытьФормуВнешнейОбработки()
мИмяФайла = "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 не будет опубликован. Обязательные поля помечены *