При разработке информационных систем, таких как система управления авиабилетами, часто возникает задача автоматизации заполнения полей формы. Рассмотрим, как правильно организовать архитектуру данных и реализовать механизм получения информации из базы данных при изменении выбора пользователя.
Первое, с чего мы начнем — это критический взгляд на структуру ваших данных. Если вы используете два отдельных справочника для пунктов посадки и высадки, а затем пытаетесь связать их через третий справочник «Филиалы», вы создаете избыточную и сложную для поддержки модель. В профессиональной разработке 1С мы стремимся к нормализации данных.
Вместо создания множества справочников, давайте рассмотрим использование следующих объектов:
Аэропорты — для хранения списка всех доступных локаций.Тарифы — это ключевой инструмент для хранения цен. В качестве измерений регистра мы укажем ПунктОтправления и ПунктНазначения, а в качестве ресурса — ЦенаПерелета.Такой подход позволит вам легко управлять ценами, добавлять новые направления и избегать дублирования информации. Использование РегистраСведений — это стандарт индустрии.
Теперь разберем, как заставить систему автоматически «подтягивать» цену в справочник Билет, когда пользователь выбирает пункт высадки. Для этого нам необходимо использовать обработчик события ПриИзменении на форме.
Разберем алгоритм действий по шагам:
Билет в конфигураторе.ПунктВысадки и в палитре свойств перейдем к событию ПриИзменении.Внутри обработчика мы будем обращаться к регистру сведений Тарифы с помощью запроса. Давайте посмотрим на пример того, как может выглядеть серверный код для получения данных:
&НаСервере
Процедура ПолучитьЦенуНаСервере()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТарифыСрезПоследних.ЦенаПерелета КАК Цена
|ИЗ
| РегистрСведений.Тарифы.СрезПоследних(&Период, ПунктОтправления = &Откуда И ПунктНазначения = &Куда) КАК ТарифыСрезПоследних";
Запрос.УстановитьПараметр("Период", ТекущаяДата());
Запрос.УстановитьПараметр("Откуда", Объект.ПунктПосадки);
Запрос.УстановитьПараметр("Куда", Объект.ПунктВысадки);
Результат = Запрос.Выполнить();
Если НЕ Результат.Пустой() Тогда
Выборка = Результат.Выбрать();
Выборка.Следующий();
Объект.Цена = Выборка.Цена;
КонецЕсли;
КонецПроцедуры
Рассмотрим подробнее, почему использование Запрос является правильным решением. Прикладные объекты 1С (справочники, регистры) хранят данные в таблицах базы данных. Запрос позволяет нам не просто найти запись, а отфильтровать её по сложным условиям, используя СрезПоследних для получения наиболее актуальной цены на текущую дату.
Если вы новичок, обязательно проанализируйте этот подход. Вместо того чтобы перебирать элементы справочников вручную, вы делегируете поиск системе управления базами данных. Это делает вашу программу быстрее и надежнее.
Подводя итог, разберем еще раз основные правила разработки, которые помогут вам в курсовой работе:
ПриИзменении.Запрос.Работая таким образом, вы не просто решите проблему подстановки данных, но и покажете преподавателю понимание профессиональных архитектурных принципов 1С, что значительно повысит качество вашей работы.