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

Тема в разделе "1C и всё что с ней связано", создана пользователем Дайнеко, 3 сен 2010.

  1. Дайнеко

    Дайнеко Well-Known Member
    1C Team

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

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

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

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

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Ну раз модально можно тупо использовать глобальную переменную. Собссно подходит и к первому и второму вопросу.

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

    Дайнеко Well-Known Member
    1C Team

    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    Как учили в школе: обмен параметрами через глобальные переменные - плохой вкус. Но в 7-ке пользуюсь.
    Мой вопрос в том, что обязательно внутри формы создавать процедуру с нужными параметрами?
     
  4. Гость

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

    Дайнеко Well-Known Member
    1C Team

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

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

    В исходной форме глобальная переменная НЕ НУЖНА.
     
Загрузка...

Поделиться этой страницей