:: Visual Foxpro, Foxpro for DOS
Определение будущего периода
vnkor

Сообщений: 324
Дата регистрации: 04.10.2007
В таблице есть 3 поля: god - год последней поверки, kv - квартал последней поверки, period - периодичность поверки в месяцах (может быть любым числом не меньше 12). Необходимо вычислить год и квартал следующей поверки. Результат нужно получить в виде десятичной дроби, где целая часть - это квартал (1 цифра), а дробная часть - год (4 цифры). К примеру: если god = 2016, kv = 1, period = 12, в результате получим 1.2017, если же period = 18, то получим 3.2017.
Как такое можно сделать в одной строке?
Ratings: 0 negative/0 positive
Re: Определение будущего периода
ssa

Сообщений: 12999
Откуда: Москва
Дата регистрации: 23.03.2005
Получением из года и квартала даты, увеличения ее на период проверки и получения квартала и года, в который она попадает, в нужном виде.


------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: Определение будущего периода
vnkor

Сообщений: 324
Дата регистрации: 04.10.2007
Спасибо!
Ratings: 0 negative/0 positive
Re: Определение будущего периода
akvvohinc
Автор

Сообщений: 4202
Откуда: Москва
Дата регистрации: 11.11.2008
vnkor
Как такое можно сделать в одной строке?
Для начала требуется уточнить арифметику.
Например, из вашего описания и примера неясно, как получить новый квартал, зная старый и периодичность в месяцах.

Например, если поверка была в 1 квартале, а периодичность равна 13, то новая поверка может быть как в первом квартале, так и во втором. То есть, надо знать не квартал поверки, а месяц квартала, относительно которого вычислять следующую поверку.

Да и что такое - "в одной строке"?
Не пользуясь UDF, а используя в строке только родные функции самого Фокса?



Исправлено 1 раз(а). Последнее : akvvohinc, 24.03.17 20:40
Ratings: 0 negative/0 positive
Re: Определение будущего периода
vnkor

Сообщений: 324
Дата регистрации: 04.10.2007
Не известно, в каком месяце была поверка - есть только квартал и год. Если периодичность 12 месяцев - это 4 квартала, а если 13 (14, 15) месяцев - то считается уже 5 кварталов. Нужно сделать, используя в строке только родные функции самого Фокса.
PS Вообще то, уже сделано. Но если интересно - попробуйте.
Ratings: 0 negative/0 positive
Re: Определение будущего периода
akvvohinc
Автор

Сообщений: 4202
Откуда: Москва
Дата регистрации: 11.11.2008
vnkor
Если периодичность 12 месяцев - это 4 квартала, а если 13 (14, 15) месяцев - то считается уже 5 кварталов. Нужно сделать, используя в строке только родные функции самого Фокса.
Тогда, если я правильно понял вашу арифметику, все решается довольно несложно, и способов, видимо, можно придумать много.
Вот один из возможных:
STR(kv+CEILING(period%12/3)%4,1)+'.'+STR(god+INT((period+2)/12),4)

Для значений поверки с 12 до 30 из вашего примера результат будет таким:
12. 1.2017
13. 2.2017
14. 2.2017
15. 2.2017
16. 3.2017
17. 3.2017
18. 3.2017
19. 4.2017
20. 4.2017
21. 4.2017
22. 1.2018
23. 1.2018
24. 1.2018
25. 2.2018
26. 2.2018
27. 2.2018
28. 3.2018
29. 3.2018
30. 3.2018

Ну, а если я понял арифметику не совсем правильно, то принцип все равно не изменится, а функция потребует косметической доводки.



Исправлено 2 раз(а). Последнее : akvvohinc, 25.03.17 17:14
Ratings: 0 negative/0 positive
Re: Определение будущего периода
vnkor

Сообщений: 324
Дата регистрации: 04.10.2007
akvvohinc
STR(kv+CEILING(period%12/3)%4,1)+'.'+STR(god+INT((period+2)/12),4)
Если kv > 1, то не правильно.
Ratings: 0 negative/0 positive
Re: Определение будущего периода
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Вот же народ пошёл - сам допилить выражение не может, только всё готовое подавай, на блюдечке
STR(CEILING(((kv*3-3+period)%12+1)/3),1)+'.'+STR(god+INT((kv*3-3+period)/12),4)


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Определение будущего периода
akvvohinc
Автор

Сообщений: 4202
Откуда: Москва
Дата регистрации: 11.11.2008
Там в задании есть одно уточнение про 13 (14, 15) месяцев, поэтому более точно так:
STR(CEILING(((kv*3-1+period)%12+1)/3),1)+'.'+STR(god+INT((kv*3-1+period)/12),4)

Но ТС написал, что свою задачу уже решил, правда, решение не привел.



Исправлено 1 раз(а). Последнее : akvvohinc, 27.03.17 17:08
Ratings: 0 negative/0 positive
Re: Определение будущего периода
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
мб, я не вчитывался особо Просто перенёс квартал внутрь и всё. Вообще складывать кварталы с месяцами это, как по мне, идиотское решение. Учитываешь в кварталах - ну так и период задавай в них же. А то поверка была в январе (1 квартал), и почему-то 13 месяцев "после" это внезапно 2-й квартал, т.е. от 15 до 17 полных месяцев... С чисто кварталами выглядит хоть как-то минимально приемлемо - был 1 квартал, и "5-й квартал после него".
Сродни классической "тупой задаче" подсчёта количества "лет, месяцев и дней между 2 датами" - когда логики нет вообще, а есть лишь "руководящая инструкция"


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Определение будущего периода
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
Пейсатели нормативки (в особенности подзаконных актов) вааще задолбали - мало того, что читать их почти невозможно (я, например, через 3 года выучился понимать налоговые инструкции - "что на самом деле имеется в виду", а также инструкции некоторых "сугубо мирных" ведомств), дак если вчитаешься, то начинаешь понимать, что везде заложены "сплошные мины". И делают ведь, сцуко, это умышленно! И весьма умные люди пишут. Как-то спросил у них: зачем такую хрень пишете? А они в ответ: ежели силовики или еще какие-нибудь контрольные структуры наедут (а такие "наезды" случаются с завидной постоянностью), то у нас будет возможность для "маневра", опираясь на написанные вот таким образом инструкции. И это прокатывает. А то что все, кто по этим инструкциям работают, в любой момент могут быть "прихвачены" теми же силовиками или надзорными инстанциями, авторов нормативки уже ниипе "не колышет". Такие дела... [sm128]
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 23 akvvohinc  (Гостей: 22)

© 2000-2024 Fox Club 
Яндекс.Метрика