|   |   | 
| 
 | Подскажите с запросом | ☑ | ||
|---|---|---|---|---|
| 0
    
        Juliette_ Juliette 08.07.23✎ 11:01 | 
        На входе есть таблица параметров начисления пени
 от 0 до 30 дней 5 % от 31 до 99999 дней 7% Есть сумма долга и дней просрочки. Пусть 1000 руб и 58 дней Хочется сделать расчет суммы пени запросом , а не простым перебором. Строкой получается 1000 * 30 * 5% + 1000 * 28 * 7% Можно ли реализовать это запросом или трудоемко? ) | |||
| 1
    
        Greeen 08.07.23✎ 11:06 | 
        Можно =)     | |||
| 2
    
        Juliette_ Juliette 08.07.23✎ 11:10 | 
        (1) не знаю как, можно примером?     | |||
| 3
    
        Greeen 08.07.23✎ 11:14 | 
        Как вариант
 1)Делаете первую временную таблицу, где дней просрочки меньше 30. В ней делаете итог по формуле 1000 * 30 * 5%, соотв. получаем Пени до 30 дней 2)Делаете вторую - там уже дней проcрочки больше 30, получаем Пени больше 30 дней 3)В итоговой таблице делаете сумму Пени | |||
| 4
    
        Juliette_ Juliette 08.07.23✎ 12:37 | 
        (3) спасибо, попробую собрать ВТ запросом в цикле     | |||
| 5
    
        ДедМорроз 08.07.23✎ 17:23 | 
        А почему сразу нельзя собрать таблицу,где сумма и число дней просрочки,а уже потом на эту таблицу наложить условия по дням ?     | |||
| 6
    
        Смотрящий 09.07.23✎ 09:50 | 
        Запрос.Текст = "
 |//////////////////////////////////////////////////////////////////////////////// |// Запрос 0 |ВЫБРАТЬ | ПорогиТаблица.ПорогДниНачало КАК ПорогДниНачало, | ПорогиТаблица.ПорогДниКонец КАК ПорогДниКонец, | ПорогиТаблица.ПорогПеняПроцент КАК ПорогПеняПроцент |ПОМЕСТИТЬ втПорогиТаблица |ИЗ | &ПорогиТаблица КАК ПорогиТаблица |; | |//////////////////////////////////////////////////////////////////////////////// |// Запрос 1 |ВЫБРАТЬ 0 КАК Цифра |ПОМЕСТИТЬ втЦифры |ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 1 |ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 2 |ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 3 |ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 4 |ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 5 |ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 6 |ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 7 |ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 8 |ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 9 |; | |//////////////////////////////////////////////////////////////////////////////// |// Запрос 2 |ВЫБРАТЬ ПЕРВЫЕ " + ПросрочкаДни + " | втЦифры1.Цифра + 10 * втЦифры2.Цифра + 100 * втЦифры3.Цифра КАК ДниНомер |ПОМЕСТИТЬ втМатрица |ИЗ | втЦифры КАК втЦифры1, | втЦифры КАК втЦифры2, | втЦифры КАК втЦифры3 |ГДЕ | НЕ (втЦифры1.Цифра + 10 * втЦифры2.Цифра + 100 * втЦифры3.Цифра = 0) |УПОРЯДОЧИТЬ ПО | ДниНомер |; | |//////////////////////////////////////////////////////////////////////////////// |// Запрос 3 |ВЫБРАТЬ | втМатрица.ДниНомер КАК ДниНомер, | &ПросрочкаСумма КАК Сумма, | втПорогиТаблица.ПорогПеняПроцент КАК ПеняПроцент, | &ПросрочкаСумма / 100 * втПорогиТаблица.ПорогПеняПроцент КАК ПеняСумма |ИЗ | втМатрица КАК втМатрица | | ЛЕВОЕ СОЕДИНЕНИЕ втПорогиТаблица КАК втПорогиТаблица | ПО втМатрица.ДниНомер >= втПорогиТаблица.ПорогДниНачало | И втМатрица.ДниНомер <= втПорогиТаблица.ПорогДниКонец |УПОРЯДОЧИТЬ ПО | втМатрица.ДниНомер |"; Запрос.УстановитьПараметр("ПросрочкаСумма ", 1000); Запрос.УстановитьПараметр("ПорогиТаблица", ПорогиТаблица); ПорогиТаблица: ПорогДниНачало - число, количество дней начала периода просрочки ПорогДниКонец- число, количество дней окончание периода просрочки ПорогПеняПроцент - число, процент пени за период | |||
| 7
    
        егаис 10.07.23✎ 08:19 | 
        (6) это очень красиво, спасибо
 с небольшими вставками (ставка рефинансирования) все работает | |||
| 8
    
        егаис 10.07.23✎ 08:20 | 
        от коллеги привет )     | |||
| 9
    
        Конструктор1С 10.07.23✎ 19:18 | 
        >>Хочется сделать расчет суммы пени запросом , а не простым перебором
 Ради чего? Чтобы вместо простого алгоритма в коде получить уродливый запрос? Фигнёй не надо страдать | |||
| 10
    
        Конструктор1С 10.07.23✎ 19:19 | 
        (7) чем красиво?     | |||
| 11
    
        mistеr 11.07.23✎ 08:23 | 
        (9) Чтобы когда придется менять алгоритм, снова его позвали, а не студента.     | |||
| 12
    
        Андрей_Андреич naïve 11.07.23✎ 08:28 | 
        (9) А никто фигней и не страдает - ей наслаждаются     | |||
| 13
    
        ASU_Diamond 11.07.23✎ 08:29 | 
        (0) Если таблица статична для всех, то всё делается математикой     | |||
| 14
    
        Конструктор1С 11.07.23✎ 10:05 | 
        (11) ну разве что     | |||
| 15
    
        Simod 11.07.23✎ 10:11 | 
        (0) Использование запроса оправдано в случае, если осуществляется выборка данных и одновременно расчет пени. Иначе, лишний переход с сервера приложения на сервер СУБД с сопутствующими накладными расходами.     | |||
| 16
    
        lodger 11.07.23✎ 10:14 | 
        (0) будто запрос в субд не перебор делает.
 если вводные данные находятся в таблице БД и надо их прочитать перед расчётами, то да. часть математики можно сгрузить на СУБД. если вводная в табзнач или в ТЧ текущего объекта, и если вам не нужны подробности из таблиц БД, то самый рациональный ход = обойти всё перебором и быстренько посчитать. | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |