- Программирование в 1С 8.3 — за 21 день (День №1)
- Программирование в 1С 8.3 — за 21 день (День №2)
- Программирование в 1С 8.3 — за 21 день (День №3)
- Программирование в 1С 8.3 — за 21 день (День №4)
- Программирование в 1С 8.3 — за 21 день (День №5)
- Программирование в 1С 8.3 — за 21 день (День №6)
- Программирование в 1С 8.3 — за 21 день (День №7)
- Программирование в 1С 8.3 — за 21 день (День №8)
- Программирование в 1С 8.3 — за 21 день (День №9)
- Программирование в 1С 8.3 — за 21 день (День №10)
- Программирование в 1С 8.3 — за 21 день (День №11)
- Программирование в 1С 8.3 — за 21 день (День №12)
- Программирование в 1С 8.3 — за 21 день (День №13)
- Программирование в 1С 8.3 — за 21 день (День №14)
- Программирование в 1С 8.3 — за 21 день (День №15)
- Программирование в 1С 8.3 — за 21 день (День №16)
- Программирование в 1С 8.3 — за 21 день (День №17)
- Программирование в 1С 8.3 — за 21 день (День №18)
- Программирование в 1С 8.3 — за 21 день (День №19)
- Программирование в 1С 8.3 — за 21 день (День №20)
- Программирование в 1С 8.3 — за 21 день (День №21)
ДОМАШНЕЕ ЗАДАНИЕ №8
-При записи документа «Реализация товаров» сохраните общую сумму документа в реквизит «Сумма документа».
-Также необходимо выполнить проверку, что в документе «Реализация товаров» выбран контрагент, у которого указан флаг «Клиент».
Подсказка 1. Для проверки корректности заполнения реквизитов используйте событие ОбработкаПроверкиЗаполнения.
Подсказка 2. Чтобы получить значение реквизита обращайтесь через «точку». Например, Сообщить(Контрагент.ЭтоКлиент).
РЕШЕНИЕ ЗАДАНИЯ
0 / 0 / 0 Регистрация: 10.03.2015 Сообщений: 9 |
|
1 |
|
Рассчитать сумму ВСЕГО документа и поместить её на форму в виде реквизита28.05.2017, 14:34. Показов 15211. Ответов 8
Здравствуйте. Помогите, пожалуйста, рассчитать сумму ВСЕГО созданного документа и поместить её в виде реквизита на форму самого документа. Заранее благодарен. Миниатюры
0 |
iuo86 37 / 38 / 9 Регистрация: 30.10.2016 Сообщений: 130 |
||||||||||||
29.05.2017, 01:01 |
2 |
|||||||||||
Чтот я количества и суммы не вижу…Всего обычно в Подвал выводят. Добавлено через 8 минут
1 |
Модератор 3708 / 2905 / 572 Регистрация: 10.03.2011 Сообщений: 11,442 Записей в блоге: 1 |
|
29.05.2017, 03:00 |
3 |
ТекущиеДанные.Всего=ТекущиеДанные.Сумма; а зачем два раза нужна сумма то?
1 |
0 / 0 / 0 Регистрация: 10.03.2015 Сообщений: 9 |
|
29.05.2017, 06:56 [ТС] |
4 |
У меня нет количества. Этот вариант не подходит. Сумма выводится не в табличную часть, а просто в реквизит. Он неактивен, его нельзя менять. Посмотрите внимательно.
0 |
Tklwegsd 841 / 604 / 211 Регистрация: 24.07.2013 Сообщений: 2,101 |
||||
29.05.2017, 07:34 |
5 |
|||
Решение
Добавлено через 2 минуты
Мне для отчётов нужна именно сумма документа в реквизите. Для этого используются регистры.
Иначе — отчёты не видят этой суммы и выводят КАЖДУЮ операцию по документу по несколько раз. В запросе тоже можно посчитать сумму по документу, не используя для этого реквизит.
1 |
37 / 38 / 9 Регистрация: 30.10.2016 Сообщений: 130 |
|
29.05.2017, 08:41 |
6 |
Это я уже видимо засыпал когда писал
0 |
0 / 0 / 0 Регистрация: 10.03.2015 Сообщений: 9 |
|
29.05.2017, 08:59 [ТС] |
7 |
Да ладно, с кем не бывает Добавлено через 12 минут
0 |
0 / 0 / 0 Регистрация: 08.06.2016 Сообщений: 149 |
|
08.08.2019, 08:38 |
8 |
Как вывести в реквизите табличной части документа Цена в формате 0,00р в 1с 8.3.
0 |
1142 / 689 / 203 Регистрация: 22.04.2013 Сообщений: 5,158 Записей в блоге: 1 |
|
08.08.2019, 12:20 |
9 |
1. создать новую тему.
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
08.08.2019, 12:20 |
9 |
Не получается вывести итоговую сумму документа
Автор Dmitry Qwe, 10 июл 2017, 12:41
0 Пользователей и 1 гость просматривают эту тему.
Есть документ РасходнаяНакладная, на форме списка есть три реквизита Дата, Номер и Сумма, хочу сделать чтобы в реквизит Сумма записывалось значение из Табличной части Материалы поля Сумма(форма элемента).
Пытаюсь это сделать через вот этот код:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
СтрокаТабличнойЧасти = Элементы.Материалы.ТекущиеДанные;
СуммаДокумента = СтрокаТабличнойЧасти.Сумма;
КонецПроцедуры
Но получаю ошибку:
{Документ.ПриходнаяНакладная.Форма.ФормаДокумента.Форма(20)}: Значение не является значением объектного типа (Сумма)
СуммаДокумента = СтрокаТабличнойЧасти.Сумма;
Цитата: Dmitry Qwe от 10 июл 2017, 12:41
Есть документ РасходнаяНакладная, на форме списка есть три реквизита Дата, Номер и Сумма, хочу сделать чтобы в реквизит Сумма записывалось значение из Табличной части Материалы поля Сумма(форма элемента).Пытаюсь это сделать через вот этот код:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
СтрокаТабличнойЧасти = Элементы.Материалы.ТекущиеДанные;
СуммаДокумента = СтрокаТабличнойЧасти.Сумма;
КонецПроцедуры
Но получаю ошибку:
{Документ.ПриходнаяНакладная.Форма.ФормаДокумента.Форма(20)}: Значение не является значением объектного типа (Сумма)
СуммаДокумента = СтрокаТабличнойЧасти.Сумма;
Какие могут быть текущие данные при открытии? Правильно, никаких. Соответственно у вас СтрокаТабличнойЧасти вернет Неопределено
Вы если хотите записать значение поля, тогда делайте в модуле объекта перед записью, или при записи помещайте в Сумму документа необходимое значение.
Если сумма документа видна на форме, тогда необходимо еще и событие при изменении табличной части.
И почему туда пишется только сумма из одной строки? Наверное необходимо перебрать все строки табличной части и суммировать.
Это не мой мир, я здесь всего лишь гость.
Цитата: ryozo от 10 июл 2017, 13:42
Если сумма документа видна на форме, тогда необходимо еще и событие при изменении табличной части.
И почему туда пишется только сумма из одной строки? Наверное необходимо перебрать все строки табличной части и суммировать.
Вы не совсем поняли.
Вот есть у меня документ приходная накладная, там есть какой-то предмет с определенной суммой, которая записана в колонку Сумма. Мне нужно эту сумму перенести в форму списка(где отображаются все приходные накладные). Т.е в форме списка у меня будут занесены все документы (приходные накладные) у которых будет указано наименование. дата, номер и сумма(см. мой первый скриншот)
Norfolk,Как это не может быть никаких данных при открытии?Есть и это проведенный и записанный документ из которого я и пытаюсь получить данные из поля сумма для формы списка.
Пытаюсь сделать как вы говорили процедуру перед записью но не могу создать это событие
Чтобы создать процедуру ПередЗаписью нужно в модуле объекта (документа) кликнуть на панели инструментов на лупу (где список процедур, слева). В списке выбрать ПередЗаписью и появится процедура со всеми параметрами. На форме ПередЗаписью лучше не использовать.
Либо вручную в модуле набрать эту процедуру:
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
СуммаДокумента = 0;
Для Каждого Строка Из Материалы Цикл
СуммаДокумента = СуммаДокумента + Строка.Сумма;
КонецЦикла;
КонецПроцедуры
Можно еще использовать метод «Итого» у табличной части.
Это не мой мир, я здесь всего лишь гость.
ryozo,
Я не пытаюсь просуммировать все столбцы с суммой и вывести итог по этим столбцам, мне нужно чтобы в форме списка, по каждому документу указывалась их СУММА.
P.S. И всеравно нету процедуры перед записью
Цитата: Dmitry Qwe от 10 июл 2017, 14:11
ryozo,![]()
Я не пытаюсь просуммировать все столбцы с суммой и вывести итог по этим столбцам, мне нужно чтобы в форме списка, по каждому документу указывалась их СУММА.
P.S. И всеравно нету процедуры перед записью
Это Вы меня не поняли.
Вашу задачу можно решить двумя способами:
1) Динамический список, в котором просуммировать табличную часть Материалы документа и вывести.
2) Записывать СуммуДокумента в сам документ (что будет правильнее).
Я рассказываю как сделать вторым методом. Т.е. мы перед записью документа записываем сумму в реквизит шапки документа. Сумма уже готова и в список ее даже выводить не надо — нужно просто вывести колонку этого реквизита.
А процедура ПередЗаписью — это относится к объекту (документу) и присутствует только в модуле объекта. Форма списка это просто форма…. списка
Это не мой мир, я здесь всего лишь гость.
Воу, спасибо, все работает. Не понял только почему мы описываем это в модуле объекта, а не в модуле формы и почему «Строка»(в цикле) содержит все поля из формы списка…
Цитата: Dmitry Qwe от 10 июл 2017, 14:29
Воу, спасибо, все работает. Не понял только почему мы описываем это в модуле объекта, а не в модуле формы и почему «Строка»(в цикле) содержит все поля из формы списка…
В модуле объекта мы записывали реквизит «СуммаДокумента». Т.е. это реквизит документа, то он хранится в базе. Строка содержит данные табличной части документа. Необходимо научиться отличать структуру метаданных от представления этих данных. у документа есть реквизиты, есть табличные части. В форме документа мы можем эти данные вывести с помощью элементов поле, таблица и пр.
Документ «Приходная накладная» (и другие) описывается в дереве метаданных как структура данных, по «шаблону» которой мы будем хранить данные и эти данные обрабатывать. Далее по этому «шаблону» уже создаются элементы документов, это уже сами экземпляры документов, которые хранят данные. Модуль объект как раз относится к элементу (экземпляру) документа. Таким образом имея объект (а в модуль объекта мы можем попасть только при работе с самим объектом) мы можем обратиться ко всем его реквизитам и табличным частям. Но работаем мы только «внутри» одно объекта (элемента). Т.е. при каждой записи документа в табличной части «Материалы» будут только те строки, которые относятся к этому документу. Соответственно и реквизит СуммаДокумента относится только к этому документу.
Теперь про Форму списка. Это просто отображение всех элементов объекта метаданных документ «Приходная накладная». Т.е. в самом документе в шапке (это список реквизитов самого документа) есть номер, дата, суммадокумента, то мы их легко можем вывести.
Это не мой мир, я здесь всего лишь гость.
|
|||
malex18
28.08.17 — 17:05 |
Сделал документ.у документа есть реквизит «Сумма», и табличная часть.в которой также есть столбец «сумма».как сделать , чтобы итоговая сумма столбца табличной части записалась в реквизит документа? |
||
Кукурузина
1 — 28.08.17 — 17:07 |
Событие ИриИзменении ТЧ или поля сумма в ТЧ |
||
Лефмихалыч
2 — 28.08.17 — 17:07 |
ПередЗаписью |
||
spiller26
3 — 28.08.17 — 17:08 |
(0) Табличная часть |
||
malex18
4 — 28.08.17 — 17:21 |
(2) Я конечно новичок, но не пойму «ТабличнаяЧасть» как прописать. |
||
malex18
5 — 28.08.17 — 17:24 |
&НаКлиенте Ругается на неопределенность элемента «Товары» |
||
Бубр
6 — 28.08.17 — 17:24 |
(0) посмотри в любую типовую конфигурацию как у документов реквизит СуммаДокумента заполняется. |
||
malex18
7 — 28.08.17 — 17:27 |
Нет возможности посмотреть в типовые конфигурации. |
||
aleksonic
8 — 28.08.17 — 17:27 |
СтрокаТабличнойЧасти=Элементы.Товары.ТекущиеДанные; — Лишнее |
||
malex18
9 — 28.08.17 — 17:29 |
ну хорошо, без нее |
||
dezss
10 — 28.08.17 — 17:31 |
(9) ну так покажи чем тебе там ругается. |
||
Лефмихалыч
11 — 28.08.17 — 17:32 |
(5) ты имя табличной части не угадал, потому и ругается. Его надо не в интернетах смотреть, а в конфигураторе |
||
malex18
12 — 28.08.17 — 17:32 |
{Документ.РасходнаяНакладная.Форма.ФормаДокумента.Форма(16,15)}: Переменная не определена (Товары) |
||
malex18
13 — 28.08.17 — 17:34 |
Имя табличной части -«товары»))) |
||
aleksonic
14 — 28.08.17 — 17:34 |
Процедура ПередЗаписью |
||
malex18
15 — 28.08.17 — 17:36 |
все так.форма документа |
||
h-sp
16 — 28.08.17 — 17:38 |
(15) Объект.Товары привыкай уже |
||
Slypower
17 — 28.08.17 — 17:38 |
(13) назвать можно по разному, еще и с ошибками написать можно. Номенклатура может быть |
||
Heckfy
18 — 28.08.17 — 17:39 |
Объект.Сумма=Объект.Товары.Итог(«Сумма»);
|
||
malex18 19 — 28.08.17 — 17:39 |
(16) h-sp, ты лучший! |
Быстрый старт в Python для 1С Разработчиков | 1s-to-python.ru
Как рассчитать сумму табличной части документа 1с 8.3
Данная небольшая статья будет полезна тем кто только начал изучать 1С программирование. В ней я хочу рассказать о том как можно рассчитать сумму в табличной части документа по всем строкам и вывести её в отдельный реквизит на форме который будет называться «Сумма документа». На самом деле способов подсчета суммы ТЧ очень много. Можно даже вывести итог по колонке цена без написания кода.
Рекомендую прочитать следующие статьи, они будут очень полезны как начинающим так и опытным программистам и администраторам 1С.
Сортировка номенклатуры в любом типовом отчете
Как включить кнопку «Подробнее» в окне ошибки
Что делать если не отображается элемент на форме
Как узнать что было изменено в типовой конфигурации 1С
Как избавиться от ошибки (COMOбъект)
Как рассчитать сумму всех строкам табличной части
Допустим что у нас есть документ с табличной частью «Товары». И нам нужно знать итоговую сумму всех позиций. Для этого мы создали реквизит «Сумма документа» и хотим видеть там итог.
Для этого нужно создать процедуру и написать вот такой код.
&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
// Вставить содержимое обработчика.
Объект.СуммаДокумента = 0;
Для каждого СтрокаДокумента Из Объект.Товары Цикл
Объект.СуммаДокумента = Объект.СуммаДокумента + (СтрокаДокумента.Количество * СтрокаДокумента.Цена);
КонецЦикла;
КонецПроцедуры
Немного поясню код.
Объект.СуммаДокумента = 0; — Обнуляем значение.
СтрокаДокумента — Объявляем переменную.
Объект.Товары — Табличная часть нашего документа.
Объект.СуммаДокумента = Объект.СуммаДокумента + (СтрокаДокумента.Количество * СтрокаДокумента.Цена); — высчитываем итоговую сумму по каждой строке ТЧ и складываем.
Процедуру создаем в модуле формы.
После этого открываем документ и после нажатия «Записать» сумма документа посчитается автоматически.
Если добавить позиции в табличную часть или удалить то после сохранения сумма также пересчитается.
На мой взгляд это самый простой и самый оптимальный способ решения поставленной задачи с вычислением суммы табличной части документа.
Если вы считаете по другому обязательно напишите!
По просьбе бухгалтеров пишем шпаргалку об практичном способе суммирования документов в 1С.
Рассмотрим все на примере. Нужно вывести итоговую сумму всех реализаций в 1С за определенный период. Это возможно.
Откроем журнал Реализаций и установим необходимый период.
Следующим шагом выделяем любой документ обязательно в столбце Сумма.
Потом нажимаем комбинацию клавиш Ctrl+A, чтобы выделить все элементы.
Теперь нужно нажать кнопку М в верхней панели программы 1С.
И следом жмем на ярлык калькулятора, слева.
Результат выведен.
Точно таким же образом можно суммировать все или отдельные поля в документах, или документы в журналах. Выделить только нужные позиции можно с помощью зажатой кнопки Ctrl и левой кнопки мыши.
Приятной работы!
Уже более 10 000 компаний работают
в облачной 1С от 42Clouds
— Консультация по 1С Бесплатно!
— Поддержка 24/7 по техническим вопросам: в чате, по телефону, по почте
— Все типовые конфигурации онлайн, доступ через RDP, Remote App, Web
Многим разработчикам 1С полезно уметь автоматизировать определенные процессы, подстраивая их под требования заказчика. Например, можно настроить программу таким образом, чтобы сумма в таблицах вычислялась автоматически при редактировании данных в других блоках (количество, цена за единицу и т.д.).
Чтобы сделать что-то похожее, необходимо произвести несколько простых действий. В частности, открыть конфигуратор, открыть форму нужного документа.
Далее нужно создать обработчик события «ПриИзменении» для колонок «Цена» и «Количество». Это можно сделать двумя способами.
- Правой кнопкой мыши вызвать меню колонки и выбрать обработчик <ПриИзменении> во вкладке «События»:
- Создать обработчик в свойствах (нажать на лупу возле обработчика «ПриИзменении»)
После этого нужно выбрать подходящую директиву выполнения обработки. В данном случае «На клиенте»:
Откроется модуль формы с созданным обработчиком:
Далее требуется вписать следующий программный код:
&НаКлиенте
Процедура ТоварыКоличествоПриИзменении(Элемент)
СтрокаТабличнойЧасти = Элементы.Товары.ТекущиеДанные;
СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Количество*СтрокаТабличнойЧасти.Цена;
КонецПроцедуры
То же самое нужно сделать и для колонки «Цена».
&НаКлиенте
Процедура ТоварыЦенаПриИзменении(Элемент)
СтрокаТабличнойЧасти = Элементы.Товары.ТекущиеДанные;
СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Количество*СтрокаТабличнойЧасти.Цена;
КонецПроцедуры
В переменную «СтрокаТабличнойЧасти» помещается текущая выделенная строка в табличной части (в которой меняется количество или цена товара). Для подсчета суммы необходимо обратиться к нужным реквизитам объекта («Количество» и «Цена») и перемножить их значения. Результат поместить в реквизит «Сумма».
Если данный процесс автоматического расчета нужен сразу для нескольких документов, можно внести вышеуказанный код в общий модуль. Например, процедуру «РассчитатьСумму» поместить в модуль «РаботаСДокументами». Если в модуле будут только функции, выполняемые на клиенте (обработки событий, связанные только с элементами формы), то в свойствах общего модуля нужно отметить «Клиент», чтобы к модулю можно было обратиться из функций с директивой «&НаКлиенте».
После имени процедуры «РассчитатьСумму» необходимо добавить «Экспорт», чтобы процедуру можно было вызвать из формы документа.
Данный код выглядит так:
Процедура РассчитатьСумму(СтрокаТабличнойЧасти) Экспорт
СтрокаТабличнойЧасти.Сумма =
СтрокаТабличнойЧасти.Количество*СтрокаТабличнойЧасти.Цена;
КонецПроцедуры
Затем в модуле формы нужного документа следует создать обработчик события под названием «ПриИзменении» для колонок «Количество» и «Цена», и вызвать процедуру «РассчитатьСумму» из общего модуля.
&НаКлиенте
Процедура ТоварыКоличествоПриИзменении(Элемент)
СтрокаТабличнойЧасти = Элементы.Товары.ТекущиеДанные;
РаботаСДокументами.РассчитатьСумму(СтрокаТабличнойЧасти);
КонецПроцедуры
&НаКлиенте
Процедура ТоварыЦенаПриИзменении(Элемент)
СтрокаТабличнойЧасти = Элементы.Материалы.ТекущиеДанные;
РаботаСДокументами.РассчитатьСумму(СтрокаТабличнойЧасти);
КонецПроцедуры
Теперь необходимый процесс успешно автоматизирован.