1С сумма в табличной части документа

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

Это небольшое вычисление производится в модуле формы в процедуре, выполняющейся на клиенте. Такой процедурой являются обработчики события ПриИзменении полей Цена и Количество табличной части документа.

Итак, сначала нужно создать форму документа, чтобы в ней описать собственный алгоритм вычислений. Затем, открыв палитру свойств полей Цена и Количество табличной части документа, создать для них обработчики события ПриИзменении и внести в них следующий код:

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

Если процедура расчета суммы может понадобиться сразу для нескольких документов, то полезно разместить эту процедуру в общем модуле, и обращаться к ней из форм документов. Например, в общем модуле РаботаСДокументами поместить процедуру РассчитатьСумму():

В модуле формы документа вызывать ее из обработчиков события ПриИзменении:

Продолжаем изучать 1С сегодня напишем пару процедур, с помощью которых автоматически будет рассчитываться сумма в строке табличной части. И так это буде продолжение предыдущей статьи, в которой мы свами создавали новый документ. Если кто не читал советую для начал ознакомиться с ней.

Мы создали документ Приход товара. В котором есть дата прихода и Поставщик. В табличной части добавили четыре поля это Наименование, Количество, Цена и Сумма. Все вроде бы нормально но вот по логике нужно сделать так чтобы поле Сумма подсчитывалось автоматически. Этим вопросом сейчас и займемся.

Рассчитываем сумму в строке 1C 8

И так открываем конфигуратор заходим в созданный ранее документ и переходим на вкладку Формы. В ней нужно открыть и отредактировать Форма Документа кликаем на ней два раза или выбираем Карандашик.

Читайте также:  Смотреть как установить виндовс 10 с флешки

Теперь необходимо перейти в Модуль.

В окне модуля пишем небольшой код

Теперь немного поясню код который нужно написать.

&НаКлиенте — Это значить что вычисление будет происходить на компьютере пользователя, а не на сервере.

Процедура — Это собственно процедура)

МатериалыКоличествоПриИзменении — Это название нашей процедуры.

Строка — Это переменная

Элементы.Материалы.ТекущиеДанные — Этой строкой мы получаем данные строки.

Строка.Сумма=Строка.Количество*Строка.Цена — Это формула (Строка.Сумма, Строка.Количество, Строка.Цена этими строчками мы обращаемся к значениям которые находятся в таблице)

КонецПроцедуры — Это как вы уже догадались конец процедуры.

После чего запускаем отладку и проверяем. Для этого в документе вводим значения в поля Количество и Цена после чего сумма должна подставиться автоматически.

Вот вы и узнали, как рассчитать сумму в строке табличной части.

Скриншоты, опубликованные в данной статье, являются цитатами и иллюстрациями программного продукта «1C:Предприятие», авторское право на который принадлежит ЗАО 1С.

user1c
19.01.2011 02:58

Прочитано: 59966
В форме таблица СписокНоменклатуры с полями: Номенклатура, Количество, Цена, Сумма. Поле надписи СуммаПоДокументу, данные: Объект.СуммаПоДокументу
При расчете суммы по колонке "Сумма" в таблице формы использую следующий код (1С 8.2):

Все работает хорошо, но при добавлении копированием выбранной строки (F9) в первый случай копирования значение Объект.СуммаПоДокументу не обновляется. В дальнейшем расчет идет без данных этой строки. Последующее использование F9 (несколько раз) для любой строки вызывает пересчет за исключением бедной строки. При добавлении строки стандартным способом (ins) и вводе значений – расчет получается правильный. Если добавить копированием (F9) – опять появляется неучтенная в итогах сумма для новой строки.
Рассмотрел значения полей по шагам. В процедуру
Код 1C v 8.2 УП
Передается элемент с типом ТаблицаФормы с новой строкой с нулевыми значениями, установлено значение только в поле НомерСтроки:
Элемент.ТекущиеДанные.НомерСтроки

Вопрос знатокам: это глюк системы или можно обойтись другими программными средствами? Например отслеживать F9 и вызывать функцию РсчетСуммыПоДокументу()

Спасибо.

Yandex
Возможно, вас также заинтересует
bugor666
19.01.2011 08:40

Ответ № 1
Читайте также:  Ati mobility radeon hd 6370m
() user1c, конечно проще отследить F9. А при добавлении строки не копированием все работает?
E_Migachev
19.01.2011 09:41

Ответ № 2
() а если копировать через кнопочку – считает?
snfr1c
19.01.2011 10:45

Ответ № 3
(1) мне кажется необходимо добавить расчет итоговой суммы в процедуру ПриВыводеСтроки
user1c
19.01.2011 11:12

Ответ № 4
Повторюсь – проблема только при первом случае использования в таблице формы добавления строки копированием (при нажатии кнопки или F9 – одинаковый эффект). При последующем добавлении строки копированием считает все, кроме данных той строки, которая получилась при первом копировании. Если добавить строки обычным интерактивным способом (кнопка добавить или Ins) – считает правильно. Потом при добавлении строки копированием вся история с данными вновь полученной строки (только при первом добавлении) повторяется. Скорее всего – это глюк системы.
Как правильно рассчитать сумму по документу из табличной части, ведь пользователь может использовать добавление строки копированием?
user1c
19.01.2011 11:25

