- •Постановка задачи сквозного примера
- •1.1. Создание новой информационной базы
- •1.3. Окно "Конфигурация"
- •1.4. Свойства объекта Конфигурации
- •1.4.1. Основные свойства
- •1.4.2. Группа свойств "Представление"
- •1.4.3. Группа свойств "Разработка"
- •1.5. Пункт меню "Конфигурация"
- •1.5.1. Сохранение Конфигурации
- •1.5.2. Обновление Конфигурации
- •1.5.3. Сохранение Конфигурации в файл
- •1.6. Администрирование
- •1.7. Запуск в режиме "1с: Предприятие"
- •1.8. Что мы узнали
- •Глава 2. Работа с константами
- •2.1. Создание константы
- •2.2. Свойства константы
- •2.3. Создание основной формы констант
- •2.4. Обращение к значениям констант из встроенного языка
- •2.4.1. Менеджер константы
- •2.4.2. Набор констант
- •2.5. Самостоятельная работа
- •2.6. Что мы узнали
- •Глава 3. Регистр сведений "Курсы"
- •3.1. Окно редактирования регистра сведений
- •3.1.1. Закладка "Основные"
- •3.1.2. Закладка "Данные"
- •3.1.3. Закладка "Формы"
- •3.2. Ввод данных в регистр сведений
- •3.3. Работа с регистром сведений из встроенного языка системы
- •3.3.1. Получение отдельных значений
- •3.3.2. Менеджер записи
- •3.3.3. Использование выборки
- •3.4. Самостоятельная работа
- •3.5. Использование набора записей
- •3.5.1. Обработка событий
- •3.6. Что мы узнали
- •Глава 4. Объект "Запрос"
- •4.1. Создание запроса "вручную"
- •Написание текста запроса и его выполнение
- •4.1.2. Выборка данных из результата запроса
- •4.2. Что мы узнали
- •Глава 5. Разработка интерфейса пользователя
- •5.1. Создание нового интерфейса
- •5.2. Свойства интерфейса
- •5.3. Редактирование интерфейса
- •5.3.1. Редактирование свойств пункта меню
- •5.3.2. Свойство "Действие"
- •5.3.3. Создание новых пунктов меню
- •5.3.4. Добавление новой панели
- •5.4. Самостоятельная работа
- •Сохраните и обновите конфигурацию.
- •5.5. Тестирование интерфейса
- •5.6. Переключение интерфейсов
- •5.6.1. Добавление команды переключения интерфейса
- •5.6.2. Перенос подменю из одного интерфейса в другой
- •5.6.3. Переключение интерфейсов в режиме "1с: Предприятие"
- •5.7. Что мы узнали
- •Глава 6. Табличный документ
- •6.1. Команда "Вывести список" режима "1с: Предприятие"
- •6.2. Объект "ТабличныйДокумент"
- •6.3. Формирование отчета с использованием макета
- •6.3.1. Создание общего макета
- •6.3.2. Конструктор макета для создания табличного документа
- •6.3.3. Свойства ячейки табличного документа
- •6.3.4. Именованные области
- •6.4. Улучшение вида результирующего табличного документа
- •6.4.1. Объединение ячеек
- •6.4.2. Изменение ширины столбцов
- •6.4.3. Форматирование содержимого ячейки
- •6.4.4. Установка свойств табличного документа
- •6.5. Самостоятельная работа
- •6.6. Формирование отчета без использования макета
- •6.7. Что мы узнали
3.5.1. Обработка событий
Объект типа РегистрСведенийНаборЗаписей предоставляет возможность обрабатывать два события:
-
ПередЗаписью;
-
ПриЗаписи.
Оба события позволяют контролировать процесс записи в ИБ.
Для того чтобы обработать нужное событие, необходимо написать процедуру с идентификатором соответствующего события в
модуле набора записей регистра сведений.
Упражнение №3.10. |
|
В окне редактирования регистра сведений "Курсы" переключитесь на закладку "Прочие" (см. рис. 3.8). Нажмите на кнопку "Модуль набора записей" и наберите следующий текст: // Модуль набора записей регистра сведений "Курсы" // ПередЗаписью() - проверяет дату периода перед записью в ИБ // Параметры // Отказ (Булево) позволяет отказаться от записи (Ложь-по умолчанию- // выполнение операции, Истина – отказ от операции. // Замещение (Булево) режим записи набора (Ложь-по умолчанию-дописывание //записи, Истина – замещение записи. Процедура ПередЗаписью(Отказ, Замещение) ДатаРегистрации = Константы.ДатаРегистрации.Получить(); Для каждого ТекЗапись Из ЭтотОбъект Цикл // Если период раньше даты регистраци Если ТекЗапись.Период < ДатаРегистрации Тогда // откажемся от записи Отказ = Истина; // сообщим об ошибке Сообщить("Запись от "+ТекЗапись.Период+ " с курсом "+ТекЗапись.Курс+ " раньше даты регистрации объединения!", СтатусСообщения.Важное); КонецЕсли; КонецЦикла; Если Отказ Тогда Сообщить("Запись не выполнена!!!", СтатусСообщения.ОченьВажное); КонецЕсли; КонецПроцедуры //Проверьте работу процедуры путем ввода новой или редактирования //существующей записи в регистре сведений "Курсы".
|
В п.1. постановки задачи сказано: "Ввод всех данных и документов должен выполняться не ранее даты регистрации объединения", для того чтобы решить поставленную задачу, выполните следующее упражнение:
Рис. 3.8. Закладка "Прочие" окна редактирования
Дадим необходимые пояснения к нашим действиям:
Причина, по которой мы использовали именно такую процедуру обработчик событий состоит в том, что запись новых данных и исправление существующих может выполняться как вследствие интерактивных действий пользователя, так и программным путем.
Если бы проверка значения периода выполнялась бы только в модуле формы, то тогда мы смогли бы контролировать только интерактивные действия пользователя связанные с непосредственным редактированием. При этом сохранялась бы возможность записи в регистр программным путем значений, которые не удовлетворяли бы условиям поставленной задачи.
Можно сказать, что модуль набора записей – это "последняя линия обороны" и его задача контролировать те данные, которые помещаются в регистр.
Формальный параметр Отказ анализируется системой после обработки события, поэтому:
Отказ = Истина;
приведет к отмене транзакции.
При этом нужно помнить, что если Вы отменяете транзакцию записи в процедуре ПередЗаписью(…) в или ПриЗаписи(…), то метод .Записать() следует вызвать внутри конструкции:
Попытка … Исключение … КонецПопытки;
В противном случае система будет генерировать ошибку времени выполнения.
Упражнение №3.11. |
|
В режиме "1С:Предприяие":
Выйдите из режима "1С:Предприятие". Запустите режим "1С:Предприятие" еще раз, для того чтобы произошел вызов обработчика события ПриНачалеРаботыСистемы(). Если Вы все сделали правильно, то Вы получите сообщение об ошибке: {МодульПриложения(48)}: Ошибка при вызове метода контекста (Записать): Операция не выполнена! РегСведКурсы.Записать(); Внесите в эту часть процедуры следующие изменения: Процедура ПримерыОбращенияКРегиструСведений() …………………………………………… // 2. Если записи нет Если Не РегСведКурсы.Выбран() Тогда …………………………………………… // попытаемся записать набор записей Попытка РегСведКурсы.Записать(); Исключение Сообщить(ОписаниеОшибки(), СтатусСообщения.ОченьВажное); Возврат; // т.к. дальше делать уже нечего... КонецПопытки; КонецЕсли; КонецПроцедуры Проверьте работу процедуры. |