Имя: Пароль:
1C
1С v8
Как такое можно сделать запросом?
0 VKS
 
27.03.25
12:35
Добрый день. Подскажите, пожалуйста, как такой код можно сделать запросом?

Итого = 0;

Для Сч = 1 По 1000 Цикл
    
    Если Сч <= 100 Тогда
        Сумма = 1;
    ИначеЕсли Сч <= 150 Тогда
        Сумма = 2;
    ИначеЕсли Сч <= 200 Тогда
        Сумма = 3;
    ИначеЕсли Сч <= 250 Тогда
        Сумма = 4;
    ИначеЕсли Сч >= 251 Тогда
        Сумма = 5;
    КонецЕсли;
    
    Итого = Итого + Сумма;
    
КонецЦикла;

Сообщить(Итого);
1 Волшебник
 
27.03.25
12:39
зачем?
2 Stepashkin
 
27.03.25
12:40
(1) Такой же вопрос.
3 2S
 
27.03.25
12:41
Загнать в ВТ от 1 до 1000
Потом выборка из ВТ через "Выбора когда" и просуммировать.
4 VKS
 
27.03.25
12:42
Есть практическая задача, в которой все считается в запросе, кроме одного показателя, который рассчитывается по этому алгоритму. Не могу понять как его тоже засунуть в расчет, чтобы дальше уже рассчитанный показатель использовать в запросе
5 KJlag
 
27.03.25
12:47
*нет, ступил. можно удалить сообщение
6 VKS
 
27.03.25
12:47
Условно, у меня в запросе есть поле, которое показывает, к примеру 350. Пусть будет 350 яблок. За первые 100 собранных яблок я получил по 1 рублю за сборку. За яблоки с 101 по 150 я получаю по 2 рубля за сборку и т.д. Максимально начиная с 251 яблока я получаю по 5 рублей за каждое собранное яблоко.

Так я получил сумму за собранные яблоки. Дальше эта сумма в запросе считается по другим фруктам и овощам и в конце я прихожу к какой-то итоговой сумме
7 1Сергей
 
27.03.25
12:47
ВЫБРАТЬ
    4300 КАК Итог
8 toypaul
 
гуру
27.03.25
12:53
100 * 1 + 50 * 2 + 50 * 3 + 50 * 4 + (N - 250) * 5
9 Garykom
 
гуру
27.03.25
13:05
(6) Можно но сложно
Извращение будет еще то и не гибкое

Лучше отдельно кодом рассчитать таблицу коэффициентов
Засунуть ее как ВТ в запрос и соединять

Фактически тебе для некоего числа надо вычислить функцию от этого числа
Т.к. функция интервальная то можно подготовить таблицу параметров для использования:
1|100|1
101|150|2
...
251|NULL|5

Затем соединяешь хитрым образом (выбор когда.. тогда..) по условиям, получая в несколько колонок последовательно нужные цифры

Например для 350:
350|100*1|50*2|...|(350-250) * 5

Ну и в конце просуммировать
10 Dmitrii
 
гуру
27.03.25
13:08
(6) Что-то типа такого

ВЫБОР
  КОГДА КоличествоЯблок <= 100 ТОГДА КоличествоЯблок * 1
  КОГДА КоличествоЯблок <= 150 ТОГДА 100 * 1 + (КоличествоЯблок - 100) * 2
  КОГДА КоличествоЯблок <= 200 ТОГДА 100 * 1 + 50 * 2 + (КоличествоЯблок - 150) * 3
  КОГДА КоличествоЯблок <= 250 ТОГДА 100 * 1 + 50 * 2 + 50 * 3 + (КоличествоЯблок - 200) * 4
  КОГДА КоличествоЯблок > 250 ТОГДА 100 * 1 + 50 * 2 + 50 * 3 + 50 * 4 + (КоличествоЯблок - 250) * 5
  ИНАЧЕ 0
КОНЕЦ КАК Итог
11 Garykom
 
гуру
27.03.25
13:09
(9)+ Если числа условно "небольшие"
То можно как ВТ передавать (или даже хранить в базе) уже полностью рассчитанную таблицу
1 - 1
2 - 2
3 - 3
...
100 - 100
101 - 102
102 - 104
...

тогда банальное соединение даст искомое число
но табличка может быть великовата
как и долгий ее расчет - заполнение
12 Garykom
 
гуру
27.03.25
13:10
(10) Совершенно негибко
Параметры расчета хранить внутри запросов изврат

Конечно может быть выходом текст запроса кодом формировать
13 Garykom
 
гуру
27.03.25
13:11
(12)+ Если кол-во скачков (добавляемых колонок) заранее известно проще (9)
А сами пороги (от/до) и коэффициенты могут легко меняться и браться из ВТ
14 Мультук
 
гуру
27.03.25
13:12
(12)

Имхо, интервальная таблиц плюс код, который будет автоматом по этой таблице генерировать текст запроса из (10)

P.S.
Пока писал, все всё уже посоветовали :-(
15 VKS
 
27.03.25
14:47
Идея понятна, всем спасибо
Ошибка? Это не ошибка, это системная функция.