Ответ № 5
Для snfr1c:
Что такое процедура ПриВыводеСтроки?
Напомню:
1С 8.2. ТаблицаФормы. Отслеживаю изменения в:
Код 1C v 8.2 УП
Для ТаблицаФормы события:

Выбор (S_election)
ВыборЗначения (ValueChoice)
НачалоПеретаскивания (DragStart)
ОбработкаВыбора (ChoiceProcessing)
ОбработкаЗаписиНового (NewWriteProcessing)
ОкончаниеПеретаскивания (DragEnd)
ПередНачаломДобавления (BeforeAddRow)
ПередНачаломИзменения (BeforeRowChange)
ПередОкончаниемРедактирования (BeforeEditEnd)
ПередРазворачиванием (BeforeExpand)
ПередСворачиванием (BeforeCollapse)
ПередУдалением (BeforeDeleteRow)
Перетаскивание (Drag)
ПослеУдаления (AfterDeleteRow)
ПриАктивизацииПоля (OnActivateField)
ПриАктивизацииСтроки (OnActivateRow)
ПриАктивизацииЯчейки (OnActivateCell)
ПриИзменении (OnChange)
ПриНачалеРедактирования (OnStartEdit)
ПриОкончанииРедактирования (OnEditEnd)
ПриСменеТекущегоРодителя (OnCurrentParentChange)
ПроверкаПеретаскивания (DragCheck)

Синтаксис-помошник вам в помощь!
Если у Вас своя процедура – поделитесь, пожалуйста.
Спасибо.

snfr1c
19.01.2011 13:24

Ответ № 6
прошу прощения опечатался процедура "ПриВыводеСтроки" находится в поле ТабличноеПоле в разделе "события". она как раз этим и занимается – пересчетом и перерисовкой значений итоговых сумм в таблице
snfr1c
19.01.2011 13:26

Ответ № 7
также можно добавить РасчетСуммыПоДокументу() в процедуры СписокНоменклатурыКоличествоПриИзменении(Элемент)
СписокНоменклатурыЦенаПриИзменении(Элемент)
snfr1c
19.01.2011 13:44

Ответ № 8
вот пример:
Код 1C v 8.х
user1c
19.01.2011 14:42

Ответ № 9
Для snfr1c:
Спасибо, не получается. 1С 8.2. У Вас пример для 8.1. Не смог сделать.

Читайте также:  Как поговорить с оператором теле2 напрямую бесплатно

Разбирал глюки системы:
В табличном поле установим флаг «Подвал».
В 1С 8.0 в табличном поле для колонки можно было установить флаг «Показывать итог в подвале». В 1С 8.2 такого нет. Приходится указывать для реквизита «СписокНоменклатурыСумма» путь к данным подвала «Объект.СписокНоменклатуры.ИтогСумма». Для наглядности в окне редактирования формы в правом верхнем углу (в окне реквизитов формы) раскроем основной реквизит формы «Объект», потом раскроем «СписокНоменклатуры». Мышкой «схватим» элемент «ИтогСумма» и перетащим в окно элементов формы (левая верхняя часть окна редактирования формы). Получим поле надписи «СписокНоменклатурыИтогСумма», а на форме надпись «Сумма (итог):». При этом, остается пустым свойство «Заголовок» поля надписи «СписокНоменклатурыИтогСумма».

Для устойчивости добавим процедуру:

В результате на форме отображаются два поля надписи:
«Сумма по документу»,
«Сумма (итог):».
При изменении данных в таблице происходит пересчет суммы, отображаются одинаковые данные. Но если добавить новый элемент копированием текущего (кнопкой или F9), то в подвале таблицы и в поле «Сумма (итог):» отображаются правильные данные, а в поле «Сумма по документу» – нет.
Не получается получить значение (текст) из Элементы.СписокНоменклатурыИтогСумма.

ПОМОГИТЕ правильно рассчитать сумму документа!
Спасибо.

user1c
19.01.2011 14:54

Ответ № 10
Напомню: управляемая форма 1С 8.2, внешний вид:
Скачивать файлы может только зарегистрированный пользователь!
user1c
19.01.2011 15:38

Ответ № 11
В результате долгих мучений сам нашел правильное решение.
Да, в 1С 8.2 пока есть глюк с расчетом при копировании текущего элемента (кнопкой или F9). С этим надо смириться и учитывать при работе.
Решение проблемы:
На форме не показывать поле из объекта, рассчитываемое суммированием записей таблицы, например для документа «ПриходнаяНакладная» реквизит «СуммаПоДокументу», а показывать поле надписи «СписокНоменклатурыИтогСумма» (выше подробно описал, как его отобразить).
Отслеживаем событие для формы «ПередЗаписью»:
Код 1C v 8.2 УП

Для дальнейших расчетов в документе «ПриходнаяНакладная» реквизит «СуммаПоДокументу» будет показывать правильное значение.

Добавить комментарий

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

Adblock detector