Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Одна процедура для обработки нескольких событий

Лабораторная работа № 4

Документы.

Создание Документа «Приходная накладная»
Для отражения событий, происходящих на предприятии, в базе данных мы создадим два документа: Приходная накладная и Оказание услуги.
Документ Приходная накладная будет фиксировать факт поступления в нашу организацию необходимых материалов, а документ Оказание услуги - фиксировать оказание услуг и расход материалов, которые используются при оказании этих услуг.


В режиме конфигуратор:

Откроем конфигуратор и добавим новый объект конфигурации Документ.
- На закладке Основные: зададим имя документа - ПриходнаяНакладная. На основании имени платформа автоматически заполнит его синоним. Так же зададим Представление списка, как Приходные накладные.
- На закладке Подсистемы: список приходных накладных должен быть доступен в разделах Учет материалов и Бухгалтерия.
- На закладке Данные: создадим реквизит документа с именем Склад (нажать на «+»); далее выберем для реквизита ссылочный тип данных СправочникСсыл­ка. Склады. Этот тип стал доступен в конфигурации после создания объекта конфигурации Справочник Склады. В качестве значения свойства Значение заполнения выберем предопределенный элемент справочника Склады - Основной.

Рис. 4.1. Справочник Склады

После этого добавим в документ табличную часть с именем Материалы. Для этого нажмем кнопку Добавить табличную часть над списком табличных частей документа. Кроме имени табличной части установим свойство Проверка запол­нения в значение Выдавать ошибку.

Рис. 4.2. Свойства: Материалы

Создадим реквизиты табличной части Материалы. Для этого нажмем кнопку Добавить реквизит в разделе описания табличных частей документа:

  • Материал, тип СправочникСсылка. Номенклатура;
  • Количество, тип Число, длина 15, точность 3, неотрицательное;
  • Цена, тип Число, длина 15, точность 2, неотрицательное;
  • Сумма, тип Число, длина 15, точность 2, неотрицательное.

Для каждого реквизита табличной части также установим свойство Проверка заполнения в значение Выдавать ошибку.
- На закладке Нумерация: убедимся, что свойство Авто-нумерация включено.
- В дереве объектов конфигурации выделим ветвь Под­системы, вызовем ее контекстное меню и выберем пункт Все подсис­темы. В открывшемся окне в списке Подсистемы выделим подсистему УчетМатериалов: включим видимость у команды Приходная накладная: создать, в группе Панель действий.Создать.

  • В режиме 1С:Предприятие

Запустим 1С:Предприятие в режиме отладки и протестируем полу­чившийся документ. В открывшемся окне 1С:Предприятия мы видим, что в панели навигации разделов Бухгалтерия и Учет материалов появилась команда Приходные накладные для открытия списка приходных накладных.

 

Рис. 4.3. В режиме 1С:Предприятие

Пока в БД нет ни одного документа Приходная накладная, поэтому выполним команду Приходная накладная в панели действий раздела Учет материалов и создадим новую приходную накладную.
Система автоматически подставит текущую дату создания документа и нулевое время, так как документ еще не проведен. В качестве времени документа при оперативном проведении ему присваивается оперативная отметка времени.
Поле Номер не заполнено, но система сама сгенерирует для нового документа уникальный номер, так как свойство Автонумерация для документа включено по умолчанию. Новый номер будет сохранен в момент записи документа. Осталось только заполнить табличную часть приходной накладной материалами (добавьте3 любых записи в накладную). Так же система может вводить данные с клавиатуры и предлагать вам материалы по совпадающим буквам (создайте еще одну накладную таким образом) После чего нажмем Провести и закрыть.
Документ будет сохранен и проведен, ему будет присвоен автомати­чески сгенерированный системой номер и текущее время проведения документа.

Рис. 4.4. Приходные накладные


Автоматический пересчет суммы в строках документа
При заполнении документа приходится вводить сумму в каждой строке. Это неудобно, и возникает естественное желание автоматизировать работу документа так, чтобы сумма вычислялась автоматически каждый раз при изменении цены или количества материалов в строке.
Это совсем не сложно, и для этого нам потребуется сначала создать собственную форму документа, а затем воспользоваться возможнос­тями встроенного языка.

  • В режиме конфигуратор:

Откроем окно редактирования объекта конфигурации Документ ПриходнаяНакладная, далее пройдем на вкладку Формы: чтобы создать форму документа, нажмем кнопку открытия со значком лупы в поле ввода или кнопку Добавить над списком форм. Система вызовет полезный инструмент разработчика - конструктор форм, в нем выберем тип формы Форма документа и нажмем кнопку Готово. Обращаем внимание, что в дереве объектов конфигурации у объекта конфигурации Документ ПриходнаяНакладная появилась формаФормаДокумента, а на экране открылось окно редактора форм, содержащее эту форму. Разработчик может через палитру свойств изменить свойства элемента, которые повлияют на его отображение в форме. Он может также изменить структуру элементов формы - создать новое поле, группу полей, добавить табличную часть, связав эти элементы с данными формы. Используя встроенный язык, разработчик может «вклиниться» в эти события и описать собственный алгоритм того, что должно происхо­дить при наступлении этого события.
- Дважды щелкнем на элементе формы Материалы Количествоили правой кнопкой мыши откроем для него палитру свойств: прокрутив список до конца, мы увидим перечень событий, которые могут быть связаны с этим полем. Найдем в списке событий событие ПриИзменении, и нажмем на кнопку открытия (значок лупы), система создаст шаблон процедуры обработчика этого события в модуле нашей формы и откроет закладку Модуль редактора формы.

Листинг 4.1. Форма документа

 

Модуль - это «хранилище» для текста программы на встроенном языке. В модуль формы, в процедуру МатериалыКоличествоПриИзменении(), добавим следующий текст:
СтрокаТабличнойЧасти = Элементы.Материалы.ТекущиеДанные;
СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Количество*СтрокаТабличнойЧасти.Цена;
Таким образом, в результате выполнения первой строки процедуры обработчика переменная СтрокаТабличнойЧасти будет содержать объект ДанныеФормыСтруктура. Этот объект содержит данные, находящиеся в текущей строке табличной части документа (Элементы.Материалы.ТекущиеДанные). Получив этот объект, мы можем обратиться к данным конк­ретной колонки табличной части, указав имя колонки в качестве свойства объекта.

Одна процедура для обработки нескольких событий

Теперь хотелось бы и для поля Цена и Сумма сделать то же самое.
Поэтому лучше будет поместить расчет суммы в некоторое «обще­доступное» место, чтобы разные документы, имеющие аналогичные реквизиты табличной части, могли использовать этот алгоритм. Для описания таких «общедоступных» мест служат объекты конфи­гурации Общий модуль, расположенные в ветке Общие > Общие модули. Процедуры и функции, содержащиеся в этих модулях, могут быть доступны для любых объектов конфигурации.

  • В режиме конфигуратор:

Добавим объект конфигурации Общий модуль. Для этого раскроем ветвь Общие в дереве объектов конфигурации, нажав на + слева от нее. Затем выделим ветвь Общие модули и нажмем кнопку Добавить в командной панели окна конфигурации:

Рис. 4.5. Общие модули


Назовем его РаботаСДокументами и установим в его свойствах флажок Клиент (управляемое приложение), а флажок Сервер снимем. Это означает, что экземпляры этого модуля будут скомпилированы в контексте тонкого клиента и в контексте веб-клиента

Рис. 4.6. Свойства: РаботаСДокументами


Внесем в общий модуль следующий текст:

Процедура РассчитатьСумму(строкаТабличнойЧасти) Экспорт
СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Количество*СтрокаТабличнойЧасти.Цена;
КонецПроцедуры

Изменим текст обработчика. Для этого вернитесь в модуль формы документа, выберите поле КоличествоПриИзменении.

&НаКлиенте
Процедура МатериалыКоличествоПриИзменении (Элемент)
СтрокаТабличнойЧасти. = Элементы.Материалы.ТекущиеДанные;
РаботаСДокументами.РассчитатьСумму(СтрокаТабличнойЧасти);
КонецПроцедуры

Создадим обработчик события ПриИзменении для поля табличной части МатериалыЦена так же, как мы делали это для поля Материалы Количество, и повторим в нем вызов процедуры РассчитатьСумму из общего модуля.
- Листинг процедуры «МатериалыЦенаПриИзменении()»

&НаКлиенте
Процедура МатериалыЦенаПриИзменении (Элемент)
СтрокаТабличнойЧасти. = Элементы.Материалы.ТекущиеДанные;
РаботаСДокументами.РассчитатьСумму(СтрокаТабличнойЧасти);
КонецПроцедуры

  • В режиме 1С: Предприятие:

Запустим 1С: Предприятие в режиме отладки и убедимся, что теперь сумма в строках табличной части документов ПриходнаяНакладная пересчитывается как при изменении количества, так и при изменении цены.

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...