Имя: Пароль:
1C
1С v8
1с 8.2 Как решить задачу
0 skupidom5
 
25.11.15
11:47
Коллеги, требуется составить пропорцию:
есть заказ покупателя
сумма заказа = 100 руб.
В заказе заполнена табличная часть: Товары
1 строка - Номенклатура №1 кол-во 2 цена 10 сумма 20;
2 строка - Номенклатура №2 кол-во 3 цена 5 сумма 15;
3 строка - Номенклатура №3 кол-во 1 цена 65 сумма 65

есть оплата по заказу: "Платежное поручение входящее" с видом операции "Оплата от покупателя"
сумма оплаты (единая, без разбивки) = 75 руб.
Внимание вопрос:
как пропорционально распределить сумму платежа между позициями заказа, получить размер платежа по каждой строке заказа
1 aleks_default
 
25.11.15
11:48
(0)у тебя хотя бы самое среднее образование есть?
2 Горогуля
 
25.11.15
11:49
(0) никак
3 MrKartez
 
25.11.15
11:51
Пропорцию по количеству или сумме
4 rbcvg
 
25.11.15
11:52
Ну умножь каждую строку на 75 и раздели на 100.
15
11,25
48,75
5 2mugik
 
25.11.15
11:53
троль что ли?
6 Рэйв
 
25.11.15
11:53
(0)
строка 1 :75/100*20
строка 2: 75/100*15
строка 3: 75/100*65


И чему вас только в третьем классе учили...
7 singlych
 
25.11.15
11:54
у меня даже жена пропорции составляет на раз
8 Garykom
 
гуру
25.11.15
11:54
(6) а копейки как делить будем?
9 rsv
 
25.11.15
11:56
(8) Величина веса не округляется . А результат умножения веса цифры на 75 можно округлить.
10 Господин ПЖ
 
25.11.15
11:57
в любой типовой есть функция РаспределитьСумму по массиву коэффициентов
11 aleks_default
 
25.11.15
11:57
(0) Срочно профессию сменить. Попробуй что-нибудь руками поделать, головой не получается.
12 Garykom
 
гуру
25.11.15
11:59
(9) ага а потом при сложении 3-х сумм почему то <> сумме полной оплаты?
13 Господин ПЖ
 
25.11.15
11:59
(8) смотря до какой точности идет подсчет... дельту распределения (т.е. отклонение исходного числа от суммы распределнных) сбрасывают на наибольший исходный "коэффициент" чтобы минимизировать отклонение
14 Господин ПЖ
 
25.11.15
12:00
(12) все учтено могучим ураганом (с) золотой теленок
15 Garykom
 
гуру
25.11.15
12:01
(13) (14) ну давай распредели оплату в 1 копейку...
16 rsv
 
25.11.15
12:02
(12) У коэффициента веса хвост после запятой в N. Этого должно хватить.
17 Garykom
 
гуру
25.11.15
12:02
(16) см (15)
18 Господин ПЖ
 
25.11.15
12:03
(15) легко. уйдет в строку 3 т.к. она максимальная
19 rsv
 
25.11.15
12:03
(17) Для копеек (два знака после запятой) потянет.
20 Господин ПЖ
 
25.11.15
12:04
не ищите золото в кармане с дыркой

все уже решено, учите мат. часть - кишки конфигурации
21 mTema32
 
25.11.15
12:07
Автор, копируй:

Функция РаспределитьСуммуПропорциональноКоэффициентам(Знач РаспределяемаяСумма, Коэффициенты, Знач Точность = 2) Экспорт
    
    Если Коэффициенты.Количество() = 0 Или Не ЗначениеЗаполнено(РаспределяемаяСумма) Тогда
        Возврат Неопределено;
    КонецЕсли;
    
    ИндексМаксимальногоКоэффициента = 0;
    МаксимальныйКоэффициент = 0;
    РаспределеннаяСумма = 0;
    СуммаКоэффициентов  = 0;
    
    Для Индекс = 0 По Коэффициенты.Количество() - 1 Цикл
        Коэффициент = Коэффициенты[Индекс];
        
        АбсолютноеЗначениеКоэффициента = ?(Коэффициент > 0, Коэффициент, -Коэффициент);
        Если МаксимальныйКоэффициент < АбсолютноеЗначениеКоэффициента Тогда
            МаксимальныйКоэффициент = АбсолютноеЗначениеКоэффициента;
            ИндексМаксимальногоКоэффициента = Индекс;
        КонецЕсли;
        
        СуммаКоэффициентов = СуммаКоэффициентов + Коэффициент;
    КонецЦикла;
    
    Если СуммаКоэффициентов = 0 Тогда
        Возврат Неопределено;
    КонецЕсли;
    
    Результат = Новый Массив(Коэффициенты.Количество());
    
    Для Индекс = 0 По Коэффициенты.Количество() - 1 Цикл
        Результат[Индекс] = Окр(РаспределяемаяСумма * Коэффициенты[Индекс] / СуммаКоэффициентов, Точность, 1);
        РаспределеннаяСумма = РаспределеннаяСумма + Результат[Индекс];
    КонецЦикла;
    
    // Погрешности округления отнесем на коэффициент с максимальным весом.
    Если Не РаспределеннаяСумма = РаспределяемаяСумма Тогда
        Результат[ИндексМаксимальногоКоэффициента] = Результат[ИндексМаксимальногоКоэффициента] + РаспределяемаяСумма - РаспределеннаяСумма;
    КонецЕсли;
    
    Возврат Результат;
    
КонецФункции
22 Garykom
 
гуру
25.11.15
12:08
(20) проблема что в кишках из-за заворотов в головах тоже завороты

задача (0) изначально чисто теоретическая и не имеет никакого отношения к реальности

на практике оплату считают отдельно по каждой единице товара (потому что невозможно вернуть 0,5 штуки к примеру)

т.е. правильно будет не в % считать а по очереди закрывать оплаченной суммой позиции
23 Рэйв
 
25.11.15
12:10
(8)Ой, да элементарно. Отнимим от ста общую сумму распределенного и хвост положим в последнюю строку.Стандарт.
24 rsv
 
25.11.15
12:58
(21)  Мутно . В (0) один запрос без  цикла .
25 skupidom5
 
25.11.15
14:31
Получается фигня, вот конкретный пример:
в заказе сумма по строчкам:
1 - 349,2
2 - 426,8
3 - 417,1
эти цены в EURO
курс = 76,70
всего прошло 6 платежек, все они в руб.
1 - 2 950 000;
2 - 2 500 000;
3 - 1 050 000;
4 - 1 500 000;
5 - 1 000 000;
6 - 7 500 000
т.е. если следовать примеру выше:
7500000 / 100 * ((349,2 + 426,8 + 417,1)*76,70)... получается = 6 862 869 285,75 ...
26 Мэс33
 
25.11.15
14:40
1) 349,2 + 426,8 + 417,1 = 1 193,1
2) 7 500 000 / 1 193,1 = 6 286,15
3)
349,2 * 6286,15 = 2 195 123,58
426,8 * 6286,15 = 2 682 928,82
7 500 000 - (2 195 123,58 + 2 682 928,82) = 2 621 947,6
27 skupidom5
 
25.11.15
14:53
1 193,1 в евро
28 skupidom5
 
25.11.15
14:53
7 500 000 - это рубли
29 aleks_default
 
25.11.15
14:57
может бан?
30 Мэс33
 
25.11.15
14:59
(28) тьфуить.
Ну неважно.
Переводишь в рубли и аналогично.
Остаток в копейках - на последнюю строчку.
31 Мэс33
 
25.11.15
15:00
(28) Хотя какая разница? Рубли-евро? Тебе по условию надо было правильно распределить 7 500 000? Верно? Используя какой-нибудь базис для распределения. Тебе уже подсказали - как это делается.
32 skupidom5
 
25.11.15
15:08
спасибо
33 shuhard
 
25.11.15
15:15
(1) у него среднепи..здобольное
34 mTema32
 
25.11.15
15:39
(24) Это из БСП.
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой