Имя: Пароль:
1C
1С v8
Запрос с вычитанием
0 mataranga
 
05.05.16
11:21
Доброе время суток,

Как составить запрос?
Есть таблица с суммами

3.234
2.000
1.000
1.130
2.300
1.000
2.000
и так далее

есть определенная сумма допустим 10.000 . и надо из 10.000 вычесть каждую строку и записать результат, если меньше 0 то остановится

3.234 6766
2.000 4766
1.000 3766
1.130 2636
2.300 336
1.000 0
2.000 0
1 mikecool
 
05.05.16
11:22
хорошая задача, делай
2 PR пять
 
05.05.16
11:23
Правильный ответ: не делать это в запросе.
3 andreymongol82
 
05.05.16
11:24
Это точно именно запросом надо сделать?
4 mikecool
 
05.05.16
11:24
+1 не знаешь, как это сделать в запросе - сделай постобработкой, будет быстрее
5 mataranga
 
05.05.16
11:25
если подсказок нет то придется делать не в запросе
6 AneJIbcuH
 
05.05.16
11:26
Таблица с суммами как получается?
7 mataranga
 
05.05.16
11:28
(6) таблица с суммами получается результатом других запросов
8 salvator
 
05.05.16
11:30
Можешь сделать в запросе, только все равно потом придется итоговую таблицу обрезать.
9 catena
 
05.05.16
11:31
(7)Запросом нужны будут номера строк или какой-то порядковый идентификатор.
10 AneJIbcuH
 
05.05.16
11:41
Исходных данных маловато, если просто числа, то вот я бы так сделал:

"ВЫБРАТЬ
    60 КАК ЧислоВычитаемое
ПОМЕСТИТЬ ВТ_ПервоеЧисло
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    РеализацияТоваровУслугТовары.Сумма
ПОМЕСТИТЬ ВТ_Числа
ИЗ
    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
ГДЕ
    РеализацияТоваровУслугТовары.Ссылка = &Ссылка
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_Числа.Сумма - ВТ_ПервоеЧисло.ЧислоВычитаемое КАК Результат
ИЗ
    ВТ_ПервоеЧисло КАК ВТ_ПервоеЧисло,
    ВТ_Числа КАК ВТ_Числа
ГДЕ
    ВТ_Числа.Сумма - ВТ_ПервоеЧисло.ЧислоВычитаемое > 0"
11 AneJIbcuH
 
05.05.16
11:42
Т.е. результат запроса сразу содержит только положительные значения. Второй пакет взял для примера (Типа таблица с суммами)
12 catena
 
05.05.16
11:48
(11)Надо вычесть каждую строку последовательно. ФИФО запросом.
13 andreymongol82
 
05.05.16
11:49
(10) Не, здесь последовательно надо вычитать из одной суммы суммы из таблицы
14 AneJIbcuH
 
05.05.16
11:52
(12) Ну хорошо, убираем ограничение на положительные. Второй пакет оставляем в своей сортировке. (13) Поменять местами Вычитаемое.
15 andreymongol82
 
05.05.16
11:55
(14) Тоже нет. Получается, что вычитаешь из 60 каждый раз сумму из строки. А надо:
1.60-сумма из строки 1
2.60-сумма из строки 1 - сумма из строки 2
и т.д.
16 AneJIbcuH
 
05.05.16
11:59
(15) Ага, понял.
17 andreymongol82
 
05.05.16
12:04
В принципе можно так.
Первый пакет запроса: нумеруем вычитаемую таблицу как-то
Второй пакет: полученную таблицу объединяем саму с собой по номеру строки суммируем суммы, условие номер строкитабл1>=номерстрокитабл2
Третий пакет: вот теперь полное объединение таблици из одной строки и таблицы, которую получили во втором пакете. Условие >0
18 Ildarovich
 
05.05.16
12:25
Это задача про нарастающий итог, ФИФО запросом и тому подобное. Самый быстрый способ решения запросом описан здесь: http://catalog.mista.ru/public/201526/ . Там же приведены ссылки на более простые способы.
19 mataranga
 
05.05.16
12:41
(18) да это то что нужно спасибо
20 andreymongol82
 
05.05.16
12:48
(18) А ведь верно. Способ в (17) не самый быстрый по производительности. Зато программируется быстрей ).
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.