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

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

Документы.

Ориентировочная продолжительность занятия - 1 час 30 минут.

ТЕОРЕТИЧЕСКАЯ ЧАСТЬ

Документ

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


Формы документа

Для «визуализации» документа существует несколько основных форм, которые имеют несколько вариантов названий (табл. 4.1).

Таблица4.1. Основные формы документа.

 

Типы данных. Типообразующие объекты конфигурации

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

ПРАКТИЧЕСКАЯ ЧАСТЬ


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


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

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

Рис. 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С: Предприятие в режиме отладки и убедимся, что теперь сумма в строках табличной части документов ПриходнаяНакладная пересчитывается как при изменении количества, так и при изменении цены.

Документ «Оказание услуги»

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

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

  • Склад, тип СправочникСсылка.Склады. Выберем для свойства Значение заполнения предопределенный элемент Основной спра­вочника Склады.
  • Клиент, тип СправочникСсылка.Клиенты. Установим свойство Проверка заполнения в значение Выдавать ошибку.
  • Мастер, тип СправочникСсылка.Сотрудники. Установим свойство Проверка заполнения в значение Выдавать ошибку.

Создадим табличную часть этого документа ПереченьНоменклатуры с реквизитами:

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

Установим для табличной части в целом и для каждого ее реквизита свойство Проверка заполнения в значение Выдавать ошибку.
- На закладке Формы: создадим основную форму документа:
Для поля ПереченьНоменклатурыКоличество создадим обработчик события ПриИзменении, в котором будем вызывать процедуру РассчитатьСумму из общего модуля РаботаСДокументами.
При этом откроется модуль формы с шаблоном обработчика события ПереченьНоменклатурыКоличествоПриИзменении, который мы пока заполнять не будем, а перейдем в окно элементов формы на закладку Форма и аналогичным образом создадим обработчик события ПереченьНоменклатурыЦенаПриИзменении для поля ПереченьНоменклатурыЦена.
Далее модуль формы документа ОказаниеУслуги нужно заполнить следующим образом:

Листинг 4.2. Модуль формы документа «ОказаниеУслуги»

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

Рис. 4.7. Видимость у команды Оказание услуги: создать

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

В панели действий раздела Оказание услуг вызовем команду соз­дания документа Оказание услуги и заполним его следующим образом:

Рис. 4.8. Оказание услуги

Обратите внимание, что склад Основной подставляется по умолчанию, а для полей Мастер и Клиент выполняется проверка заполнения. А также при вводе цены и количества в табличную часть документа Оказание услуги сумма пересчитывается по нашему алгоритму.

Контрольные вопросы:

  • Какими характерными особенностями обладает документ.
  • Для чего предназначены реквизиты и табличные части документа.
  • Какие существуют основные формы документа.
  • Что такое проведение документа.
  • Как создать объект конфигурации Документ и описать его основную структуру.
  • Как создать новый документ и заполнить его данными.
  • Как создать собственную форму документа.
  • Что такое конструктор форм.
  • Что такое редактор форм.
  • Что такое элементы формы.
  • Что такое события и с чем они связаны.
  • Что такое обработчик события и как его создать.
  • Что такое модуль и для чего он нужен.
  • Зачем нужны общие модули.
  • Что такое типообразующие объекты.

 


Дата добавления: 2018-04-05; просмотров: 603; Мы поможем в написании вашей работы!

Поделиться с друзьями:




Мы поможем в написании ваших работ!