Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Расчет цены и/или кол-ва
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
bereznoy
Пример, необходимо выписать счет на сумму 1775,46 грн, расчитывается примерное количество вручную ("свои ньансы"), в кол-ве 4 знака после запятой, вообщем в данном случае 10 шт, 1с 1775,46/10 = 177,546 округляет до точности 2 знаков,
получаем цену 177,55 * 10 = сумма меняется на 1775,50, а надо именно 1775,46, вообщем надо написать код что б не меняя сумма выводилось
"Предупреждение" с текстом возможных КОЛИЧЕСТВО*ЦЕНА = 1775,46 ну и потом юзер поставил нужные цифры не высчитывая самому долго и нудно,
варинт 1*1775,46 = 1775,46 не вариант, я вот что то такое придумал пока, но думаю у Вас будут варианты эффективней
СтрокаТабличнойЧасти = ЭлементыФормы.Товары.ТекущиеДанные;
Если  СтрокаТабличнойЧасти.Сумма > 0 Тогда
СтрокаТабличнойЧасти.Цена =  СтрокаТабличнойЧасти.Сумма/СтрокаТабличнойЧасти.Количество;
Если СтрокаТабличнойЧасти.Цена*СтрокаТабличнойЧасти.Количество <> СтрокаТабличнойЧасти.Сумма
    Тогда

    Количество1 = СтрокаТабличнойЧасти.Количество;
    Количество2 = СтрокаТабличнойЧасти.Количество;
    Цена1 = СтрокаТабличнойЧасти.Цена;
    Цена2 = СтрокаТабличнойЧасти.Цена;
    
    Пока    Количество1*СтрокаТабличнойЧасти.Цена <> СтрокаТабличнойЧасти.Сумма
        ИЛИ Количество2*СтрокаТабличнойЧасти.Цена <> СтрокаТабличнойЧасти.Сумма
        ИЛИ СтрокаТабличнойЧасти.Количество*Цена1 <> СтрокаТабличнойЧасти.Сумма
        ИЛИ СтрокаТабличнойЧасти.Количество*Цена2 <> СтрокаТабличнойЧасти.Сумма
        ИЛИ Количество1*Цена1 <> СтрокаТабличнойЧасти.Сумма
        ИЛИ Количество2*Цена2 <> СтрокаТабличнойЧасти.Сумма
        ИЛИ Количество1*Цена2 <> СтрокаТабличнойЧасти.Сумма
        ИЛИ Количество2*Цена1 <> СтрокаТабличнойЧасти.Сумма

        Цикл
        
    Количество1 = Количество1 + 0.0001;    
    Количество2 = Количество2 - 0.0001;
    Цена1 = Цена1 + 0.01;
    Цена2 = Цена2 - 0.01;
    
КонецЦикла;
Предупреждение(" Предупреждение " );    
КонецЕсли;


При выполнении этого кода программа зависает 64000000.gif
logist
Вероятно цикл никогда не закончится smile.gif)
bereznoy
Цитата(logist @ 22.02.12, 21:29) необходимо зарегистрироваться для просмотра ссылки
Вероятно цикл никогда не закончится smile.gif)

Это ясно, а какие нибудь мысли есть, как сделать расчет?
logist
А почему нельзя просто поделить сумму на цену?
bereznoy
Цитата(logist @ 22.02.12, 21:47) необходимо зарегистрироваться для просмотра ссылки
А почему нельзя просто поделить сумму на цену?

а я ж писал в первом меседже, мне надо получить все возможные варианты количество*цену что бы получить мне нудную сумму, в моем варианте 1775,46
MATEVI
Глобальный контекст (Global context)
ВвестиЧисло (InputNumber)
Синтаксис:

ВвестиЧисло(<Число>, <Подсказка>, <Длина>, <Точность>)
Пример:

Количество = 1;
Если ВвестиЧисло(Количество, "Введите количество", 10, 2) Тогда
    // обработка введенного количества
КонецЕсли;


Это так к размышлениям. Я честно сказать идею не понял.
Ardi
Цитата
ВвестиЧисло()
+1
Когда не мог понять мега алгоритмы с подгонкой цифр - делел кнопку "Изменить поле" - и юзер по этой кнопке менял любые числа как нужно (при этом связанные поля не пересчитываются).
logist
Цитата(bereznoy @ 22.02.12, 22:03) необходимо зарегистрироваться для просмотра ссылки
надо получить все возможные варианты

Так возможных вариантов может быть тысячи и т.п...
Kaliban
Плевое дело:
сумма=1775,46
Множитель1=2    множитель2=887.73
Множитель1=3    множитель2=591.82
Множитель1=6    множитель2=295.91
Множитель1=127 множитель2=13.98
Множитель1=233 множитель2=7.62
Множитель1=254 множитель2=6.99
Множитель1=381 множитель2=4.66


алгоритм - самый тупой, "Перебор делителей"
хотите не тупой - обратитесь в университеты, они под ваше финансирование пару диссеров защитят.

код на диалекте 7.7
    сумма=;//задайте самостоятельно
    множительРазрядности=100;
    с1=сумма*множительРазрядности;
    предел=КвaдpaтныйКopeнь(с1);
     х=2;
     пока х<=предел Цикл
         
        частное=с1/х;
        остаток=Цел(частное)-(частное);
        Если остаток=0 Тогда
            Сообщить("Множитель1="+х+" множитель2="+частное/множительРазрядности);
        КонецЕсли;
        х=х+1;
    КонецЦикла;


результат работы я привел выше, можете проверить на калькуляторе.
nevs73
Просто в настройках поставьТЕ точность четыре после запятой!!!

 ! 

У нас не тыкают! Ознакомьтесь с правилами!
 
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.