gifts2017

Возврат параметра из обработки (1С:Предприятие 7.7)

Опубликовал Дмитрий К (ll13) в раздел Программирование - Практика программирования

Следующая информация будет полезна программистам, занимающимся разработкой(доработкой) прикладных решений на платформе 1С:Предприятие 7.7
В данной статье описан не совсем очевидный но очень удобный способ возврата параметра из обработки (отчета).

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

ОткрытьФормуМодально("Обработка.МояОбработка",Параметр);

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

форма.параметр="ВозвращаемыйПараметр";

В качестве примера приведу простую обработку проверки пароля:

Вызов из программного модуля:

........

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

........

Обработка Авторизация:

// Пароль - поле ввода на форме

// На форме имеются две кнопки, их обработчики - процедуры Ок() и Отмена()

// Модуль формы обработки

Перем ПравильныйПароль;

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

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

Процедура Отмена()
    Форма.Закрыть(0);
КонецПроцедуры

 

Источник: http://www.obrabotki.com/1s-returnvalue77/

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Алексей Прилепский (IamAlexy) 17.09.09 23:56
с немодальной формой сработает?
2. Сергей (Che) Коцюра (CheBurator) 18.09.09 00:58
(0) некоторые еще не знают про ВыполнитьВыбор()
3. Сергей (Che) Коцюра (CheBurator) 18.09.09 01:00
(10 вызывает немодально - запускается, активизируется, делаем в ней что надо возврат в родительскую делаем через ОткрытьФорму(), в родительской - ПриПовторномОткрытии()
4. Артур Аюханов (artbear) 18.09.09 07:13
Баяну кучу лет.
Тем более, что есть приколы с разницей работы модальной и немодальной формы :)
5. Епрст (Ёпрст) 18.09.09 08:09
(0)да уж..http://www.infostart.ru/projects/4270/

(3)Не совсем так... форму могли и закрыть...
6. Alxd (salexdv) 18.09.09 08:33
Вот эт Америка, блин! Цитата из описания встроенного языка: "<КонтекстФормы> - имя переменной, куда можно задать значение любого типа для передачи в открываемую форму. Данное значение будет доступно в открытой форме как атрибут Форма.Параметр. После исполнения данного метода система вернет в данную переменную контекст открытой формы"
На мой взгляд и так все ясно ))
7. Александр Рытов (Арчибальд) 18.09.09 08:36
Функция глВычислитьВнешнийОтчет(п_Файл,п_Контекст,п_Параметры) Экспорт
л_Результат = ПолучитьПустоеЗначение();
л_Файл = глПолныйПуть(п_Файл);
Если ПустаяСтрока(л_Файл) = 1 Тогда
Сообщить("Не задано имя файла внешнего отчета!");
Возврат (л_Результат);
КонецЕсли;
Если ФС.СуществуетФайл(л_Файл) = 0 Тогда
Сообщить("Не найден файл "+л_Файл+" !");
Возврат (л_Результат);
КонецЕсли;
Если ТипЗначенияСтр(п_Параметры) <> "СписокЗначений" Тогда
л_Параметры = СоздатьОбъект("СписокЗначений");
Иначе
л_Параметры = п_Параметры;
КонецЕсли;
л_Параметры.Установить("Контекст",п_Контекст);
ОткрытьФормуМодально("Отчет",л_Параметры,л_Файл);
л_Результат = л_Параметры.Получить("Результат");
Возврат (л_Результат);
КонецФункции

Это из Камина
8. Михаил Семенов (Shaman100M) 18.09.09 08:39
Для немодального режима:

Код
Список   = СоздатьОбъект("СписокЗначений");
ПередаваемыйПараметр  = Список;
ОткрытьФорму("Обработка.<ИмяФормы>",ПередаваемыйПараметр);

// теперь:
// ПередаваемыйПараметр   -  контекст открытой формы
// Список  - остался списком
Показать полностью



а главное, что вызванная форма может добавлять значения в Список не только в ПриОткрытии(), а в любом другом месте, например в ПриЗакрытии(). И вызвавшая форма все это увидит при желании @ssp_ ( http://infostart.ru/profile/6755/ )

Можно еще так, через закладку открывающей формы (это тот же СЗ, и он доступен через контекст):

Код
// Открываемая форма

Если ТипЗначенияСтр(Форма.Параметр) = "ГрупповойКонтекст" Тогда
    Форма.Параметр.Форма.ИспользоватьЗакладки(1);
    СписокДляПередачи = СоздатьОбъект("СписокЗначений");
    // заполняем его ....
    Форма.Параметр.Форма.Закладки.ВставитьЗначение(1,СписокДляПередачи,"",1);
КонецЕсли;
Показать полностью
serg355; Арчибальд; +2 Ответить 1
10. Андрей Скляров (coder1cv8) 18.09.09 08:45
Да-а-а... И как только семерошники не изголяются... ) Над простыми вещами.
11. Александр Рытов (Арчибальд) 18.09.09 08:55
(8) За
<Можно еще так, через закладку открывающей формы (это тот же СЗ, и он доступен через контекст):>
Спасибо!
12. Михаил (MishaD) 18.09.09 20:49
Не знаю. Именно этой методикой всегда пользовался. Тут пришло в голову, что значение можно еще и в файл сохранять. Тоже, в принципе, решение
13. Александр Зубцов (iov) 27.09.09 20:14
(10) Чтож ты так снисходительно... сантехник например не станет более крутым если будет чинить более дорогой сортир... Тут вопрос в том что он умеет. Просто простота управления и создания не гарантирует что получится шедевр (а как показывает практика по УПП и УТ наработки на 7.7 так и не учли.)
14. Артур Аюханов (artbear) 09.10.10 11:09
20. Илья (i132) 22.03.12 19:41
Передать и получить параметр можно через Список значений:

СпПараметровОбработки=СоздатьОбъект("СписокЗначений");
СпПараметровОбработки.ДобавитьЗначение(ТзОтчета,"ТаблицаЗначений");
ВремПеременная = СпПараметровОбработки; //Для сохраненния ссылки на список
ОткрытьФорму("Обработка.АнализТЗ",ВремПеременная);
//СпПараметровОбработки обработается при открытии

а если надо обрабоать момент возвращеия значения, то можно открывать форму для подбора: ссылка на статью: http://infostart.ru/public/121991/
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа