|
v7: Класс. Прямой запрос. ВЫРАЗИТЬ в секции ГДЕ | ☑ | ||
---|---|---|---|---|
0
Asakra
23.10.13
✎
13:16
|
подскажите, пж. есть такой запрос:
"ВЫБРАТЬ | ЗП.Контрагент КАК [Контрагент :Справочник.Контрагенты], | ЗП.Сотрудник КАК [Сотрудник :Справочник.ФизЛица], | ЗП.ВидСтавкиЗП КАК [ВидСтавкиЗП :Перечисление._ВидыСтавокЗПОтПродаж], | ЗП.ТОПМенеджер КАК [ТОПМенеджер :Справочник.ФизЛица], | | ВЫБОР | КОГДА ЗП.ТОПМенеджер = :ПустойИД | ТОГДА 0 | ИНАЧЕ 1 | КОНЕЦ КАК ЭтоТОПМенеджер, | | ЗП.СуммаПродажиОстаток КАК [СуммаПродажи :Число.15.2], | ЗП.СуммаЗПОтПродажиОстаток КАК [СуммаЗП :Число.15.2] | |ИЗ | $РегистрОстатки.ЗарплатаОтПродаж(:Документ, | Контрагент В (ВЫБРАТЬ val ИЗ #СписокКонтрагентов), | (Контрагент,Сотрудник,ВидСтавкиЗП,ТОПМенеджер), (СуммаПродажи,СуммаЗПОтПродажи)) КАК ЗП | |ГДЕ | ВЫРАЗИТЬ(ЗП.СуммаПродажиОстаток КАК NUMERIC(15,2)) <> 0 |"; хочется откинуть СуммаПродажиОстаток = 0. если использую ROUND, то все гуд, а если CAST, то условие не отрабатывает. я как понимаю ROUND округляет, а типизация [Сумма :Число.15.2] просто откидывает лишнее (опасаюсь, что при условии с ROUND в результате Сумма будет = 0, т.к. при проверке округлится до 0.01). или я не прав и можно смело использовать ROUND? или как правильно написать условие с CAST? совсем уж не хочется при обходе результата проверять на равенство нулю :) База: DBF |
|||
1
Asakra
23.10.13
✎
15:10
|
ап
|
|||
2
Asakra
24.10.13
✎
08:51
|
ап
|
|||
3
ЧеловекДуши
24.10.13
✎
09:08
|
(2) Что АП?
Извращенец... Пиши лучше запрос на SQL, куда приятней :) |
|||
4
Asakra
24.10.13
✎
11:32
|
(3) обоснуй
|
|||
5
ЧеловекДуши
24.10.13
✎
11:39
|
(4) Я к тому, что ненужно себя ограничивать в запросах на МС-СКЛ, как это сделало 1С :)
В Прямых запросах под 1С 7.7, нужно жить свободней :) Select ЗП.Контрагент [Клиент $Справочник.Контрагент] From $РегистрОстатки.ЗарплатаОтПродаж(:Документ, | Контрагент IN (SELECT VAL FROM #СписокКонтрагентов), | (Контрагент,Сотрудник,ВидСтавкиЗП,ТОПМенеджер), (СуммаПродажи,СуммаЗПОтПродажи)) КАК ЗП |
|||
6
ЧеловекДуши
24.10.13
✎
11:43
|
+ >>> КАК ЗП
AS ЗП --Сори описалси + Люди советуют в начало запросов, под 1С++, вставлять строчку "SET NOCOUNT ON" Бывает можно добавлять "set LANGUAGE russian" |
|||
7
Asakra
24.10.13
✎
11:49
|
(6) дык 1SQLite используется... или это тонкий намек перейти на 1С++ или вообще на SQL? мая твоя не понимать :)
|
|||
8
ЧеловекДуши
24.10.13
✎
11:49
|
+(0) База: DBF
Сори, не дочитал :) Тогда тебе нужно спрашивать про прямые запросы под 1SQLite :) Может подскажут. |
|||
9
Asakra
24.10.13
✎
11:50
|
(8) гы... дык я этим и занимаюсь
|
|||
10
ЧеловекДуши
24.10.13
✎
11:50
|
(7) Да, я уже увидел :)
Просто обычно на DBF я не лукавлю с прямыми запросами, нужды не было :) |
|||
11
ЧеловекДуши
24.10.13
✎
11:51
|
(9) А все же, зачем тебе класс?
Все и так пишется без этого извращения :) |
|||
12
Asakra
24.10.13
✎
11:54
|
(11) если переписать на 1SQLite, вопрос будет тем же
моей проблемы это не решит... интересно на SQL тоже ВТ не используют, извращаются с доборами движений? |
|||
13
sttt
24.10.13
✎
12:28
|
(12) кто тебе сказал? http://msdn.microsoft.com/ru-ru/library/ms177399(v=sql.105).aspx
USE AdventureWorks2008R2; GO DECLARE @MyTableVar table( EmpID int NOT NULL, OldVacationHours int, NewVacationHours int, ModifiedDate datetime); UPDATE TOP (10) HumanResources.Employee SET VacationHours = VacationHours * 1.25, ModifiedDate = GETDATE() OUTPUT inserted.BusinessEntityID, deleted.VacationHours, inserted.VacationHours, inserted.ModifiedDate INTO @MyTableVar; --Display the result set of the table variable. SELECT EmpID, OldVacationHours, NewVacationHours, ModifiedDate FROM @MyTableVar; GO --Display the result set of the table. SELECT TOP (10) BusinessEntityID, VacationHours, ModifiedDate FROM HumanResources.Employee; GO |
|||
14
Asakra
24.10.13
✎
12:47
|
(13) а при чем тут временные таблицы?
|
|||
15
Asakra
01.11.13
✎
10:00
|
вопрос еще актуален. ни кто не знает?
|
|||
16
Ёпрст
01.11.13
✎
10:04
|
>>>хочется откинуть СуммаПродажиОстаток = 0.
Делай group by + having |
|||
17
Ёпрст
01.11.13
✎
10:05
|
а так, вообще не ясно, нафига тебе там каст или раунд вообще.
|
|||
18
Asakra
01.11.13
✎
10:06
|
(16) пасиб. попробую. в having cast использовать?
|
|||
19
Asakra
01.11.13
✎
10:08
|
(17) потом в цикле деление на 0 будет. там тока условие вешать. а в отчетах так вообще песня может быть и группировки и строки нулевые могут быть. вот и хочется разобраться есть ли какие варианты
|
|||
20
Asakra
01.11.13
✎
10:09
|
+ (19) что б при обходе результата не извращаться
|
|||
21
Ёпрст
01.11.13
✎
10:11
|
(18) нафига ?
Зачем тебе вообще кастовать результат ? |
|||
22
Asakra
01.11.13
✎
10:13
|
(21) в результате могут быть значения = 0, после типизации [Число.15.2]
|
|||
23
Asakra
01.11.13
✎
10:14
|
+ (22) а до типизации, например, 0.00002222
|
|||
24
Ёпрст
01.11.13
✎
10:14
|
у тебя чего, 5-6 знаков дробной части что ле ?
|
|||
25
Ёпрст
01.11.13
✎
10:14
|
(23) п...ц
|
|||
26
Ёпрст
01.11.13
✎
10:15
|
Мот того, проще в ресурсах убрать к едрени фени лишние разряды дробной части ?
Вы чем торгуете то ? :)) |
|||
27
Asakra
01.11.13
✎
10:16
|
(25) нет это 1SQLite так работает. в данном примере так и есть. дробная = 2
|
|||
28
Ёпрст
01.11.13
✎
10:16
|
(27) не замечал
|
|||
29
Ёпрст
01.11.13
✎
10:17
|
для вычисления любой функции берется точность как у первого результата.. будет у тебя сумма по количеству - будет точность как у ресурса количество.
|
|||
30
Asakra
01.11.13
✎
10:17
|
читал где-то, orefkof говорил, что из-за использования muneric, где-то там в компаненте
|
|||
31
Ёпрст
01.11.13
✎
10:18
|
ну .. round тогда воткни.
|
|||
32
Ёпрст
01.11.13
✎
10:18
|
или каст на сам аргумент функции
|
|||
33
Asakra
01.11.13
✎
10:19
|
(31) опасаюсь, что при условии с ROUND в результате Сумма будет = 0, т.к. при проверке округлится до 0.01
|
|||
34
Asakra
01.11.13
✎
10:20
|
точнее проверено, из-за этого на форум и обратился. начались ошибки с делением на ноль
|
|||
35
Asakra
01.11.13
✎
10:21
|
(32) а это как, не совсем понял. что есть "аргумент функции"?
|
|||
36
Ёпрст
01.11.13
✎
10:24
|
ну пробуй либо
cast (sum(....) as numric(...)) либо sum(argument as numric(....)) |
|||
37
Asakra
01.11.13
✎
10:27
|
(36) а group by при этом нужен?
|
|||
38
Asakra
01.11.13
✎
11:26
|
(36) не помогло. при ROUND результат - пустая таблица. с (36) в результате строка с 0
|
|||
39
Asakra
01.11.13
✎
11:54
|
а почему CAST(0.000009, NUMERIC(15,2)), возвращает 0.000009?
|
|||
40
Asakra
01.11.13
✎
11:55
|
так и должно быть? или я че-то ни то делаю?
|
|||
41
Asakra
01.11.13
✎
12:02
|
интересно:
cast(0.000009 as [Число.15.2]) отрабатывает, но возвращает 0.000009. ерундень какая-то |
|||
42
Asakra
01.11.13
✎
12:28
|
помогло только:
ГДЕ ЗП.СуммаПродажиОстаток <= -0.01 ИЛИ ЗП.СуммаПродажиОстаток >= 0.01 |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |