|
v8: Написал функцию по расчету среднего по ТЗ, делюсь. | ☑ | ||
---|---|---|---|---|
0
Гений 1С
гуру
04.12.12
✎
14:07
|
В общем, усредняет. Юзайте.
Функция УсреднитьПоТаблицеЗначений(ТЗ, ТЗПоиска, СтруктураПоиска, КолонкаСуммы, КолонкаОбщейСуммы = Неопределено, КолонкаКоличестваПоказателей = Неопределено, КолонкаСреднего = Неопределено) Экспорт Для Каждого Строка Из ТЗ Цикл ЗаполнитьЗначенияСвойств(СтруктураПоиска, Строка); Строки = ТЗПоиска.НайтиСтроки(СтруктураПоиска); ОбщаяСумма = САП.ИтогПоМассивуСтрок(Строки, КолонкаСуммы); КоличествоПоказателей = Строки.Количество(); СреднееЗначение = ?(КоличествоПоказателей = 0, 0, ОбщаяСумма / КоличествоПоказателей); Если ЗначениеЗаполнено(КолонкаОбщейСуммы) Тогда Строка[КолонкаОбщейСуммы] = ОбщаяСумма КонецЕсли; Если ЗначениеЗаполнено(КолонкаКоличестваПоказателей) Тогда Строка[КолонкаКоличестваПоказателей] = КоличествоПоказателей КонецЕсли; Если ЗначениеЗаполнено(КолонкаСреднего) Тогда Строка[КолонкаСреднего] = СреднееЗначение КонецЕсли; КонецЦикла; КонецФункции Пример юзания: //Усредняем по дням СтруктураПоиска = Новый Структура("Магазин, КатегорияПлана, Дата"); УсреднитьПоТаблицеЗначений(ТЗДляРейтингаДень, ТЗДляРейтингаДень, СтруктураПоиска, "Выполнено", "ОбщееВыполнение", , "СреднееВыполнение"); ВычислитьПроцентСотрудникаДляРейтингаПоДням(ТЗДляРейтингаДень); //Усредняем по месяцу СтруктураПоиска = Новый Структура("Магазин, КатегорияПлана, Сотрудник"); УсреднитьПоТаблицеЗначений(ТЗДляРейтингаМесяц, ТЗДляРейтингаДень, СтруктураПоиска, "СреднееВыполнение"); УсреднитьПоТаблицеЗначений(ТЗДляРейтингаМесяц, ТЗДляРейтингаДень, СтруктураПоиска, "ПроцентСотрудника"); |
|||
1
zak555
04.12.12
✎
14:07
|
зачем это ?
|
|||
2
PLUT
04.12.12
✎
14:08
|
(0) "мой гений дарит вам"
|
|||
3
narayanan
04.12.12
✎
14:10
|
(0) как в лужу пёрнул и замолчал
|
|||
4
zak555
04.12.12
✎
14:10
|
что такое "САП." ?
|
|||
5
mikecool
04.12.12
✎
14:10
|
какая красота! а что это?
|
|||
6
mikecool
04.12.12
✎
14:11
|
(4) бгг +100500
|
|||
7
mikecool
04.12.12
✎
14:11
|
да, Серега уже не торт
|
|||
8
Плот
04.12.12
✎
14:11
|
(4)+100
что за Х? |
|||
9
Гений 1С
гуру
04.12.12
✎
14:12
|
Чтобы посчитать среднее.
например, у вас есть таблица ФИО Рост Год с ростами физлиц по датам. Вам нужно посчитать средний рост по каждому ФИО Функция может это сделать. Или средний рос за каждый год |
|||
10
Гений 1С
гуру
04.12.12
✎
14:12
|
Функция САП.ИтогПоМассивуСтрок(Строки, Колонка) Экспорт
Р = 0; Для Каждого Строка ИЗ Строки Цикл Р = Р + Строка[Колонка]; КонецЦикла; Возврат Р; КонецФункции |
|||
11
Patrio_
O_Muerte 04.12.12
✎
14:13
|
Может вывесить пример вывода макета сразу на печать...
|
|||
12
mikecool
04.12.12
✎
14:13
|
(9) поделись дурбазином
|
|||
13
mikecool
04.12.12
✎
14:13
|
(10) а Итог по колонке не для тебя?
|
|||
14
zak555
04.12.12
✎
14:14
|
(9) зачем среднее значение писать в каждую стоку ?
каков глубокий смысл в этом ? |
|||
15
acsent
04.12.12
✎
14:15
|
почему бы сразу в запросе не считать?
|
|||
16
zak555
04.12.12
✎
14:15
|
(13) +1
(15) +100500 |
|||
17
Гений 1С
гуру
04.12.12
✎
14:15
|
(15) Потому что надо писать еще и запрос.
|
|||
18
Гений 1С
гуру
04.12.12
✎
14:15
|
а тут взял и усреднил, мне результат в ТЗ нужен.
|
|||
19
mikecool
04.12.12
✎
14:15
|
дарю ТЗ.Итог("Показатель")/ТЗ.Количество()
|
|||
20
acsent
04.12.12
✎
14:15
|
(17) откуда тз берется?
|
|||
21
acsent
04.12.12
✎
14:16
|
(19) не то
|
|||
22
mikecool
04.12.12
✎
14:16
|
+19 это если без запросов
|
|||
23
zak555
04.12.12
✎
14:16
|
(18) зачем писать результат в каждую строку ?
|
|||
24
mikecool
04.12.12
✎
14:16
|
(21) а че, не среднее?
|
|||
25
quest
04.12.12
✎
14:16
|
уже не торт.... про микроволновку наоборот было лучше.
|
|||
26
Гений 1С
гуру
04.12.12
✎
14:17
|
(19) Боюсь я данайцев дары приносящих, это у тебя общее среднее будет, а не построчное, смотри примеры с ростом.
|
|||
27
Mikeware
04.12.12
✎
14:18
|
(2) не "гений", а "гениталий"
|
|||
28
Гений 1С
гуру
04.12.12
✎
14:20
|
лично я использовал это для такой задачи.
Есть ТЗ с продажами по сотрудникам за даты. Сотрудник, Дата, Продано. Нужно получить за каждый день среднюю продажу по сотрудникам, то бишь Сотрудник, Дата - СредняяПродажа |
|||
29
mikecool
04.12.12
✎
14:20
|
(26) нифига не понял пример
|
|||
30
mikecool
04.12.12
✎
14:20
|
(28) а, тогда Найти строки, загрузить найденное в тз и возвращаемся к моему примеру
|
|||
31
mikecool
04.12.12
✎
14:21
|
а ваще - запросом это делать надо
|
|||
32
Гений 1С
гуру
04.12.12
✎
14:21
|
(30) Ну так я так и делаю, только функция универсальная.
(31) на фига? экономить на спичках? |
|||
33
Schwonder
04.12.12
✎
14:29
|
В баню его ещё на годик-другой... может ума наберется!!!11
|
|||
34
mikecool
04.12.12
✎
14:30
|
(32) ладно - на спичках ты не экономишь, но твой код не красивый, я бы даже сказал - овно ))
|
|||
35
Ночной кошмар
04.12.12
✎
14:30
|
И почему я сразу угадал топикстартера? :)
|
|||
36
acsent
04.12.12
✎
14:30
|
(32) ты же только что говорил про оптимизацию, там где возможно? Или ты двуличная скотина?
|
|||
37
dva1c
04.12.12
✎
14:32
|
Зато собрались все. Поучаствовать в ветке. )
|
|||
38
КонецЦикла
04.12.12
✎
14:38
|
(28) Это и даже более сложные вещи (хм?) делаются одним запросом
|
|||
39
Гений 1С
гуру
04.12.12
✎
14:40
|
(38) Я сторонник повторного использования кода. И не люблю гонять ТЗ в запрос, а потом обратно.
|
|||
40
Mort
04.12.12
✎
14:43
|
Даже если запрос юзать религия не позволяет: добавить колонку с единицей, свернуть, пробежаться и поделить. Короче, на гов*код.ру
|
|||
41
Господин ПЖ
04.12.12
✎
14:45
|
сося как всегда показал мастер-класс дерьмокода
|
|||
42
Reset
04.12.12
✎
14:45
|
(39)
Правильно, зачем каждый раз писать А+Б, можно же один раз написать функцию Сумма2(А,Б) и использовать ее. Повторное использование кода, чо. |
|||
43
Schwonder
04.12.12
✎
14:57
|
(42) Не.. Надо так: САП.Сумма2(А, Б)
|
|||
44
Schwonder
04.12.12
✎
14:57
|
)))))
|
|||
45
Schwonder
04.12.12
✎
14:58
|
Или САП.Инвоке("САП.СУММА2", А, Б)
|
|||
46
kiruha
04.12.12
✎
15:00
|
(0)
В цикле Строки = ТЗПоиска.НайтиСтроки(СтруктураПоиска); не Айс одним проходом никак ? |
|||
47
Гений 1С
гуру
04.12.12
✎
15:49
|
(40) То писать надо, а то повторный код, усек?
(46) подумай. |
|||
48
Schwonder
04.12.12
✎
15:58
|
(47) Думать тебе надо было перед тем как свою очередную "нетленку" постить. Твой высер вменяемый человек использовать никогда не будет, ибо реализовать запросом будет практичнее. И раз уж сам думать не умеешь, намекну. В твоём быдлокоде тоже мог быть запрос, а не поиск строк в цикле.
|
|||
49
SunFox
04.12.12
✎
16:15
|
(28) таблица же из запроса вышла? там все и юзать - в запросе.
|
|||
50
Господин ПЖ
04.12.12
✎
16:17
|
ваш гений дарит вам кусок повторного дерьмокода...
|
|||
51
Гений 1С
гуру
04.12.12
✎
19:21
|
(48) возможно, но на моих объемах и обход нормально работает. Если нужно оптимизировать - вперед и с песней. ;-)
|
|||
52
Гений 1С
гуру
04.12.12
✎
19:22
|
(49) Нет, таблица вышла не из запроса, а собиралась долгим и кропотливым алгоритмом (в моем случае)
|
|||
53
DarkWater
04.12.12
✎
19:46
|
(0) Офигеть достижение)))) Про hello world тоже на мисту напиши, если накатаешь.
|
|||
54
AlexSSSSS
04.12.12
✎
19:49
|
(0) "и почему я угадал автора..."
|
|||
55
KRV
04.12.12
✎
19:49
|
Средняя температура по больнице...
|
|||
56
ERWINS
04.12.12
✎
19:56
|
1. загнать во временную таблицу, выполнить запрос, вернуть результат?
2. добавить колонку со значением 1 сгруппировать разделить удалить колонку |
|||
57
0xFFFFFF
04.12.12
✎
19:56
|
Если каждый мистянин свою нетлеющую функцию будет выкладывать, шож это с мистой станет.
Да и нафига усреднять в ТЗ, если такие вещи проще и правильней делать в запросе... |
|||
58
МихаилМ
04.12.12
✎
20:08
|
(0)
для этого специально создан механизм 1с Анализ данных ОбщаяСтатистика |
|||
59
БалбесВ1с
04.12.12
✎
20:41
|
(0)Мой код проще-дарю
Среднее = ВсеСкласть\СкокаЕдиниц |
|||
60
i-rek
04.12.12
✎
20:49
|
"а внутре у неё... НЕОНКА !!!" )))
|
|||
61
zak555
04.12.12
✎
20:57
|
||||
62
H A D G E H O G s
04.12.12
✎
20:59
|
Блеать, как будто в 2007 год перенесся.
Несколько раз смотрел даты сообщений, нет, все верно, близиться аппокалипсис. |
|||
63
Asmody
04.12.12
✎
21:10
|
(0) лучше MapReduce на 1С напиши
|
|||
64
etc
04.12.12
✎
21:15
|
Любителям потаскать на сервер и обратно таблицу значений низачёт. Вы - насильники tempdb :)
Про ТС ниче не скажу. Он и так уже "попал" :) |
|||
65
Гений 1С
гуру
04.12.12
✎
22:09
|
(64) гыгыгы, зачет! Зачем усложнять ради копеечного прироста
|
|||
66
БАМБР2013
04.12.12
✎
22:18
|
(0) > Написал функцию по расчету среднего по ТЗ
А набуя она нужна? Впрочем как и твоя обработка на инфостарте с файлами-флагами... |
|||
67
БАМБР2013
04.12.12
✎
22:21
|
копрокод.
Все это делается обычным запросом, а результат выкидывается в СКД |
|||
68
polymorph
04.12.12
✎
22:30
|
внимание спойлер - раскрывается смысл ветки. гений кросаучег, решил наглядно продемонстрировать низкий уровень профессионализма и высокий неадеквата на форуме. миссион суксесс. почти все из отписавшихся толком тему не читали, что уж говорить про дальнейшие комментарии ТС.
|
|||
69
Bober
05.12.12
✎
06:26
|
(0) нет кеширования показателей расчете, см свой пример при расчете день.
|
|||
70
vitek89
05.12.12
✎
06:48
|
страшно тут у вас
|
|||
71
Гений 1С
гуру
05.12.12
✎
08:37
|
(67) А если не надо в СКД? А надо просто просчитать и дальше обработать ТЗ? У Вас не хватает воображения или опыта?
|
|||
72
Гений 1С
гуру
05.12.12
✎
08:37
|
(69) Возможно, возможно. Но на моих объемах работает, не возражаю, что есть место для оптимизации. Но суть в другом - если вдруг надо посчитать быстро среднее, можно заюзать, а уж если будет тормозить (что вряд ли) - оптимизировать
|
|||
73
Fish
05.12.12
✎
08:40
|
(0) Унылый гКод.
|
|||
74
YHVVH
05.12.12
✎
08:47
|
+(72) согласен
|
|||
75
kiruha
05.12.12
✎
08:57
|
(72)
Ну хоть индекс добавь, прежде чем искать это ровно одна строчка |
|||
76
organizm
05.12.12
✎
09:07
|
... по старинке как 7.7 Таблицы значений ... за что боролись к тому и вернулись...
|
|||
77
organizm
05.12.12
✎
09:08
|
(72) с ТЗ будет тормозить полюбасу. не вариант.
|
|||
78
Гений 1С
гуру
05.12.12
✎
10:59
|
(75) А ты уверен, что индекса нет? Функция не должна делать лишней работы.
(76) старое - не значит плохое. Иногда это значит надежное и проверенное. |
|||
79
mzelensky
05.12.12
✎
11:05
|
(58) а ты применял эти анализы?! Есть норм литература с примерами по этой ерундовине?!
|
|||
80
kiruha
05.12.12
✎
11:37
|
(78)
СтрокаОтбора="Магазин, КатегорияПлана, Сотрудник" ТЗПоиска2=ТЗПоиска.Скопировать(); ТЗПоиска2.Индексы.Добавить(СтрокаОтбора); СтруктураПоиска = Новый Структура(СтрокаОтбора); Для Каждого Строка Из ТЗ Цикл ЗаполнитьЗначенияСвойств(СтруктураПоиска, Строка); Строки = ТЗПоиска2.НайтиСтроки(СтруктураПоиска); //........... при размере ТЗ в 1000 у (0) будет 1000*1000*k1 проходов здесь 1000*2*k2 |
|||
81
Гений 1С
гуру
05.12.12
✎
11:48
|
(80) Кирюха, включай здравый смысл.
Иногда нужно получить среднее по средних размеров таблице, тут важнее время, затраченное на кодинг. Я ж говорю - есть пути для оптимизации. Зато можно повторно не писать. Мне в двух местах нужно было посчитать среднее, я написал универсальную функцию, теперь она всегда под рукой. А то |
|||
82
Schwonder
05.12.12
✎
14:25
|
(81) А если надо будет применить к таблице покрупнее? Писать будешь очередной высер и постить на Мисту? А повторное использование копрокода - это верх идиотизма. ИМХО.
|
|||
83
Гений 1С
гуру
05.12.12
✎
15:03
|
(82) если нужно будет покруче, доработаю и выложу на мисту в эту ветку доработанный вариант.
|
|||
84
Schwonder
05.12.12
✎
15:15
|
(83) Заведи себе блох и засерай его. Руки прочь от уютненькой.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |