Книга: Разработка интерфейса прикладных решений на платформе "1С:Предприятие 8"
Назад: Резюме
Дальше: Первый вариант решения

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

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

В первом случае производится пересчет непосредственно данных формы без получения объекта, а при записи объекта из формы эти данные конвертируются в объект и записываются.

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

Когда же нужно помещать процедуру пересчета данных объекта в модуле формы, а когда в модуле объекта? Однозначного ответа тут нет. Решение зависит от конкретной задачи. Рассмотрим пример.

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

Рис. 4.73. Пересчет данных в документе при изменении клиента

Таким образом, в тот момент, когда пользователь изменит поле Клиент или поле ЦенаУслуги документа ОказаниеУслуги, поля СуммаСкидки и СуммаУслуги нужно рассчитать по описанному выше алгоритму.

Рассмотрим возможные варианты решения этой задачи.

Назад: Резюме
Дальше: Первый вариант решения