Имя: Пароль:
1C
1С v8
Подскажите с запросом
,
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) будто запрос в субд не перебор делает.
если вводные данные находятся в таблице БД и надо их прочитать перед расчётами, то да. часть математики можно сгрузить на СУБД.
если вводная в табзнач или в ТЧ текущего объекта, и если вам не нужны подробности из таблиц БД, то самый рациональный ход = обойти всё перебором и быстренько посчитать.
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс