Имя: Пароль:
1C
 
Ошибка расчета суммы
, ,
0 Rokuske
 
28.11.22
14:37
&НаКлиенте
Процедура ИзменениеДанных(Элемент)
    СтрокаТабличнойЧасти = Элементы.ТекущиеДанные;
    СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Цена * СтрокаТабличнойЧасти.Количество;
    Объект.СуммаДокумента = СтрокаТабличнойЧасти.Итог("Сумма");
КонецПроцедуры

Ищу общую сумму для документа и для строки. Для строки работает все нормально а по столбцу считает неправильно каждый раз при изменении складывает старые значения с новыми
1 НафНаф
 
28.11.22
14:39
СтрокаТабличнойЧасти.Итог("Сумма") //как оно вообще работает?
2 Rokuske
 
28.11.22
14:42
(1) По табличной части суммирует столбец "Сумма"
3 НЕА123
 
28.11.22
14:46
(1)
хз
>СтрокаТабличнойЧасти = ЭлементЫ.ТекущиеДанные;
похоже СтрокаТабличнойЧасти это Таблица;
4 Rokuske
 
28.11.22
14:51
(3)
&НаКлиенте
Процедура ИзменениеДанных(Элемент)
    СтрокаТабличнойЧасти = Элемент.Услуги.ТекущиеДанные;
    СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Цена * СтрокаТабличнойЧасти.Количество;
    Объект.СуммаДокумента = СтрокаТабличнойЧасти.Итог("Сумма");
КонецПроцедуры

Исправил некоторое Указал на Таблицу и Написал Элементы а результат не изменился
5 arsik
 
гуру
28.11.22
14:56
Какой итог по строке? Тебе нужен итог по табличной части.
6 Rokuske
 
28.11.22
14:58
(5) ДА итог по табличной части, а под итогом по строке я имел в виду умножение цены на количество
7 crasler
 
28.11.22
15:00
(6) Объект.СуммаДокумента = Объект.Услуги.Итог("Сумма");
8 Rokuske
 
28.11.22
15:06
(7) Тот же результат. Прошлые значения и значения после изменения Количества или Цены складываются друг с другом
9 НЕА123
 
28.11.22
15:12
(0)
>Процедура ИзменениеДанных(Элемент)

на каком событии отрабатывает?
10 Rokuske
 
28.11.22
15:13
(9) Когда я в режиме предприятия в таблице документа меняю значение Цены или Количества
11 НЕА123
 
28.11.22
15:21
(10)
Элемент - какой тип?
в таблице Услуги элемент УслугиЦена обработчик события ПриИзменении в форме какой?
12 arsik
 
гуру
28.11.22
15:24
(8) Скорее всего у тебя еще какое то событие есть.
13 Мультук
 
гуру
28.11.22
15:24
(4)

//Вот тут строка это строка таблчной части, ибо есть обращения к колонками строки
СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Цена * СтрокаТабличнойЧасти.Количество;

//А вот тут она уже внезапно табличная часть, ибо у строки нет функции "Итог"
Объект.СуммаДокумента = СтрокаТабличнойЧасти.Итог("Сумма");

Сдается мне автор или не знает, либо гм "лукавит"

P.S.
Что там доктор Хаус по этому поводу говорил ?
14 программистище
 
28.11.22
15:24
посмотрите, может Объект.СуммаДокумента в модулях по событиям еще где-то складывается с чем-то
15 arsik
 
гуру
28.11.22
15:25
Вот на этой строчке "Объект.СуммаДокумента = Объект.Услуги.Итог("Сумма");" точку остановки сделай и посмотри чему у тебя после нее равен Объект.СуммаДокумента
16 ass1c
 
28.11.22
15:26
(0) Обычно нет необходимости считать сумму документа каждый раз при изменении строк табличной части. В типовых это делается один раз перед записью в процедуре модуля объекта

Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)

    СуммаДокумента = ПолучитьСуммуДокумента();

КонецПроцедуры

Функция ПолучитьСуммуДокумента() Экспорт //либо запросом получают либо как нибудь по простому Объект.Услуги.Итог("Сумма");
    
    Запрос = Новый Запрос("
    |ВЫБРАТЬ
    |    Товары.Номенклатура КАК Номенклатура,
    |    Товары.СуммаСНДС КАК СуммаСНДС
    |ПОМЕСТИТЬ
    |    Товары
    |ИЗ
    |    &Товары КАК Товары
    |;
    |ВЫБРАТЬ
    |    ЕСТЬNULL(СУММА(Товары.СуммаСНДС),0) КАК СуммаСНДС
    |ИЗ
    |    Товары КАК Товары
    |ГДЕ
    |    Товары.Номенклатура.ТипНоменклатуры <> ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.МногооборотнаяТара)
    |    ИЛИ НЕ &ВернутьМногооборотнуюТару
    |    ИЛИ &ТребуетсяЗалогЗаТару
    |");
    
    Запрос.УстановитьПараметр("Товары", Товары.Выгрузить(,"Номенклатура,СуммаСНДС"));
    Запрос.УстановитьПараметр("ВернутьМногооборотнуюТару", ВернутьМногооборотнуюТару);
    Запрос.УстановитьПараметр("ТребуетсяЗалогЗаТару", ТребуетсяЗалогЗаТару);
    
    Выгрузка = Запрос.Выполнить().Выгрузить();
    СуммаИтого = Выгрузка[0].СуммаСНДС;
    Возврат СуммаИтого;
    
КонецФункции
17 Rokuske
 
28.11.22
15:34
Понял спасибо
18 НафНаф
 
28.11.22
16:14
(16) ну и как смотреть сумму документа пока он не записан?
19 ass1c
 
28.11.22
16:48
(18) Функция "Функция ПолучитьСуммуДокумента() Экспорт" Экспортная, модуля объекта, возьми да и вызови в необходимом месте. Либо вообще просто напиши Объект.Товары.Итог("Сумма"). Считать её при изменении строки в 99,99% бред
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой