Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Деление на 1 (число прочтений - 5514 )
yhvvh
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 29
Зарегистрирован: 01. Сентября 2009
Деление на 1
01. Сентября 2009 :: 06:00
Печать  
ТекстЗапроса="
    SELECT
     $Рег.Товар as Товар,
     $Рег.ОстатокТовара,
     $Рег.ОстатокТовара/1 AS [остаток $число]
    FROM
       $РегистрИтоги.ОстаткиТоваров as Рег
    WHERE
       Рег.Period = :НачалоМесяца~~ AND $Рег.Склад = :Склад
    ORDER BY Товар
    ";

Вот тут

$Рег.ОстатокТовара/1 получается лажа

Если $Рег.ОстатокТовара>1000

то деление на 1 возвращает совсем ни $Рег.ОстатокТовара
не пойму почему так.

полная статья обсуждения с мисты.
  
Наверх
 
IP записан
 
yhvvh
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 29
Зарегистрирован: 01. Сентября 2009
Re: Деление на 1
Ответ #1 - 01. Сентября 2009 :: 06:00
Печать  
вот
  
Наверх
 
IP записан
 
yhvvh
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 29
Зарегистрирован: 01. Сентября 2009
Re: Деление на 1
Ответ #2 - 01. Сентября 2009 :: 06:00
Печать  
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Деление на 1
Ответ #3 - 01. Сентября 2009 :: 06:18
Печать  
yhvvh писал(а) 01. Сентября 2009 :: 06:00:

там нужно до (36) дочитать что бы узнать что речь про дбф
  

1&&2&&3
Наверх
 
IP записан
 
yhvvh
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 29
Зарегистрирован: 01. Сентября 2009
Re: Деление на 1
Ответ #4 - 01. Сентября 2009 :: 06:28
Печать  
помогите чем нибудь
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Деление на 1
Ответ #5 - 01. Сентября 2009 :: 06:29
Печать  
Да, надо указывать, что у тебя ДБФ и что ты используешь ОЛЕ ДБ провайдер.

У меня идеи только из разряда "пальцем в небо":
1. сделать GROUP BY Товар
2. Отключить кэш провайдера. Как сделать - не помню, юзай поиск, kiruha где-то писал
  
Наверх
 
IP записан
 
yhvvh
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 29
Зарегистрирован: 01. Сентября 2009
Re: Деление на 1
Ответ #6 - 01. Сентября 2009 :: 06:32
Печать  
странно такой глюк и никто ни разу не задавлся вопросом.
любое деление на 1 дает не верный результат, что ни кто не встречал что ли?
  
Наверх
 
IP записан
 
Alex_Bob
Full Member
***
Отсутствует



Сообщений: 136
Местоположение: Липецк
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Деление на 1
Ответ #7 - 01. Сентября 2009 :: 07:33
Печать  
Попробуй STR($Рег.ОстатокТовара/1,15,2) AS [остаток.число].
Для вычисляемых внутри SQL-запроса выражений Foxpro ничего не знает о том какой ширины может получиться результат и пытается ее определить по первому результату.
  

Необходимо время, чтобы восстановить хаос. (с) Дж. Буш (младший)
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Деление на 1
Ответ #8 - 01. Сентября 2009 :: 07:40
Печать  
А зачем вообще делить на 1 ? ( Опиши лучше свою задачу )
ИХМО Если это уж так необходимо то делай это на клиенте
пробежавшись по всем строкам ТЗ.
  
Наверх
 
IP записан
 
yhvvh
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 29
Зарегистрирован: 01. Сентября 2009
Re: Деление на 1
Ответ #9 - 01. Сентября 2009 :: 08:00
Печать  
давайте не будем ля ля
задача описана в ветки на мисте
деление на 1 может всегда произойти
в моем конкретном случае (а их может быть миллион)
делю на кофф. ед. изм а он может быть равен 1 согласись?

и во первых что значит пробегись ?
если данные можно а точнее нужно вытянуть с помощью внутренних запросов будет гораздо эффективней чем делать это на клиенте и гораздо быстрей.

во вторых , что за провайдер такой который не может обеспечит правельное деление на 1?

это ладно что у меня хватило ума отловаить ситуацию, а  в  некоторых случаях этого можно и не заметить.

вообщем прихожу к выводу что грабли в кривой или компоненте 1спп или провадера.

и скорей всего это относиться только к дбф
  
Наверх
 
IP записан
 
yhvvh
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 29
Зарегистрирован: 01. Сентября 2009
Re: Деление на 1
Ответ #10 - 01. Сентября 2009 :: 08:02
Печать  
Alex_Bob писал(а) 01. Сентября 2009 :: 07:33:
Попробуй STR($Рег.ОстатокТовара/1,15,2) AS [остаток.число].
Для вычисляемых внутри SQL-запроса выражений Foxpro ничего не знает о том какой ширины может получиться результат и пытается ее определить по первому результату.


на счет прведущего значение согласен, обойти ситуацию можно и другим способом через IIF проверять на 1 и не делить, но хотелось бы знать где лежат грабли. и к томуже нет гаорнтии что это только на 1.
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Деление на 1
Ответ #11 - 01. Сентября 2009 :: 08:17
Печать  
Что-нибудь из 5 пробовал?
  
Наверх
 
IP записан
 
yhvvh
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 29
Зарегистрирован: 01. Сентября 2009
Re: Деление на 1
Ответ #12 - 01. Сентября 2009 :: 08:47
Печать  
JohnyDeath писал(а) 01. Сентября 2009 :: 08:17:
Что-нибудь из 5 пробовал?


скачал послдений а он вроде и был последний драйвер
http://www.microsoft.com/downloads/details.aspx?FamilyId=E1A87D8F-2D58-491F-A0FA...

потом почитал но то ни то не знаю, про кеш.
статью
http://www.1cpp.ru/forum/YaBB.pl?num=1225325046/all
но ниче не помогло
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Деление на 1
Ответ #13 - 01. Сентября 2009 :: 08:57
Печать  
Перед выполнением своего запроса делал как в http://www.1cpp.ru/forum/YaBB.pl?num=1225325046/all#32 и ничего не помогло?
А с группировкой что показывает?
  
Наверх
 
IP записан
 
yhvvh
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 29
Зарегистрирован: 01. Сентября 2009
Re: Деление на 1
Ответ #14 - 01. Сентября 2009 :: 09:05
Печать  
угу, занова сохдовал, но проблема ни в кеше кажись

  
Наверх
 
IP записан
 
yhvvh
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 29
Зарегистрирован: 01. Сентября 2009
Re: Деление на 1
Ответ #15 - 01. Сентября 2009 :: 09:07
Печать  
JohnyDeath писал(а) 01. Сентября 2009 :: 08:57:
Перед выполнением своего запроса делал как в http://www.1cpp.ru/forum/YaBB.pl?num=1225325046/all#32 и ничего не помогло?
А с группировкой что показывает?


ТекстЗапроса="
   |SELECT
   |$Рег.Товар as Товар,
   //|$Рег.ОстатокТовара,
   |SUM($Рег.ОстатокТовара)/1 AS [остаток $число]
   |FROM
   |   $РегистрИтоги.ОстаткиТоваров as Рег
   |WHERE
   |   Рег.Period = :НачалоМесяца~~ AND $Рег.Склад = :Склад
   |ORDER BY Товар
   |GROUP BY Товар
   |";
не помогает  даже так.
  
Наверх
 
IP записан
 
alexdd
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 347
Зарегистрирован: 25. Июня 2007
Re: Деление на 1
Ответ #16 - 01. Сентября 2009 :: 09:24
Печать  
может там неявное преобразования типа данных. Т.е. так, например, SUM($Рег.ОстатокТовара) драйвер(или че там у фокспро) использует тип данных поля, а так SUM($Рег.ОстатокТовара)/1 преобразует к int(?). Так не пробовал написать?
SUM($Рег.ОстатокТовара)/1.0
  
Наверх
 
IP записан
 
yhvvh
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 29
Зарегистрирован: 01. Сентября 2009
Re: Деление на 1
Ответ #17 - 01. Сентября 2009 :: 09:27
Печать  
alexdd писал(а) 01. Сентября 2009 :: 09:24:
может там неявное преобразования типа данных. Т.е. так, например, SUM($Рег.ОстатокТовара) драйвер(или че там у фокспро) использует тип данных поля, а так SUM($Рег.ОстатокТовара)/1 преобразует к int(?). Так не пробовал написать?
SUM($Рег.ОстатокТовара)/1.0


не ребят не катит и /1.00000 Тоже
  
Наверх
 
IP записан
 
yhvvh
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 29
Зарегистрирован: 01. Сентября 2009
Re: Деление на 1
Ответ #18 - 01. Сентября 2009 :: 09:30
Печать  
думаю что 1 не имет вообще размерности
пробовал
....1000/(1000*1)
  
Наверх
 
IP записан
 
alexdd
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 347
Зарегистрирован: 25. Июня 2007
Re: Деление на 1
Ответ #19 - 01. Сентября 2009 :: 09:45
Печать  
фз..может поставить какое-то визуальное средство. Типа тот же FoxPro, например. Попробовать там погонять запросы.
Это на всех таблицах dbf такое происходит? Или только на одной и при $Рег.ОстатокТовара>1000?
  
Наверх
 
IP записан
 
yhvvh
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 29
Зарегистрирован: 01. Сентября 2009
Re: Деление на 1
Ответ #20 - 01. Сентября 2009 :: 09:57
Печать  
alexdd писал(а) 01. Сентября 2009 :: 09:45:
фз..может поставить какое-то визуальное средство. Типа тот же FoxPro, например. Попробовать там погонять запросы.
Это на всех таблицах dbf такое происходит? Или только на одной и при $Рег.ОстатокТовара>1000?


это просиходт для всех записей больше 1000 пока только для одной таблице отсатков , для отсальных не смотрел.
  
Наверх
 
IP записан
 
yhvvh
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 29
Зарегистрирован: 01. Сентября 2009
Re: Деление на 1
Ответ #21 - 01. Сентября 2009 :: 09:59
Печать  
ладно может кому ветка пригодится, я пока iif обошолся прежде чем делить на 1 проверяю на что делю.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Деление на 1
Ответ #22 - 01. Сентября 2009 :: 11:31
Печать  
yhvvh писал(а) 01. Сентября 2009 :: 08:00:
давайте не будем ля ля
задача описана в ветки на мисте
деление на 1 может всегда произойти
в моем конкретном случае (а их может быть миллион)
делю на кофф. ед. изм а он может быть равен 1 согласись?

и во первых что значит пробегись ?
если данные можно а точнее нужно вытянуть с помощью внутренних запросов будет гораздо эффективней чем делать это на клиенте и гораздо быстрей.

во вторых , что за провайдер такой который не может обеспечит правельное деление на 1?

это ладно что у меня хватило ума отловаить ситуацию, а  в  некоторых случаях этого можно и не заметить.

вообщем прихожу к выводу что грабли в кривой или компоненте 1спп или провадера.

и скорей всего это относиться только к дбф

В subj ( и на Мисте ) ты делишь на 1 а не на ед измерения.
Что вижу то и читаю. Кроме случая деления на 1 не забудь про деление на 0.
Приведи запрос полностью на мой взгляд для результирующей таблицы надо задавать описания числовых полей до выполнения запроса.
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Деление на 1
Ответ #23 - 01. Сентября 2009 :: 11:34
Печать  
Нет, тут косяк скорее всего в провайдере, т.к. выдается не просто обрезанное число, а предыдущее.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Деление на 1
Ответ #24 - 01. Сентября 2009 :: 11:43
Печать  
JohnyDeath писал(а) 01. Сентября 2009 :: 11:34:
Нет, тут косяк скорее всего в провайдере, т.к. выдается не просто обрезанное число, а предыдущее.

а если sqlite ?
также надо наверное явное преобразование типов ставить.
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Деление на 1
Ответ #25 - 01. Сентября 2009 :: 11:56
Печать  
ТекстЗапроса="
   SELECT
    $Рег.Товар as Товар,
    $Рег.ОстатокТовара,
    Cast($Рег.ОстатокТовара/000000000001.00 AS Numeric(15,2))  AS остаток
   FROM
       $РегистрИтоги.ОстаткиТоваров as Рег
   WHERE
       Рег.Period = :НачалоМесяца~~ AND $Рег.Склад = :Склад
   ORDER BY Товар
   ";

Дело в том , что fox выражения форматирует по первому результату столбца

  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Деление на 1
Ответ #26 - 01. Сентября 2009 :: 12:07
Печать  
имхо можно и так
Cast($Рег.Количество/1 AS Numeric(15,2))
главное, как правильно замечено, явно типизировать результат
  

1&&2&&3
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Деление на 1
Ответ #27 - 02. Сентября 2009 :: 06:55
Печать  
Так вопрос автору - все ОК или как ?  Улыбка
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Деление на 1
Ответ #28 - 04. Сентября 2009 :: 05:58
Печать  
Отвечу за автора - работает.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 
ОтправитьПечать