Добавлен: 31.03.2023
Просмотров: 938
Скачиваний: 13
Разработку начнем с использования компоновки данных и в окне конструктора запроса отберем необходимые для него поля (рис. 219).
Рис. 219. Окно конструктора запроса
Нажмём на кнопку «ОК» и увидим текст запроса (листинг 5.4).
Листинг 5.4. Текст запроса для отчета об оплате учащихся
ВЫБРАТЬ
ОплатыОбороты.Клиент,
ОплатыОбороты.ВнесеннаяСуммаОборот
ИЗ
РегистрНакопления.Оплаты.Обороты КАК ОплатыОбороты
На вкладке «Ресурсы» включим ресурс ВнесеннаяСуммаОборот, после чего перейдем на вкладку «Настройки» и зададим группировки для создаваемого отчета (рис. 220).
Рис. 220. Вкладка «Настройки»
В дополнительной вкладке «Параметры» вкладки «Настройки» включим присутствующие там параметры в пользовательские настройки (поставить галочку на «Включать в пользовательские настройки»). Перейдя в режим 1С: Предприятие можно увидеть то, что изображенно на рис. 221.
Рис. 221. Итоговый отчёт
Программирование форм
На платформе 1С:Предприятие 8.3 непосредственно само программирование на встроенном языке занимает далеко не самое важное место при создании прикладных решений. На первый план в этой новой версии программного продукта выходят разнообразные визуальные ресурсы. Тем не менее на платформе 1С:Предприятие 8.3 остаются участки, где программирование остается весьма востребованным, и одним из таких участков являются формы и элементы управления, расположенные на них.
Сервер и клиентское приложение
В платворме 1С: Предприятие 8.3 можно выделить два программных компонента:
- Клиентсое приложение
- Сервер 1С: Предприятие
Клиентское приложение представляет собой программу, которая обеспечивает интерактивное взаимодействие системы с пользователем. Данная программа может выполнять программный код на встроенном языке, и в этом случае принято говорить, что код исполняется в контексте клиентского приложения.
Сервер 1С: Предприятие представляет собой один из рабочих процессов системы. Он обеспечивает взаимодействие клиентского приложения с базой данных и может исполнять программный код, и в этом случае можно сказать, что код исполняется на сервере.
Важным является факт того, что в этих двух компонентах доступны разные свойства, методы и объекты встроенного языка. Если речь идет о визуальном взаимодействии пользователя с формой одного из объектов, то такие программные разработки осуществляются на клиенте. Другая ситуация касается извлечения информации из базы данных - осуществляется на сервере.
Рассмотрим, как выглядит взаимодействие клиентской и серверной частей на платформе 1С:Предприятие 8.3. Начало работы пользователя всегда связано с клиентской частью — пользователь запускает программное приложение. На следующем этапе производится подключение к базе данных — здесь уже в работу включается сервер 1С:Предприятие. После этого управление опять передается клиенту. Подобная передача управления от клиента серверу и обратно происходит постоянно на протяжении всего периода работы пользователя. Программирование при наличии двух компонентов уже нельзя рассматривать как единое целое. Данные особенности организации платформы 1С:Предприятие 8.3 имеют большое значение особенно при программировании форм. Дело в том, что форма как программный объект существует одновременно и на сервере, и на клиенте.
Таким образом, все процедуры и функции в модуле формы должны иметь явное указание на то, в каком контексте они будут исполняться. Для этого все процедуры и функции в модуле формы должны иметь в своем программном коде директивы компиляции. Таких директив в платформе 1С:Предприятие 8.3 несколько:
- &НаКлиенте
- &НаСервере
- &НаСервереБезКонтекста
- &НаКлиентеНаСервереБезКонтекста
Если процедура или функция начинается с директивы &НаКлиенте, это говорит о том, что ее выполнение должно производиться в контексте клиентского приложения. Данная директива используется для всех обработчиков клиентских событий формы.
Директива &НаСервере говорит о том, что выполнение последующего программного кода происходит на сервере. Данная директива используется для всех обработчиков серверных событий формы. Также эту директиву программисты могут применять в собственных процедурах и функциях, чтобы передать исполнение программного кода на сервер.
Директива &НаСервереБезКонтекста означает, что выполнение последующего программного кода происходит на сервере. Однако при этом контекст формы для следующей после директивы части программы оказывается недоступен. Данная директива также используется программистами в собственных процедурах, чтобы передать исполнение программного кода на сервер.
Если процедура или функция начинается с директивы &НаКлиентеНаСервереБезКонтекста, это говорит о том, что ее выполнение может производиться как в контексте клиентского приложения, так и на сервере. Заметим, что данная директива используется крайне редко.
Формы
Форма создается платформой, исходя из заданного нами в режиме конфигуратора описания. Для каждой формы на вкладке «Модуль» разработчик может располагать свои программы на встроенном языке. Эти программы система вызывает в определенные заранее известные моменты.
С точки зрения пользователя форма представляет собой важный компонент интерфейса всего прикладного решения на платформе 1С:Предприятие 8.3, который позволяет просматривать имеющуюся информацию в информационной базе, а также вводить новые данные. В ней можно выделить следующие составляющие:
- Элементы экранного диалога
- Модуль
- Реквизиты (для хранения данных с которыми работает форма)
- Параметры
- Команды
Часть данных можно вводить и редактировать в элементах формы. К другой категории относятся данные, которые не отображаются, но используются формой в процессе работы. Каждый элемент формы, который может изменять данные, связан с одним из реквизитов формы. В случае изменения данных в элементе формы соответствующие изменения происходят в реквизитах формы.
Очень часто от форм не требуется какой-то особенной функциональности — вполне достаточно набора типовых действий при работе с формой. Для этого случая система 1С:Предприятие обеспечивает создание форм по умолчанию. В данной ситуации о формах можно даже не задумываться — система самостоятельно создаст ту форму, которая требуется в данный момент. Однако для реализации дополнительных сервисных возможностей требуется разработка собственных процедур и функций.
В версиях 8.2 и 8.3 используется механизм управляемых форм. Его особенностью является передача задачи размещения элементов управления на форме от разработчика непосредственно самой системе.
Разработка справочников и документов
Сейчас мы снова вспомним про конфигурацию первой главы. А именно, нам нужно автоматизировать процесс заполнения (данными из справочника «Товары») следующих полей документа:
- Цена
- ЕдиницаИзмерения
Но в этот раз мы не будем дорабатывать её, а создадим всё занова с некоторыми изменениями. Нам понадобятся следующие справочники:
- Организации
- ЕдиницыИзмерения
- Товары
В справочнике «Организации» укажем один дополнительный реквизит — «Адрес» (тип данных – строка, 100 символов). Справочник «ЕдиницыИзмерения» оформим без дополнительных реквизитов, а в справочнике «Товары» будет три реквизита:
- ЕдиницаИзмерения (тип данных – СправочникСсылка.ЕдиницыИзмерения)
- ЦенаПоступления (тип данных – число целого типа)
- ЦенаПродажи (тип дпнных – число целого типа)
Теперь перейдем к созданию документа «Поступление». Во вкладке «Данные» в разделе «Реквизиты» добавим реквизит «Организаия» (тип данных – СправочникСсылка.Организации). Также нам нужна табличная часть «Перечень», состоящая из:
- Товар (тип данных – СправочникСсылка.Товары)
- ЕдиницаИзмерения (тип данных – СправочникСсылка.ЕдиницыИзмерения)
- Цена (тип данных – число целого типа)
- Количество (тип данных – число целого типа)
- Сумма (тип данных – число целого типа)
В связи с тем, что далее мы собираемся программировать форму документа «Поступление», следующий шаг заключается в создании пользовательской формы данного объекта конфигурации. Для этого в окне редактирования документа «Поступление» перейдем на вкладку «Формы», где воспользуемся конструктором форм для создания пользовательской формы документа (рис. 222).
Рис. 222. Форма документа «Поступление»
Программирование табличной части в форме документа
Теперь наша задача заключается в том, чтобы обеспечить заполнение полей ПереченьЕдиницаИзмерения и ПереченьЦена при изменении в поле ПереченьТовар. То есть в режиме 1С:Предприятие выбирает товар в соответствующем справочнике, то данные в поля ПереченьЕдиницаИзмерения и ПереченьЦена должны подставляться автоматически, исходя из информации, присутствующей в справочнике «Товары».
Для реализации такого сервиса необходимо сначала открыть окно свойств поля ПереченьТовар. Это проще всего выполнить двойным щелчком на данном поле. После этого в окне свойств следует перейти к разделу «События» и щелкнуть на значке лупы для события ПриИзменении (рис. 223).
Рис. 223. Раздел «События» поля ПереченьТоваров
В результате этого действия на экране появляется окно с группой переключателей (рис. 224). Выбор переключателя позволяет сформировать необходимую заготовку программой процедуры.
Рис. 224. Окно для формирования обработчика события
В результате этих действий на экране появится окно для написания программного кода обработчика выбранного события. Здесь следует разместить текст процедуры, который представлен в листинге 5.5.
Листинг 5.5. Обработчик события ПриИзменении для поля ПереченьТовар
&НаКлиенте
Процедура ПереченьТоварПриИзменении(Элемент)
Стр=Элементы.Перечень.ТекущиеДанные;
Стр.ЕдиницаИзмерения= ИзвлечьЕдиницуИзмерения(Стр.Товар);
Стр.Цена= ИзвлечьЦену(Стр.Товар);
КонецПроцедуры
В тексте процедуры мы воспользовались функциями ИзвлечьЕдиницуИзмерения и ИзвлечьЦену. Это наши пользовательские функции, которые нам потребуется создать. Первая извлекает значение реквизита ЕдиницаИзмерения из справочника «Товары» для указанного товара в строке документа. Другая функция извлекает значение реквизита ЦенаПоступления из справочника «Товары», которое относится к указанному товару. В эти функции в качестве параметра передается ссылка на элемент справочника «Товары», который выбран пользователем в текущей строке документа.
Тексты функций ИзвлечьЕдиницуИзмерения и ИзвлечьЦену приведены соответственно на листингах 5.6 и 5.7. Эти функции, так же как и процедуру ПереченьТоварПриИзменении, следует ввести на вкладке Модуль окна формы документа. Обе функции выполняются на сервере, о чем говорит предваряющая их директива.
Листинг 5.6. Функция для получения единицы измерения выбранного товара
&НаСервере
Функция ИзвлечьЕдиницуИзмерения(Товар)
Возврат Товар.ЕдиницаИзмерения;
КонецФункции
Листинг 5.7. Функция для получения цены поступления выбранного товара
&НаСервере
Функция ИзвлечьЦену(Товар)
Возврат Товар.ЦенаПоступления;
КонецФункции
Для того, чтобы убедиться, что унас получилось автоматизировать процесс заполнения перейдём в режим 1С: Предприятие (рис. 225).
Рис. 225. Заполнение полей документа «Поступление» после выбора товара
В двух серверных контекст формы не используется на сервере, поэтому передавать лишние данные на него нет смысла. В этом случае эффективнее применить директиву &НаСервереБезКонтекста. С учетом этого рассмотренные процедуры правильнее оформить в соответствии с листингами 5.8 и 5.9.
Листинг 5.8 Использование директивы &НаСервереБезКонтекста для извлечения единицы измерения
&НаСервереБезКонтекста
Функция ИзвлечьЕдиницуИзмерения(Товар)
Возврат Товар.ЕдиницаИзмерения;
КонецФункции
Листинг 5.9. Использование директивы &НаСервереБезКонтекста для извлечения цены поступления
&НаСервереБезКонтекста Функция