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

10.03.11

Разработка - Универсальные функции

В 8.2 1С подложила разработчикам достаточно большую свинью - получить одну форму внешнего отчета из другой напрямую не получается, т.к. необходимо указать полный путь к форме. Для решения проблемы требуется подключить отчет к конфигурации. Всю голову сломал, пока дошел до данной реализации, надеюсь кому-нибудь поможет...

 

 

Прописываем в форме следующий код:

 

&НаКлиенте

 

Функция ПолучитьФормуВнешнегоОтчета(ИмяФормы)

 

    АдресХранилища = "";

 

    ИмяОтчета = ПолучитьИмяВнешнегоОтчета();

 

    Результат = ПоместитьФайл(АдресХранилища, ИмяОтчета, , Ложь);

 

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

 

    Возврат ПолучитьФорму("ВнешнийОтчет."+ИмяВнешнегоОтчета +".Форма.ФормаСотрудника",,ЭтаФорма);

 

КонецФункции



&НаСервере

 

Функция ПолучитьИмяВнешнегоОтчета()

 

    Возврат РеквизитФормыВЗначение("Отчет").ИспользуемоеИмяФайла;

 

КонецФункции

 

&НаСервере

 

Функция ПодключитьВнешнийОтчет(АдресХранилища)

 

    Возврат ВнешниеОтчеты.Подключить(АдресХранилища);

 

КонецФункции

 


Затем получаем форму на клиенте вызовом процедуры ПолучитьФормуВнешнегоОтчета(ИмяФормы), где ИмяФормы - строка с именем нужной формы.

Форму требовалось вызывать единожды, поэтому проверку на повторное подключение не делал, выдает ошибку при повторном вызове, как вариант - подключение реализовывать при открытии данной формы, а полученное имя хранить в строковом реквизите.

Идея сыровата, но может кому поможет...

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Загрузка и выгрузка в Excel Универсальные функции Программист 1С:Предприятие 8 Россия Бесплатно (free)

Описанный ниже подход позволяет в три шага заполнять формулы в Excel файлы, вне зависимости от ОС сервера (MS Windows Server или Linux). Подход подразумевает отказ от работы с COM-объектом в пользу работы через "объектную модель документа" (DOM).

30.10.2025    3900    Abysswalker    9    

46

Универсальные функции Работа с интерфейсом Программист 1С:Предприятие 8 Бесплатно (free)

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

14.05.2025    7339    DeerCven    15    

61

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

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

21.05.2024    51668    dimanich70    84    

173

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    7568    7    John_d    13    

59

Универсальные функции Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    65621    atdonya    31    

70

Универсальные функции Программист 1С:Предприятие 8 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    9448    ke.92@mail.ru    17    

68
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. yku 380 10.03.11 16:54 Сейчас в теме
Тоже как-то надо было. Уж не помню как я это реализовал (но код очень похож), но у меня проблема была в следующем.
Есть отчет. у него две формы: форма1 и форма2. Я открывал получал форму отчета, открывал её, пользователь вносил в неё данные. Получал форму2, открывал её, а в ней нет тех данных что ввели в форму1. Будто бы два объекта создавала. Но тогда я только с 8.2 знакомился, может чего и напутал. С тех пор каждый раз в конфу встраивал и не возвращался к этому вопросу.
3. пользователь 10.03.11 20:38
Сообщение было скрыто модератором.
...
4. yku 380 11.03.11 09:14 Сейчас в теме
2. пользователь 10.03.11 20:27
Сообщение было скрыто модератором.
...
5. galich 166 11.03.11 11:12 Сейчас в теме
Eugeneer пишет:

Статья баянистая конечно))) Уже давно это изучено почти как полгода назад.

Вот статейка http://infostart.ru/public/77144/

Не нашел эту статью ) Пришлось самому извращаться.
6. пользователь 11.03.11 11:25
Сообщение было скрыто модератором.
...
7. wolf2012x 05.10.11 23:19 Сейчас в теме
Как раз работаю над подобным... Ваша статья мне помогла сократить время... спасибо большое... ставлю +
8. AlexO 136 09.01.12 17:28 Сейчас в теме
комментарии к http://infostart.ru/public/77144/.
Код от Поручик оттуда же (если кто не нашел или не смог открыть):
&НаКлиенте
Процедура СписокРолей(Команда)
   
   ПараметрыФормы = Новый Структура("СтруктураРолей", СтруктураРолей);
   ОткрытьФормуМодально("ВнешняяОбработка.МатрицаРолейПользователейИБ.Форма.ФормаВыборРолейУправляемоеПриложение", ПараметрыФормы, ЭтаФорма);
   
КонецПроцедуры


Или такой, из ещё неоконченной работы
   // Откроем форму для редактирования списка адресатов
   Результат = ОткрытьФормуМодально("ВнешняяОбработка.ОтправкаЭлектронныхПисемУФ.Форма.АдреснаяКнига", ПараметрыОткрытия);
9. AlexO 136 09.01.12 17:29 Сейчас в теме
Почему так - перепост оттуда же:
"Открывая новую форму - создаете новый объект формы.
Это идеология УП: формы как объекты не хранятся на клиенте, поэтому создаются при каждом вызове заново. Соотвественно, никаких общих данных у них нет, а чтобы использовать общие данные - либо сохранять в аналог переменной "ПоместитьВоВременоеХранилище", либо - передавать при открытии через ПараметрыФормы.
Исключение - у форм Справочника можно задать использование единых источников данных БД, и тогда они будут получать одни и те же данные.
Отсюда - еще один неявный вариант хранения данных: использовать сохранние общих данных в объекты БД и брать их оттуда для каждой формы."
10. AlexO 136 09.01.12 18:13 Сейчас в теме
(0) а в статье сохраняют отчет целиком, чтобы потом взять у него форму с данными..
зачем это - не совсем непонятно.
11. qwe_QWE 24.03.15 10:54 Сейчас в теме
Немного переделал


Функция СоздатьФайлВнешнейОбработки(ИмяДопОбработки)	
	ИмяФайла = ПолучитьИмяВременногоФайла("erf");
	ВнешОтчет = Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию(ИмяДопОбработки);
	ДвоичныеДанные = ВнешОтчет.ХранилищеОбработки.Получить();
	ДвоичныеДанные.Записать(ИмяФайла);	
	ВнешняяОбработка = ВнешниеОтчеты.Создать(ИмяФайла,Ложь);
	Возврат ИмяФайла;
КонецФункции

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

Функция ПолучитьИмяВнешнегоОтчета()
    Возврат РеквизитФормыВЗначение("Объект").ИспользуемоеИмяФайла;
КонецФункции

Функция ПодключитьВнешнийОтчет(АдресХранилища)
    Возврат ВнешниеОтчеты.Подключить(АдресХранилища);
КонецФункции
Показать
12. AlexO 136 24.03.15 12:42 Сейчас в теме
(11) qwe_QWE, на форуме есть теги "код".
Для отправки сообщения требуется регистрация/авторизация