Автоматизация ввода основных хозяйственных операций с помощью документов, страница 3

-  при вводе количества должна рассчитываться сумма.

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

2.1  Создать новый документ «ПоступлениеМатериалов». На закладке «Данные» создать реквизит «Поставщик» (в верхней части окна) и табличную часть «Материалы» с реквизитами «Материал», «Цена», «Количество», «Сумма» (в нижней части окна).

2.2   На закладке «Движения» выполнить настройки аналогично предыдущему документу. В «Конструкторе движения регистров» указать счета дебета и кредита, выбрать табличную часть и нажать кнопку «Заполнить выражения». В поле «Содержание» вписать содержание проводки (напр., "Поступил материал" – в кавычках!). В результате конструктор должен сформировать следующий текст:

Процедура ОбработкаПроведения(Отказ, Режим)

    //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ

    // Данный фрагмент построен конструктором.

    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

    Для Каждого ТекСтрокаМатериалы Из Материалы Цикл

           // регистр Основной

           Движение = Движения.Основной.Добавить();

           Движение.СчетДт = ПланыСчетов.Основной.Материалы;

           Движение.СчетКт = ПланыСчетов.Основной.Поставщики;

           Движение.Период = Дата;

           Движение.Сумма = ТекСтрокаМатериалы.Сумма;

           Движение.КоличествоДт = ТекСтрокаМатериалы.Количество;

           Движение.Содержание = "Поступил материал";

Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Материалы]=ТекСтрокаМатериалы.Материал;

           Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Поставщики] = Поставщик;

    КонецЦикла;

    //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ

КонецПроцедуры

2.3  На закладке «Формы» создать основную форму документа. Форма должна иметь примерно следующий вид:

2.4  Реализовать выполнение вспомогательных расчетов (цены и суммы). Для этого необходимо создать обработчики события «ПриИзменении» для полей ввода «Материал» и «Количество» (см. п. 1.6).

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

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

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

    СтрокаТабличнойЧасти.Цена = СтрокаТабличнойЧасти.Материал.Цена;

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

КонецПроцедуры

а для поля ввода «Количество»:

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

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

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

КонецПроцедуры

Фактически, второй обработчик отличается от первого только отсутствием одной строки текста (подстановка цены); сумма рассчитывается одинаково. Вообще, в подобных ситуациях рекомендуется использовать общие процедуры (типа «РасчетСуммыДокумента»), в которых и реализовывать часто повторяющиеся расчеты (аналогичный расчет может потребоваться не только в документе этого вида, но и в других), однако для простоты мы так поступать не будем.