• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Как красиво предавать/принимать параметры форме обработке

  • Автор темы Дайнеко
  • Дата начала
Д

Дайнеко

Нужно форме обработки передать несколько параметров. Подсмотрел как это делается в типовой бухгалтерии:
Код:
// ----------------------- Вызов из какой-либо формы
Обработки.РедактированиеКонтактнойИнформации.Создать().ПолучитьФорму("ФормаЗаписиАдреса").РедактироватьФорму(ЭтаФорма, ДругойПараметр);

// ----------------------- Модуль формы ---------------
Перем ИсходнаяФорма;
Перем КопияПараметр;

// процедура написанная мной. Вот она и принимает параметры.
Процедура РедактироватьФорму(Форма, Параметр) Экспорт
ИсходнаяФорма	= Форма;
КопияПараметр	= Параметр;
ЭтаФорма.Открыть();
КонецПроцедуры // Редактировать

1 Вопрос такой: А как идеологически правильно это делать с позиции идеологии 1С? В 7-ке для этого был атрибут "Форма.Параметр"
Может есть возможность передавать параметры процедуре ПриОткрытии?

2 Вопрос по-серьезнее: Как вернуть измененные параметры. Поясню: Пользователь что-то изменил на форме (форма, естественно, открыта модально). Результат нужно записать в "Параметр". Но проблема в том, что входные параметры известны только процедуре "РедактироватьФорму". Для того, чтобы ими пользовались другие процедуры и делаются их копии. Как в процедуре ПриЗакрытии() добраться до входных параметров?
Опять же, проводя аналогию с 7-кой, Форма.Параметр были доступны всем процедурам формы.
 
P

puh14

Ну раз модально можно тупо использовать глобальную переменную. Собссно подходит и к первому и второму вопросу.

насчет как правильно - почитаю.
 
Д

Дайнеко

Как учили в школе: обмен параметрами через глобальные переменные - плохой вкус. Но в 7-ке пользуюсь.
Мой вопрос в том, что обязательно внутри формы создавать процедуру с нужными параметрами?
 
G

Guest

Ответ есть в универсальном отчете. Точнее в открытии формы настройки. У формы настройки есть СтруктураНастроек- переменная типа Структура. Перед открытием записываются туда параметры процедурой, которой сохраняются настройки отчета
Код:
Процедура СформироватьСтруктуруДляСохраненияНастроек(СтруктураСНастройками)

Затем в форме настройки из структуры читаются значения. При закрытии кнопками "ОК" и "Сформировать" параметры формы настройки сохраняются в структуру (ту самую переменную формы), потом оттуда читается в самой форме опять же процедурой загрузки настроек отчета
Код:
Функция ЗагрузитьНастройкиИзСтруктуры()
 
Д

Дайнеко

Ответ есть в универсальном отчете. Точнее в открытии формы настройки. У формы настройки есть СтруктураНастроек- переменная типа Структура. Перед открытием записываются туда параметры процедурой, которой сохраняются настройки отчета

Уф! Вспотел, пока продрался через процедуры. Ключевой момент я увидел вот в чем: основная "Форма" и "ФормаНастройка" принадлежат одному Отчету. А обмениваются параметрами через "Перем мТекущаяНастройка Экспорт;" созданную в модуле отчета. А процедуры типа Сохранить/Восстановить ей пользуются. Я бы сказал: вариант глобальной переменной в рамках отчета.
Спасибо за ответ. Выходит, для передачи данных между формами из различным отчетов нужно делать глобальную переменную задачи. Некрасиво. А в 8.2 нет глобальных переменных!
 
G

Guest

Дайнеко
Вы неправильно увидели ключевой момент :) Переменная глобальная используется для работы внутри формы отчета, в форме настройки ее НЕТ. А есть переменная формы типа Структура. Суть в том, что вы создаете структуру и записываете в нее все ваши параметры, а потом передаете ее во вторую форму (в вашем случае форму обработки), а точнее присваиваете значение переменной второй формы, не глобальной, а переменной формы.

В исходной форме глобальная переменная НЕ НУЖНА.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!