- при вводе количества должна рассчитываться сумма.
Кроме того, предполагается, что пользователь не должен иметь возможности вручную менять значения этих реквизитов (цены и суммы). Изменять сумму нет необходимости (это произведение цены на количество), а запрет изменения цены связан с тем, что списание материалов со склада мы также будем производить по цене, указанной в справочнике. В «серьезных» конфигурациях себестоимость списываемых материалов, товаров и т.п. рассчитывается исходя из текущих суммовых и количественных остатков, однако даже алгоритм списания по средней себестоимости (не говоря уже о FIFO и LIFO) является чрезмерно сложным для реализации в рамках нашего задания.
2.1 Создать новый документ «ПоступлениеМатериалов». На закладке «Данные» создать реквизит «Поставщик» (в верхней части окна) и табличную часть «Материалы» с реквизитами «Материал», «Цена», «Количество», «Сумма» (в нижней части окна).
2.2 На закладке «Движения» выполнить настройки аналогично предыдущему документу. В «Конструкторе движения регистров» указать счета дебета и кредита, выбрать табличную часть и нажать кнопку «Заполнить выражения». В поле «Содержание» вписать содержание проводки (напр., "Поступил материал" – в кавычках!). В результате конструктор должен сформировать следующий текст:
Процедура ОбработкаПроведения(Отказ, Режим)
//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
Для Каждого ТекСтрокаМатериалы Из Материалы Цикл
// регистр Основной
Движение = Движения.Основной.Добавить();
Движение.СчетДт = ПланыСчетов.Основной.Материалы;
Движение.СчетКт = ПланыСчетов.Основной.Поставщики;
Движение.Период = Дата;
Движение.Сумма = ТекСтрокаМатериалы.Сумма;
Движение.КоличествоДт = ТекСтрокаМатериалы.Количество;
Движение.Содержание = "Поступил материал";
Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Материалы]=ТекСтрокаМатериалы.Материал;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Поставщики] = Поставщик;
КонецЦикла;
//}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры
2.3 На закладке «Формы» создать основную форму документа. Форма должна иметь примерно следующий вид:
2.4 Реализовать выполнение вспомогательных расчетов (цены и суммы). Для этого необходимо создать обработчики события «ПриИзменении» для полей ввода «Материал» и «Количество» (см. п. 1.6).
Обработчик для поля ввода «Материал» будет выглядеть следующим образом:
Процедура МатериалыМатериалПриИзменении(Элемент)
СтрокаТабличнойЧасти = ЭлементыФормы.Материалы.ТекущиеДанные;
СтрокаТабличнойЧасти.Цена = СтрокаТабличнойЧасти.Материал.Цена;
СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Цена * СтрокаТабличнойЧасти.Количество;
КонецПроцедуры
а для поля ввода «Количество»:
Процедура МатериалыКоличествоПриИзменении(Элемент)
СтрокаТабличнойЧасти = ЭлементыФормы.Материалы.ТекущиеДанные;
СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Цена * СтрокаТабличнойЧасти.Количество;
КонецПроцедуры
Фактически, второй обработчик отличается от первого только отсутствием одной строки текста (подстановка цены); сумма рассчитывается одинаково. Вообще, в подобных ситуациях рекомендуется использовать общие процедуры (типа «РасчетСуммыДокумента»), в которых и реализовывать часто повторяющиеся расчеты (аналогичный расчет может потребоваться не только в документе этого вида, но и в других), однако для простоты мы так поступать не будем.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.