Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / функции date() и cmonth() / 25 сообщений из 31, страница 1 из 2
27.04.2011, 09:37
    #37235162
alyssa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
функции date() и cmonth()
есть таблица "начиления" Zhis, поле "месяц За" monthfor - типа N
мне надо получить русскоязычное название месяца, в запросе пишу строчку:

Код: plaintext
cmonth(date( 2011 ,zhis.monthfor, 1 )) as m1 ;

выдаёт ошибку "недопустимое значение, тип или число аргументов функции"
пишу так:

Код: plaintext
date( 2011 ,zhis.monthfor, 1 ) as m1 ;

опять та же ошибка
прятала zhis.monthfor в скобки [] или такие () - та же ошибка

что не так?
...
Рейтинг: 0 / 0
27.04.2011, 09:39
    #37235165
alyssa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
функции date() и cmonth()
кстати, если написать вот так:
Код: plaintext
cmonth(date( 2011 , 1 , 1 )) as m1 ;

выдаёт: "Январь"
...
Рейтинг: 0 / 0
27.04.2011, 09:46
    #37235181
IgorNG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
функции date() и cmonth()
alyssa,

что за поле zhis.monthfor? Не символьное ли?

DATE([nYear, nMonth, nDay])
...
Рейтинг: 0 / 0
27.04.2011, 09:55
    #37235202
alyssa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
функции date() и cmonth()
нет, я ж написала, типа N - numeric - числовое
...
Рейтинг: 0 / 0
27.04.2011, 09:56
    #37235204
alyssa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
функции date() и cmonth()
IgorNGalyssa,

что за поле zhis.monthfor? Не символьное ли?

DATE([nYear, nMonth, nDay])

написала:
Код: plaintext
cmonth(date([ 2011 , ZHIS.monthfor,  1 ]))

ошибка: слишком мало аргументов
...
Рейтинг: 0 / 0
27.04.2011, 10:12
    #37235229
Sergey Sizov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
функции date() и cmonth()
alyssaIgorNGalyssa,

что за поле zhis.monthfor? Не символьное ли?

DATE([nYear, nMonth, nDay])

написала:
Код: plaintext
cmonth(date([ 2011 , ZHIS.monthfor,  1 ]))

ошибка: слишком мало аргументовА теперь объясните назначение квадратных скобок? С учетом того факта, что функции date() нужны три числовых параметра.
...
Рейтинг: 0 / 0
27.04.2011, 10:24
    #37235248
alyssa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
функции date() и cmonth()
Sergey Sizovalyssaпропущено...


написала:
Код: plaintext
cmonth(date([ 2011 , ZHIS.monthfor,  1 ]))

ошибка: слишком мало аргументовА теперь объясните назначение квадратных скобок? С учетом того факта, что функции date() нужны три числовых параметра.

я это понимаю, просто IgorNG зачем-то их поставил. мне и в голову не приходило их там ставить.
но даже если поставть их так:
Код: plaintext
cmonth(date( 2011 , [ZHIS.monthfor],  1 ))

0 эффекта

я так понимаю, рагуется из-за точки о которую спотыкается в функции date() ?
...
Рейтинг: 0 / 0
27.04.2011, 10:46
    #37235282
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
функции date() и cmonth()
alyssa
Код: plaintext
cmonth(date( 2011 , [ZHIS.monthfor],  1 ))
я так понимаю, рагуется из-за точки о которую спотыкается в функции date() ?Нет. Ругается из-за квадратных скобок. Покажите нам вывод
Код: plaintext
?vartype(ZHIS.monthfor)
...
Рейтинг: 0 / 0
27.04.2011, 10:54
    #37235296
IgorNG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
функции date() и cmonth()
alyssaSergey Sizovпропущено...
А теперь объясните назначение квадратных скобок? С учетом того факта, что функции date() нужны три числовых параметра.

