Давайте начнем с создания документа "ПоступлениеТоваров" с табличной частью "СписокТоваров". В этой табличной части мы добавим три числовых реквизита: "Цена", "Сумма" и "Количество".
Теперь перейдем в форму документа, чтобы оценить результат:
Отлично, теперь давайте добавим подвал к табличной части "СписокТоваров", где будет рассчитываться общий итог. Для этого выполним следующие шаги:
- Откройте форму документа "ПоступлениеТоваров".
- Перейдите в режим дизайна формы.
- Выберите табличную часть "СписокТоваров".
- Перейдите во вкладку "Использование".
- Установите галочку напротив опции "Подвал".
Добавим в подвале расчет общей суммы и прочих итогов. Произведем следующие изменения:
-
Реквизит "Цена" в Подвале:
- Нажмите на реквизит "Цена" в табличной части.
- В тексте подвала укажите "Итого".
-
Реквизит "Сумма" в Подвале:
- Нажмите на реквизит "Сумма" в табличной части.
- Перейдите во вкладку "Использование".
- В разделе "Путь к данным подвала" выберите "Объект.СписокТоваров.ИтогСумма".
Теперь в подвале вашей формы документа должен отображаться итог по цене и общая сумма товаров. Когда пользователь добавляет или изменяет позиции в табличной части "СписокТоваров", эти итоговые значения будут автоматически обновляться.
Отлично, если вы хотите добавить автосуммирование для реквизита "Количество" при изменении, вставьте следующий код в событие "ПриИзменении" на клиенте:
&НаКлиенте
Процедура СписокТоваровКоличествоПриИзменении(Элемент)
Строка=Элементы.СписокТоваров.ТекущиеДанные;
Строка.Сумма=Строка.Количество*Строка.Цена;
КонецПроцедуры
Если вы хотите добавить автосуммирование для реквизита "Цена" при изменении, вставьте следующий код в событие "ПриИзменении" на клиенте:
&НаКлиенте
Процедура СписокТоваровЦенаПриИзменении(Элемент)
Строка=Элементы.СписокТоваров.ТекущиеДанные;
Строка.Сумма=Строка.Количество*Строка.Цена;
КонецПроцедуры
Чтобы автоматически рассчитать НДС, вставляем в сам документ реквизит с именем "НДС" и числовым значением. Располагаем его на форме по вашему усмотрению, добавляя заголовок, например, "В том числе НДС:". Применяем следующий код, внедряя надписи к цене и количеству:
Объект.НДС=Объект.СписокТоваров.Итог("Сумма")/120*20;
Вот так должно получиться:
&НаКлиенте
Процедура СписокТоваровКоличествоПриИзменении(Элемент)
Строка=Элементы.СписокТоваров.ТекущиеДанные;
Строка.Сумма=Строка.Количество*Строка.Цена;
Объект.НДС=Объект.СписокТоваров.Итог("Сумма")/120*20;
КонецПроцедуры
&НаКлиенте
Процедура СписокТоваровЦенаПриИзменении(Элемент)
Строка=Элементы.СписокТоваров.ТекущиеДанные;
Строка.Сумма=Строка.Количество*Строка.Цена;
Объект.НДС=Объект.СписокТоваров.Итог("Сумма")/120*20;
КонецПроцедуры
Как можно заметить, считает все хорошо:
Давайте усложним задачу и добавим функциональность, которая подсчитывает количество наименований в нашем списке товаров и выводит общую сумму прописью. Для этого раскроем "СписокТоваров" и переместим данные в командную панель:
Вносим необходимые изменения: переименовываем заголовок в "Всего наименований". Для отображения суммы прописью, используем "ИтогСумма". Заголовок "На сумму" изменяем, добавляем декоративную надпись "руб", объединяем все в группу. В результате получаем следующий итог:
Добавим "декорацию-надпись" на форму и назовем ее "пропись". Затем добавим следующий код к нашей цене и количеству при изменении:
Элементы.Пропись.Заголовок=ЧислоПрописью( Объект.СписокТоваров.Итог("Сумма"), "Л=ru_RU", "рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2"
Конечный код:
&НаКлиенте
Процедура СписокТоваровКоличествоПриИзменении(Элемент)
Строка=Элементы.СписокТоваров.ТекущиеДанные;
Строка.Сумма=Строка.Количество*Строка.Цена;
Объект.НДС=Объект.СписокТоваров.Итог("Сумма")/120*20;
Элементы.Пропись.Заголовок=ЧислоПрописью( Объект.СписокТоваров.Итог("Сумма"), "Л=ru_RU", "рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2");
КонецПроцедуры
&НаКлиенте
Процедура СписокТоваровЦенаПриИзменении(Элемент)
Строка=Элементы.СписокТоваров.ТекущиеДанные;
Строка.Сумма=Строка.Количество*Строка.Цена;
Объект.НДС=Объект.СписокТоваров.Итог("Сумма")/120*20;
Элементы.Пропись.Заголовок=ЧислоПрописью( Объект.СписокТоваров.Итог("Сумма"), "Л=ru_RU", "рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2");
КонецПроцедуры
Важное замечание. Чтобы все вычисления происходили и при открытии, необходимо также добавить тот же код в событие "ПриОткрытии":
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Объект.НДС=Объект.СписокТоваров.Итог("Сумма")/120*20;
Элементы.Пропись.Заголовок=ЧислоПрописью( Объект.СписокТоваров.Итог("Сумма"), "Л=ru_RU", "рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2");
КонецПроцедуры
Проверяем, и все считает и прописывает идеально: