Добавлен: 31.03.2023
Просмотров: 940
Скачиваний: 13
КонецПроцедуры
Однако на этом разработка не заканчивается. Требуется опять вернуться к форме справочника «ФормаДляДокумента», открыть окно ее свойств и задать обработчик события ПриСозданииНаСервере в соответствии с листингом 5.16.
Листинг 5.16. Обработчик события ПриСозданииНаСервере
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Список.Параметры.УстановитьЗначениеПараметра("НижняяГраницаЦены",
Параметры.НижняяГраницаЦены);
КонецПроцедуры
На этом разработка заканчивается. Теперь можно перейти в режим 1С:Предприятие и убедиться в том, что после щелчка на кнопке ДорогиеТовары в форме документа Поступление открывается форма ФормаДляДокумента (рис. 237).
Рис. 237. Открытие перечня дорогих товаров в форме списка
Формирование сообщения для пользователя
Наша задача в данном разделе заключается в небольшой доработке документа «Поступление», а именно — нам необходимо прямо из формы документа обеспечить просмотр адреса поставщика, указанного в поле «Организация». В плане интерфейса такое усовершенствование будет выглядеть так: после выбора поставщика его адрес должен появиться в окне сообщений. В результате и документ не будет перегружен дополнительными полями, и пользователь все увидит.
Начнём с открытия формы документа «Поступление». Здесь мы создадим новую команду «АдресФирмы», которая будет выводить информацию об адресе в окне сообщений. Текст данной команды представлен в листинге 5.17.
Листинг 5.17. Программный код команды АдресФирмы
&НаКлиенте
Процедура АдресФирмы(Команда)
Сообщение= Новый СообщениеПользователю;
Сообщение.Текст=ПолучитьАдрес(Объект.Организация);
Сообщение.Сообщить();
КонецПроцедуры
В тексте команды «АдресФирмы» нам необходимо воспользоваться серверной функцией «ПолучитьАдрес», которую мы должны создать (листинг 5.18).
Листинг 5.18. Функция ПолучитьАдрес, выполняемая на сервере
&НаСервереБезКонтекста
Функция ПолучитьАдрес(Фирма)
Возврат Фирма.Адрес
КонецФункции
Далее необходимо создать на форме кнопку, щелчком на которой выполняется команда «АдресФирмы». Технически это делается также, как и с кнопками. После этого можно перейти в режим 1С:Предприятие и посмотреть, как работает созданная кнопка (рис. 238).
Рис. 238. Использование окна сообщений в форме документа
Заполнение формы документа данными из регистра сведений
В этом разделе мы рассмотрим еще одну задачу, связанную с программированием формы документа. Ее особенностью является использование регистра сведений, который является базовым объектом конфигурации платформы.
Еще один новый объект конфигурации, с которым мы встретимся в ходе решения прикладной задачи, — это перечисление. Наряду со знакомством с новыми базовыми объектами конфигурации мы продолжим изучение приемов программирования форм объектов.
Перечисления
Среди большого количества объектов конфигурации системы 1С:Предприятие наиболее простыми с точки зрения их организации являются перечисления, представляющие собой статические списки данных, предназначенные для описания структуры постоянных наборов значений, не изменяемых в процессе работы конфигурации. На основе перечисления платформа создает в базе данных информационную структуру, в которой может храниться набор некоторых постоянных значений.
Перечисления в основном используются не самостоятельно, а в совокупности с другими типами объектов. Основная цель при использовании перечислений — исключить неоднозначность вводимой информации.
Первым объектом, который мы создадим в новой конфигурации, будет перечисление с именем «ВидыТарифов», отражающее различные виды тарифов для образовательных программ. В практической работе варианты образовательных программ не подразумевают особого многообразия. Кроме того, для образовательных программ и, соответственно, видов тарифов характерна неизменность во времени (изменения и добавления случаются очень редко).
Для подобных ситуаций и был разработан объект конфигурации под названием перечисление. В нашей прикладной задаче в качестве значений перечисления «ВидыТарифов» определим следующие:
- Базовый
- Ускоренный
- Сокращённый
Рассмотрим теперь технические действия, позволяющие реализовать сказанное на практике. Для начала требуется, находясь в режиме конфигуратора, открыть окно «Конфигурация». В дереве объектов конфигурации необходимо щелкнуть правой кнопкой мыши на пункте «Перечисления» и воспользоваться уже знакомым нам контекстным меню. Здесь следует с помощью соответствующего пункта добавить новый объект, после чего перед нами откроется окно редактирования объекта конфигурации. Задание имени, как обычно, производится на вкладке «Основные», а для того, чтобы внести в перечисление упомянутые значения, следует перейти на вкладку «Данные» (рис. 239)
Рис. 239. Внесение значений перечисления «ВидыТарифов»
Сформированные значения перечисления «ВидыТарифов» мы будем использовать далее в справочнике.
Справочник Учащиеся и документ Оплата
Для работы нам понадобится справочник «Учащиеся», который также необходимо разработать. Кроме обязательных реквизитов любого справочника создадим еще один под названием «ВидТарифа» (тип значения — ПеречислениеСсылка.ВидыТарифов). Таким образом напротив фамилии учащегося мы будем отмечать вид тарифа по оплате обучения. Ещё в процессе работы нам понадобится документ «Оплата». На вкладке «Данные» окна редактирования данного объекта конфигурации разместим табличную часть «Перечень», включающую четыре реквизита:
- Учащийся (тип данных – СправочникСсылка.Учащиеся)
- БазоваяСумма (тип данных – число целого типа)
- Скидка (тип данных – число целого типа)
- Сумма (тип данных - число целого типа)
В дальнейшем наша задача заключается в программировании элементов, расположенных на форме документа, поэтому форма, генерируемая системой по умолчанию, нам не подойдет. Таким образом, на следующем шаге мы создадим пользовательскую форму документа. Для этого в окне редактирования документа «Оплата» перейдем на вкладку «Формы», где воспользуемся конструктором форм. Результат работы конструктора представлен на рис. 240.
Рис. 240. Форма документа «Оплата» в режиме конфигуратора
Периодический регистр сведений
Далее нам потребуется не встречавшийся ранее базовый объект конфигурации, который называется регистр сведений.
Ранее в справочнике «Учащиеся» мы разместили реквизит «ВидТарифа», в котором фиксируется вариант тарифа для конкретного учащегося. Однако значение тарифа может меняться с течением времени, при этом в реальной работе может потребоваться ввод документа об оплате со старой датой, когда тариф отличался от текущего.
Для каждого уникального набора параметров (тарифа и времени) должно существовать не более одного значения функции — значения тарифа. В этом и заключается предназначение регистров сведений — хранение информации по набору переменных (в системе 1С:Предприятие они называются измерениями), причем каждый набор не должен повторяться. При попытке повторного создания значения функции для уже использованного набора переменных (измерений) система обратит на это внимание.
Если взглянуть на регистр сведений с точки зрения его структуры, то мы увидим в нем три компонента:
- Измерения – аргументы функции
- Ресурсы – значения функции
- Реквизиты играют вспомогательную роль, содержат дополнительную поясняющую информацию о рассматриваемом наборе данных
Регистр сведений может быть непериодическим, в этом случае параметр (измерение) время отсутствует. В результате измерениями будут являться только те параметры, которые создаются непосредственно разработчиком в режиме конфигуратора.
В случае периодического регистра сведений его «периодичность» можно определить с помощью одного из следующих значений:
- В пределах секунды
- В пределах дня
- В пределах месяца
- В пределах квартала
- В пределах года
Для определения подобной «периодичности» периодический регистр сведений всегда содержит поле «Период», которое формируется системой автоматически. Оно имеет тип Дата, и в нем фиксируется факт принадлежности записи регистра к какому-то периоду. Отметим, что в процессе записи данных в регистр сведений система 1С: Предприятие всегда приводит значение этого поля к началу того периода, в который он попадает.
В периодическом регистре сведений может быть только одна запись с определенным набором измерений и периодом. Система сама контролирует уникальность записей для регистра сведений. Ключом, однозначно идентифицирующим запись, является совокупность значений измерений регистра и периода.
Далее для решения поставленной задачи мы должны создать регистр сведений «Тарифы», в котором будут храниться тарифы, развернутые во времени.
Приступим к техническим действиям по созданию периодического регистра сведений. Начало не вызывает вопросов — щелчок правой кнопкой мыши на элементе «Регистры» сведений в дереве объектов конфигурации с последующим созданием нового объекта конфигурации. После этого перед нами откроется вкладка «Основные» окна редактирования регистра сведений «Тарифы» (рис. 241).
Рис. 241. Вкладка «Основные» окна редактирования регистра «Тарифы»
Периодичность регистра следует отметить на вкладке «Основные» в поле «Периодичность». Для решаемой задачи разумно выбрать вариант «В пределах дня», что позволит хранить изменения тарифов, даже если эти изменения будут происходить каждый день. Также на этой вкладке в качестве режима записи в рассматриваемый регистр выберем вариант «Независимый». Данный параметр связан с тем, что информация в регистр сведений может вноситься и редактироваться двумя способами: вручную или из документов.
После установки всех указанных параметров перейдем на вкладку Данные и создадим необходимые поля регистра:
- Измерения «Вид тарифа» (тип данных – Перечислениессылка.ВидыТарифов)
- Ресурсы «ЗначениеТарифа» (тип данных – число; длина - 10)
На этом разработка регистра сведений «Тарифы» в режиме конфигуратора завершается. Теперь можно перейти в режим 1С: Предприятие, где и внести несколько записей о значениях тарифов (рис. 242).
Рис. 242. Форма списка регистра сведений «Тарифы»
Программирование документа
Дальнейшие наши действия будут связаны с программированием формы документа «Оплата». Для этого откроем в режиме конфигуратора созданную ранее форму нашего документа (см.рис. 246). Сейчас задача заключается в разработке следующего сервиса при заполнении табличной части документа пользователем: после выбора учащегося в поле «Учащийся» должно автоматически заполняться поле «БазоваяСумма». В данное поле должно вноситься актуальное значение из регистра сведений «Тарифы». Для реализации данного функционала откроем окно свойств поля «ПереченьУчащийся», где в разделе «События» следует обратиться к событию «ПриИзменении». Далее щелчком на значке лупы откроем окно редактора программного кода, где требуется задать обработчик рассматриваемого события в соответствии с листингом 5.19.
Листинг 5.19. Обработка события «ПриИзменении» для поля «ПереченьУчащийся»
&НаКлиенте
Процедура ПереченьУчащийсяПриИзменении(Элемент)
Стр=Элементы.Перечень.ТекущиеДанные;
Стр.БазоваяСумма=ОбщиеФункции.ТарифНаДень(Объект.Дата,Стр.Учащийся);
КонецПроцедуры
В данную процедуру заложено использование сервисной функции «ТарифНаДень» из общего модуля, которую нам также нужно разработать. Для начала необходимо создать сам общий модуль под названием «ОбщиеФункции». Для этого в окне «Конфигурация» откроем ветку «Общие» и обратимся к разделу «ОбщиеМодули». Здесь с помощью правой кнопки мыши вызовем контекстное меню и добавим новый общий модуль, которому дадим название «ОбщиеФункции». Обратим внимание на флажки, которые необходимо установить в процессе диалога с системой при создании модуля (рис. 243).
Рис. 243. Окно свойств модуля «ОбщиеФункции»
Во-первых, должен быть установлен флажок «Сервер», обеспечивающий компиляцию данного модуля на стороне сервера. Во-вторых, необходимо установить флажок «Вызов сервера», чтобы далее создаваемую экспортную функцию этого модуля можно было вызывать с клиента.