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

9.2.3. Самостоятельная работа

Выполните следующие упражнения самостоятельно.

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

Сделайте так, чтобы при выборе детали в поле ввода "Деталь" цена из справочника "Детали" помещалась в реквизит "ЦенаУЕ" табличной части справочника "ОсновныеСредства".

В каком модуле Вы расположили текст процедуры-обработчика?

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

Сделайте так, чтобы при изменении в форме реквизитов "Количество", "ЦенаУЕ" и "СуммаУЕ" производился как прямой расчет суммы, так и обратный расчет цены.

За выполнение расчета должна отвечать одна процедура ПересчетСтроки(Элемент), которая должна являться обработчиком для трех полей ввода.

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

ИмяКолонки = ЭлементыФормы.СписокДеталей.ТекущаяКолонка.Имя;

Нужно ли изменить текст обработчика поля ввода "Деталь"?

9.2.4. Обработка событий от табличного поля

В нашей форме вставлены два табличных поля "НаборДанныеОС" и "СписокДеталей", каждое из которых в составе своих свойств имеет группу "События" (см. рис. 9.11).

Рис. 9.11. Список событий табличного поля как элемента формы.

В этом подразделе мы рассмотрим только некоторые из них. "Разбор полетов" будем делать на примере поля "НаборДанныеОС", тип значения которого – "РегистрСведенийНаборЗаписей". А раз так, то все записи из регистра сведений будут считываться за "один раз". Но все записи нам не нужны, поэтому:

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

Установите для поля "НаборДанныеОС":

Свойство

Значение

Обновлять при изменении отбора

Начнем размышлять. Пользователь начнет заполнять табличное поле путем ввода новых строк, а раз так, то нужно в реквизит "ОС" записать ссылку на основной реквизит формы (тип – "СправочникОбъект.ОсновныеСредства"). Но такую ссылку мы сможем записать только в том случае, если элемент справочника уже записан. Поэтому:

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

Используя кнопку установите для реквизита "НаборДанныеОС" события:

Свойство

Значение

Перед началом добавления:

НаборДанныеОСПередНачаломДобавления

При начале редактирования:

НаборДанныеОСПриНачалеРедактирования

Имена процедур в этом случае будут сгенерированы автоматически.

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

Наберите в модуле следующий текст процедуры:

//НаборДанныеОСПередНачаломДобавления – проверяет // возможность добавления новой строки Процедура НаборДанныеОСПередНачаломДобавления(Элемент, Отказ, Копирование)    Если ЭтоНовый() Тогда       // откажем в добавлении строки:       Отказ = Истина;       Предупреждение("Прежде чем добавлять запись необходимо записать элемент       справочника!");    КонецЕсли; КонецПроцедуры

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

Наберите в модуле следующий текст процедуры:

//НаборДанныеОСПриНачалеРедактирования - заполняет реквизит // ОС ссылкой на текущий элемент справочника Процедура НаборДанныеОСПриНачалеРедактирования(Элемент, НоваяСтрока)    Если НоваяСтрока Тогда       ТекСтрока = ЭлементыФормы.НаборДанныеОС.ТекущаяСтрока;       ТекСтрока.ОС = Ссылка;    КонецЕсли; КонецПроцедуры

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

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

Нажмите на кнопку открытия и установите для реквизита "СписокДеталей" событие:

Свойство

Значение

Перед окончанием редактирования

СписокДеталейПередОкончаниемРедактирования

И наберите следующий текст:

//СписокДеталейПередОкончаниемРедактирования - проверяет // правильность заполнения строки Процедура СписокДеталейПередОкончаниемРедактирования(Элемент,    НоваяСтрока, ОтменаРедактирования,Отказ)    // Если пользователь отказался от ввода новой строки    Если НоваяСтрока И ОтменаРедактирования Тогда       // то нам все равно       Возврат;    КонецЕсли;    // Если пользователь подтерждает ввод строки    Если Не ОтменаРедактирования Тогда       ТекСтрока = ЭлементыФормы.СписокДеталей.ТекущаяСтрока;          Если ТекСтрока.Деталь.Ссылка.Пустая() Тогда             Предупреждение("Не выбрана деталь!");             Отказ = Истина;          Возврат;       КонецЕсли;    КонецЕсли; КонецПроцедуры

Нужно иметь в виду, что эта процедура будет получать управление в двух случаях:

  • Когда пользователь отменил редактирование, нажав Esc;

  • Когда пользователь закончил редактирование, нажав Enter;

Именно поэтому в процедуре проверяется соответствующая комбинация входных параметров НоваяСтрока и ОтменаРедактирования.

На этом мы закончим рассматривать обработку событий табличного поля и перейдем к рассмотрению событий самой формы в целом.