В реальной работе прикладного решения часто возникает необходимость автоматизировать некоторые подсчеты согласно собственному алгоритму. Например, сделать так, чтобы сумма в строке табличной части документа автоматически вычислялась при изменении цены или количества в строке.
Это небольшое вычисление производится в модуле формы в процедуре, выполняющейся на клиенте. Такой процедурой являются обработчики события ПриИзменении полей Цена и Количество табличной части документа.
Итак, сначала нужно создать форму документа, чтобы в ней описать собственный алгоритм вычислений. Затем, открыв палитру свойств полей Цена и Количество табличной части документа, создать для них обработчики события ПриИзменении и внести в них следующий код:
&НаКлиенте Процедура МатериалыКоличествоПриИзменении(Элемент)
СтрокаТабличнойЧасти = Элементы.Материалы.ТекущиеДанные; СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Количество * СтрокаТабличнойЧасти.Цена;
КонецПроцедуры
&НаКлиенте Процедура МатериалыЦенаПриИзменении(Элемент)
СтрокаТабличнойЧасти = Элементы.Материалы.ТекущиеДанные; СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Количество * СтрокаТабличнойЧасти.Цена;
КонецПроцедуры
При выполнении этого кода в переменную СтрокаТабличнойЧасти помещается объект, содержащий данные текущей строки документа, которую требуется пересчитать. Получив этот объект, можно обратиться к данным конкретной колонки табличной части, указав имя колонки в качестве свойства объекта. Таким образом, во второй строке процедуры обработчика вычисляется значение колонки Сумма как произведение значений колонок Количество и Цена.
Если процедура расчета суммы может понадобиться сразу для нескольких документов, то полезно разместить эту процедуру в общем модуле, и обращаться к ней из форм документов. Например, в общем модуле РаботаСДокументами поместить процедуру РассчитатьСумму():
Процедура РассчитатьСумму(СтрокаТабличнойЧасти) Экспорт
СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Количество * СтрокаТабличнойЧасти.Цена;
КонецПроцедуры
В модуле формы документа вызывать ее из обработчиков события ПриИзменении:
&НаКлиенте Процедура МатериалыКоличествоПриИзменении(Элемент)
СтрокаТабличнойЧасти = Элементы.Материалы.ТекущиеДанные; РаботаСДокументами.РассчитатьСумму(СтрокаТабличнойЧасти);
КонецПроцедуры
&НаКлиенте Процедура МатериалыЦенаПриИзменении(Элемент)
СтрокаТабличнойЧасти = Элементы.Материалы.ТекущиеДанные; РаботаСДокументами.РассчитатьСумму(СтрокаТабличнойЧасти);
КонецПроцедуры
Как рассчитать сумму табличной части документа 1с 8.3
Данная небольшая статья будет полезна тем кто только начал изучать 1С программирование. В ней я хочу рассказать о том как можно рассчитать сумму в табличной части документа по всем строкам и вывести её в отдельный реквизит на форме который будет называться «Сумма документа». На самом деле способов подсчета суммы ТЧ очень много. Можно даже вывести итог по колонке цена без написания кода.
Рекомендую прочитать следующие статьи, они будут очень полезны как начинающим так и опытным программистам и администраторам 1С.
Сортировка номенклатуры в любом типовом отчете
Как включить кнопку «Подробнее» в окне ошибки
Что делать если не отображается элемент на форме
Как узнать что было изменено в типовой конфигурации 1С
Как избавиться от ошибки (COMOбъект)
Как рассчитать сумму всех строкам табличной части
Допустим что у нас есть документ с табличной частью «Товары». И нам нужно знать итоговую сумму всех позиций. Для этого мы создали реквизит «Сумма документа» и хотим видеть там итог.
Для этого нужно создать процедуру и написать вот такой код.
&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
// Вставить содержимое обработчика.
Объект.СуммаДокумента = 0;
Для каждого СтрокаДокумента Из Объект.Товары Цикл
Объект.СуммаДокумента = Объект.СуммаДокумента + (СтрокаДокумента.Количество * СтрокаДокумента.Цена);
КонецЦикла;
КонецПроцедуры
Немного поясню код.
Объект.СуммаДокумента = 0; — Обнуляем значение.
СтрокаДокумента — Объявляем переменную.
Объект.Товары — Табличная часть нашего документа.
Объект.СуммаДокумента = Объект.СуммаДокумента + (СтрокаДокумента.Количество * СтрокаДокумента.Цена); — высчитываем итоговую сумму по каждой строке ТЧ и складываем.
Процедуру создаем в модуле формы.
После этого открываем документ и после нажатия «Записать» сумма документа посчитается автоматически.
Если добавить позиции в табличную часть или удалить то после сохранения сумма также пересчитается.
На мой взгляд это самый простой и самый оптимальный способ решения поставленной задачи с вычислением суммы табличной части документа.
Если вы считаете по другому обязательно напишите!
Казалось бы обыденная операция в нашей жизни, умножить количество товара на сумму, чтобы получить общий итог по позиции товара, в 1С нужно запрограммировать. Программный код не сложен, но тем не менее это нужно сделать. Давайте с вами посмотрим на операции, которые необходимо выполнить и, собственно, на сам код.
Для начала создадим новую конфигурацию и откроем ее:
Предварительно подготовимся и добавим справочник “Номенклатура” в Справочнике:
Таким же образом добавляем “Приходную накладную”, но уже в разделе документы:
На вкладке “Данные”, в “Приходной накладной”, “Табличная часть” добавляем “Табличную часть” – “Материалы” и “Реквизиты табличной части”: материал, количество, цена, сумма:
При чем тип Материала у нас “СправочникСсылка.Номенклатура”, мы делали его ранее, а количество, цена, сумма у нас “Число” с длинной 10, с точностью 2, неотрицательное.
Чтобы было где писать код, нам нужно добавить “Форму Документа”. Нажимаем правой кнопкой мыши на формы и добавляем:
Нажимаем на “Готово”
Мы хотим, чтобы у нас считалась сумма во всех документах, поэтому переключимся и добавим в дереве конфигурации на вкладке “Общие” – “Общие модули” новый модуль. Назовем его “СуммаПоДокументу”, он будет у нас “Клиентский”
И в окне пишем код:
Процедура РассчитатьСумму(СтрокаТабличнойЧасти) Экспорт
СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Количество * СтрокаТабличнойЧасти.Цена;
КонецПроцедуры
Теперь идем в “Документы” – “ПриходнаяНакладная” – Формы – ФормаДокумента, в окне формы находим “МатериалыКоличество”, открываем “Свойства” – “События” – при изменении и нажимем на “лупу”. Соглашаемся “Создать на клиенте”, нажимем “ОК”
И пишем код:
&НаКлиенте
Процедура МатериалыКоличествоПриИзменении(Элемент)
СтрокаТабличнойЧасти = Элементы.Материалы.ТекущиеДанные;
СуммаПоДокументу.РассчитатьСумму(СтрокаТабличнойЧасти);
КонецПроцедуры
Тоже самое проделываем с “МатериалыСумма”, вставляем туда код:
&НаКлиенте
Процедура МатериалыЦенаПриИзменении(Элемент)
СтрокаТабличнойЧасти = Элементы.Материалы.ТекущиеДанные;
СуммаПоДокументу.РассчитатьСумму(СтрокаТабличнойЧасти);
КонецПроцедуры
Должно получится вот так:
Сохраняем через бочонок. Запускаем. Добавляем “Номенклатуру” – Один админ – Добавляем “Приходную накладную” – ставим количество и сумму и получаем:
Поделиться ссылкой:
По просьбе бухгалтеров пишем шпаргалку об практичном способе суммирования документов в 1С.
Рассмотрим все на примере. Нужно вывести итоговую сумму всех реализаций в 1С за определенный период. Это возможно.
Откроем журнал Реализаций и установим необходимый период.
Следующим шагом выделяем любой документ обязательно в столбце Сумма.
Потом нажимаем комбинацию клавиш Ctrl+A, чтобы выделить все элементы.
Теперь нужно нажать кнопку М в верхней панели программы 1С.
И следом жмем на ярлык калькулятора, слева.
Результат выведен.
Точно таким же образом можно суммировать все или отдельные поля в документах, или документы в журналах. Выделить только нужные позиции можно с помощью зажатой кнопки Ctrl и левой кнопки мыши.
Приятной работы!
Уже более 10 000 компаний работают
в облачной 1С от 42Clouds
— Консультация по 1С Бесплатно!
— Поддержка 24/7 по техническим вопросам: в чате, по телефону, по почте
— Все типовые конфигурации онлайн, доступ через RDP, Remote App, Web
Многим разработчикам 1С полезно уметь автоматизировать определенные процессы, подстраивая их под требования заказчика. Например, можно настроить программу таким образом, чтобы сумма в таблицах вычислялась автоматически при редактировании данных в других блоках (количество, цена за единицу и т.д.).
Чтобы сделать что-то похожее, необходимо произвести несколько простых действий. В частности, открыть конфигуратор, открыть форму нужного документа.
Далее нужно создать обработчик события «ПриИзменении» для колонок «Цена» и «Количество». Это можно сделать двумя способами.
- Правой кнопкой мыши вызвать меню колонки и выбрать обработчик <ПриИзменении> во вкладке «События»:
- Создать обработчик в свойствах (нажать на лупу возле обработчика «ПриИзменении»)
После этого нужно выбрать подходящую директиву выполнения обработки. В данном случае «На клиенте»:
Откроется модуль формы с созданным обработчиком:
Далее требуется вписать следующий программный код:
&НаКлиенте
Процедура ТоварыКоличествоПриИзменении(Элемент)
СтрокаТабличнойЧасти = Элементы.Товары.ТекущиеДанные;
СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Количество*СтрокаТабличнойЧасти.Цена;
КонецПроцедуры
То же самое нужно сделать и для колонки «Цена».
&НаКлиенте
Процедура ТоварыЦенаПриИзменении(Элемент)
СтрокаТабличнойЧасти = Элементы.Товары.ТекущиеДанные;
СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Количество*СтрокаТабличнойЧасти.Цена;
КонецПроцедуры
В переменную «СтрокаТабличнойЧасти» помещается текущая выделенная строка в табличной части (в которой меняется количество или цена товара). Для подсчета суммы необходимо обратиться к нужным реквизитам объекта («Количество» и «Цена») и перемножить их значения. Результат поместить в реквизит «Сумма».
Если данный процесс автоматического расчета нужен сразу для нескольких документов, можно внести вышеуказанный код в общий модуль. Например, процедуру «РассчитатьСумму» поместить в модуль «РаботаСДокументами». Если в модуле будут только функции, выполняемые на клиенте (обработки событий, связанные только с элементами формы), то в свойствах общего модуля нужно отметить «Клиент», чтобы к модулю можно было обратиться из функций с директивой «&НаКлиенте».
После имени процедуры «РассчитатьСумму» необходимо добавить «Экспорт», чтобы процедуру можно было вызвать из формы документа.
Данный код выглядит так:
Процедура РассчитатьСумму(СтрокаТабличнойЧасти) Экспорт
СтрокаТабличнойЧасти.Сумма =
СтрокаТабличнойЧасти.Количество*СтрокаТабличнойЧасти.Цена;
КонецПроцедуры
Затем в модуле формы нужного документа следует создать обработчик события под названием «ПриИзменении» для колонок «Количество» и «Цена», и вызвать процедуру «РассчитатьСумму» из общего модуля.
&НаКлиенте
Процедура ТоварыКоличествоПриИзменении(Элемент)
СтрокаТабличнойЧасти = Элементы.Товары.ТекущиеДанные;
РаботаСДокументами.РассчитатьСумму(СтрокаТабличнойЧасти);
КонецПроцедуры
&НаКлиенте
Процедура ТоварыЦенаПриИзменении(Элемент)
СтрокаТабличнойЧасти = Элементы.Материалы.ТекущиеДанные;
РаботаСДокументами.РассчитатьСумму(СтрокаТабличнойЧасти);
КонецПроцедуры
Теперь необходимый процесс успешно автоматизирован.