Имя: Пароль:
1C
1С v8
v8: Запрос. обороты регистра накопления
,
0 MistaEr
 
18.10.13
11:27
Доброго времени!
Хочу отобрать обороты регистра накопления (снизу), пока сумма оборота (накопительная) не превысит заданную сумму. Как правильно реализовать эту задачу?
1 PR
 
18.10.13
11:29
(0) Выбрать с сортировкой и перебирать, пока не всё.
2 MistaEr
 
18.10.13
11:34
а где указать в запросе ПОКА НЕ ВСЕ, и копить накопительную
3 MistaEr
 
18.10.13
11:38
Надо бы этот отчет на СКД сделать, не хотелось бы с циклами связываться
4 zmaximka
 
18.10.13
11:41
(2) это надо в пятничную ветку срочно
5 viktor_vv
 
18.10.13
11:41
Отбираешь во временную с сортировкой по возрастанию, потом соединяешь ее саму с собой вроде как левым с условием

Т1.Сумма > Т2.Сумма

В Выбрать
Сумма(Т2.Сумма)

и в условии

Имеющие Сумма(Т2.Сумма) < ТвойКритерий

Это очень схематично, без претензии на истинность.
6 viktor_vv
 
18.10.13
11:42
И группировать по полям Т1.
7 Asmody
 
18.10.13
11:43
пример:
дано: Таблица Т с полями ПолеДляПодсчета, ПолеДляСортировки
требуется: набрать сумму ПолеДляПодсчета по записям в порядке ПолеДляСортировки
решение:

ВЫБРАТЬ
  Т.ПолеДляСортировки,
  СУММА(Т1.ПолеДляПодсчета)
ИЗ Т как Т
СОЕДИНЕНИЕ Т как Т1 ПО Т.ПолеДляСортировки >= Т1.ПолеДляСортировки
СГРУППИРОВАТЬ ПО Т.ПолеДляСортировки ИМЕЮШИЕ СУММА(Т1.ПолеДляПодсчета)<= &НужнаяСумма
УПОРЯДОЧИТЬ ПО Т.ПолеДляСортировки
8 Asmody
 
18.10.13
11:43
с вас 100 баксов
9 PR
 
18.10.13
11:43
(2) Нигде
10 mrDSide
 
18.10.13
11:45
(0) А какие именно данные хотите выбирать? т.е. документы (регистратор) или как? только приход/расход?
11 MistaEr
 
18.10.13
11:49
ВЫБРАТЬ
    РегОбороты.Контрагент,
    РегОбороты.Регистратор КАК Регистратор,
    РегОбороты.СуммаВзаиморасчетовПриход КАК СуммаРеализации
ИЗ
    РегистрНакопления.РегОбороты.Обороты(, , Регистратор, ) КАК РегОбороты

УПОРЯДОЧИТЬ ПО
    Регистратор УБЫВ
АВТОУПОРЯДОЧИВАНИЕ

что то такое вот
12 mrDSide
 
18.10.13
11:51
(11) Ну да, если ИБ небольшая - самое оно))) всего-то все обороты по регистру выбрать, упорядочить, а потом еще какие-то манипуляции производить))
13 MistaEr
 
18.10.13
11:52
(4)    zmaximka лезет во все темы и пишет всякую фигню
14 MistaEr
 
18.10.13
11:52
(12) Все обороты не совсем конечно хорошо
15 Asmody
 
18.10.13
11:55
(12) сохранить обороты за нужный период в ВТ не предлагать?
16 mrDSide
 
18.10.13
11:57
(14) Так может, все-таки, уточните, что я просил в (10)
17 viktor_vv
 
18.10.13
11:58
(11) В в твоем случае проблема будет с полем для сортировки. Тебе ж надо будет сортировать по убыванию суммы, на случай одинаковых сумм в это поле надо добавиь еще какой-то уникальный признак.
Учитывая проблематичность преобразования типов в запросе хрен его знает как это сделать.
18 MistaEr
 
18.10.13
12:00
(16) Контрагент Регистратор СуммаПРиход
19 mrDSide
 
18.10.13
12:27
Подойдет (11). Только:
- выбирать не обороты, а записи регистра с условиями по контрагенту и виду движения;
- добавить цикл вида
Пока СуммаПроверки Цикл
    //Начало=...отнять произвольный период(месяц)
    Если Начало<ДатаДальшеНеКуда Тогда
        Прервать
    КонецЕсли;
    Запрос.УстановитьПараметр("Начало",Начало);
    Запрос.УстановитьПараметр("Конец",Конец);
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
        СуммаПроверки-=Выборка.Сумма;
        Если СуммаПроверки<0 Тогда
            Прервать
        КонецЕсли
    КонецЦикла;
КонецЦикла
20 MistaEr
 
18.10.13
14:02
Использовал(5) и (7). Всем спасибо!!