СтрокаТабличнойЧасти.Количество).
Теперь посмотрим, как это работает. В окне программы откроем список документов «ПриходнаяНакладная» и откроем любой из двух созданных нами документов. Если теперь вы поменяете количество в любой строке документа, то сумма в строке будет пересчитана автоматически.
Замечательно. Но теперь хотелось бы и для поля «Цена» сделать то же самое. А если заглянуть вперед, то мы увидим, что подобное автоматическое заполнение поля «Сумма» может нам понадобиться и в других документах. Поэтому лучше будет поместить расчет суммы в
некотором «общедоступном» месте, чтобы разные документы, имеющие аналогичные реквизиты табличной части, могли использовать этот алгоритм.
Для описания таких «общедоступных» мест служат объекты конфигурации Общий модуль, расположенные в ветке Общие | Общие модули.Процедуры и функции, содержащиеся в этих модулях, могут быть доступны для любых объектов конфигурации.
Создание процедуры обработки события в общем модуле
Д |
ля того чтобы алгоритм, выполняемый при обработке события, был доступен для разных документов, мы создадим общий модуль и перенесем в него нашу процедуру расчета суммы. А в документе просто оставим вызовы этой процедуры из общего модуля.
Создадим объект конфигурации Общий модуль в ветке Общие | Общие модулии назовем его «РаботаСДокументами». Он будет содержать следующий текст:
Процедура РассчитатьСумлц^СтрокаТабличнойЧасти) Экспорт
СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Количество
* СтрокаТабличнойЧасти.Цена; КонецПроцедуры
Ключевое слово Экспортв конце оператора «Процедура» как раз указывает на то, что эта процедура может быть доступна из других программных модулей.
Затем в модуле нашей формы изменим текст нашего обработчика:
Процедура МатериалыКоличествоПриИзменении(Элемент)
СтрокаТабличнойЧасти = ЭлементыФормы.Материалы
.ТекущиеДанные;
РассчитатьСумму(СтрокаТабличнойЧасти); КонецПроцедуры
Таким образом, теперь вместо непосредственного расчета суммы мы будем вызывать процедуру из общего модуля, и передавать ей в качестве параметра нужную нам строку табличной части.
77
Быстрая разработка прикладных решений
Документ
![]() | |||||||
![]() | |||||||
![]() | |||||||
![]() | |||||||
т |
Проверим, как это работает, и убедимся, что ничего не изменилось.
Теперь осталось и для поля «Цена» установить такой же обработчик. Так как однажды мы уже написали в модуле формы нужную нам процедуру, то мы просто могли бы сопоставить ее также и другому событию другого элемента управления, расположенного в форме. Однако стандарты разработки конфигураций фирмы «1С» не допускают такого решения.
«" Узнай больше!
Согласно стандартам разработки фирмы «1С», у каждого события должен быть свой обработчик. Если одинаковые действия должны выполняться при изменении разных элементов управления (например, при нажатии нескольких кнопок), то в этом случае следует поступать следующим образом:
- создается отдельная процедура (функция), выполняющая
необходимые действия;
- для каждого элемента управления создается отдельный
обработчик с именем, назначаемым no умолчанию;
- из каждого обработчика вызывается требуемая процедура
(функция).
Поэтому мы создадим обработчик события «При изменении» для поля ввода, которое расположено в колонке «Цена» и повторим в нем вызов процедуры «РассчитатьСумму» из общего модуля:
ПроцедураМатериалыЦенаПриИзменении(Элемент)
СтрокаТабличнойЧасти = ЭлементыФормы.Материалы
.ТекущиеДанные;
РассчитатьСумму(СтрокаТабличнойЧасти); КоненПроцедуры
Запустим 1С:Предприятие в режиме отладки и убедимся, что теперь сумма в строках табличной части документов «ПриходнаяНакладная» пересчитывается как при изменении количества, так и при изменении цены.
Создание документа ОказаниеУслуги
еперь мы аналогичным образом создадим второй документ, необходимый нам - «ОказаниеУслуги». Для этого потребуется выполнить следующие действия:
создать новый объект конфигурации Документ «ОказаниеУслуги» с реквизитами:
• «Склад», тип СправочникСсылка.Склады,
• «Клиент», тип СправочникСсылка.Клиенты,
• «Мастер», тип СправочникСсылка.Сотрудники,
документа |
создать табличную часть этого «ПереченьНоменклатуры» с реквизитами:
• «Номенклатура», тип
СправочникСсылка.Номенклатура,
• «Количество», тип Число,длина 15, точность 3,
неотрицательное,
• «Цена», тип Число,длина 15, точность 2,
неотрицательное,
• «Сумма», тип Число,длина 15, точность 2,
неотрицательное,
• создать основную форму документа,
• для полей ввода колонок «Количество» и «Цена» создать
обработчик события «ПриИзменении», в котором вызывать
процедуру «РассчитатьСумму» из общего модуля
«РаботаСДокументами».
78
Быстрая разработка прикладных решений
Документ
В результате документ «ОказаниеУслуги» будет выглядеть следующим образом:
Что нового мы узнали
После того, как эти действия будут выполнены, запустим 1С:Предприятие в режиме отладки и убедимся, что при вводе цены и количества в табличную часть документа «ОказаниеУслуги» сумма пересчитывается по нашему алгоритму.
- для чего предназначен объект конфигурации Документ - какими характерными особенностями обладает документ - для чего предназначены реквизиты и табличные части
документа
- какие существуют основные формы документа - что такое проведение документа - чем отличается оперативное проведение документа от
неоперативного
- что такое оперативная отметка времени - как создать объект конфигурации Документ и описать его
основную структуру
- как создать новый документ и заполнить его данными - как создать собственную форму документа - что такое конструктор форм - что такое элементы управления - что такое события и с чем они связаны - что такое обработчик события и как его создать - что такое модуль и для чего он нужен - зачем нужны общие модули
- как сделать процедуру доступной в разных модулях - как назначить обработчик события - что такое типообразующие объекты
80
Регистр накопления
Глава 4. Регистр накопления
В этой главе мы познакомимся с объектом конфигурации Регистр накопления. Вы узнаете, для чего используется этот объект, какой структурой он обладает и каковы его отличительные особенности.
В заключение главы мы создадим с вами один из регистров накопления, который будет использоваться в нашей конфигурации.
Зачем нужен регистр накопления?
И |
так, мы с вами подошли к одному из главных моментов разработки любой конфигурации - созданию механизма учета накопления данных.
Казалось бы, что все необходимое мы с вами уже создали: у нас есть что расходовать и приходовать (справочники) и у нас есть чем расходовать и приходовать (документы). Осталось только построить несколько отчетов и автоматизация OOO «На все руки мастер» будет закончена.
Однако это не так.
Во-первых, путем анализа документов можно, конечно, получить требуемые нам выходные данные, но представьте, что завтра OOO «На все руки мастер» решит немного изменить свои бизнес-процессы и нам потребуется ввести в конфигурацию еще один документ (или несколько документов!).
Например, сейчас мы полагаем, что товары поступают в OOO и затем расходуются. Руководство захотело усилить материальный контроль и решило приходовать товары на основной склад организации и затем выдавать их материально ответственным лицам. В этом случае нам придется добавить в конфигурацию еще один документ, который будет фиксировать перемещение материалов между основным складом и материально ответственными лицами. И очевидно, нам придется переработать все отчеты, которые были нами созданы к этому моменту, с тем, чтобы они учитывали изменения, вносимые новым документом. А представьте, если в нашей конфигурации не два, а двадцать документов?!
Во-вторых, отчеты, анализирующие документы, будут работать довольно медленно, что будет вызывать раздражение пользователей и недовольство руководителей.
Поэтому в системе 1С:Предприятие есть несколько объектов конфигурации, которые позволяют создавать в базе данных структуры, предназначенные для накопления информации в удобном для последующего анализа виде.
82
Быстрая разработка прикладных решений
Регистр накопления
Использование таких «хранилищ» данных позволяет нам с одной стороны накапливать в них данные, поставляемые различными документами (или другими объектами базы данных), а с другой стороны легко создавать нужные нам отчеты или использовать эти данные в алгоритмах работы конфигурации.
Объект конфигурации Регистр накопления
О |
бъект конфигурации Регистр накопления является прикладным объектом и предназначен для описания структуры накопления данных. На основе объекта конфигурации Регистр накопления платформа создает в базе данных информационную структуру, в которой будут накапливаться данные, «поставляемые» различными объектами базы данных. Эти данные будут храниться в регистре в виде отдельных записей, каждая из которых имеет одинаковую, заданную в конфигураторе, структуру.
Отличительной особенностью регистра накопления является то, что
он не предназначен для интерактивного редактирования
пользователем. Разработчик может, при необходимости, предоставить пользователю возможность редактировать регистр накопления, но предназначение регистра накопления заключается в том, чтобы его модификация производилась на основе алгоритмов работы других объектов базы данных (не обязательно документов, как в версии 7.7), а не в результате непосредственных действий пользователя.
В конфигурации существует несколько объектов, называемых регистрами, для описания подобных «хранилищ». Сейчас мы рассмотрим один из них.