
- •Лабораторная работа 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.3. Самостоятельная работа
Выполните следующие упражнения самостоятельно.
Упражнение №9.12. |
Сделайте так, чтобы при выборе детали в поле ввода "Деталь" цена из справочника "Детали" помещалась в реквизит "ЦенаУЕ" табличной части справочника "ОсновныеСредства". |
В каком модуле Вы расположили текст процедуры-обработчика?
Упражнение №9.13. |
Сделайте так, чтобы при изменении в форме реквизитов "Количество", "ЦенаУЕ" и "СуммаУЕ" производился как прямой расчет суммы, так и обратный расчет цены. За выполнение расчета должна отвечать одна процедура ПересчетСтроки(Элемент), которая должна являться обработчиком для трех полей ввода. Совет: для того чтобы определить имя колонки из которой сделан вызов, нужно написать следующее выражение: ИмяКолонки = ЭлементыФормы.СписокДеталей.ТекущаяКолонка.Имя; Нужно ли изменить текст обработчика поля ввода "Деталь"? |
9.2.4. Обработка событий от табличного поля
В нашей форме вставлены два табличных поля "НаборДанныеОС" и "СписокДеталей", каждое из которых в составе своих свойств имеет группу "События" (см. рис. 9.11).
Рис.
9.11. Список событий табличного поля
как элемента формы.
В этом подразделе мы рассмотрим только некоторые из них. "Разбор полетов" будем делать на примере поля "НаборДанныеОС", тип значения которого – "РегистрСведенийНаборЗаписей". А раз так, то все записи из регистра сведений будут считываться за "один раз". Но все записи нам не нужны, поэтому:
Упражнение №9.14. |
||||
Установите для поля "НаборДанныеОС":
|
Начнем размышлять. Пользователь начнет заполнять табличное поле путем ввода новых строк, а раз так, то нужно в реквизит "ОС" записать ссылку на основной реквизит формы (тип – "СправочникОбъект.ОсновныеСредства"). Но такую ссылку мы сможем записать только в том случае, если элемент справочника уже записан. Поэтому:
Упражнение №9.15. |
||||||
Используя кнопку
Имена процедур в этом случае будут сгенерированы автоматически. Первое событие возникает до того, как появится новая строка и поэтому основная задача процедуры: отказать в добавлении новой строки в табличном поле. Наберите в модуле следующий текст процедуры: //НаборДанныеОСПередНачаломДобавления – проверяет // возможность добавления новой строки Процедура НаборДанныеОСПередНачаломДобавления(Элемент, Отказ, Копирование) Если ЭтоНовый() Тогда // откажем в добавлении строки: Отказ = Истина; Предупреждение("Прежде чем добавлять запись необходимо записать элемент справочника!"); КонецЕсли; КонецПроцедуры А вот вторую процедуру мы можем использовать для заполнения ее реквизитов значениями по умолчанию: Наберите в модуле следующий текст процедуры: //НаборДанныеОСПриНачалеРедактирования - заполняет реквизит // ОС ссылкой на текущий элемент справочника Процедура НаборДанныеОСПриНачалеРедактирования(Элемент, НоваяСтрока) Если НоваяСтрока Тогда ТекСтрока = ЭлементыФормы.НаборДанныеОС.ТекущаяСтрока; ТекСтрока.ОС = Ссылка; КонецЕсли; КонецПроцедуры |
Для табличного поля "НаборДанныеОС" больше не требуется обрабатывать каких-либо событий. А вот для поля "СписокДеталей" необходимо обеспечить, чтобы поле ввода "Деталь" всегда содержало бы какое либо значение. Поэтому выполним следующее упражнение:
Упражнение №9.16. |
||||
Нажмите на кнопку открытия и установите для реквизита "СписокДеталей" событие:
И наберите следующий текст: //СписокДеталейПередОкончаниемРедактирования - проверяет // правильность заполнения строки Процедура СписокДеталейПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования,Отказ) // Если пользователь отказался от ввода новой строки Если НоваяСтрока И ОтменаРедактирования Тогда // то нам все равно Возврат; КонецЕсли; // Если пользователь подтерждает ввод строки Если Не ОтменаРедактирования Тогда ТекСтрока = ЭлементыФормы.СписокДеталей.ТекущаяСтрока; Если ТекСтрока.Деталь.Ссылка.Пустая() Тогда Предупреждение("Не выбрана деталь!"); Отказ = Истина; Возврат; КонецЕсли; КонецЕсли; КонецПроцедуры |
Нужно иметь в виду, что эта процедура будет получать управление в двух случаях:
Когда пользователь отменил редактирование, нажав Esc;
Когда пользователь закончил редактирование, нажав Enter;
Именно поэтому в процедуре проверяется соответствующая комбинация входных параметров НоваяСтрока и ОтменаРедактирования.
На этом мы закончим рассматривать обработку событий табличного поля и перейдем к рассмотрению событий самой формы в целом.