helpf.pro
Регистрация

Вернуть контекст открытой формы

unreg11
08.07.2010 13:19Прочитано: 11315
Имеется внешняя обработка, в которой открывается по OLE другая внешняя обработка. Как передать результаты работы второй внешней обработки в первую(в качестве результата выступает строка).
Yandex
Возможно, вас также заинтересует
Реклама на портале
E_Migachev
08.07.2010 14:15Ответ № 1
По идее, нужно запрашивать из первой, ты же 2-у открываешь из первой...
unreg11
08.07.2010 14:22Ответ № 2
при открытии второй обработки:
Код 1C v 7.x
 
Процедура ПриОткрытии()
стрПараметр = Форма.Параметр;
Сформировать();
Форма.Закрыть();
КонецПроцедуры


в переменную стрПараметр получаем параметры из первой обработки, после выполнения процедуры Сформировать() получаем строку, которую необходимо вернуть в первую обработку.
E_Migachev
08.07.2010 14:29Ответ № 3
запиши ее опять в параметр, а из первой считай
E_Migachev
08.07.2010 14:35Ответ № 4
В данной статье описан не совсем очевидный, но очень удобный способ возврата параметра из обработки (отчета).

Наверное, многие, кто занимался разработкой прикладных решений на платформе 1С:Предприятие 7.7, сталкивались со следующей задачей: в процессе выполнения кода нужно открыть обработку, передать в неё параметр и получить результат её работы, в виде возвращаемого параметра. С передачей параметра в обработку никаких проблем не возникает, как следует из документации:
Код 1C v 7.x
 
ОткрытьФормуМодально("Обработка.МояОбработка",Параметр);


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

Код 1C v 7.x
 форма.параметр="ВозвращаемыйПараметр";


В качестве примера приведу простую обработку проверки пароля:
Вызов из программного модуля:
Код 1C v 7.x
 ПравильныйПароль = "12345";
ОткрытьФормуМодально("Обработка.Авторизация",ПравильныйПароль);
Если (ПравильныйПароль=0) Тогда
Сообщить("Не угадали");
Возврат;
КонецЕсли;


Обработка Авторизация:
Код 1C v 7.x
 // Пароль - поле ввода на форме
// На форме имеются две кнопки, их обработчики - процедуры Ок() и Отмена()
// Модуль формы обработки

Перем ПравильныйПароль;
Процедура ПриОткрытии()
ПравильныйПароль=Форма.Параметр;
Форма.Параметр=0;
КонецПроцедуры

Процедура Ок()
Если (СокрЛП(Пароль)=ПравильныйПароль) Тогда
Форма.Параметр=1;
Форма.Закрыть(0);
Иначе
Пароль="";
Предупреждение("Неверный пароль !");
Активизировать("Пароль",1);
КонецЕсли;
КонецПроцедуры

Процедура Отмена()
Форма.Закрыть(0);
КонецПроцедуры
unreg11
08.07.2010 19:09Ответ № 5
код вызывающей обработки:
Код 1C v 7.x
 	
стрПараметр = ЗначениеВСтрокуВнутр(тз);
БазаОЛЕ.ОткрытьФорму("Отчет",стрПараметр,Путь + "СформироватьЗапросДов.ert");


код вызываемой обработки:
Код 1C v 7.x
 	
стрПараметр = Форма.Параметр;
тзПараметров = ЗначениеИзСтрокиВнутр(стрПараметр);
ДатаДолга = тзПараметров.ПолучитьЗначение(1,1);
пФирма = тзПараметров.ПолучитьЗначение(1,2);
сзКонтр = тзПараметров.ПолучитьЗначение(1,3);
Сформировать();
Форма.Параметр = 1;
Форма.Закрыть();


Переменная стрПараметр, после отработки вызываемой обработки содержит тоже самое, что было при передаче, т.е. не 1 , а строку
unreg11
08.07.2010 19:10Ответ № 6
да, забыл пояснить, вызов обработки осуществляется через OLE
E_Migachev
08.07.2010 20:53Ответ № 7
Похоже что через ole так не работает *17
unreg11
09.07.2010 00:04Ответ № 8
попробовал не по OLE, тоже не получилось. переменная стрПараметр=ГрупповойКонтекст, причем групповой контекст ни число, ни строка, вообще ни какое значение
E_Migachev
09.07.2010 13:46Ответ № 9
Вот рабочий пример из ТиСа
Код 1C v 7.x
 спПараметров = СоздатьОбъект("СписокЗначений");
спПараметров.Установить("CardSerialNo",0);
спПараметров.Установить("Отладка",0);
ОткрытьФормуМодально("Отчет", спПараметров, глКаталогTools+"\РаботаСРидером.ert");
Результат = СокрЛП(спПараметров.Получить("CardSerialNo"));
Подсказка: Вы получили ответ на свой вопрос - закройте вопрос!
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.