я это понимаю, просто IgorNG зачем-то их поставил. мне и в голову не приходило их там ставить.
но даже если поставть их так:
Код: plaintext
cmonth(date( 2011 , [ZHIS.monthfor],  1 ))

0 эффекта

я так понимаю, рагуется из-за точки о которую спотыкается в функции date() ?

Это не я поставил квадратные скобки, это цитата из хэлпа
...
Рейтинг: 0 / 0
27.04.2011, 11:36
    #37235393
Sergey Sizov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
функции date() и cmonth()
alyssaя это понимаю, просто IgorNG зачем-то их поставил. мне и в голову не приходило их там ставить.Хелп хотя бы иногда, но читать таки нужно.но даже если поставть их так:
Код: plaintext
cmonth(date( 2011 , [ZHIS.monthfor],  1 ))

0 эффектаРазумеется. Еще раз - хелп таки надо читать.
я так понимаю, рагуется из-за точки о которую спотыкается в функции date() ?Не так понимаете. Я уже написал: функции date() нужны три числовых параметра. С каких пор числовые параметры стали обрамляться квадратными скобками?
...
Рейтинг: 0 / 0
27.04.2011, 12:02
    #37235452
alyssa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
функции date() и cmonth()
да блин при чём тут квадратные скобки. без них почему ругается???
...
Рейтинг: 0 / 0
27.04.2011, 12:05
    #37235462
Sergey Sizov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
функции date() и cmonth()
alyssaда блин при чём тут квадратные скобки. без них почему ругается???Потому, что какой-то параметр нечисловой. Или версия фокса старая, в которой параметры у функции отсутствовали.
...
Рейтинг: 0 / 0
27.04.2011, 12:27
    #37235527
alyssa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
функции date() и cmonth()
самое удивительное:
полностью скрипт
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
SELECT ;
  ORGBASE_1.RN, ;
  ORGBASE_1.SHOWNAME AS FIO, ;
  substr(ZSUBDIV_1.NAME,len(alltrim(ZSUBDIV_1.number))+ 2 ,len(alltrim(ZSUBDIV_1.name))-len(alltrim(ZSUBDIV_1.number))- 1 ) as podrazdelenie, ;
  ZTIPDOL_1.NAME AS DOLJNOST, ;
  iif(ZANK_1.jobbegin<=d1,d2-d1+ 1 ,d2-ZANK_1.jobbegin+ 1 ) AS Q_M, ;
  ZVIDISP_1.CODE AS VID_LIC, ;
  cmonth(date( 2011 ,zhis.monthfor, 1 )) as monthfor, ;
  sum(ZHIS.SUM) as s1 ;
FROM ;
  ZHIS ;
    inner join ZFCAC as ZFCAC_1 on (ZHIS.FCAC_RN = ZFCAC_1.FCAC_RN) ;
      inner join ZANK as ZANK_1 on (ZFCAC_1.ANK_RN = ZANK_1.ANK_RN) ;
        inner join ORGBASE as ORGBASE_1 on (ZANK_1.ORGBASE_RN = ORGBASE_1.RN) ;
      inner join ZPOST as ZPOST_1 on (ZFCAC_1.POST_RN = ZPOST_1.POST_RN) ;
        inner join ZSUBDIV as ZSUBDIV_1 on (ZPOST_1.SUBDIV_RN = ZSUBDIV_1.SUBDIV_RN) ;
        inner join ZTIPDOL as ZTIPDOL_1 on (ZPOST_1.TIPDOL_RN = ZTIPDOL_1.TIPDOL_RN) ;
      inner join ZVIDISP as ZVIDISP_1 on (ZFCAC_1.VIDISP_RN = ZVIDISP_1.VIDISP_RN) ;
    inner join ZSNU as ZSNU_1 on (ZHIS.SNU_RN = ZSNU_1.SNU_RN) ;
 ;
