![]() |
![]() |
![]() |
|
Как пропорционально распределить сумму ? | ☑ | ||
---|---|---|---|---|
0
Ткачев
27.05.11
✎
07:34
|
Подскажите формулу.
Есть 3 суммы 150, 100 и 50, как 100 разделить пропорционально между 150 и 50. |
|||
1
VladZ
27.05.11
✎
07:35
|
(0) Пропорционально.
|
|||
2
VladZ
27.05.11
✎
07:36
|
75 и 25
|
|||
3
Ткачев
27.05.11
✎
07:37
|
А формулой ?
|
|||
4
VladZ
27.05.11
✎
07:38
|
1. Вычисляем, во сколько раз отличается 100 от суммы 150 и 50.
100/(150+50) = 0,5 2. Умножаем наши суммы на полученный к-т. 150 * 0,5 = 75 50 * 0,5 = 25 |
|||
5
Rie
27.05.11
✎
07:38
|
(3) 100/(150+50)
|
|||
6
Нуф-Нуф
27.05.11
✎
07:44
|
100 * 50 / (50+100+150)
100 * 100 / (50+100+150) 100 * 150 / (50+100+150) |
|||
7
Нуф-Нуф
27.05.11
✎
07:44
|
блин (50+100+150) заменить на (50+150)
|
|||
8
Ткачев
27.05.11
✎
07:53
|
(3)Формулой это типа:
Ч1 = 150 Ч2 = 100 Ч3 = 50 Сумма = Ч2 / (Ч1 + Ч3) Ч1 = Ч1 + Ч1 * Сумма Ч3 = Ч3 + Ч3 * Сумма Все понятно, всем спасибо. |
|||
9
VladZ
27.05.11
✎
08:06
|
(8) Чтобы не путаться в понятиях:
Коэффициент = Ч2 / (Ч1 + Ч3) Ч1 = Ч1 + Ч1 * Коэффициент Ч3 = Ч3 + Ч3 * Коэффициент |
|||
10
VladZ
27.05.11
✎
08:07
|
(8) А зачем так:
Ч1 = Ч1 + Ч1 * Коэффициент ? |
|||
11
Рэйв
27.05.11
✎
08:13
|
Функция РассчитатьДельту(СуммаВходящая,ВсегоСуммаВходящая,СуммаРаспределения)
ПроцентОтОбщей=СуммаВходящая /(ВсегоСуммаВходящая/100); Дельта=Окр(СуммаРаспределения/100*ПроцентОтОбщей,2,РежимОкругления.Окр15как20); Возврат Дельта; КонецФункции |
|||
12
Рэйв
27.05.11
✎
08:13
|
+ потом если последняя сумма надо не функцию вызывать а тупо прибавлять оставшийся хвост. а то копейки остаются
|
|||
13
andrewks
27.05.11
✎
08:19
|
мдэ... а что, в Советское время тоже образование хромало?
|
|||
14
Humandra
27.05.11
✎
09:33
|
(12) хвост в виде лишней копейки, если коэффициент вида 0,3333333333333, лучше не к последней сумме прибавлять, а к максимальной. Аккуратнее получается. :)
|
|||
15
rs_trade
27.05.11
✎
09:35
|
(0) "программист"-гуманитарий?
|
|||
16
DES
27.05.11
✎
09:36
|
(0) это шутка ?
|
|||
17
Рэйв
27.05.11
✎
09:39
|
(14)Можно и так :-)
|
|||
18
DES
27.05.11
✎
09:43
|
есть 2 (два) осажденных города.
в одном 150 защитников. в другом 50 защитников. им на подмогу идет обоз с мукой. везут 100 кг. Задача: сколько муки нужно завезти в каждый город через подземный ход чтобы всем защитникам досталось поровну? Решение: Складываем всех защитников города, делим всю муку на кол-во всех защитников, находим сколько муки приходится на 1 защитника по норме. Умножаем норму на кол-во защитников в каждом городе. разделяем всю муку на 2 части ПРОПОРЦИОНАЛЬНО полученной норме для каждого города. |
|||
19
DES
27.05.11
✎
09:44
|
(14) В социальном государстве лучше прибавлять к минимальной сумме.
|
|||
20
Fragster
гуру
27.05.11
✎
09:46
|
а теперь в запросе и так, чтобы копейки не терялись :)))
|
|||
21
Fragster
гуру
27.05.11
✎
09:46
|
лично у меня - УГ получилось :)
|
|||
22
rs_trade
27.05.11
✎
10:14
|
||||
23
Ткачев
27.05.11
✎
10:39
|
Усложним задачу:
Есть главный документ. Сумма документа = 150 Нал = 50 БезНал = 100 Он делится на 2 документа. Первый Документ Сумма = 80 Нал = ? БезНал = ? Второй Документ Сумма = 70 Нал = ? БезНал = ? Вот как тут рассчитать оплату из главного документа ? |
|||
24
Fragster
гуру
27.05.11
✎
10:44
|
(22) распредели сумму в 100 пропорционально между 3 одинаковимы значениями, чтобы копейки не потерялись
|
|||
25
Fragster
гуру
27.05.11
✎
10:44
|
*одинаковыми
|
|||
26
Fragster
гуру
27.05.11
✎
10:45
|
типа
100 + 100 + 100 + 100 => 133,34 + 133,33 + 133,33 |
|||
27
VladZ
27.05.11
✎
10:49
|
(14) В исходной задаче две суммы... В случае, если у одной суммы будет 0,3333333333333 - значит у другой 0,6666666666666. В общем, при округлении все будет хорошо. Вот если было три суммы (и более)... Возникла бы ситуёвина, когда одному 0,3333333333333, другому 0,3333333333333 и третьему столько же. В результате копеечки могут и не бить.
|
|||
28
Fragster
гуру
27.05.11
✎
10:50
|
(27) решение таки должно быть универсальным
|
|||
29
zak555
27.05.11
✎
10:51
|
(0) размазывать нужно как в (6) но с одной оговоркой
отсортировать суммы по убыванию и последней сумме добавить остаток |
|||
30
Ткачев
27.05.11
✎
10:55
|
Суть этого гемора такова:
Определенный товар продается на ИП, остальной на ООО (одна касса работает с двумя фискальниками), до того пока не подключили банк все было нормально, вчера подключили... |
|||
31
Ткачев
27.05.11
✎
10:56
|
т.е.
Один Чек ККМ делится на два в зависимости от товара. |
|||
32
Warlock
27.05.11
✎
11:10
|
(Fragster
Отклонение = 0; Для Каждого Строка Из ТЗ Цикл Результат = НужныйРезультат * Строка.Основание / База + Отклонение; Отклонение = (Результат - Окр(Результат, 2)); Строка.Результат = Окр(Результат, 2); КонецЦикла; |
|||
33
Ткачев
27.05.11
✎
11:14
|
Это 1с розница, программно деление чека выглядит так:
Если Константы.ДваФР.Получить() Тогда Запрос = Новый Запрос(" |ВЫБРАТЬ * ПОМЕСТИТЬ ТабТов ИЗ &ТабТов КАК ТТ; |ВЫБРАТЬ * |ИЗ | ТабТов КАК Товары |ГДЕ | Товары.Номенклатура.ТоварОрганизации = &Организация"); Запрос.УстановитьПараметр("ТабТов", Товары.Выгрузить()); ВремКассаККМ = КассаККМ; Оплаты = Оплата.Выгрузить(); Организации = Справочники.Организации.Выбрать(); Пока Организации.Следующий() Цикл Если Организации.Ссылка = Магазин.ОсновнойСклад.Организация Тогда; Организация = Справочники.Организации.ПустаяСсылка(); Иначе Организация = Организации.Ссылка; КонецЕсли; Запрос.УстановитьПараметр("Организация", Организация); Результат = Запрос.Выполнить(); Если Не Результат.Пустой() Тогда ЭтотОбъект.Товары.Загрузить(Результат.Выгрузить()); ФР = ПолучитьСерверТО().ПолучитьИдентификаторПоИдКассы(Организация); Если ЗначениеЗаполнено(Организация) И Не ПустаяСтрока(ФР) Тогда КассаККМ = ПолучитьСерверТО().ПолучитьКассуККМ(ФР); Иначе КассаККМ = ВремКассаККМ; КонецЕсли; ИтогСуммы = Товары.Итог("Сумма"); ИтогОплат = Оплаты.Итог("Сумма"); Если ИтогСуммы <> ИтогОплат Тогда ЭтотОбъект.Оплата.Загрузить(Оплаты); Для Каждого ФормаОплат Из Оплата Цикл //??????????????????????????????? КонецЦикла; КонецЕсли; ЗавершитьЗакрытиеЧека2(Печать, РучнойРежим, ВыбратьДокументПечати, ФР); КонецЕсли; КонецЦикла; Иначе ЗавершитьЗакрытиеЧека2(Печать, РучнойРежим, ВыбратьДокументПечати); КонецЕсли; |
|||
34
Fragster
гуру
27.05.11
✎
11:16
|
(32) запросом же
|
|||
35
Warlock
27.05.11
✎
12:33
|
(34)Если использовать временные таблицы, то можно распределить результат, а остаток оставить на максимальной/минимальной строке
|
|||
36
Ткачев
27.05.11
✎
15:03
|
Получилось как то так:
... Для Каждого ФормаОплат Из Оплата Цикл Если ПервыйПроход Тогда СуммаОплаты = ИтогСуммы * Окр(ФормаОплат.Сумма / ИтогОплат, 2); СписокОплат.Добавить(ФормаОплат.Сумма - СуммаОплаты); ФормаОплат.Сумма = СуммаОплаты; Иначе ФормаОплат.Сумма = СписокОплат.Получить(ФормаОплат.НомерСтроки - 1).Значение; КонецЕсли; КонецЦикла; ПервыйПроход = 0; ... |
|||
37
rs_trade
27.05.11
✎
16:18
|
(36) В УТ или УПП глянь документ доп. расходы. Там есть алгоритм распределения суммы по кол-ву или объему
|
|||
38
Ненавижу 1С
гуру
27.05.11
✎
16:19
|
тупые 1с ники
|
|||
39
Ткачев
27.05.11
✎
20:32
|
(37)Нормально работает, на разных суммах проверял.
(38)Так скажите как тупому 1с-нику сделать все правильно в (33) и (36) |
|||
40
Господин ПЖ
27.05.11
✎
20:36
|
возьмите хоть из УПП типовой что ли... там и то адекватнее написано
|
|||
41
МегаБум
27.05.11
✎
20:36
|
а куда цветовыделение кода 1С делось?
|
|||
42
Эмбеддер
27.05.11
✎
20:41
|
(36) Ошибки округления будут при таком расчете
|
|||
43
Reaper_1c
27.05.11
✎
20:41
|
Трандец, модуль "ОбщегоНазначения" отобрали у автора?
|
|||
44
Ткачев
03.06.11
✎
11:26
|
(40)Если бы у них все было адекватно и работало, не было бы этого форума.
(42)Нормально все работает, копейки нигде "не провисают", в отличии от типовых процедур +- 0.01 руб. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |