СтрокаТабличнойЧасти.Количество).

Теперь посмотрим, как это работает. В окне программы откроем список документов «ПриходнаяНакладная» и откроем любой из двух созданных нами документов. Если теперь вы поменяете количество в любой строке документа, то сумма в строке будет пересчитана автоматически.

Замечательно. Но теперь хотелось бы и для поля «Цена» сделать то же самое. А если заглянуть вперед, то мы увидим, что подобное автоматическое заполнение поля «Сумма» может нам понадобиться и в других документах. Поэтому лучше будет поместить расчет суммы в


некотором «общедоступном» месте, чтобы разные документы, имеющие аналогичные реквизиты табличной части, могли использовать этот алгоритм.

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

Создание процедуры обработки события в общем модуле

Д

ля того чтобы алгоритм, выполняемый при обработке события, был доступен для разных документов, мы создадим общий модуль и перенесем в него нашу процедуру расчета суммы. А в документе просто оставим вызовы этой процедуры из общего модуля.

Создадим объект конфигурации Общий модуль в ветке Общие | Общие модулии назовем его «РаботаСДокументами». Он будет содержать следующий текст:

Процедура РассчитатьСумлц^СтрокаТабличнойЧасти) Экспорт

СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Количество

* СтрокаТабличнойЧасти.Цена; КонецПроцедуры

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

Затем в модуле нашей формы изменим текст нашего обработчика:

Процедура МатериалыКоличествоПриИзменении(Элемент)

СтрокаТабличнойЧасти = ЭлементыФормы.Материалы

.ТекущиеДанные;

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

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


77


Быстрая разработка прикладных решений


Документ


 


               
 
 
   
   
   
 
 

т

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

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

«" Узнай больше!

Согласно стандартам разработки фирмы «1С», у каждого события должен быть свой обработчик. Если одинаковые действия должны выполняться при изменении разных элементов управления (например, при нажатии нескольких кнопок), то в этом случае следует поступать следующим образом:

- создается отдельная процедура (функция), выполняющая
необходимые действия;

- для каждого элемента управления создается отдельный
обработчик с именем, назначаемым no умолчанию;

- из каждого обработчика вызывается требуемая процедура
(функция).

Поэтому мы создадим обработчик события «При изменении» для поля ввода, которое расположено в колонке «Цена» и повторим в нем вызов процедуры «РассчитатьСумму» из общего модуля:

ПроцедураМатериалыЦенаПриИзменении(Элемент)

СтрокаТабличнойЧасти = ЭлементыФормы.Материалы

.ТекущиеДанные;

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

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


Создание документа ОказаниеУслуги

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

создать новый объект конфигурации Документ «ОказаниеУслуги» с реквизитами:

• «Склад», тип СправочникСсылка.Склады,

• «Клиент», тип СправочникСсылка.Клиенты,

• «Мастер», тип СправочникСсылка.Сотрудники,

документа

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

• «Номенклатура», тип
СправочникСсылка.Номенклатура,

• «Количество», тип Число,длина 15, точность 3,
неотрицательное,

• «Цена», тип Число,длина 15, точность 2,
неотрицательное,

• «Сумма», тип Число,длина 15, точность 2,
неотрицательное,

 

• создать основную форму документа,

• для полей ввода колонок «Количество» и «Цена» создать
обработчик события «ПриИзменении», в котором вызывать
процедуру «РассчитатьСумму» из общего модуля
«РаботаСДокументами».


 


78



Быстрая разработка прикладных решений


Документ


 


В результате документ «ОказаниеУслуги» будет выглядеть следующим образом:


Что нового мы узнали


 


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


- для чего предназначен объект конфигурации Документ - какими характерными особенностями обладает документ - для чего предназначены реквизиты и табличные части

документа

- какие существуют основные формы документа - что такое проведение документа - чем отличается оперативное проведение документа от

неоперативного

- что такое оперативная отметка времени - как создать объект конфигурации Документ и описать его

основную структуру

- как создать новый документ и заполнить его данными - как создать собственную форму документа - что такое конструктор форм - что такое элементы управления - что такое события и с чем они связаны - что такое обработчик события и как его создать - что такое модуль и для чего он нужен - зачем нужны общие модули

- как сделать процедуру доступной в разных модулях - как назначить обработчик события - что такое типообразующие объекты


80


Регистр накопления


Глава 4. Регистр накопления

В этой главе мы познакомимся с объектом конфигурации Регистр накопления. Вы узнаете, для чего используется этот объект, какой структурой он обладает и каковы его отличительные особенности.

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


Зачем нужен регистр накопления?

И

так, мы с вами подошли к одному из главных моментов разработки любой конфигурации - созданию механизма учета накопления данных.

Казалось бы, что все необходимое мы с вами уже создали: у нас есть что расходовать и приходовать (справочники) и у нас есть чем расходовать и приходовать (документы). Осталось только построить несколько отчетов и автоматизация OOO «На все руки мастер» будет закончена.

Однако это не так.

Во-первых, путем анализа документов можно, конечно, получить требуемые нам выходные данные, но представьте, что завтра OOO «На все руки мастер» решит немного изменить свои бизнес-процессы и нам потребуется ввести в конфигурацию еще один документ (или несколько документов!).

Например, сейчас мы полагаем, что товары поступают в OOO и затем расходуются. Руководство захотело усилить материальный контроль и решило приходовать товары на основной склад организации и затем выдавать их материально ответственным лицам. В этом случае нам придется добавить в конфигурацию еще один документ, который будет фиксировать перемещение материалов между основным складом и материально ответственными лицами. И очевидно, нам придется переработать все отчеты, которые были нами созданы к этому моменту, с тем, чтобы они учитывали изменения, вносимые новым документом. А представьте, если в нашей конфигурации не два, а двадцать документов?!

Во-вторых, отчеты, анализирующие документы, будут работать довольно медленно, что будет вызывать раздражение пользователей и недовольство руководителей.

Поэтому в системе 1С:Предприятие есть несколько объектов конфигурации, которые позволяют создавать в базе данных структуры, предназначенные для накопления информации в удобном для последующего анализа виде.


 


82



Быстрая разработка прикладных решений


Регистр накопления


 


Использование таких «хранилищ» данных позволяет нам с одной стороны накапливать в них данные, поставляемые различными документами (или другими объектами базы данных), а с другой стороны легко создавать нужные нам отчеты или использовать эти данные в алгоритмах работы конфигурации.


Объект конфигурации Регистр накопления

О

бъект конфигурации Регистр накопления является прикладным объектом и предназначен для описания структуры накопления данных. На основе объекта конфигурации Регистр накопления платформа создает в базе данных информационную структуру, в которой будут накапливаться данные, «поставляемые» различными объектами базы данных. Эти данные будут храниться в регистре в виде отдельных записей, каждая из которых имеет одинаковую, заданную в конфигураторе, структуру.

Отличительной особенностью регистра накопления является то, что
он не предназначен для интерактивного редактирования

пользователем. Разработчик может, при необходимости, предоставить пользователю возможность редактировать регистр накопления, но предназначение регистра накопления заключается в том, чтобы его модификация производилась на основе алгоритмов работы других объектов базы данных (не обязательно документов, как в версии 7.7), а не в результате непосредственных действий пользователя.


 


В конфигурации существует несколько объектов, называемых регистрами, для описания подобных «хранилищ». Сейчас мы рассмотрим один из них.