Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Вывод всех дней месяца по периоду. / 13 сообщений из 13, страница 1 из 1
21.04.2011, 19:44
    #37227461
Вывод всех дней месяца по периоду.
Есть период DS(01.04.11) - DF(30.04.11) к примеру.(Период будет браться с формы)
необходимо вывести все даты месяца скажем поле DDM:
01.04.11
02.04.11
...
30.04.11
Пробовала через do while,do case ничего не вышло

понимаю что нужно взять начальное и нарастить +1 в переменную а потом сделать replace искомого поля
но почему то с синтаксисом проблемы.
Помогите пожалуйста
...
Рейтинг: 0 / 0
22.04.2011, 06:35
    #37227853
Трезвый
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод всех дней месяца по периоду.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SET CENTURY off
SET DATE german

DS = CTOD('01.04.11')
DF = CTOD('30.04.11')

DD = DAY(DS)

DO WHILE DD<=DAY(DF)
   ? CTOD(STR(DD, 2 )+'.'+STR(MONTH(ds))+'.'+STR(YEAR(ds)))
   DD = DD +  1 
ENDDO 
...
Рейтинг: 0 / 0
22.04.2011, 06:39
    #37227858
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод всех дней месяца по периоду.
Просто прибавляй к дате количество дней.
Примерно так:
Код: plaintext
1.
2.
3.
ldStart = date( 2011 , 04 , 01 )
for i =  1  to  30 
   ? ldStart + i
endfor
Вариантов много, покажи код который у тебя почти работает, подскажут где ошибка
...
Рейтинг: 0 / 0
22.04.2011, 07:54
    #37227877
igorbik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод всех дней месяца по периоду.
Dima T
Код: plaintext
for i =  1  to  30 
Думается мне, что последнее число лучше насчитывать типа так:
Код: plaintext
for i =  1  to (DF - DS+ 1 )
...
Рейтинг: 0 / 0
22.04.2011, 08:06
    #37227884
Вывод всех дней месяца по периоду.
Спасибо всем огромное за ответы. сегодня попробую все!) а то эта мысль вчера уснуть не давала(

итересен вариант перевода сначала в стринг , наращивания ,а потом обратно в дату....я такого не думала)

при моем неправильном коде писало ошибку "Численное переполнение" но я не знаю это ошибка фокса или SQL-сервера ,потому как работаю на IT-ERP
...
Рейтинг: 0 / 0
22.04.2011, 08:42
    #37227916
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод всех дней месяца по периоду.
Анна Позняковаитересен вариант перевода сначала в стринг , наращивания ,а потом обратно в дату....я такого не думала)
Это изврат, не надо так делать без острой на то необходимости.

Анна Позняковапри моем неправильном коде писало ошибку "Численное переполнение" но я не знаю это ошибка фокса или SQL-сервера ,потому как работаю на IT-ERP
советую поразбираться с обработкой ошибок, чтобы четко понимать где происходит ошибка.
...
Рейтинг: 0 / 0
22.04.2011, 08:56
    #37227931
Трезвый
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод всех дней месяца по периоду.
Dima TАнна Позняковаитересен вариант перевода сначала в стринг , наращивания ,а потом обратно в дату....я такого не думала)
Это изврат, не надо так делать без острой на то необходимости.
Согласен, сорри, как-то не подумал про возможность элементарного DATE()+1
...
Рейтинг: 0 / 0
22.04.2011, 10:35
    #37228079
Banditos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод всех дней месяца по периоду.
Анна Познякова,

Имхо, так нагляднее
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
PROCEDURE ListDate

DateStart = DS && переменная начала периода
DateFinish = DF && переменная окончания периода

DateCalc = DateStart && переменная для вычисления

DO WHILE BETWEEN(DateCalc, DateStart, DateFinish)
	? DateCalc
	DateCalc = DateCalc +  1 
ENDDO 

ENDPROC 
...
Рейтинг: 0 / 0
22.04.2011, 20:11
    #37229681
Вывод всех дней месяца по периоду.
Если кому интересен результирующий код, пишу:


select ddm,ds,df FROM ... into cursor _Temp readwrite&& в DDM хранятся даты или лишь первая дата диапазона
m.ddm=ds
m.dff=df
select _temp

GO bottom
DO WHILE ddm<df
IF ddm<df
APPEND BLANK
replace ddm WITH m.ddm+1
replace df WITH m.dff
ENDIF
m.ddm=ds
m.dff=df
ENDDO

Вроде так)
несмотря на многочисленные ответы, пришлось раз 5 переписать чтоб все сработало) Но всегда приятно знать, что движешься в том направлении что нужно.
ЕЩЕ раз всем СПАСИБО!!!!
...
Рейтинг: 0 / 0
22.04.2011, 23:31
    #37229863
Вывод всех дней месяца по периоду.
Жуть.
1. Go bottom совершенно бесполелен в данном случае. Append и так всегда добавляет в конец. Впрочем, как insert sql.
2. Цикл Do while заменяем на такой:
Код: plaintext
1.
2.
3.
For i= 0  to df-ddm
  insert into _Temp d1+i, df
Next
...
Рейтинг: 0 / 0
25.04.2011, 21:21
    #37232710
Вывод всех дней месяца по периоду.
бесполезен?
там даты упарядочены по возрастанию.да дата по сути может быть и одна, а может быть до 29 числа...и зачем мне делать APPEND BLANK 29 раз , если нужет только один?
...
Рейтинг: 0 / 0
25.04.2011, 21:28
    #37232714
Sergey Sizov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод всех дней месяца по периоду.
Анна Позняковабесполезен?Да.там Где?даты упарядочены по возрастанию.И что это меняет?да дата по сути может быть и одна, а может быть до 29 числа...и зачем мне делать APPEND BLANK 29 раз , если нужет только один?А может Вы опишите задачу полностью, а не выдержки из нее? И как надо определять нужность? Вы что, дырки в датах заполняете? Проимер исходных данных можете привести с описанием результата, который из них надо получить?
...
Рейтинг: 0 / 0
26.04.2011, 16:43
    #37234220
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод всех дней месяца по периоду.
Анна Позняковабесполезен?
там даты упарядочены по возрастанию.да дата по сути может быть и одна, а может быть до 29 числа...и зачем мне делать APPEND BLANK 29 раз , если нужет только один?
Ну, смотрим на то, что Вы написали

Код: plaintext
1.
2.
3.
4.
5.
6.
* Делается выборка в курсор _Temp 
select ... into cursor _Temp readwrite

* Переходим к последней записи выборки
select _temp
GO bottom

Зачем собственно? Это может быть оправдано только в том случае, если выполняются следующие условия:

1. Записи в выборке _Temp упорядочены по возрастанию даты. Т.е. в команде Select-SQL должна присутствовать опция ORDER BY. Об этом не сказано ни слова и из примера не следует
2. Даты в выборке _Temp идут без разрывов. Т.е. не может быть пропущена какая-либо дата. Об этом опять же не сказано ни слова и из примера не следует

Если Вы предполагали, что могут быть разрывы в датах, то Ваш код эти разрывы никак не заполняет. Вы вообще в начале цикла попадаете на случайную запись, поскольку результат выборки никак не упорядочен. Нет Order By.

Кроме того, не вполне ясно, почему Ваш код не "зацикливается"? Ведь переменной ds у Вас не существует и Вы обращаетесь к ней как к полю таблицы, открытой в текущей рабочей области. А в текущей рабочей области у Вас курсор _Temp у которого это поле после команды APPEND BLANK всегда пустое. Вот и получается, что поле ddm - это пустая дата плюс 1 день. Как следствие - бесконечный цикл (условие ddm<df будет выполняться всегда после первого же APPEN BLANK), ну, если только поле df также не пустое...
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Вывод всех дней месяца по периоду. / 13 сообщений из 13, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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