Отправляет email-рассылки с помощью сервиса Sendsay

Школа 1С

  Все выпуски  

1С:Школа Взаимодействие форм ч.1


Информационный Канал Subscribe.Ru

Управляйте народом с достоинством, и люди будут почтительны.
Относитесь к народу по-доброму, и люди будут трудиться с усердием.
Возвышайте добродетельных и наставляйте неученых, и люди будут доверять Вам.
Наставление президенту в День Рождения.

1С:Школа.
Выпуск 43.
"Взаимодействие форм ч.1".


На предыдущем уроке мы изучали "поднятие" информационной базы. Был пропущен  еще один способ: можно попробовать переместить (удалить или переименовать) папку "SYSLOG". В некоторых случаях, из-за  повреждения файла "1cv7.mlg" - не удается зайти в конфигуратор.  Спасибо всем, кто напомнил об этом.

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

  1. открыта форма документа ""Счет", по кнопке в счете открывается документ "Расходная накладная" в которую передаются данные из счета для заполнения: контрагент, договор, товар
  2. в документе "Расходная накладная"  по команде пользователя открывается отчет по взаиморасчетам  с контрагентом.

Похожие тему уже были у нас в выпусках. Сейчас же хочется обобщить ранее изученный материал и получить больше возможностей. Сегодня рассмотрим первый способ, который является достаточно простым и эффективным, но обладает некоторым ограничением. В обоих способах используется метод ОткрытьФорму(.....). Это метод позволяет из модуля открывать формы:

  • форму существующего документа
  • форму нового документа
  • форму существующего элемента справочника
  • форму нового элемента справочника
  • форму списка справочника
  • форму журнала
  • форму журнала подчиненных документов
  • форму отчета
  • форму обработки
  • форму внешнего отчета
  • форму журнала расчетов
  • форму существующего счета
  • форму нового счета
  • форму плана счетов
  • форму существующей операции
  • форму новой операции
  • форму журнала операций
  • форму журнала проводок
  • форму окна истории констант
  • форму окна истории справочника
  • форму окна истории счета

Список впечатляет.

Методика работы: в нашей системе присутствует две формы: первая форма "вызывающая", вторая форма "принимающая". "Вызывающая" форма открывает "принимающую" и передает в нее любые значения. "Принимающая" форма должна распознать эти значения и использовать их по своему усмотрению. Передать можно значения ЛЮБЫХ типов.

Шаг 1. В "вызывающей" процедуре организуем вызов принимающей процедуры с помощью методов открытьФорму() или открытьФОрмуМодально(). Для каждого элемента из списка (см.список вверху) существуют свои параметры вызова в этих методах. Описание всех параметров можно найти в "Синтаксис - помощнике". Среди эти параметров всегда есть "КонтекстФормы". Именно с помощью него передается переменная в открываемую форму.  Пример модуля:

Процедура Сформировать()
    ПередаваемаяПеременная="Привет";
    ОткрытьФорму("Отчет.МойОтчет", ПередаваемаяПеременная );
КонецПроцедуры

В том модуле определяется передаваемая переменная (в данном случае ее значение "Привет"), после этого открываем форму "МойОтчет". Вторым параметром указываем нашу переменную.

Шаг 2. В "принимающей" форме необходимо использовать процедуру "ПриОткрытии". В этой процедуре надо проанализировать атрибут форма.Параметр. Именно в этот атрибут поступает значение параметра КонтекстФормы из вызывающей процедуры.  Как бы выглядел модуль в отчете "МойОтчет":

Процедура ПриОткрытии()
    Если ПустоеЗначение(форма.Параметр)=1 тогда
        возврат; //ничего не передали
    иначе
        к=форма.Параметр;
        сообщить();
    конецЕсли;
КонецПроцедуры


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

Шаг 1.

//*******************************************
Процедура Сформировать()
    сз=СоздатьОбъект("СписокЗначений");
    сз.ДобавитьЗначение(зн1);
    сз.ДобавитьЗначение(зн2);
    сз.ДобавитьЗначение(зн3);
    ............................................
    сз.ДобавитьЗначение(знN);
    ОткрытьФорму("Отчет.ОченьНужный", сз );
КонецПроцедуры

В этом модуле мы сформировали список значений и передали его в "ОченьНужный" отчет .

Шаг 2. В "ОченьНужном" отчете анализируем атрибут "Форма.Параметр" и получаем нужные значения.

Процедура ПриОткрытии()
    список=форма.Параметр;
    Если ПустоеЗначение(список)=1 тогда
        возврат;
    конецЕсли;
    Если ТипЗначенияСтр(список)="СписокЗначений" тогда
        п1=список.ПолучитьЗначение(1);
        п2=список.ПолучитьЗначение(2);
        п3=список.ПолучитьЗначение(3);
        .................
        пN=список.ПолучитьЗначение(N);
    иначе
        ........
    КонецЕсли;
КонецПроцедуры

Обращаем Ваше внимание на то, что:

  • надо проверять есть есть ли значение у Форма.Параметр.
  • желательно проверять тип значения у Форма.Параметр. "Принимающая" форма может вызываться из разных мест и в нее могут передаваться разные параметры.

Совет: Если Вы пользуетесь списком значений, то зарезервируйте первые параметры под флаги. Например, часто бывает необходимо передать в форму имя "вызывающей" формы, чтобы легче было проанализировать содержание остальных значений списка.

В качестве значений списка, можно передать имена процедур, которые необходимо вызвать в "принимающей" форме. Об этом см. урок 22.

Можно сказать, что такой механизм как "ввод на основании"  является всего лишь частным случаем этой методики. Используя эту методику, Вы можете вводить документ на основании элемента справочника или наоборот.

продолжение в следующем выпуске....


Я слабо верю, что президент читает мою рассылку. Но может кто передаст поздравления (см.заголовок выпуска) от простого программера, которого разделяет с президентом Вселенная.

Кстати, автор - поздравления Конфуций. Чтоб никто не обвинил в плагиате. И от него привет тоже.


С Уважением, Алексей Колосов.
www.1c-school.ru

 



http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное