Имя: Пароль:
1C
1C 7.7
v7: Условие при выборе полей в запросе
0 OnePrg
 
26.11.20
12:36
Подскажите пожалуйста как лучше реализовать такой запрос

    ТекстЗапроса="//{{ЗАПРОС(ПриходныеНакладные)
    |Период с ДатаНачала по ДатаОкончания;
    |Товар                     = Документ.ПриходнаяНакладная.Товар;
    |ЭтоВозврат                 = Документ.ПриходнаяНакладная.ВидОперации;
    |Количество                 = ?(ЭтоВозврат=0,1,-1) * Документ.ПриходнаяНакладная.Количество;
    |Функция СуммаКоличество             = Сумма(Количество);
    |Группировка Товар без групп;
    |"//}}ЗАПРОС

Нужно чтобы поле Количество принимало минус, если это документ возврата. Пробовал вставить свою функцию - не принимает.
1 Андрей_Андреич
 
naïve
26.11.20
12:40
|Функция СуммаКоличество             = Сумма(Количество) КОГДА (Документ.ПриходнаяНакладная.ВидОперации=чему-то там)
2 Андрей_Андреич
 
naïve
26.11.20
12:41
А лучше просто
Условие (ЭтоВозврат=1)
3 Андрей_Андреич
 
naïve
26.11.20
12:42
А у тебя видоперации это 1 или 0 или какое-то перечисление?
4 OnePrg
 
26.11.20
12:46
(1) А вот так как сделать?

Функция СуммаКоличество     = Сумма(Количество) КОГДА (Документ.ПриходнаяНакладная.ВидОперации = 0) + Сумма(-Количество) КОГДА (Документ.ПриходнаяНакладная.ВидОперации = 1)
5 OnePrg
 
26.11.20
12:46
(3) 0 или 1
6 OnePrg
 
26.11.20
12:48
(2) Условие мне отберёт или приход или возврат, а мне нужно сложить + приход, - возврат
7 Андрей_Андреич
 
naïve
26.11.20
12:51
Конечно это все не по фэншую. Но можно вычислить 2 суммы а потом вычесть :)
8 Андрей_Андреич
 
naïve
26.11.20
12:52
то есть функция пришло и функция ушло
9 OnePrg
 
26.11.20
12:53
(7)
    ТекстЗапроса="//{{ЗАПРОС(ПриходныеНакладные)
    |Период с ДатаНачала по ДатаОкончания;
    |Товар                         = Документ.ПриходнаяНакладная.Товар;
    |ЭтоВозврат                 = Документ.ПриходнаяНакладная.ВидОперации;
    |Количество                 = Документ.ПриходнаяНакладная.Количество;
    |Функция СуммаКоличествоПриход     = Сумма(Количество) КОГДА (Документ.ПриходнаяНакладная.ВидОперации = 0);
    |Функция СуммаКоличествоРасход     = Сумма(Количество) КОГДА (Документ.ПриходнаяНакладная.ВидОперации = 1);
    |СуммаКоличество =  СуммаКоличествоПриход - СуммаКоличествоРасход;
    |Группировка Товар без групп;
    |"//}}ЗАПРОС


     СуммаКоличество =   <<?>> СуммаКоличествоПриход - СуммаКоличествоРасход;
Запрос[13] : Неверно заданный путь 'СуммаКоличествоПриход'
Ошибок - 1, Предупреждений - 0.
10 Builder
 
26.11.20
12:55
(9) СуммаКоличество  уже вычисли при выводе отчета.
11 OnePrg
 
26.11.20
12:57
(10) не понял
12 OnePrg
 
26.11.20
12:58
ладно остановлюсь на двух суммах, отработаю их при выводе в отчет
13 johnnik
 
26.11.20
14:14
Скромненько вклинюсь:
Приходная накладная должна двигать регистры остатков на приход и расход, поэтому можно в запросе товары выбирать не из документов, а из регистра остатков. Главное - отличить поступления и возвраты от расхода, списания, возвратов от покупателя и т.п.
14 OnePrg
 
26.11.20
14:37
(13) да, только я запрос сократил для форума, а так полный набор полей запроса такой Фирма, Контрагент, Товар, Документ, Количество, Сумма". Я посчитал, что проще сделать запрос к документам.
15 Builder
 
26.11.20
14:50
(11) Что непонятного?
При выводе отчета пишешь
ТвоеНужноеКоличество = Запрос.СуммаКоличествоПриход - Запрос.СуммаКоличествоРасход;
16 OnePrg
 
26.11.20
15:52
(15) Так и сделал.

Всем спасибо.
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.