Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
15 дек 2024, 10:56

Передача параметра во внешнюю обработку

Автор Funt432286, 08 мар 2023, 22:35

0 Пользователей и 1 гость просматривают эту тему.

Funt432286

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

Код вызова внешней обработки, следующий:

П_Общий.ОткрытьВнешнуюОбработку("ПланеркаПечать", "ПланеркаПечать", Структура);

Процедура ОткрытьВнешнуюОбработку(МодульОбработки, ФормаОбработки,) Экспорт

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

Вид = Ссылка.ВидОбработки;
Если Вид = Перечисления.ВидыДополнительныхВнешнихОбработок.Отчет
  Тогда
    Менеджер = ВнешниеОтчеты;
Иначе
    Менеджер = ВнешниеОбработки;
КонецЕсли;

ВнешняяОбработка = Менеджер.Создать(ИмяОбработки);
ФормаОбработки = ВнешняяОбработка.ПолучитьФорму(ФормаОбработки);
Если ФормаОбработки <> Неопределено Тогда
    ФормаОбработки.Открыть();
КонецЕсли;

КонецПроцедуры

LexaK

Funt432286, попробуйте от сюда взять нужный код, у меня отлично работает
&НаКлиенте
Процедура ОткрытьФормуОбработки(ИмяОбработки, ИмяФормы, Параметры)


//сразу пробуем получить форму, если обработка уже загружена/открыта
Попытка
//здесь как раз получаем форму и передаем в виде Параметра структуру нужных данных
лкФорма = ПолучитьФорму("ВнешняяОбработка." + ИмяОбработки + ".Форма." + ИмяФормы, Параметры, ЭтаФорма, Новый УникальныйИдентификатор);
Если лкФорма <> Неопределено Тогда
лкФорма.Открыть();
КонецЕсли;
Возврат;
Исключение
лкОшибка = ОписаниеОшибки();
Сообщить(лкОшибка);
лкФорма = Неопределено;
КонецПопытки;
если помогло нажмите: Спасибо!

Funt432286

LexaK, а если нужно будет возвращать какой-нибудь параметр, тогда это будет просто Функция?

LexaK

Funt432286,
Цитироватьа если нужно будет возвращать какой-нибудь параметр,
поподробнее
что возвращать? откуда? куда?
из внешней обработки? тогда оповещениями (как один из вариантов)
ведь в форму внешней обработки можно передать форму владелец, можно напрямую изменять данные формы владельца
в общем, существует великое множество обмена данными
если помогло нажмите: Спасибо!

Funt432286

Добавил параметр для передачи, но поему-то при создании формы он не передается вообще
Вот процедура при вызове внешней обработке:
Процедура ОткрытьВнешнуюОбработкуПараметр(МодульОбработки, ФормаОбработки, СсылкаРЗ) Экспорт

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

Вид = Ссылка.ВидОбработки;
Если Вид = Перечисления.ВидыДополнительныхВнешнихОбработок.Отчет
  Тогда
    Менеджер = ВнешниеОтчеты;
Иначе
    Менеджер = ВнешниеОбработки;
КонецЕсли;

ВнешняяОбработка = Менеджер.Создать(ИмяОбработки);
ФормаОбработки = ВнешняяОбработка.ПолучитьФорму(ФормаОбработки, СсылкаРЗ);
Если ФормаОбработки <> Неопределено Тогда
    ФормаОбработки.Открыть();
КонецЕсли;

КонецПроцедуры

Вот процедура вызова обработке
Процедура ПоставитьВПланНажатие(Элемент)

ТекСтр = ЭлементыФормы.ДокументСписок.ТекущиеДанные;

П_Общий.ОткрытьВнешнуюОбработкуПараметр("ПоставитьВПлан", "ПоставитьВПлан", ТекСтр.Заказ);

КонецПроцедуры

А вот процедуры на форме обработке, н почему-то они ничего не принимают и не останавливается при точке останова
Перем СсылкаРЗ Экспорт;

Процедура КнопкаВыполнитьНажатие(Кнопка)
// Вставить содержимое обработчика.
КонецПроцедуры

Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)

СсылкаРЗДок = СсылкаРЗ;

КонецПроцедуры

Процедура ПриОткрытии()

СсылкаРЗДок = СсылкаРЗ;

КонецПроцедуры

LexaK

Funt432286, так после того как вы получили форму обработки, вы в коде можете делать с ее реквизитами все что вам надо

ФормаОбработки.НужныйРеквизитФормы = ...

так же через точку вызывать Экспортные методы формы

ФормаОбработки.СделатьЧтоТоНужное(...);
ФормаОбработки.ОбработкаЗаполненияФормы(МояСтруктура);


ДО и ПОСЛЕ открытия
если помогло нажмите: Спасибо!

Funt432286

LexaK, Что-то не выходит каменный цветок!

Вот процедура в Общем модуле, через которую я вызываю внешнюю обработку с параметром СсылкаРЗ, который пытаюсь передать
Процедура ОткрытьОбработкуСсылка(МодульОбработки, ФормаОбработки, СсылкаРЗ) Экспорт

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

Вид = Ссылка.ВидОбработки;
Если Вид = Перечисления.ВидыДополнительныхВнешнихОбработок.Отчет
  Тогда
    Менеджер = ВнешниеОтчеты;
Иначе
    Менеджер = ВнешниеОбработки;
КонецЕсли;

ВнешняяОбработка = Менеджер.Создать(ИмяОбработки);
ФормаОбработки = ВнешняяОбработка.ПолучитьФорму(ФормаОбработки);
Если ФормаОбработки <> Неопределено Тогда
    ФормаОбработки.Открыть();
Если СсылкаРЗ <> Неопределено Тогда
ФормаОбработки.Параметр = СсылкаРЗ;
КонецЕсли;
КонецЕсли;

КонецПроцедуры


Вот процедура через которую вызываю
Процедура РасчетПостпечать(Кнопка)

ДанныеПостпечать = Новый Структура;
ДанныеПостпечать.Вставить("СсылкаРЗ", Ссылка);

П_Общий.ОткрытьОбработкуСсылка("РасчетЛистоваяПечать", "РасчетПачки", ДанныеПостпечать);

КонецПроцедуры

Это процедуры уже на форме обработке внешней, на которой при открытии хотелось бы получить СсылкуРЗ
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)

СсылкаРЗ = Параметр;

КонецПроцедуры


Процедура ПриОткрытии()

СсылкаРЗ = Параметр;
Сообщить(" Ссылка - " + СсылкаРЗ);

КонецПроцедуры

Но к сожалению на форме при открытии тихо, глухо и одиноко (как на клиенте без сервера)
Подскажите пожалуйста, что не так?

antoneus

Надо сначала устанавливать параметр в полученной форме, а потом уже открывать.

LexaK

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

в своем коде вы получаете и отркрываете форму обработки!
и так же может напрямую задать значения нужным реквизитам

вот это уберите
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
    СсылкаРЗ = Параметр;   
КонецПроцедуры

а вот здесь сделайте так

    Если ФормаОбработки <> Неопределено Тогда
        ФормаОбработки.Открыть();
        Если СсылкаРЗ <> Неопределено Тогда
            //ФормаОбработки.Параметр = СсылкаРЗ;
            ФормаОбработки.СсылкаРЗ = СсылкаРЗ; //можно сразу присваивать значение реквизиту формы
            //и другие нужные реквизиты тоже можно заполнить/задать
        КонецЕсли;
    КонецЕсли;
если помогло нажмите: Спасибо!

Funt432286

LexaK, Спасибо большое
У меня была друга я проблема! Реквизит на форму приходит пустой!
antoneus, Да но еще ко всему я в переменную ссылочного типа пытаюсь запихнуть Структуру, и ни как не пойму, почему переменная пустая на входе  :zebzdr:

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск