Имя: Пароль:
1C
 
Процедура или функция с указанным именем не определена (Итог)
0 Айрат_116
 
23.07.19
14:30
Здравствуйте. Скажите в чем ошибка? {Документ.ТН_ДефектнаяВедомость.МодульМенеджера(103,25)}: Процедура или функция с указанным именем не определена (Итог)
    об.Параметры.СуммаПР = <<?>>Итог(стрТЗПроводки.Сумма); (Проверка: Сервер)
    Для Каждого СТР Из Ссылка.Товары Цикл
        А = А + 1;
        об.Параметры.А     = "1." + Строка(А);
        об.Параметры.Номенклатура = СТР.Номенклатура;
        об.Параметры.ЕдиницаИзмерения = СТР.Номенклатура.ЕдиницаИзмерения;
        об.Параметры.Кол   = СТР.Количество;
        
        стрТЗПроводки = ТЗПроводки.Найти(СТР.Номенклатура, "Номенклатура");
        Если стрТЗПроводки = Неопределено Тогда
            об.Параметры.Сумма = 0;
        Иначе
            об.Параметры.Сумма = стрТЗПроводки.Сумма;
        КонецЕсли;
            об.Параметры.Цена = стрТЗПроводки.Сумма / СТР.Количество;
        ТабДок.Вывести(об);
    КонецЦикла;
    об  = Макет.ПолучитьОбласть("СуммаПР");
    
        об.Параметры.СуммаПР = Итог(стрТЗПроводки.Сумма);
1 mistеr
 
23.07.19
14:32
ТЗПроводки.Итог("Сумма");
2 Айрат_116
 
23.07.19
14:33
(1) Точно
3 Айрат_116
 
23.07.19
14:34
(1) Спасибо=)
4 Айрат_116
 
23.07.19
14:40
(1)Все равно ошибка(
5 Айрат_116
 
23.07.19
14:41
{Документ.ТН_ДефектнаяВедомость.МодульМенеджера(103)}: Метод объекта не обнаружен (Итог)
    об.Параметры.СуммаПР = стрТЗПроводки.Итог("Сумма");
6 piter3
 
23.07.19
14:41
Может стоит итог применять к тз,а к не строчке?
7 mistеr
 
23.07.19
14:42
Дальше сам
8 Cyberhawk
 
23.07.19
14:42
(6) Не, правильнее итог вообще не применять
9 Айрат_116
 
23.07.19
14:45
(8) Надо применить. У меня таблица Номенклатура - Сумма а после таблицы Итоговая Сумма прописью должна быть
10 Cyberhawk
 
23.07.19
14:46
(9) А, точно, уже не в цикле. Тогда да, используй Итог таблицы.
11 Айрат_116
 
23.07.19
14:47
(10) Итог("стрТЗПроводки.Сумма"); Так?
12 1Сергей
 
23.07.19
14:56
(11) ответ в (6)
13 pasha_d
 
23.07.19
14:56
Отладкой глянь на тип значения вот это - стрТЗПроводки
14 pasha_d
 
23.07.19
14:57
это скорее всего строка ТЗ, а не сама ТЗ
15 1Сергей
 
23.07.19
14:58
Блин, даже (1) не смог правильно скопипастить?
16 Фрэнки
 
23.07.19
14:59
он не копипастил
17 Айрат_116
 
23.07.19
15:04
(12) Да. Вот так получилось)
18 Айрат_116
 
23.07.19
15:04
ТЗПроводки.Итог("Сумма") вот так получилось
19 Айрат_116
 
23.07.19
15:04
Всем спасибо=)
20 Фрэнки
 
23.07.19
15:05
(18) но это не самый правильный способ, это если пытаться на будущее оценить, нужно ли делать так или нужно как-то сделать лучше
21 Фрэнки
 
23.07.19
15:06
Ниже попробую разъяснить это свое утверждение
22 1Сергей
 
23.07.19
15:07
(21) Давай-давай. Мне интересны твои доводы
23 Айрат_116
 
23.07.19
15:10
(20) А почему это не самый правильный способ?
24 Фрэнки
 
23.07.19
15:16
У нас в данном случае рассматривается вывод строк из Таблицы Значений в печатную форму (или в табличный документ).
Получается, что задана выборка из ТЗ и по завершению выборки надо отобразить подвал с суммой всех строк (умышленно избегаю слова "Итог")

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

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

---
Вот обрати внимание на выполнение отбора по условию и можно придумать случаи условий, когда ТЗПроводки.Итог("Сумма") не будет равняться СуммаСтрок
25 Айрат_116
 
23.07.19
15:26
(24) Щас попробую
26 Айрат_116
 
23.07.19
15:30
(24) Спасибо большое сработало)
27 Фрэнки
 
23.07.19
15:32
(26) подумать только, сам себе удивляюсь - с чего бы это оно сработало?! :-))))
28 Айрат_116
 
23.07.19
15:32
(27) =)
29 Фрэнки
 
23.07.19
15:38
(26) т.е. ты же видишь сейчас, что сейчас в твоем цикле выводится только Номенклатура из ТЧ Товары, а там в проводках может быть и что-то еще?
30 Айрат_116
 
23.07.19
16:01
(29) Нет там только номенклатура
31 Фрэнки
 
23.07.19
16:06
(30) Повезло. Но исходно пример написан таким образом, что в ТЗПроводки могут быть попасть общие данные из всех ТЧ документа :
одна ТЧ - Товары , другая ТЧ - Услуги
Собственно, именно поэтому делается поиск методом Найти, а не шлепают абсолютно все строки проводок подряд
32 1Сергей
 
23.07.19
16:09
(24) Ладно, уговорил. Так правильнее. И обращений к БД меньше :)
33 Фрэнки
 
23.07.19
16:11
И это мы еще ничего не говорим о том, что в исходной ТЧ Товары могут повторятся элементы Номенклатура в разных строках
А метод ТЗПроводки.Найти(СТР.Номенклатура, "Номенклатура") каждый раз выдаст одинаково. Тогда Итог будет меньше.
34 Айрат_116
 
23.07.19
16:16
(33) Сгруппировать тогда лучше?
35 Айрат_116
 
23.07.19
16:19
(33) А почему меньше? СуммаСтрок + каждую сумму номенклатуры плюсует и итог. даже если одинаковые они, он же должен +
36 Фрэнки
 
23.07.19
16:32
(34) А это на усмотрение разработчика. Вдруг по всем алгоритмам в твоем этом документе дублей номенклатуры уже не будет попадаться...

(35) Сумма строк же! Допустим, что у нас 10 строк в тч Товар с повторяющимся элементом и других нет - по проводкам Найти вернет всегда одну и ту же строку с одной и той же суммой, даже если там будет только одна такая подходящая проводка или будут разные проводки с разными суммами.
Итог нам вернет итоговую сумму записей из своих записей, а СуммаСтрок наберет свои других 10-ти сумм.
37 Айрат_116
 
23.07.19
16:40
(36) Понял