|
v7: Требуется помощь гуру запросов | ☑ | ||
---|---|---|---|---|
0
lamo4ok
09.09.14
✎
10:31
|
Суть такова.
Есть отчет, очень криво написанный, который еще чуть-чуть и захочется написать с нуля самому. В нем есть запрос, который проходит по неким документам, среди которых есть документ РасходнаяНакладная. Отчет, понятное дело, считает некие суммы по этим документам, включая документ РасходнаяНакладная. Проблема с этим документом такая, что с помощью него когда-то было придумано делать корректировки продаж, сделанные ранее, и для этого у него свой механизм. Механизм заключается в следующем - у данного документа есть реквизит ПризнакНакладной, который бывает установлен в Пересисление.ПризнакиНакладных.Корректировка. Когда это так, то в накладной у строк появляется признак "Знак", который регулирует, в какую сторону корректирует строка. Таким образом, мы можем ввести строку с одним и тем же товаром сначала в минус, "отменив" его продажу по старой цене, а потом со знаком плюс, сделав новую продажу по новой цене, но оставив количество тем же самым. Или, например, просто скорректировав продажу на какое-то количество по какой-то цене. Выглядит это примерно так: Знак: Минус | Товар: Товар1 | Количество: 500 | Цена: -10 000 Знак: Плюс | Товар: Товар1 | Количество: 500 | Цена: 11 000 Знак: Минус | Товар: Товар2 | Количество: 500 | Цена: -7 000 Проблема тут в том, что какой-то нехороший человек придумал, что суммы будут указываться так, как и подсказывает логика, а вот количество будет везде положительным. Это, естественно, учтено в алгоритме работы документа, там где нужно на самом деле количество скорректировать в минус, оно и корректируется в минус. Но проблема в том, что когда мы проходим этот документ в запросе, цена суммируется верно, а вот количество считается неверно, в строках, где оно должно быть отрицательным, оно таковым не является. Менять логику работы документа уже давно поздно. Приходится менять отчеты. С отчетом проблема в том, что он использует громадный запрос в разных его вариациях и переписывать его на отчет с помощью выборки документов - это все равно, что переписать отчет целиком. Отлавливать такие документы в момент обхода выгрузки запроса тоже бесполезно, так как на более высоких уровнях иерархии запроса документ просто не рассматривается, суммы могут считаться на уровне торгового представителя, клиента, договора, фирмы. Остается только один путь - поправить функции подсчета сумм количества в запросе таким образом, чтобы они в тот момент, когда у документа стоит признак "Корректировка", а в строке сумма с минусом, считали указанное в этой строке количество тоже отрицательным. Но как это сделать, как в функции запроса 7.7 указать условие, я без понятия. Есть идеи? |
|||
1
Ёпрст
09.09.14
✎
10:34
|
Пересисление...
|
|||
2
Ёпрст
09.09.14
✎
10:35
|
В запросе
Количество = Количество*Знак.. |
|||
3
Ёпрст
09.09.14
✎
10:35
|
усё
|
|||
4
lamo4ok
09.09.14
✎
10:36
|
(2) Проблема в том, что Знак - это на самом деле Перечисление.ВидыОплаты.Возврат или Перечисление.ВидыОплаты.Оплата. Можно как-то выйти из этой ситуации?
|
|||
5
Ёпрст
09.09.14
✎
10:37
|
Ну или так
Вася = Документ.Вася.Знак; Функция Вася = Сумма(?(вася=Пересисление...,1,-1)*Количество); |
|||
6
vde69
09.09.14
✎
10:37
|
(0) зачем ты описываешь как работает документ???
ОТЧЕТЫ не должны брать данные из документов. Отчеты должны брать данные из регистров!!! у тебя путь один - пойти на курсы по 1с.... |
|||
7
DCKiller
09.09.14
✎
10:38
|
(6) По 7.7 курсы уже не ведут... увы
|
|||
8
lamo4ok
09.09.14
✎
10:39
|
(6) Очень умный совет, молодец. Теперь представь, что писалось это все задолго до меня.
|
|||
9
lamo4ok
09.09.14
✎
10:39
|
(5) Чувак, ты как всегда крут. Захотелось прям перевести куда-нибудь денег на поддержку форума или тебя лично ;)
|
|||
10
Андрей_Андреич
naïve
09.09.14
✎
10:40
|
(6) Соглашусь. Толку делать такой отчет - запутаешься в следующий раз еще глубже а потом енеджеры еще пару галочек придумают
(7) Курсы не нужны - читать (6) 100 раз в день как намаз и все |
|||
11
lamo4ok
09.09.14
✎
10:42
|
(10) Да читайте вы уже ТЗ в посте - я исправляю косяк в данном отчете, а не пишу документ заново или сам отчет. Посоветовать закончить курсы 1С и научиться писать документы и отчеты я сам знаю кому посоветовать, только они работают уже в других местах.
|
|||
12
Builder
09.09.14
✎
10:46
|
Есть замечательное слово в функции - КОГДА.
Функция Возвраты = Сумма(Количество) КОГДА ВидОплаты = Перечисление.ВидыОплаты.Возврат; Как то так. |
|||
13
lamo4ok
09.09.14
✎
10:48
|
(12) Тоже спасибо!
|
|||
14
Ёпрст
09.09.14
✎
10:53
|
(12) так не катит, так будут 2 функции, а нужна одна.
|
|||
15
Ёпрст
09.09.14
✎
10:54
|
это хорошо, когда отдельно надо - возврат и продажа, к примеру.
|
|||
16
Builder
09.09.14
✎
10:55
|
(15) Что мешает вычесть из одного другое перед выводом?
|
|||
17
Builder
09.09.14
✎
10:57
|
(14) Кому нужна одна функция?
|
|||
18
elCust
09.09.14
✎
10:58
|
Что ж такое, на третьем абзаце засыпаю.
|
|||
19
lamo4ok
11.09.14
✎
15:41
|
(16) Кривая реализация. В общем, решилось все по варианту Ёпрст.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |