Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 06:47

Не получается вывести итоговую сумму документа

Автор Dmitry Qwe, 10 июл 2017, 12:41

0 Пользователей и 1 гость просматривают эту тему.

Dmitry Qwe

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



Пытаюсь это сделать через вот этот код:

&НаКлиенте
Процедура ПриОткрытии(Отказ)
СтрокаТабличнойЧасти = Элементы.Материалы.ТекущиеДанные;
    СуммаДокумента = СтрокаТабличнойЧасти.Сумма;
КонецПроцедуры

Но получаю ошибку:
{Документ.ПриходнаяНакладная.Форма.ФормаДокумента.Форма(20)}: Значение не является значением объектного типа (Сумма)
    СуммаДокумента = СтрокаТабличнойЧасти.Сумма;

Norfolk

Цитата: Dmitry Qwe от 10 июл 2017, 12:41
Есть документ РасходнаяНакладная, на форме списка есть три реквизита Дата, Номер и Сумма, хочу сделать чтобы в реквизит Сумма записывалось значение из Табличной части Материалы поля Сумма(форма элемента).



Пытаюсь это сделать через вот этот код:

&НаКлиенте
Процедура ПриОткрытии(Отказ)
СтрокаТабличнойЧасти = Элементы.Материалы.ТекущиеДанные;
    СуммаДокумента = СтрокаТабличнойЧасти.Сумма;
КонецПроцедуры

Но получаю ошибку:
{Документ.ПриходнаяНакладная.Форма.ФормаДокумента.Форма(20)}: Значение не является значением объектного типа (Сумма)
    СуммаДокумента = СтрокаТабличнойЧасти.Сумма;
Какие могут быть текущие данные при открытии? Правильно, никаких. Соответственно у вас СтрокаТабличнойЧасти вернет Неопределено
Вы если хотите записать значение поля, тогда делайте в модуле объекта перед записью, или при записи помещайте в Сумму документа необходимое значение.

ryozo

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

Dmitry Qwe

Цитата: ryozo от 10 июл 2017, 13:42
Если сумма документа видна на форме, тогда необходимо еще и событие при изменении табличной части.
И почему туда пишется только сумма из одной строки? Наверное необходимо перебрать все строки табличной части и суммировать.

Вы не совсем поняли.
Вот есть у меня документ приходная накладная, там есть какой-то предмет с определенной суммой, которая записана в колонку Сумма. Мне нужно эту сумму перенести в форму списка(где отображаются все приходные накладные). Т.е в форме списка у меня будут занесены все документы (приходные накладные) у которых будет указано наименование. дата, номер и сумма(см. мой первый скриншот)

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

ryozo

Чтобы создать процедуру ПередЗаписью нужно в модуле объекта (документа) кликнуть на панели инструментов на лупу (где список процедур, слева). В списке выбрать ПередЗаписью и появится процедура со всеми параметрами. На форме ПередЗаписью лучше не использовать.
Либо вручную в модуле набрать эту процедуру:

Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
    СуммаДокумента = 0;
    Для Каждого Строка Из Материалы Цикл
        СуммаДокумента = СуммаДокумента + Строка.Сумма;
    КонецЦикла;
КонецПроцедуры


Можно еще использовать метод "Итого" у табличной части.

Dmitry Qwe

ryozo:D:D Я не пытаюсь просуммировать все столбцы с суммой и вывести итог по этим столбцам, мне нужно чтобы в форме списка, по каждому документу указывалась их СУММА.
P.S. И всеравно нету процедуры перед записью

ryozo

Цитата: Dmitry Qwe от 10 июл 2017, 14:11
ryozo:D:D Я не пытаюсь просуммировать все столбцы с суммой и вывести итог по этим столбцам, мне нужно чтобы в форме списка, по каждому документу указывалась их СУММА.
P.S. И всеравно нету процедуры перед записью


Это Вы меня не поняли.
Вашу задачу можно решить двумя способами:
1) Динамический список, в котором просуммировать табличную часть Материалы документа и вывести.
2) Записывать СуммуДокумента в сам документ (что будет правильнее).

Я рассказываю как сделать вторым методом. Т.е. мы перед записью документа записываем сумму в реквизит шапки документа. Сумма уже готова и в список ее даже выводить не надо - нужно просто вывести колонку этого реквизита.

А процедура ПередЗаписью - это относится к объекту (документу) и присутствует только в модуле объекта. Форма списка это просто форма.... списка :)

Dmitry Qwe

Воу, спасибо, все работает. Не понял только почему мы описываем это в модуле объекта, а не в модуле формы и почему "Строка"(в цикле) содержит все поля из формы списка...

ryozo

Цитата: Dmitry Qwe от 10 июл 2017, 14:29
Воу, спасибо, все работает. Не понял только почему мы описываем это в модуле объекта, а не в модуле формы и почему "Строка"(в цикле) содержит все поля из формы списка...

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

Теперь про Форму списка. Это просто отображение всех элементов объекта метаданных документ "Приходная накладная". Т.е. в самом документе в шапке (это список реквизитов самого документа) есть номер, дата, суммадокумента, то мы их легко можем вывести.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск