Добавлен: 31.03.2023
Просмотров: 926
Скачиваний: 13
В окне редактора программного кода поместим входящую в созданный модуль функцию «ТарифНаДень» (листинг 5.20), к которой мы уже обращались в процедуре ПереченьУчащийсяПриИзменении (см. листинг 5.19).
Листинг 5.20. Общая функция ТарифНаДень из модуля ОбщиеФункции
Функция ТарифНаДень(ДатаОплаты,Учащийся) Экспорт
ТарифУчащегося=Учащийся.ВидТарифа;
Отбор=Новый Структура("ВидТарифа",ТарифУчащегося);
ИнформацияИзРегистра=
РегистрыСведений.Тарифы.ПолучитьПоследнее(ДатаОплаты,Отбор);
Возврат ИнформацияИзРегистра.ЗначениеТарифа;
КонецФункции
Для получения значения тарифа в функцию передается два параметра:
- ДатаОплаты (тип данных — Дата)
- Учащийся — ссылка на элемент справочника «Учащиеся»
Получение вида тарифа выбранного учащегося производится с помощью имени интересующего реквизита «ВидТарифа» в справочнике «Учащиеся»:
ТарифУчащегося=Учащийся.ВидТарифа
Далее в тексте разработанной функции мы использовали объект «Отбор» типа Структура, которая представляет собой коллекцию пар. Каждая пара состоит из имени переменной (ключа) и значения переменной, которое нас устраивает при дальнейшем отборе. С помощью объекта «Отбор» мы показываем, что нас интересуют записи регистра «Тарифы» с определенным видом тарифа. Имя ключа структуры («ВидТарифа») должно совпадать с именем измерения регистра «Тарифы», а значение элемента структуры «ТарифУчащегося» задает отбираемое по данному измерению значение. После этого производится обращение к менеджеру регистра сведений «Тарифы» — РегистрыСведений.Тарифы. Здесь используется метод ПолучитьПоследнее(), который возвращает значение ресурса самой поздней записи регистра на указанную дату для интересующего вида тарифа. Метод ПолучитьПоследнее() возвращает в переменной ИнформацияИзРегистра структуру, содержащую значения ресурсов регистра (в нашем случае ресурс у регистра один — ЗначениеТарифа).
Ещё нам нужно обеспечить автоматическое вычисление суммы после ввода скидки для конкретного учащегося. Для этого необходимо запрограммировать событие «ПриИзменении» для поля «ПереченьСкидка». Технические действия для этого аналогичны рассмотренным ранее для поля «ПереченьУчащиеся». Необходимая процедура автоматического заполнения поля «Сумма» после ввода скидки приведена в листинге 5.21.
Листинг 5.21. Автоматизация вычисления суммы после ввода скидки
&НаКлиенте
Процедура ПереченьСкидкаПриИзменении(Элемент)
Стр=Элементы.Перечень.ТекущиеДанные;
Стр.Сумма=Стр.БазоваяСуммаСтр.Скидка;
КонецПроцедуры
Результат проделанных действий можно проверить, перейдя в режим 1С: Предприятие (рис. 244).
Рис.244. Форма документа «Оплата»
Просмотр тарифов в форме документа «Оплата»
Еще немного доработаем документ «Оплата».Неплохо бы реализовать возможность просмотра списка тарифов прямо в документе при внесении оплаты. Перед разработкой приведем результат, который собираемся получить (рис. 245). Здесь мы видим на форме документа «Оплата» кнопку «Просмотр тарифов», щелчком на которой открывается форма регистра «Тарифы».
Рис.245. Результат автоматизации в форме документа «Оплата»
Вернемся в режим конфигуратора и приступим к необходимой доработке документа «Оплата». Сейчас следует открыть уже имеющуюся форму данного документа в редакторе форм и создать новую команду, которую назовем «ПросмотрТарифов». В окне свойств данной команды обратимся к разделу «Действие», где перейдем в окно написания программного кода для данной команды. Здесь требуется ввести программу открытия формы регистра сведений (листинг 5.22).
Листинг 5.22. Программный код команды ПросмотрТарифов
&НаКлиенте
Процедура ПросмотрТарифов(Команда)
ОткрытьФорму(«РегистрСведений.Тарифы.ФормаСписка»);
КонецПроцедуры
Осталось разместить кнопку на форме документа для выполнения разработанной команды. Для этого проще всего мышью перетащить команду на элемент «Командная панель». Теперь, когда все готово, можно перейти в режим 1С: Предприятие и проверить работоспособность сделанных изменений.
Автоматизация для учета денежных средств
Рассмотрим процедуру создания конфигурации, в том числе и предлагаемый системой 1С: Предприятие ввод на основании. Он позволяет значительно упростить работу с документами, так как новые документы можно создавать на основании уже имеющейся информации в базе данных. В результате за счет исключения повторения одних и тех же действий сокращается время, затрачиваемое пользователями на ввод данных в информационную базу.
Практическая задача будет касаться построения информационной системы для учета внесения денежных средств фирмами-покупателями. Будем считать, что с каждой фирмой у нас заключен договор и по договору нам поэтапно перечисляются некие суммы. Прикладное решение должно обеспечивать учет внесенных по каждому договору сумм.
Разработка справочников
Создадим новую конфигурацию. В процессе работы нам потребуются справочники «Клиенты» и «Договоры», поэтому следующим объектом конфигурации будет справочник «Клиенты». В нем, кроме автоматически формируемых кода и наименования, дополнительных реквизитов не потребуется. После включения данного справочника в созданную подсистему перейдем в режим 1С: Предприятие и заполним справочник Клиенты названиями нескольких фирм (рис. 246).
Рис.246. Форма списка справочника «Клиенты»
Другой справочник, который нам понадобится, — это «Договоры». Создадим в нем два дополнительных реквизита:
- Клиент (тип данных — СправочникСсылка.Клиенты)
- СуммаПоДоговору (тип данных — число целого типа)
Теперь можно перейти в режим 1С:Предприятие и заполнить справочник Договоры информацией по нескольким договорам, которые нам потребуются в дальнейшей работе (рис. 247).
Рис.247. Форма списка справочника «Договоры»
Создание документа и регистра накопления
Предполагается, что наши клиенты являются покупателями и перечисляют нам денежные суммы по каждому договору поэтапно. В связи с этим требуется разработать документ, который будет фиксировать факты этих оплат – «ОплатаПоДоговору». Так, на вкладке Данные в окне редактирования объекта конфигурации создадим два реквизита в основной части документа:
- Договор (тип данных — СправочникСсылка.Договоры)
- СуммаОплаты (тип данных — число)
Разумеется, еще необходимо включить созданный документ в имеющуюся в нашей конфигурации подсистему. В результате в форме списка данного документа будет присутствовать некий набор записей (рис. 248).
Рис.248. Форма списка документа «ОплатаПоДоговор»
Документ «ОплатаПоДоговору» фиксирует факт оплаты по конкретному договору с клиентом, а для регистрации и учета оплаченных сумм создадим регистр накопления «ПеречисленныеСуммы». На вкладке «Основные» этого нового объекта конфигурации укажем, что данный регистр будет являться регистром оборотов. После этого перейдем на вкладку Данные, где определим измерение «ДоговорПокупателя» (тип данных – СправочникСсылка.Договоры) и ресурс регистра «СуммаОплаты» (числовой тип данных).
Теперь обеспечим движения по регистру накопления «ПеречисленныеСуммы». Для этого вернемся в окно редактирования документа «ОплатаПоДоговору» и перейдем на вкладку «Движения», где воспользуемся конструктором движений (рис. 249).
Рис.249. Окно конструктора движений регистра «ПеречисленныеСуммы»
После щелчка на кнопке «OK» конструктор движений обеспечит автоматическое формирование процедуры, осуществляющей изменения в регистре «ПеречисленныеСуммы» при проведении документа «ОплатаПоДоговору» (листинг 5.23).
Листинг 5.23. Процедура формирования движений по регистру ПеречисленныеСуммы
Процедура ОбработкаПроведения(Отказ, Режим)
//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
// Данный фрагмент построен конструктором.
Движения.ПеречисленныеСуммы.Записывать = Истина;
// регистр ПеречисленныеСуммы
Движение = Движения.ПеречисленныеСуммы.Добавить();
Движение.Период = Дата;
Движение.ДоговорПокупателя = Договор;
Движение.СуммаОплаты = СуммаОплаты;
//}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры
Теперь все готово для осуществления проводок в режиме 1С: Предприятие, и после проведения нескольких документов «ОплатаПоДоговору» в регистре накопления появятся соответствующие записи (рис. 250).
Рис.250. Форма списка регистра ПеречисленныеСуммы
Разработка отчета по детальным оплатам
Разрабатываемый отчет должен позволять легко получить важную информацию по оплатам. В качестве имени отчета укажем «Отчет5_4», а в окне конструктора схемы компоновки воспользуемся знакомым пунктом меню «Добавить» набор данных — запрос. Далее перейдем к работе с конструктором запроса, в окне которого выберем две таблицы:
- Таблица справочника «Договоры»
- Таблица регистра «ПеречисленныеСуммы»
Из данных таблиц в раздел Поля перенесем три поля:
- Договоры.Ссылка
- ПеречисленныеСуммы.СуммаОплаты
- ПеречисленныеСуммы.Период
На вкладке «Связи» следует убедиться в установке необходимой связи между двумя таблицами. Значение измерения «ДоговорПокупателя» регистра накопления должно быть равно ссылке на элемент справочника «Договоры». И обязательно требуется проверить, что установлен флажок «Все» у таблицы справочника. В этом случае из справочника будут выбраны все элементы, и этим элементам будет поставлено в соответствие значение из регистра.
Перейдем далее на вкладку «Объединения/Псевдонимы», где сформируем более понятные для пользователя псевдонимы полей (рис. 251).
Рис.251. Вкладка «Объединения/Псевдонимы» окна конструктора запрос
На этом действия по конструированию запроса завершаются. После щелчка на кнопке OK сформируем текст запроса (листинг 5.24). В данном случае в запросе используется левое соединение таблиц.
Листинг 5.24. Запрос для извлечения информации об оплате по договорам
ВЫБРАТЬ
Договоры.Ссылка КАК НазваниеДоговора,
ПеречисленныеСуммы.СуммаОплаты,
ПеречисленныеСуммы.Период
ИЗ
Справочник.Договоры КАК Договоры
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПеречисленныеСуммы КАК
ПеречисленныеСуммы
ПО (ПеречисленныеСуммы.ДоговорПокупателя = Договоры.Ссылка)
После получения текста запроса продолжим работу со схемой компоновки данных и на вкладке Ресурсы укажем поле СуммаОплаты. Теперь осталось на вкладке Настройки добавить группировку и выбрать необходимые поля для отчета (рис. 252).
Рис.252. Вкладка «Настройки» окна схемы компоновки данных
На этом работа в режиме конфигуратора по созданию отчета завершается. Можно перейти в режим 1С: Предприятие и сформировать отчет по имеющимся в базе данных сведениям (рис. 253).
Рис.253. Отчет по договорам с детализацией внесенных оплат
Разработка отчета с итогами оплаты
Создадим теперь отчет, который позволит видеть сводные результаты по оплате и по стоимости договоров клиентов. Назовем отчет «Отчет5_5» и при его создании используем систему компоновки данных. В окне конструктора запросов выберем таблицы «Договоры» и «ПеречисленныеСуммыОбороты». Далее в таблице «Договоры» необходимо выбрать поля Клиент, Ссылка и СуммаПоДоговору, а в таблице «ПеречисленныеСуммыОбороты» — поле СуммаОплатыОборот.
Теперь на вкладке «Связи» следует указать связи между таблицами, а именно — включить все записи таблицы справочника (рис. 254).
Рис. 254. Вкладка «Связи» окна конструктора запросов
Для большей информативности на вкладке «Объединения/Псевдонимы» укажем псевдоним для поля Ссылка – ДоговорКлиента. Теперь щелкнув на кнопке «OK», получаем текст запроса (листинг 5.25).