Найти тему
1С: Программирование

Урок 44. Автоподсчет суммы в табличной части документа

Доброго времени суток.

Сегодня поработаем с документом, а именно с его табличной частью.

Очень часто на предприятиях возникает необходимость в том, чтобы вести учет товаров, приходящих и уходящих, а соответственно и суммы, которые приходят или уходят за количество единиц этого товара.

Мы сделаем так, чтобы при введении в столбец "Количество" и столбец "Цена" происходил автоматический подсчет суммы этой строки.

Работать это будет так:

  • как только начинает вводиться в столбец "Количество" какое-то значение, так сразу же начинает происходить подсчет суммы;
  • как только начинает вводиться в столбец "Количество" какое-то значение, так сразу же начинает происходить подсчет суммы.

В понимании платформы это звучит так; как только пользователь начинает изменять столбец "Количество" или "Цена", так сразу считается сумма автоматически. Происходит срабатывание события "ПриИзменении".

Столбец "Сумма" считается следующим образом:

Сумма = Количество * Цена.

Математические считается это именно так. А в понимании платформы нужно еще сначала обратиться к этим столбцам и потом только их перемножать.

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

Обращение к табличной части происходит следующим образом:

Строка = Элементы.Товары.ТекущиеДанные;

Обращение к самим столбцам происходит так, где уже происходит подсчет суммы:

Строка.Сумма = Строка.Количество * Строка.Цена;

Весь код прописывается всегда в модуле. Так как мы работаем с табличной частью, то соответственно использовать нужно модуль формы этого объекта.

Давайте откроем форму документа "РасходДенег" и посмотрим на то, как называется табличная часть (Рисунок 1).

Рисунок 1 - Товары
Рисунок 1 - Товары

Табличная часть называется "Товары" и именно поэтому мы обращаемся так, как было описано выше.

Мы уже знаем, что сумма должна считаться при изменении столбца "Количество" или столбца "Цена".

Давайте выделим столбец "Количество", найдем событие "ПриИзменении" и создадим процедуру на клиенте. Откроется модуль формы (Рисунок 2).

Рисунок 2 - Модуль формы
Рисунок 2 - Модуль формы

Тут необходимо убрать зеленую строку (закомментированная строка) и вместо нее написать то, что мы писали выше: сначала обращение к табличной части, а затем уже обращение к самим столбцам и подсчет суммы (Рисунок 3).

Рисунок 3 - Количество "ПриИзменении"
Рисунок 3 - Количество "ПриИзменении"

Нажмем на кнопку проверки на синтаксические ошибки, их не должно быть. Запустим пользовательский режим, откроем документ и создадим новый документ. В табличной части выберем товар, укажем количество и цену, но ничего не произойдет. Нужно теперь изменить количество и сумма посчитается. Как только изменяете количество, так считается сумма, а до этого столбец цена был пустым и поэтому оно ничего не считало. Все работает (Рисунок 4)!

Рисунок 4 - Сумма при изменении количества
Рисунок 4 - Сумма при изменении количества

Теперь необходимо сделать так, чтобы и при изменении цены считалась сумма.

Все делается точно так же.

Заходим в режим разработчика и находим столбец "Цена", находим событие "ПриИзменении" и создаем процедуру на клиенте (Рисунок 5).

Рисунок 5 - Создание процедуры
Рисунок 5 - Создание процедуры

Берем из первой процедуры внутреннюю часть и копируем ее во вторую процедуру. Все точно также. При изменении цены будет происходить перемножение тех же самых столбцов, а значит новый код писать ненужно (Рисунок 6).

Рисунок 7 - Цена "ПриИзменении"
Рисунок 7 - Цена "ПриИзменении"

Нажмем на кнопку проверки, ошибок нет. Запустим пользовательский режим и проверим изменения. При изменении количества и цены должен происходить подсчет суммы строки (Рисунок 7).

Рисунок 7 - Сумма при изменении количества и цены
Рисунок 7 - Сумма при изменении количества и цены

Все работает.

Когда написано много программного кода это не очень хорошо, так как каждая строка такого кода занимает место в памяти. Чем больше кода, тем больше занимает программа места.

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

Укорачивать будем следующим образом:

1. Один раз пишем вызов табличной части и подсчет суммы в какой-то процедуре.

2. Создаем две процедуры. При изменении количества и при изменении цены

3. Из процедур изменения вызываем первую процедуру, в которой у нас вызвана табличная часть и подсчет суммы.

Давайте теперь только это сделаем в другом документе, чтобы совсем не запутаться.

Откроем форму документа "РасходнаяНакладная" (Рисунок 8).

Рисунок 8 - Форма документа
Рисунок 8 - Форма документа
Если формы документа нет, то ее необходимо создать и потом можно будет на нее зайти.

Создадим две процедуры при изменении на клиенте (Рисунок 9 - 10).

Рисунок 9 - Количество
Рисунок 9 - Количество
Рисунок 10 - Цена
Рисунок 10 - Цена

В итоге модуль формы будет выглядеть следующим образом (Рисунок 11).

Рисунок 11 - Модуль формы
Рисунок 11 - Модуль формы

Создали две процедуры при изменении. Теперь необходимо создать третью процедуру, которая будет содержать в себе код обращения к табличной части и подсчет суммы.

Он будет таким же, как и в предыдущем случае. Отличаться может лишь то, как будет названа сама табличная часть. А называется она "УходТовара" (Рисунок 12).

Рисунок 12 - Табличная часть
Рисунок 12 - Табличная часть

Соответственно мы должны изменить название и код будет следующим:

Строка = Элементы.УходТовара.ТекущиеДанные;

Строка.Сумма = Строка.Количество * Строка.Цена;

Создадим теперь в модуле процедуру "РассчитатьСумму" и вставим в нее этот код (Рисунок 13).

Рисунок 13 - Создание процедуры "РассчитатьСумму"
Рисунок 13 - Создание процедуры "РассчитатьСумму"

Теперь нам необходимо из двух оставшихся процедур обратиться к основной процедуре. Основная процедура называется "РассчитатьСумму". Значит в двух оставшихся процедурах мы должны указать имя этой процедуры и поставить в конце точку с запятой (Рисунок 14).

Рисунок 14 - Обращение к основной процедуре
Рисунок 14 - Обращение к основной процедуре

Проверим на синтаксические ошибки и запустим пользовательский режим. Все работает (Рисунок 15).

Рисунок 15 - Автоподсчет
Рисунок 15 - Автоподсчет

Таким образом мы не только создали процедуры по подсчету суммы в строке табличной части, но и попробовали еще этот код оптимизировать, но так чтобы он работал.

Данный случай программного кода подходит только для этого документа. Но что делать, если таких документов несколько десятков и во всех у них нужно прописывать этот код?

Это становится неудобным!!!

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

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

Для этого используются общие модули!

Общий модуль - это модуль, к которому можно обратиться с других объектов.

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

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

Всем спасибо.

Задать вопросы, которые у вас возникли вы можете, написав комментарий или вступить в группу и задать там свой вопрос, а так же можно на канале нажать кнопку "Написать сообщение".

Ссылка для вступления телеграм-канал - t.me.Apiscourses

Подписаться в группу ВКонтакте

Или написать на электронную почту - awesome.razrab@yandex.ru

Прошлые уроки:

Введение Урок 1 Урок 2 Урок 3 Урок 4 Урок 5 Урок 6 Урок 7 Урок 8 Урок 9 Урок 10 Урок 11 Урок 12 Урок 13 Урок 14 Урок 15 Урок 16 Урок 17 Урок 18 Урок 19 Урок 20 Урок 21 Урок 22 Урок 23 Урок 24 Урок 25 Урок 26 Урок 27 Урок 28 Урок 29 Урок 30 Урок 31 Урок 32 Урок 33 Урок 34 Урок 35 Урок 36 Урок 37 Урок 38 Урок 39 Урок 40 Урок 41 Урок 42 Урок 43

На этом все. Жду Вас на следующем занятии.

P.S. Подписывайтесь на мой канал :-)

программирование программирование 1с 1с предприятие обучение онлайн обучение 1с