|
v7: Не получается сделать умножение в запросе 7.7 | ☑ | ||
---|---|---|---|---|
0
Prog111
31.03.16
✎
08:01
|
В ТиС 9.2 есть типовой отчет "ОтчетПоПродажамТМЦ". Информация по продажам берется из регистров накопления.
Хочу сделать следующее - у каждого родителя номенклатуры есть реквизит "процент". Этот процент я хочу умножить на величину продаж и получить эти цифры в группировках. Привожу весь запрос: ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с ДатаНачала по ДатаКонца; |Фирма = Регистр.ПартииНаличие.Фирма, | Регистр.ПартииОтданные.Фирма; |УпрАналитика = Регистр.ПартииНаличие.Фирма.УпрАналитика, | Регистр.ПартииОтданные.Фирма.УпрАналитика; |ЮрЛицо = Регистр.ПартииНаличие.Фирма.ЮрЛицо, | Регистр.ПартииОтданные.Фирма.ЮрЛицо; |СтатусПартии = Регистр.ПартииНаличие.СтатусПартии, | Регистр.ПартииОтданные.СтатусПартии; |Номенклатура = Регистр.ПартииНаличие.Номенклатура, | Регистр.ПартииОтданные.Номенклатура; |ТипНоменклатуры= Регистр.ПартииНаличие.Номенклатура.Родитель.ТипНоменклатуры, | Регистр.ПартииОтданные.Номенклатура.Родитель.ТипНоменклатуры; |ПроцентТипаНоменклатуры = Регистр.ПартииНаличие.Номенклатура.Родитель.ТипНоменклатуры.Процент, | Регистр.ПартииОтданные.Номенклатура.Родитель.ТипНоменклатуры.Процент; |СвойствоТМЦ = Регистр.ПартииНаличие.Номенклатура.ОсновноеСвойство.ЗначениеСвойства, | Регистр.ПартииОтданные.Номенклатура.ОсновноеСвойство.ЗначениеСвойства; |МОЛ_Комиссионер= Регистр.ПартииНаличие.МОЛ, | Регистр.ПартииОтданные.Договор.Владелец; |СвойствоПокупателя = Регистр.ПартииНаличие.ТекущийДокумент.Реализация.Контрагент.ОсновноеСвойство.ЗначениеСвойства, | Регистр.ПартииНаличие.ТекущийДокумент.РеализацияРозница.Контрагент.ОсновноеСвойство.ЗначениеСвойства, | Регистр.ПартииНаличие.ТекущийДокумент.ОтчетККМ.Контрагент.ОсновноеСвойство.ЗначениеСвойства, | Регистр.ПартииНаличие.ТекущийДокумент.РеализацияПрочее.Контрагент.ОсновноеСвойство.ЗначениеСвойства, | Регистр.ПартииНаличие.ТекущийДокумент.ВозвратОтПокупателя.Контрагент.ОсновноеСвойство.ЗначениеСвойства, | Регистр.ПартииОтданные.ТекущийДокумент.ОтчетКомиссионера.Контрагент.ОсновноеСвойство.ЗначениеСвойства; |Покупатель = Регистр.ПартииНаличие.ТекущийДокумент.Реализация.Контрагент, | Регистр.ПартииНаличие.ТекущийДокумент.РеализацияРозница.Контрагент, | Регистр.ПартииНаличие.ТекущийДокумент.ОтчетККМ.Контрагент, | Регистр.ПартииНаличие.ТекущийДокумент.РеализацияПрочее.Контрагент, | Регистр.ПартииНаличие.ТекущийДокумент.ВозвратОтПокупателя.Контрагент, | Регистр.ПартииОтданные.ТекущийДокумент.ОтчетКомиссионера.Контрагент; |Проект = Регистр.ПартииНаличие.ТекущийДокумент.Проект, | Регистр.ПартииОтданные.ТекущийДокумент.Проект; |Автор = Регистр.ПартииНаличие.ТекущийДокумент.Автор, | Регистр.ПартииОтданные.ТекущийДокумент.Автор; |Поставка = Регистр.ПартииНаличие.Партия, | Регистр.ПартииОтданные.Партия; |СвойствоПартии = Регистр.ПартииНаличие.Партия.Свойство, | Регистр.ПартииОтданные.Партия.Свойство; |Поставщик = Регистр.ПартииНаличие.Партия.Поставщик, | Регистр.ПартииОтданные.Партия.Поставщик; |ДокПоставки = Регистр.ПартииНаличие.Партия.ПриходныйДокумент, | Регистр.ПартииОтданные.Партия.ПриходныйДокумент; |КодОперации = Регистр.ПартииНаличие.КодОперации, | Регистр.ПартииОтданные.КодОперации; |НомерСтроки = Регистр.ПартииНаличие.НомерСтроки, | Регистр.ПартииОтданные.НомерСтроки; |Договор = Регистр.ПартииОтданные.Договор; |ВалВзаим = Регистр.ПартииОтданные.Договор.ВалютаВзаиморасчетов; |Док = Регистр.ПартииНаличие.ТекущийДокумент, | Регистр.ПартииОтданные.ТекущийДокумент; |Сумма1 = Регистр.ПартииНаличие.СуммаРуб, | Регистр.ПартииОтданные.СуммаРуб; |Сумма2 = Регистр.ПартииНаличие.СуммаБезНДС, | Регистр.ПартииОтданные.СуммаБезНДС; |Сумма3 = Регистр.ПартииНаличие.СуммаУпр, | Регистр.ПартииОтданные.СуммаУпр; |Оборот = Регистр.ПартииНаличие.ПродСтоимость; |ОборотКом = Регистр.ПартииОтданные.ПродСтоимость;"; ТекстЗапроса = ТекстЗапроса + "Количество = Регистр.ПартииНаличие.Количество, Регистр.ПартииОтданные.Количество;"; Если ВидСуммы = 1 Тогда // бух с НДС ТекстЗапроса = ТекстЗапроса + "Сумма = Регистр.ПартииНаличие.СуммаРуб, Регистр.ПартииОтданные.СуммаРуб;"; ИначеЕсли ВидСуммы = 2 Тогда // бух без НДС ТекстЗапроса = ТекстЗапроса + "Сумма = Регистр.ПартииНаличие.СуммаУпр, Регистр.ПартииОтданные.СуммаУпр;"; КонецЕсли; ТекстЗапроса = ТекстЗапроса + "Функция ПриходС = Приход(Сумма); |Функция РасходС = Расход(Сумма); |Функция ПриходК = Приход(Количество); |Функция РасходК = Расход(Количество); |Функция ВозвратК = Приход(Количество)Когда(КодОперации в КодыВозвратов); |Функция ВозвратС = Приход(Сумма)Когда(КодОперации в КодыВозвратов); |Функция РасходБезНДС = Расход(Сумма2); |Функция РасходСНДС = Расход(Сумма1); |Функция ВозвратБезНДС = Приход(Сумма2)Когда(КодОперации в КодыВозвратов); |Функция ВозвратСНДС = Приход(Сумма1)Когда(КодОперации в КодыВозвратов); |Функция ОборотСумма = Сумма(Оборот)Когда(КодОперации в КодыОборота); |Функция ОборотУпр = Сумма(ПересчетВалюты(Оборот, Док))Когда(КодОперации в КодыОборота); |Функция ОборотКомРасход = Сумма(ПересчетВалюты(ОборотКом, Док, ВалВзаим, глРубли))Когда(КодОперации = глКО.ОтчетРеализатора); |Функция ОборотКомРасходУпр = Сумма(ПересчетВалюты(ОборотКом, Док, ВалВзаим, глДоллары))Когда(КодОперации = глКО.ОтчетРеализатора); |Функция ОборотВ = Сумма(Оборот)Когда(КодОперации в КодыВозвратов); |Функция ОборотУпрВ = Сумма(ПересчетВалюты(Оборот, Док))Когда(КодОперации в КодыВозвратов); |Функция ПриходПроцент = Приход(Оборот * ПроцентТипаНоменклатуры); |Условие (НЕ(КодОперации в КодыПеремещений));"; Возврат ТекстЗапроса; |
|||
1
Prog111
31.03.16
✎
08:02
|
(0) И вот это выражение не срабатывает, выходит ошибка.
|Функция ПриходПроцент = Приход(Оборот * ПроцентТипаНоменклатуры); Причем не работает и такие выражения: |Функция ПриходПроцент = Приход(Запрос.Оборот * ПроцентТипаНоменклатуры); |Функция ПриходПроцент = Приход(ОборотСумма * ПроцентТипаНоменклатуры); |
|||
2
Mikeware
31.03.16
✎
08:04
|
И не будут
|
|||
3
ЧеловекДуши
31.03.16
✎
08:06
|
(0) Не страдайте, делайте все в циклах, при выводе на печатную форму :)
|
|||
4
Prog111
31.03.16
✎
08:07
|
(3) В похожих темах примерно такие же выражения - и, говорят, всё работало)
|
|||
5
mgk2
31.03.16
✎
08:08
|
(1) такие фокусы возможны только в функции сумма()
|
|||
6
Prog111
31.03.16
✎
08:10
|
(3) Этот отчет весьма универсален, там много фильтров, группировки могут меняться местами, под каждую настройку придется писать километр своего кода...
К тому же там итоги по группировкам выводятся прежде детальных записей, в которых можно произвести это умножение вне запроса. Соответственно - как тогда посчитать умножение и итоги, если верхние группировки уже выведены, а в детальных записях я ещё ничего не умножил и не просчитал? |
|||
7
Prog111
31.03.16
✎
08:12
|
(5) 1С почему-то вылетает, когда ставлю "Сумма" вместо "Приход".
|
|||
8
Ёпрст
31.03.16
✎
08:12
|
(0)
|Функция Вася = Сумма(Запрос.Оборот * ПроцентТипаНоменклатуры); |
|||
9
Ёпрст
31.03.16
✎
08:13
|
но, в данном случае, работать будет некорректно
|
|||
10
Prog111
31.03.16
✎
08:16
|
(9) Из-за округления? Или по сути неправильно?
|
|||
11
Mikeware
31.03.16
✎
08:18
|
(6) Делайте прямыми запросами. там можно все. Ну, или почти все.
|
|||
12
Mikeware
31.03.16
✎
08:18
|
(10) разрядность теряется.
|
|||
13
VladZ
31.03.16
✎
08:19
|
(0) Запрос в 7.7 ущербный. Не нужно его насиловать. Либо делать пересчет в цикле, либо использовать другие механизмы. Прямые запросы, например.
|
|||
14
Prog111
31.03.16
✎
08:21
|
(13) Хотелось бы всё сделать на основе типового отчета, ибо иначе придется много чего писать...
|
|||
15
Mikeware
31.03.16
✎
08:22
|
(14) выгружай в индексированную таблицу, умножай, группируй как в запросе и выводи группировки ИТЗ вместо группировок запроса
|
|||
16
Ёпрст
31.03.16
✎
08:22
|
(10) округление, это детский сад, которое обходится в самом запросе.
Сам принцип, как и что считает сумма в запросе - из-за остальных функций, расчет будет не верным. |
|||
17
Mikeware
31.03.16
✎
08:23
|
(14) а ты думал, что в сказку попал?
|
|||
18
Mikeware
31.03.16
✎
08:23
|
(16) я так и не знаю язык черных запросов :-)
|
|||
19
Ёпрст
31.03.16
✎
08:24
|
(18) да че там знать то ? Написал че нить, посмотрел в профайлер, понял, что шляпа - переписал на прямой и забыл :)
|
|||
20
Ёпрст
31.03.16
✎
08:24
|
Хотя некоторые вещи, в чорном, мне нравятся - иерархия всего и вся, к примеру.
|
|||
21
Ёпрст
31.03.16
✎
08:25
|
ну и всяческие извраты, в виде функций сумма и т.д..
|
|||
22
Mikeware
31.03.16
✎
08:28
|
(19)я первые два пункта пропускал обычно :-)
(20) Ну да. Если вручную в запросах, то иерархию делать геморно - приходится в ИТЗ, и там уже... |
|||
23
Ёпрст
31.03.16
✎
08:30
|
Ну, иерархию в запросе тоже можно, если как ADirks делает - отдельная табличка с группами, и триггер на её заполнение, при изменении основной таблички
|
|||
24
Mikeware
31.03.16
✎
08:32
|
(23) мне вот сейчас файловая база досталась на перевод на Упыпырище® - там триггеров не налепишь.:-(
вообще, без прямых запросов как без прямых рук. |
|||
25
Ёпрст
31.03.16
✎
08:34
|
(24) ну, на sqlite пиши, там проще, чем на оледб..+ можно ТЗ сразу в запрос пихать во временную табличку.
|
|||
26
Mikeware
31.03.16
✎
08:36
|
(25)Ну вот поэтому до тебя и докапывался...
сейчас пробую как раз. а вот вандаловский класс запустить не могу из-за контролов :-( впрочем, мне нужно еще и запись, поэтому sqlite не ограничусь.... |
|||
27
Ёпрст
31.03.16
✎
08:44
|
(26) аа..
на вот, залипуха, мот пригодится, сравнение по скорости фокса и скульлайта на простом запросе к регистру в типовой. https://cloud.mail.ru/public/AeJK/71o1vuzd1 |
|||
28
Mikeware
31.03.16
✎
09:12
|
(27) примеры я люблю :-) Спасибо.
вопросик: а виртуальные значения видов документов и справочников в 1sqlite есть? ну, в смысле where Журнал.iddocdef=$ВидДокумента.Реализация (в chm'е не нашел ответа, и в запросе не работает) |
|||
29
Ёпрст
31.03.16
✎
09:27
|
(28) есть
|
|||
30
Ёпрст
31.03.16
✎
09:31
|
смотри в chm
объекты компоненты - Объект sqlliteQuery - Подставлять - предопределнные текстовые параметры |
|||
31
Ёпрст
31.03.16
✎
09:31
|
ВидДокумента / DocumentKind
Подстановка идентификатора указанного вида документа: :ВидДокумента|DocumentKind.ИмяДокумента[~] При нулевом модификаторе подставляется строка длиной 4 символа - идентификатор вида документа в 36ричной записи При модификаторе 1 подставляется целое число - идентификатор вида документа. |
|||
32
Ёпрст
31.03.16
✎
09:32
|
ну, и для sqllite пиши лучше через :, заместо $
|
|||
33
Mikeware
31.03.16
✎
09:33
|
(32) понял, спрасибо. получилось
|
|||
34
Mikeware
31.03.16
✎
09:33
|
ну все, понеслась *она* по кочкам...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |