Имя: Пароль:
1C
1С v8
Как распределить сумму между двумя другими объясните чайнику
, ,
0 Sa6nek6
 
22.05.14
17:18
Есть сумма 55801,12 ее нужно правильно распределить между 510000 и 49855,86
1 Ненавижу 1С
 
гуру
22.05.14
17:19
почитай про пропорции
2 Sa6nek6
 
22.05.14
17:19
копейки как не потерять
3 nufnufcheg
 
22.05.14
17:20
в типовых есть процедуры распределить пропорционально
4 Ненавижу 1С
 
гуру
22.05.14
17:21
(2) сначала определи сколько первому, остальное отдай последнему
5 Sa6nek6
 
22.05.14
17:22
вопрос наверное не правильно поставил, надо из 510000 и  49855,86 забрать чтоб до копеечки
6 Sa6nek6
 
22.05.14
17:22
запутался...
7 Sa6nek6
 
22.05.14
17:23
Как??
8 ptiz
 
22.05.14
17:24
Пример давай с цифрами.
Что такое "правильно"?
9 Sa6nek6
 
22.05.14
17:26
Есть сумма 55801,12  и есть две статьи затрат
1статья  = 510000
2статья  = 49855,86
нужно списать с этих статей так чтоб копейки не потерялись
10 Кай066
 
22.05.14
17:28
(9) куда списать?
11 Sa6nek6
 
22.05.14
17:28
с этих  2-ух статей
12 Sa6nek6
 
22.05.14
17:29
как найти сумму списания распределенную пропорционально
13 Кай066
 
22.05.14
17:30
(12) пропорционально чему?
14 Sa6nek6
 
22.05.14
17:31
55801,12 разбить на 2 чтоб было пропорционально
15 Кай066
 
22.05.14
17:32
(14) GOTO(1)
16 zerat
 
22.05.14
17:32
(13) Человеку надо раскидать 55801,12 в процентном соотношении на
1статья  = 510000
2статья  = 49855,86
17 Sa6nek6
 
22.05.14
17:33
хм...
18 nufnufcheg
 
22.05.14
17:35
всю ветку не читал, про то что готовые процедуры есть в типовых уже было?
19 Defender aka LINN
 
22.05.14
17:36
(0) Что платишь?
20 Sa6nek6
 
22.05.14
17:36
да
21 Михаил Козлов
 
22.05.14
17:36
(18) Искать дольше.
22 nufnufcheg
 
22.05.14
17:36
(20) и?
23 Chai Nic
 
22.05.14
17:36
В общем случае, алгоритм такой - распределяем пропорционально, округляя до копеек, далее считаем копеечную разницу и добавляем-вычитаем к максимальной позиции.
24 zerat
 
22.05.14
17:36
(19) семак ему насыпь
25 Sa6nek6
 
22.05.14
17:37
(23) предложение хорошее как воплотить
26 Sa6nek6
 
22.05.14
17:38
(19) становись нараздачу
27 Chai Nic
 
22.05.14
17:40
(25) Чересчур толсто. Такие алгоритмы в школе на уроке информатики дети пишут.
28 zerat
 
22.05.14
17:44
(27) надо помочь ему, вдруг у него задача по информатике
29 Кай066
 
22.05.14
17:47
статью1/на сумму(статья1+статья2)=доля статьи1
30 nufnufcheg
 
22.05.14
17:51
только в качестве доказательства что автор слаб
31 nufnufcheg
 
22.05.14
17:51
// Выполняет пропорциональное распределение суммы в соответствии
// с заданными коэффициентами распределения.
//
// Параметры:
//        ИсхСумма   - распределяемая сумма
//        МассивКоэф - массив коэффициентов распределения
//        Точность   - точность округления при распределении. Необязателен.
//
//    Возврат:
//        МассивСумм - массив размерностью равный массиву коэффициентов, содержит
//            суммы в соответствии с весом коэффициента (из массива коэффициентов)
//          В случае если распределить не удалось (сумма = 0, кол-во коэф. = 0,
//          или суммарный вес коэф. = 0), тогда возвращается значение Неопределено
//
Функция РаспределитьСуммуПропорциональноКоэффициентам(Знач ИсхСумма, МассивКоэф, Знач Точность = 2) Экспорт
    
    Если МассивКоэф.Количество() = 0 Или НЕ ЗначениеЗаполнено(ИсхСумма) Тогда
        Возврат Неопределено;
    КонецЕсли;
    
    ИндексМакс = 0;
    МаксЗнач   = 0;
    РаспрСумма = 0;
    СуммаКоэф  = 0;
    
    Для К = 0 По МассивКоэф.Количество() - 1 Цикл
        
        МодульЧисла = ?(МассивКоэф[К] > 0, МассивКоэф[К], - МассивКоэф[К]);
        
        Если МаксЗнач < МодульЧисла Тогда
            МаксЗнач = МодульЧисла;
            ИндексМакс = К;
        КонецЕсли;
        
        СуммаКоэф = СуммаКоэф + МассивКоэф[К];
        
    КонецЦикла;
    
    Если СуммаКоэф = 0 Тогда
        Возврат Неопределено;
    КонецЕсли;
    
    МассивСумм = Новый Массив(МассивКоэф.Количество());
    
    Для К = 0 По МассивКоэф.Количество() - 1 Цикл
        МассивСумм[К] = Окр(ИсхСумма * МассивКоэф[К] / СуммаКоэф, Точность, 1);
        РаспрСумма = РаспрСумма + МассивСумм[К];
    КонецЦикла;
    
    // Погрешности округления отнесем на коэффициент с максимальным весом
    Если Не РаспрСумма = ИсхСумма Тогда
        МассивСумм[ИндексМакс] = МассивСумм[ИндексМакс] + ИсхСумма - РаспрСумма;
    КонецЕсли;
    
    Возврат МассивСумм;
    
КонецФункции
32 Sa6nek6
 
22.05.14
17:54
(31) знаю я за неё, не так она делает
33 Sa6nek6
 
22.05.14
17:54
или я не понял
34 nufnufcheg
 
22.05.14
17:55
(32) тогда добей меня, покажи что она не так делает
35 nufnufcheg
 
22.05.14
17:55
склоняюсь к (33)
36 Sa6nek6
 
22.05.14
17:57
(35)первый параметр будет 55801,12 а второй что?
37 nufnufcheg
 
22.05.14
17:58
МассивКоэф - массив коэффициентов распределения?
38 fisher
 
22.05.14
17:58
Мне больше нравится способ когда погрешность не относится на коэффицент с максимальным весом, а когда накапливаемая погрешность учитывается отдельно и используется при распределении на очередной элемент.
39 nufnufcheg
 
22.05.14
18:00
(38) а каким образом ее накапливать и распределять на очередной, если отклонение выяснится в конце? Или я что-то упустил?
ну и как бы смысл этого. имхо православнее на максимальный вес
40 fisher
 
22.05.14
18:02
(39) Смысл в том, что исключается накапливание погрешности и возможное значительное искажение элемента с максимальным весом, который может оказаться не таким уж максимальным. Погрешность не накапливается, а размазывается в процессе. Т.е. гуляет всегда максимум "копейка".
41 Sa6nek6
 
22.05.14
18:15
(39) Сделал так но копейки один х..лес..й не идут!
42 Обработка
 
22.05.14
18:23
Есть сумма Z= 55801,12 ее нужно правильно распределить между X = 510000 и Y = 49855,86

ВсяСуммаРаспределения = X+Y; (559855,86)

ОднДоляСуммыРаспределения = z/ВсяСуммаРаспределения; (0,099670512)

ДоляX = X *ОднДоляСуммыРаспределения  (50831,96093)
ДоляY = Y *ОднДоляСуммыРаспределения  (4969,159073)

ответ 50831,96 и 4969,15

Но копейки нельзя терять поэтому

ДоляY = ВсяСуммаРаспределения - ДоляX

И правильный ответ  

ответ 50831,96 и 4969,16

Думаю это задача 4 или 5 класс А может и 3й класс.

Я в шоке....
43 Segate
 
22.05.14
18:29
(42) одинэсники они такие... =)) не удивлен
44 wPa
 
22.05.14
18:30
(42) "ДоляY = ВсяСуммаРаспределения - ДоляX "
ошибочка! - а если долей 3  или 10 или N? )
45 ЗлобнийМальчик
 
22.05.14
18:31
(0) очень толсто. тренируйтесь
46 ЗлобнийМальчик
 
22.05.14
18:33
(42) ну троллит человек. или совсем ГСМ
47 Обработка
 
22.05.14
18:33
(44) Я всего лишь для его примера наглядно показал для случая где n =2.
Думаю если он не догадается где n > 2 то это уже клиника.
48 Sa6nek6
 
23.05.14
08:33
(39) Сделал так копейки ручной корректировкой, оказалось не мой косяк а бухгалтеров они одно ОС на 0.15 меньше сделали!
49 Irbis
 
23.05.14
08:34
Правильно, это как? По каким правилам?