Расчет суммы и НДС в табличной части документа

24.11.23

Разработка - Работа с интерфейсом

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

Давайте начнем с создания документа "ПоступлениеТоваров" с табличной частью "СписокТоваров". В этой табличной части мы добавим три числовых реквизита: "Цена", "Сумма" и "Количество".

Теперь перейдем в форму документа, чтобы оценить результат:

 

 

Отлично, теперь давайте добавим подвал к табличной части "СписокТоваров", где будет рассчитываться общий итог. Для этого выполним следующие шаги:

  1. Откройте форму документа "ПоступлениеТоваров".
  2. Перейдите в режим дизайна формы.
  3. Выберите табличную часть "СписокТоваров".
  4. Перейдите во вкладку "Использование".
  5. Установите галочку напротив опции "Подвал".

 

Добавим в подвале расчет общей суммы и прочих итогов. Произведем следующие изменения:

  1. Реквизит "Цена" в Подвале:

    • Нажмите на реквизит "Цена" в табличной части.
    • В тексте подвала укажите "Итого".
  2. Реквизит "Сумма" в Подвале:

    • Нажмите на реквизит "Сумма" в табличной части.
    • Перейдите во вкладку "Использование".
    • В разделе "Путь к данным подвала" выберите "Объект.СписокТоваров.ИтогСумма".

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

Отлично, если вы хотите добавить автосуммирование для реквизита "Количество" при изменении, вставьте следующий код в событие "ПриИзменении" на клиенте:

&НаКлиенте
Процедура СписокТоваровКоличествоПриИзменении(Элемент)
	Строка=Элементы.СписокТоваров.ТекущиеДанные;
	Строка.Сумма=Строка.Количество*Строка.Цена;  
КонецПроцедуры

Если вы хотите добавить автосуммирование для реквизита "Цена" при изменении, вставьте следующий код в событие "ПриИзменении" на клиенте:

&НаКлиенте
Процедура СписокТоваровЦенаПриИзменении(Элемент)
Строка=Элементы.СписокТоваров.ТекущиеДанные;
Строка.Сумма=Строка.Количество*Строка.Цена; 	
КонецПроцедуры

 

Чтобы автоматически рассчитать НДС, вставляем в сам документ реквизит с именем "НДС" и числовым значением. Располагаем его на форме по вашему усмотрению, добавляя заголовок, например, "В том числе НДС:". Применяем следующий код, внедряя надписи к цене и количеству:
    

	Объект.НДС=Объект.СписокТоваров.Итог("Сумма")/120*20; 


Вот так должно получиться:

&НаКлиенте
Процедура СписокТоваровКоличествоПриИзменении(Элемент)
	Строка=Элементы.СписокТоваров.ТекущиеДанные;
	Строка.Сумма=Строка.Количество*Строка.Цена;  
	Объект.НДС=Объект.СписокТоваров.Итог("Сумма")/120*20; 
КонецПроцедуры


&НаКлиенте
Процедура СписокТоваровЦенаПриИзменении(Элемент)
    Строка=Элементы.СписокТоваров.ТекущиеДанные;
	Строка.Сумма=Строка.Количество*Строка.Цена; 
	Объект.НДС=Объект.СписокТоваров.Итог("Сумма")/120*20; 	
КонецПроцедуры


Как можно заметить, считает все хорошо:

 

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

 

 

Вносим необходимые изменения: переименовываем заголовок в "Всего наименований". Для отображения суммы прописью, используем "ИтогСумма". Заголовок "На сумму" изменяем, добавляем декоративную надпись "руб", объединяем все в группу. В результате получаем следующий итог:

 

 

Добавим "декорацию-надпись" на форму и назовем ее "пропись". Затем добавим следующий код к нашей цене и количеству при изменении:   

	Элементы.Пропись.Заголовок=ЧислоПрописью( Объект.СписокТоваров.Итог("Сумма"), "Л=ru_RU", "рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2"

 

Конечный код:

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


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

 

 

Важное замечание. Чтобы все вычисления происходили и при открытии, необходимо также добавить тот же код в событие "ПриОткрытии":
 

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

Проверяем, и все считает и прописывает идеально:

 

 

См. также

Работа с интерфейсом Рабочее место Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Богатый редактор картинок 1С предназначен для обработки изображений в режиме «Предприятие», с возможностью РИСОВАТЬ на них. Поддерживается работа как в обычных формах (толстый клиент) так и на управляемых формах (тонкий клиент). Обработка позволяет редактировать как картинки, хранимые в базе, так и графические файлы с диска на файловой системе. Помимо базовых функций (изменение размеров, преобразование формата, обрезание картинки, повороты и т.п.) – редактор имеет богатый набор инструментов для рисования. Доступна функция вставки изображения из буфера обмена. Объект может быть использован: на стороне клиента, на стороне сервера, из внешнего соединения. Обработка будет особенно полезна тем, кто вносит картинки в базу (изображения номенклатуры, фотографии физических лиц и т.п.). Функционал реализуется с использованием JavaScript и бесплатного ПО ImageMagick (без использования внешних компонент).

6000 руб.

16.01.2015    63362    44    59    

82

Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 1С:ERP Управление предприятием 2 Платные (руб)

Обработка предназначена для создания и управления дашбордами.

2400 руб.

29.06.2020    19182    26    6    

41

Работа с интерфейсом Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Редактор графов в 1С - внешний отчет, который формирует графы на основе таблицы значений, используя рисунки табличного документа. Есть возможность добавления, редактирования объектов графа и выгрузки результата в таблицу значений.

1500 руб.

06.10.2020    10495    7    7    

11

Работа с интерфейсом Программист Стажер Платформа 1С v8.3 Бесплатно (free)

Это инструкция по дизайну форм в среде 1С. Гайд охватывает рекомендации и стандарты для оптимизации пользовательского интерфейса. В гайде содержатся указания по использованию элементов интерфейса, включая как основные, так и продвинутые аспекты. Предоставляются также примеры и антипримеры для наглядного понимания принципов дизайна

20.08.2024    18790    mrXoxot    44    

126

Работа с интерфейсом Программист Платформа 1С v8.3 Бесплатно (free)

Пример простого и симпатичного прогресс-бара в динамическом списке, без картинок, используя редактирование запроса.

27.05.2024    8707    smielka    37    

102

Работа с интерфейсом Платформа 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 Бесплатно (free)

Добавьте новогоднего настроения! Расширение создает декорацию в виде гирлянды на некоторых формах объектов.

27.12.2023    16252    1085    elcoan    50    

118

Инструментарий разработчика Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Подходит для создания web-страниц для замены управляемых форм 1С, красивых отчетов, интерфейса мобильного приложения на платформе 1С и для простых страниц веб-сайтов.

2 стартмани

10.04.2023    12212    165    acces969    31    

124
Внимание! Тема закрыта. Добавлять сообщения в закрытую тему запрещено.
Отзывы
1. insurgut 208 26.11.23 21:01 Сейчас в теме
Есть только нюанс небольшой... округление...

СуммаНДС_Построчно = 0;
Для Каждого СтрокаТЧ Из Объект.СписокТоваров Цикл
     СуммаНДС_Построчно = СуммаНДС_Построчно + Окр(СтрокаТЧ.Сумма / 120 * 20, 2);
КонецЦикла;


...и вот СуммаНДС_Построчно не всегда равно Объект.СписокТоваров.Итог("Сумма") / 120 * 20
svezr; user2037836; artbear; user1854482; t278; +5 Ответить
Остальные комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. insurgut 208 26.11.23 21:01 Сейчас в теме
Есть только нюанс небольшой... округление...

СуммаНДС_Построчно = 0;
Для Каждого СтрокаТЧ Из Объект.СписокТоваров Цикл
     СуммаНДС_Построчно = СуммаНДС_Построчно + Окр(СтрокаТЧ.Сумма / 120 * 20, 2);
КонецЦикла;


...и вот СуммаНДС_Построчно не всегда равно Объект.СписокТоваров.Итог("Сумма") / 120 * 20
svezr; user2037836; artbear; user1854482; t278; +5 Ответить
2. jmw 61 29.11.23 11:41 Сейчас в теме
Есть ещё один ньюанс: ставка НДС не всегда равна 20%.
Ещё совсем недавно основная ставка НДС была 18%.
И кроме основной ещё есть льготная — 10%, а есть товары и услуги к которым НДС вообще не применяется…
Это всё нужно как-то учесть!
3. Starliner 06.12.23 13:35 Сейчас в теме
Да и код, который повторяется более 1 раза, лучше вытащить в процедуру
4. user1990108 21.12.23 15:32 Сейчас в теме
Подскажите, как вывести на печать реквизиты на форме "В том числе НДС", "Итого", "Всего наименований" и "Пропись"?
5. RandNoName 26.03.24 12:19 Сейчас в теме
Ой, как все правильно и понятно спасибо большое за статью
6. пользователь 26.03.24 12:42
Сообщение было скрыто модератором.
...
7. user2024152 26.03.24 12:51 Сейчас в теме
.  СериализаторXDTO.ЗаписатьXML (ЗаписьXML, ОбъектЗаказ); 
  
 Стр = Новый Структура; 
 Стр.Вставить ("типОбъекта", "ДокументОбъект.Заказ"); 
 Стр.Вставить ("СтрокаXML", ЗаписьXML.Закрыть()) ; 
 МассивОбъектов = Новый Массив; 
 МассивОбъектов.Добавить(Стр); 
  
 ХранилищеЗначений = Новый ХранилищеЗначения (МассивОбъектов, Новый СжатиеДанных (9)); 
  
 Попытка 
  Результат = Соединение.UpdateObject(ХранилищеЗначений); 
 Исключение 
  Сообщить(ОписаниеОшибки()); 
  Возврат Ложь; 
 КонецПопытки; 
  
 Возврат Результат; 
Конецфункции 
 
 
справочник 
 
Процедура ПриЗаписи(Отказ) 
 Обмен.ОбновитьДанныеИнженер(ЭтотОбъект); 
КонецПроцедуры 
 
 
общие команды 
 
&НаКлиенте 
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) 
 Обмен.ОбновитьДанные(); 
КонецПроцедуры  
Показать
8. пользователь 26.03.24 12:52
Сообщение было скрыто модератором.
...
9. пользователь 26.03.24 13:05
Сообщение было скрыто модератором.
...
Оставьте свое сообщение