WHERE (ZANK_1.jobend>=d2) and ;
(Zsnu_1.catalog_rn = "00Zт") AND  ;
(!(Zsnu_1.code="ИмуществоВычет")and!(Zsnu_1.code="Налоговая база") and ;
!(Zsnu_1.code="ПособияР")and!(Zsnu_1.code="Б/Л_Берем") and ;
!(Zsnu_1.code="Возврат копеек")and!(Zsnu_1.code="ВозвратКопеек") and ;
!(Zsnu_1.code="ВходящаяДоплата")and!(Zsnu_1.code="ВходящиеКопейки") and ;
!(Zsnu_1.code="ЗПрдрОрг")and!(Zsnu_1.code="Льгота_И") and ;
!(Zsnu_1.code="ОтпускДИнв")and!(Zsnu_1.code="ПособияЛ") and ;
!(Zsnu_1.code="ПособияБ")and!(Zsnu_1.code="ПособияМ") and ;
!(Zsnu_1.code="ПособияП")and!(Zsnu_1.code="ПутевкиФСС")) and ;
  (zhis.year = year(d1)) AND  ((zhis.monthfor>=month(d1))and(zhis.monthfor<=month(d2))) and ;
  ((Zsubdiv_1.name = "1")or(Zsubdiv_1.name = "2")) ;
GROUP BY zhis.monthfor, ZVIDISP_1.CODE, ZHIS.ANK_RN ;
ORDER BY ORGBASE_1.SHOWNAME, ZVIDISP_1.CODE ;
INTO CURSOR R

выполняет запрос без ошибок когда в параметрах на форме завожу даты:
d1 = 01.03.2011
d2 = 30.04.2011
или
d1 = 01.04.2011
d2 = 30.04.2011
или
d1 = 01.03.2011
d2 = 31.05.2011
когда же пытаюсь прихватить январь и/или февраль:
d1 = 01.01.2011
d2 = 28.02.2011
или
d1 = 01.01.2011
d2 = 31.03.2011
или
d1 = 01.01.2011
d2 = 30.04.2011
или
d1 = 01.02.2011
d2 = 31.03.2011
выкидывает почему-то с ошибкой: ошибка в пользовательском скрипте: "недопустимое значение, тип или число аргументов функции"
...
Рейтинг: 0 / 0
27.04.2011, 12:43
    #37235587
DmGr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
функции date() и cmonth()
alyssa,

alyssaвыдаёт ошибку "недопустимое значение, тип или число аргументов функции"
Возможно в запросе zhis.monthfor null или 0 или > 12
...
Рейтинг: 0 / 0
27.04.2011, 12:54
    #37235608
alyssa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
функции date() и cmonth()
такой вариант исключён. потому что в отборе where строго прописано брать с месяца d1 по месяц d2, если взять и поставить там:
Код: plaintext
(zhis.year = year(d1)) AND  ((zhis.monthfor>= 1 )and(zhis.monthfor<= 2 )) and ;
выкидывает с ошибкой, а если отбираем заведомо после первых двух месяцев:
так:
Код: plaintext
(zhis.year = year(d1)) AND  ((zhis.monthfor>= 3 )and(zhis.monthfor<= 4 )) and ;
или так:
Код: plaintext
(zhis.year = year(d1)) AND  (zhis.monthfor= 3 ) and ;
или так:
Код: plaintext
(zhis.year = year(d1)) AND  (zhis.monthfor= 4 ) and ;
и т.д. то нормально выполняется запрос...
...
Рейтинг: 0 / 0
27.04.2011, 12:57
    #37235615
alyssa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
функции date() и cmonth()
и ещё в таблице начилений, поле monthfor не бывает пустым или более 12
...
Рейтинг: 0 / 0
27.04.2011, 12:59
    #37235617
DmGr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
функции date() и cmonth()
alyssa,

А если в запросе вместо
cmonth(date(2011,zhis.monthfor,1)) as monthfor, ;

вывести zhis.monthfor что будет в колонке?
...
Рейтинг: 0 / 0
27.04.2011, 13:05
    #37235628
alyssa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
функции date() и cmonth()
DmGralyssa,

А если в запросе вместо
cmonth(date(2011,zhis.monthfor,1)) as monthfor, ;

вывести zhis.monthfor что будет в колонке?

в колонке будут числа от 1 до 12, именно числа, я проверяла, арифметические операции выполняются.
а мне нужны именно слова (для кросстаблицы, если знаете, что это). я пока по-другому решила эту проблему (очень мудруным путём) . но это же не дело. надо же понять почему не работает скрипт именно в январе, феврале.
...
Рейтинг: 0 / 0
27.04.2011, 13:26
    #37235685
Sergey Sizov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
функции date() и cmonth()
alyssaDmGralyssa,

А если в запросе вместо
cmonth(date(2011,zhis.monthfor,1)) as monthfor, ;

вывести zhis.monthfor что будет в колонке?

в колонке будут числа от 1 до 12, именно числа, я проверяла, арифметические операции выполняются.
а мне нужны именно слова (для кросстаблицы, если знаете, что это). я пока по-другому решила эту проблему (очень мудруным путём) . но это же не дело. надо же понять почему не работает скрипт именно в январе, феврале.Пока не представите набор исходных данных к этому скрипту для его опробования можно только продолжать гадать.
...
Рейтинг: 0 / 0
27.04.2011, 13:30
    #37235711
Sergey Sizov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
функции date() и cmonth()
alyssa,
что выдает запрос
Код: plaintext
SELECT distinct monthfor FROM ZHIS
...
Рейтинг: 0 / 0
27.04.2011, 15:20
    #37236105
alyssa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
функции date() и cmonth()
Sergey Sizovalyssa,
что выдает запрос
Код: plaintext
SELECT distinct monthfor FROM ZHIS

вывел строки с 1 столбцом, заполненным числами от 1 до 12
...
Рейтинг: 0 / 0
27.04.2011, 15:28
    #37236142
Sergey Sizov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
функции date() и cmonth()
alyssaSergey Sizovalyssa,
что выдает запрос
Код: plaintext
SELECT distinct monthfor FROM ZHIS

вывел строки с 1 столбцом, заполненным числами от 1 до 12Строк ровно 12? Какое значение у настройки set date?
...
Рейтинг: 0 / 0
27.04.2011, 15:43
    #37236194
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
функции date() и cmonth()
alyssaDmGralyssa,

А если в запросе вместо
cmonth(date(2011,zhis.monthfor,1)) as monthfor, ;

вывести zhis.monthfor что будет в колонке?

в колонке будут числа от 1 до 12, именно числа, я проверяла, арифметические операции выполняются.
а мне нужны именно слова (для кросстаблицы, если знаете, что это). я пока по-другому решила эту проблему (очень мудруным путём) . но это же не дело. надо же понять почему не работает скрипт именно в январе, феврале.
Я правильно понимаю что при замене на вывод monthfor запрос начинает работать без ошибки?

как вариант так попробуй еще:
Код: plaintext
cmonth(date( 2011 ,nvl(zhis.monthfor,  1 ), 1 )) as monthfor
...
Рейтинг: 0 / 0
27.04.2011, 15:55
    #37236227
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
функции date() и cmonth()
Dima Tкак вариант так попробуй еще:
Код: plaintext
cmonth(date( 2011 ,nvl(zhis.monthfor,  1 ), 1 )) as monthfor

В данном случае надо проверять не на NULL, а на EMPTY(), поэтому вместо nvl() надо использовать evl()

Код: plaintext
cmonth(date( 2011 ,evl(zhis.monthfor,  1 ), 1 )) as monthfor

Правда, автор не говорит какая у нее версия FoxPro, а функция EVL() была введена только в VFP8.
...
Рейтинг: 0 / 0
27.04.2011, 16:01
    #37236250
alyssa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
функции date() и cmonth()
использует библиотеки 8го, так что думаю 8
VFP8RRUS.DLL
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / функции date() и cmonth() / 25 сообщений из 31, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]