Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа №9 «Справочник и регистры с...doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
585.73 Кб
Скачать

9.2.2. Обработка событий от элементов формы

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

Упражнение №9.6.

Установите для элемента формы "Фирма" следующие свойства:

Свойство

Значение

Быстрый выбор:

При изменении:

ПриИзмененииФирмы

Переключитесь на закладку "Модуль". Что произошло?

Сейчас наш модуль содержит заготовку:

Процедура ПриИзмененииФирмы(Элемент)     // Вставить содержимое обработчика. КонецПроцедуры

Достаточно часто у начинающих программирование в этой системе возникает вопрос: А что я могу использовать в этой точке программы? Этот вопрос сводится к другому вопросу – а что входит в локальный контекст этого модуля? Для того чтобы понять это в "1С:Предприятии 8.0", нужно приложить минимум усилий:

Упражнение №9.7.

Удалите текст комментария и нажмите Ctrl+пробел.

Что произошло?

Как мы видим на рисунке 9.9, в текущий контекст попали как реквизиты нашего объекта (Фирма), так и методы справочника (УстановитьНовыйКод).

Рис. 9.9. Получение контекста в любой точки программы.

Поэтому логично предположить, что текст обработчика может быть следующим:

Процедура ПриИзмененииФирмы(Элемент)    УстановитьНовыйКод(Фирма.Префикс+"-"); КонецПроцедуры

Отметим, что вызов метода УстановитьНовыйКод() вызовет изменение реквизита Код, т.е. одно из полей записи изменится. Но что нам делать, если где-либо в конфигурации нужно написать:

НовыйЭлемент=Справочники.ОсновныеСредства.СоздатьЭлемент(); …………………………………………………………… НовыйЭлемент.Фирма = Фирма; ……………………………………………………………

Тогда вызов:

НовыйЭлемент.УстановитьНовыйКод(Фирма.Префикс+"-");

придется писать еще раз … и много раз. С методической точки зрения правильнее будет поместить эту обработку в Модуль объекта, т.к. она предназначена для изменения поля этого объекта. Поэтому:

Упражнение №9.7 (продолжение).

Наберите в Модуле Объекта:

// Модуль справочника "ОсновныеСредства" //УстановитьКод() - устанавливает новый код //для записи в справочнике Процедура УстановитьКод() Экспорт    Если ЭтоГруппа Тогда    Иначе // это элемент справочника       УстановитьНовыйКод(Фирма.Префикс+"-");    КонецЕсли; КонецПроцедуры

Затем исправьте модуль формы:

Процедура ПриИзмененииФирмы(Элемент)    УстановитьКод(); КонецПроцедуры

Обратите внимание на добавочное ключевое слово Экспорт у процедуры УстановитьКод(). Оно привело к тому, что объект типа СправочникОбъект.ОсновныеСредства получил новый метод.

Аналогичную методику можно применить и для регистра сведений:

Упражнение №9.8.

Выделите поле ввода "БалансоваяСтоимость" из табличного поля "НаборДанныеОС" (см. рис. 9.10) и установите для этого элемента формы следующие свойства:

Свойство

Значение

При изменении:

ПриИзмененииБалансовойСтоимости

Переключитесь на закладку "Модуль".

Попробуйте самостоятельно написать процедуру:

//ПриИзмененииБалансовойСтоимости() - рассчитывает для записи //ее рыночную стоимость //ТекЗапись – запись, для которой производится расчет Процедура ПриИзмененииБалансовойСтоимости(Элемент) КонецПроцедуры

Рис. 9.10. Особенность выделения поля ввода в табличном поле формы.

В табличном поле есть поле ввода "Подразделение", которое имеет тип СправочникСсылка.Подразделения, а справочник "Подразделения" подчинен справочнику "Фирмы", поэтому:

Упражнение №9.9.

Установите у поля ввода "Подразделение" свойство "Связь по владельцу".

В постановке задачи сказано, что "Для тех ОС из группы "Машины и оборудование", что состоят из отдельных деталей…". Таким образом, если в реквизите "ГруппаОС" выбрано значение "Машины и оборудование", то тогда пользователь должен иметь возможность обращаться к реквизитам формы "ЕстьДетали" и "СписокДеталей", т.е. реквизиты должны быть видимы, а в противном случае нет.

Упражнение №9.10.

Выделите поле ввода "ГруппаОС" и установите для этого элемента формы следующие свойства:

Свойство

Значение

При изменении

ПриИзмененииГруппыОС

Переключитесь на закладку "Модуль" и наберите следующий текст:

//ПриИзмененииГруппыОС - управляет видимостью // реквизита "ЕстьДетали" и страницы "СписокДеталей" Процедура ПриИзмененииГруппыОС(Элемент) Экспорт    _Видимость = (ГруппаОС =Перечисления.ГруппыОС.МашиныИОборудование);    ЭлементыФормы.ЕстьДетали.Видимость =_Видимость;    ЭлементыФормы.Панель1.Страницы.СписокДеталей.Видимость = _Видимость; КонецПроцедуры

Сделаем следующие пояснения.

  1. Ключевое слово Экспорт мы применили для того, чтобы можно было делать вызов этого алгоритма из внешней процедуры:

Форма = Справочники.ОсновныеСредства.ПолучитьФормуНовогоЭлемента(); Форма. ……………………………………………………………………………… Форма.ПриИзмененииГруппыОС(Неопределено);

  1. В этой процедуре мы обошлись без оператора "Если". Следующее упражнение сделайте самостоятельно:

Упражнение №9.11.

Выделите поле ввода "ЕстьДетали" и установите для этого элемента формы следующие свойства:

Свойство

Значение

При изменении:

ПриИзмененииФлага

Реализуйте самостоятельно текст этой процедуры.

После чего исправьте текст процедуры ПриИзмененииГруппыОС(…):

Процедура ПриИзмененииГруппыОС(Элемент) Экспорт    _Видимость = (ГруппаОС =Перечисления.ГруппыОС.МашиныИОборудование);    ЭлементыФормы.ЕстьДетали.Видимость =_Видимость;    ЭлементыФормы.Панель1.Страницы.СписокДеталей.Видимость =_Видимость;    ПриИзмененииФлага(Элемент); КонецПроцедуры