Підлеглі довідники

"СумаДокумента" (тип довжина 15, точність 2).

Визначимо одну табличну частину «Товари», її склад:

Кількість (тип довжина 10, точність 0);

Ціна (тип довжина 10, точність 2);

Сума (тип довжина 10, точність 2).

Малюнок

Малюнок 2.38 Формування форми документа.

Створіть форму списку, додавши до форми за умовчанням «Контрагент», «СумаДокумента» та форму документа. Під час формування форми документа реквізит «СумаДокумента» зробимо написом (Малюнок 2.38).

Отримана форма мало «радувати» користувача своєю функціональністю. Вважається вже правилом гарного тону, щоб при виборі з довідника номенклатурної позиції автоматично переносилася ціна в документ (якщо така можливість є), а після проставлення кількості розраховувалася загальна сума за позицію. Крім цього, перелік контактних осіб, що обираються, повинен визначатися обраним контрагентом тощо.

Спочатку розберемося з контактними особами.

У якості «ЗвязкиПараметрівВибору» для елемента діалогу «Контактна Особа» у формі документа встановіть значення «Контрагент» (Малюнок 2.39).

табличної частини

Малюнок 2.39 Вибір зв'язку

Встановлення цієї властивості дозволить користувачеві після вибору контрагента вибирати контактну особу зі списку тільки цього контрагента.

У результаті форма документа буде виглядати так (Малюнок 2.40).

підлеглі

Малюнок 2.40 Форма документа

Для нашого завдання необхідно підставити ціну та розрахувати суми за рядком табличної частини.

У полі Номенклатура табличної частини Товари напишемо процедуру:

// Вставити вміст оброблювача.

Але для роботи цієї процедури необхідно написати додаткову функцію, яка виконуватиметься на сервері без контекстуформи (без даних форми), та повертати ЦінуПокупки:

Текст обробника події (потрібно прив'язати до поля «Кількість» табличної частини), який здійснює розрахунок суми рядка табличної частини:

Суму документа, наприклад, розрахуємо у процедурі «ПерерахунокСумиДокумента» на формі документа:

У модулі об'єкта замість нього (другий спосіб) запишемо процедуру:

Процедура ПередЗаписом (Відмова, РежимЗапису, РежимПроведення)

// Вставити вміст оброблювача.

Хотілося б відзначити, що ця подія (ПередЗаписом) можна «відпрацьовувати» як у модулі об'єкта, так і в модулі форми. В даному випадку краще використовувати обробник події, що міститься в модулі об'єкта (він буде виконуватися як при програмному записі об'єкта, так і при інтерактивному).

Зауважимо, що у нашому випадку загальна сума документа вважається лише після натискання кнопки «Записати» у формі документа. Якщо необхідно бачити суму табличної частини під час її заповнення, існує і третій спосіб:

У властивостях табличного поля «Товари» позначте прапорець «Підвал» (Малюнок 2.41):

Малюнок 2.41 Прапорець «Підвал» табличної частини

У властивостях стовпчика «Сума» повинен бути відзначений прапор «ВідображатиПодвоє» (Малюнок 2.42).

Малюнок 2.42 Відображення у підвалі

Для того щоб СумаДокументу відображалася в підвалі необхідно змінити ШляхКДанимПодвалу на Об'єкт.Товари.ПідсумокСума.

Малюнок 2.43. Шлях до даних підвалу.

Слід звернути увагу, що в реальних конфігураціях, обробників події навіть для такого простого документа має бути більше (для реалізації «захисту від дурня», перевірки наповненості реквізитів тощо). Наприклад, необхідно при зміні контрагента, захищати вибрану контактну особу. Для поля Контрагент напишемо процедуру: