
- •Лабораторная работа 9. Справочник и Регистр сведений
- •9.1. Регистр сведений "ДанныеОс"
- •9.2. Форма элемента справочника "ОсновныеСредства"
- •9.2.1. Разработка диалога
- •9.2.2. Обработка событий от элементов формы
- •9.2.3. Самостоятельная работа
- •9.2.4. Обработка событий от табличного поля
- •9.2.5. Обработка событий от формы в целом
- •9.2.6. Изменение привязок элементов
- •9.2.7. Отображение картинки
- •9.3. Самостоятельная работа
- •9.4. Метод СрезПоследних(…) менеджера регистра сведений
- •9.5. Соединение в языке запросов
- •9.6. Что мы узнали
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.Страницы.СписокДеталей.Видимость = _Видимость; КонецПроцедуры |
Сделаем следующие пояснения.
Ключевое слово Экспорт мы применили для того, чтобы можно было делать вызов этого алгоритма из внешней процедуры:
Форма = Справочники.ОсновныеСредства.ПолучитьФормуНовогоЭлемента(); Форма. ……………………………………………………………………………… Форма.ПриИзмененииГруппыОС(Неопределено);
В этой процедуре мы обошлись без оператора "Если". Следующее упражнение сделайте самостоятельно:
Упражнение №9.11. |
||||
Выделите поле ввода "ЕстьДетали" и установите для этого элемента формы следующие свойства:
Реализуйте самостоятельно текст этой процедуры. После чего исправьте текст процедуры ПриИзмененииГруппыОС(…): Процедура ПриИзмененииГруппыОС(Элемент) Экспорт _Видимость = (ГруппаОС =Перечисления.ГруппыОС.МашиныИОборудование); ЭлементыФормы.ЕстьДетали.Видимость =_Видимость; ЭлементыФормы.Панель1.Страницы.СписокДеталей.Видимость =_Видимость; ПриИзмененииФлага(Элемент); КонецПроцедуры |