Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Средневзвешенная в СКД

Средневзвешенная в СКД
Я
   Капитан Джек Воробей
 
07.04.21 - 12:08
Доброго времени суток!
Есть массив чисел надо рассчитать по формуле:
Средневзвешенная = СуммПроизв(Массив)/Сумма(Массив)....
Метод Сумма() в СКД есть, а вот СуммПроизв() нет
Кто сталкивался есть чем помочь?
Мои мысли по теме
Реализовать через Вычисляемые поля, но не уверен что туда можно передать массив строк по группировке...
если есть какой пример киньте в меня)
   Kassern
 
1 - 07.04.21 - 12:10
(0) просуммируй отдельными запросами и раздели в результирующем, только на ноль проверяй на всякий случай
   fisher
 
2 - 07.04.21 - 12:30
Непонятно. Как ты в СКД получаешь массив? Через ВычислитьВыражениеСГруппировкойМассив? Ну так прямо внутри считай произведение. Зачем тебе отдельная функция с передачей аргументов?
   fisher
 
3 - 07.04.21 - 12:37
В самом крайнем случае, если у тебя какая-то невероятная экзотика, можно выкрутиться через функции общих модулей.
   Капитан Джек Воробей
 
4 - 07.04.21 - 12:38
(2) Массив это краткое описание, да есть строки, одни надо сложить другие перемножить и разделить...
Приведи пример как перемножить строку на следующую строку для того чтобы получить произведение сумм..
   Вафель
 
5 - 07.04.21 - 12:41
получай в запросе колонку с произведением
   Вафель
 
6 - 07.04.21 - 12:41
и тогда
сумма(КолонкаСуммаПроизв) / сумма (колонка)
   Капитан Джек Воробей
 
7 - 07.04.21 - 12:52
(6) Ок вот у нас число 2 следующее 3 итд
Как в цикле обойти я понимаю, как в запросе перемножить чтобы получить КолонкаСуммаПроизв?
   fisher
 
8 - 07.04.21 - 12:55
(7) Так не будет сумма произведений. Это будет просто произведение всех значений.
   Cthulhu
 
9 - 07.04.21 - 13:05
"А этот пацак все время говорит на языках, продолжения которых не знает!" (с)
   fisher
 
10 - 07.04.21 - 13:16
Если количество сомножителей невелико и фиксированно - можно перевести их в колонки с помощью соединений таблиц.
Решения для общего случая, когда сомножители в строках - не знаю. Не сталкивался с подобным на практике.
Но, как я уже и говорил - можно выкрутиться через использование функций общих модулей в СКД. Через ВычислитьВыражениеСГруппировкойМассив() можно получать массив значений строк и передавать их в функцию общего модуля, где перемножать.
   Капитан Джек Воробей
 
11 - 07.04.21 - 13:24
(10) Да я тоже не сталкивался, да видел информацию на инфостарте ВычислитьВыражениеСГруппировкойМассив()" попробую через нее...
   fisher
 
12 - 07.04.21 - 13:31
(11) Только она для вычисления агрегатов предназначена. То есть наверное придется что-то типа такого мутить:
Сумма(МойОбщийМодуль.Перемножить(ВычислитьВыражениеСГруппировкойМассив("Сумма(Сомножитель)", "ГруппировкаСомножителей, ИдентификаторСомножителя")));
   fisher
 
13 - 07.04.21 - 13:32
Даже лучше "Максимум(Сомножитель)"
   Kassern
 
14 - 07.04.21 - 14:02
(0) в экселе же эта функция тупо перемножает колонки между собой и выводит сумму по результирующей. Тогда какого тут написано (4) ? В экселе он так не перемножит.
в 1с в роли массивов будут выступать таблицы, которые ты соединяешь между собой и перемножаешь нужные реквизиты. А дальше суммируешь результирующую колонку
   Kassern
 
15 - 07.04.21 - 14:04
   Капитан Джек Воробей
 
16 - 07.04.21 - 14:19
(15) СуммаПроизв(по колонке) = 120
Если смущает слово Массив - 
Средневзвешенная = СуммПроизв(1*2*3*n)/Сумма(1+2+3+n)...
   fisher
 
17 - 07.04.21 - 15:29
(16) Фигня какая-то.
1) Не понял, чем (1*2*3*n) отличается от СуммПроизв(1*2*3*n)
2) Что это за формула средневзвешенной такая? Если для 5, 5, 5, 5, 5 она вернет 125.
Это чего мы такое средневзвесили?
   Kassern
 
18 - 07.04.21 - 15:40
(17) тут типа получаешься 5*5*5*5*5/(5+5+5+5+5)=125 как я понял по сообщениям ТС.
   Капитан Джек Воробей
 
19 - 07.04.21 - 15:43
(18) Да именно так просто я описал, что происходит в методе..... может зря...
   fisher
 
20 - 07.04.21 - 15:46
(18) И чего это такое и как его интерпретировать? И факториал - это случайность или он есть в исходной формуле?
(19) Капитан Джек Воробей и тайна средневзвешенной.
   Капитан Джек Воробей
 
21 - 07.04.21 - 15:48
(12) (13) (17) Все спасибо решил, правда не знаю зачем пользаку это надо...
Суть решения:
В Вычисляемые поля добавил ОМ.ПолучитьПроизведениеЧисел(ВычислитьВыражениеСГруппировкойМассив("Сумма(Вес)","Номенклатура"))
там все рассчитал.
   fisher
 
22 - 07.04.21 - 15:50
(21) Подозреваю, что скоро ты узнаешь что "пользаку" нужно не это :)
   Капитан Джек Воробей
 
23 - 07.04.21 - 15:50
(20) Пишу со слов пользователя сути не понимаю ©
   Капитан Джек Воробей
 
24 - 07.04.21 - 15:51
(22) Да я даже не сомневаюсь)))
   fisher
 
25 - 07.04.21 - 15:53
(23) Так в итоге и время потратил и тебя же еще дураком и выставят. Если ты делаешь что-то, сути чего не понимаешь, то вероятность ошибочной реализации стремится к единице.
   Капитан Джек Воробей
 
26 - 07.04.21 - 16:12
(25) Я делал как описано в тз.... я потратил время, но и получил опыт....
   fisher
 
27 - 07.04.21 - 16:44
Есть старинная притча про степень вникания наемных работников в проблемы бизнеса.

Один работник зашёл к барину и говорит:
— Барин! Почему ты мне платишь всего пять копеек, а Ивану всегда пять рублей?
Барин смотрит в окно и говорит:
— Вижу я, кто-то едет. Вроде бы сено мимо нас везут. Выйди-ка, посмотри.
Вышел работник. Зашел снова и говорит:
— Правда, барин. Вроде сено.
— А не знаешь откуда? Может, с Семёновских лугов?
— Не знаю.
— Сходи и узнай.
Пошел работник. Снова входит.
— Барин! Точно, с Семёновских.
— А не знаешь, сено первого или второго укоса?
— Не знаю.
— Так сходи, узнай!
Вышел работник. Возвращается снова.
— Барин! Первого укоса!
— А не знаешь, почём?
— Не знаю.
— Так сходи, узнай.
Сходил. Вернулся и говорит:
— Барин! По пять рублей.
— А дешевле не отдают?
— Не знаю.
В этот момент входит Иван и говорит:
— Барин! Мимо везли сено с Семёновских лугов первого укоса. Просили по 5 рублей. Сторговались по 3 рубля за воз. Я их загнал во двор, и они там разгружают.
Барин обращается к первому работнику и говорит:
— Теперь ты понял, почему тебе платят 5 копеек, а Ивану 5 рублей?


Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.