for flooders
:: Главная :: Решения :: Статьи :: Сайт М. Дроздова :: Файловый архив :: Книга по VFP 9 :: Русский Help Online :: OFF-LINE Форум
   Л и с о в о д ы   в с е х   с т р а н,  о б ъ е д и н я й т е с ь !!!  

Список Форумов  :: Visual Foxpro, Foxpro for DOS
   :: Помощь сайту :: 

Непонятки с фигурными скобками в FPD 2.6
Simple777
Автор

Сообщений: 19009
Дата: 02.06.18 13:52:40ОтветитьЦитировать
Допустим, есть такая прога myprog.prg

  
  Set date Brit  
  Set cent on  
  m.a={01/05/2018}  
  ?m.a  
  susp

Не могу понять, почему присваивается в дате 5 января 2018 года, а не 1 мая 2018 года. :al:

И config.fp пробовал отключать. И в отладчике смотрел. Причем если после отладчика еще раз сделать присвоение, то присваивается правильно.
Ratings: 0 negative/0 positive

Re: Непонятки с фигурными скобками в FPD 2.6
akvvohinc

Сообщений: 2756
Откуда: Москва
Дата: 02.06.18 15:40:10ОтветитьЦитировать
А из чего по твоему коду видно, что в результате получается 5 января 2018 года?
Ты хочешь сказать, что при выводе видишь
05/01/2018
?

Но в любом случае у меня такого не происходит, я вижу
01/05/2018

А проверять надежнее так:
? DAY(m.a), MONTH(m.a), YEAR(m.a)
ведь на формат вывода даты влияет SET DATE.

Рискну предположить, что в реальной проге у тебя SET DATE BRIT не стоит, а по умолчанию используется AMERICAN.



Исправлено: akvvohinc, 02.06.18 15:55
Ratings: 0 negative/0 positive

Re: Непонятки с фигурными скобками в FPD 2.6
Аспид

Сообщений: 3063
Откуда: Москва
Дата: 02.06.18 15:48:52ОтветитьЦитировать
Интересно.
На 9ке
  
    Set date Brit    
    Set cent on    
    m.a= {^2018/05/01}  
    ?m.a
выдает 01/05/2018
  
    Set date  MDY  
    m.a= {^2018/05/01}  
    ?m.a
выдает 05/01/2018
Принять как данность))) Не знаю, есть ли в 2.6 MDY


------------------
Ratings: 0 negative/0 positive

Re: Непонятки с фигурными скобками в FPD 2.6
akvvohinc

Сообщений: 2756
Откуда: Москва
Дата: 02.06.18 16:01:54ОтветитьЦитировать
Интересного здесь нет - результат ты получил один и тот же.
А формат даты при выводе разный, так как определяется установкой SET DATE.

Но в FPD такого нет:
m.a= {^2018/05/01}

Там и формат даты при присвоении определяется установкой SET DATE.
Ratings: 0 negative/0 positive

Re: Непонятки с фигурными скобками в FPD 2.6
Igor Korolyov

Сообщений: 31499
Дата: 02.06.18 18:05:02ОтветитьЦитировать
{01/05/2018} это литерал задающий дату. Как таковой он обрабатывается компилятором и в объектный код попадает уже значение даты, а не вот это его текстовое представление. Соответственно на то как именно будет обработан этот литерал, влияет установка SET DATE на момент компиляции, а не во время исполнения кода. Под отладчиком может быть и по другому, хотя в VFP всё равно берётся значение из объектного кода - конечно же если он существует и не "устарел" (т.е. исходник не изменялся после предыдущей компиляции)
Я не помню можно было ли в FPD в функцию DATE передать 3 параметра и получить совершенно однозначный результат, вне зависимости от установок SET DATE/CENTURY ни на момент компиляции ни на момент исполнения. Если возможно - то именно так и следует задавать любые "статические" даты.


------------------
WBR, Igor
Ratings: 0 negative/0 positive

Re: Непонятки с фигурными скобками в FPD 2.6
akvvohinc

Сообщений: 2756
Откуда: Москва
Дата: 02.06.18 18:54:54ОтветитьЦитировать
Игорь поставил правильный диагноз.

У тебя в Config.FP нет установки
DATE = ...

Поэтому по умолчанию подразумевается AMERICAN, при которой и происходит компиляция проги.
То есть фактически в FXP дата не та, что ты "как бы" написал, думая, что пишешь ее при SET DATE BRITISH.

После отработки проги SET DATE устанавливается в BRITISH, поэтому дальнейшие манипуляции приводят к правильному результату.
Но без перекомпиляции при подходящем SET DATE (German, British, DMY и т.п.) прога всегда будет "врать".

Советую всегда включать нужный DATE в Config.FP.

Ну, или на худой конец использовать другой способ присвоения:
m.a = CTOD('01/05/2018')
Тогда твой BRITISH сработает вовремя.



Исправлено: akvvohinc, 02.06.18 19:04
Ratings: 0 negative/0 positive

Re: Непонятки с фигурными скобками в FPD 2.6
Simple777
Автор

Сообщений: 19009
Дата: 02.06.18 19:39:37ОтветитьЦитировать
Поставил в config.fp

date = brit


Ничего не изменилось. Дата присваивается некорректно.

То, что можно присваивать m.a = CTOD('01/05/2018'),конечно, знаю.

Но просто хочется понять, почему такая странная заморочка.
Ratings: 0 negative/0 positive

Re: Непонятки с фигурными скобками в FPD 2.6
ry

Сообщений: 1929
Дата: 02.06.18 19:52:03ОтветитьЦитировать
Simple777
Допустим, есть такая прога myprog.prg
  
  Set date Brit  
  Set cent on  
  m.a={01/05/2018}  
  ?m.a  
  susp

Не могу понять, почему присваивается в дате 5 января 2018 года, а не 1 мая 2018 года. :al:

Стоп. Так в British {01/05/2018} и будет 5 января, емнип (лень лезть проверять, никогда British не использовал). Если требуется привычный нам формат DD/MM/YYYY, то надо ставить German.
Ratings: 0 negative/0 positive

Re: Непонятки с фигурными скобками в FPD 2.6
Simple777
Автор

Сообщений: 19009
Дата: 02.06.18 20:10:00ОтветитьЦитировать
А вот не надо тень на плетень наводить. SET DATE BRITISH работает как надо. И притом в качестве разделителей использует слэши, а не точки как GERMAN
Ratings: 0 negative/0 positive

Re: Непонятки с фигурными скобками в FPD 2.6
akvvohinc

Сообщений: 2756
Откуда: Москва
Дата: 02.06.18 20:11:35ОтветитьЦитировать
ry
Стоп. Так в British {01/05/2018} и будет 5 января

Нет.
Это 1 мая.

Simple777
Поставил в config.fp
date = brit


Ничего не изменилось. Дата присваивается некорректно.

Надо еще перекомпилировать исходник при такой установке, ведь сам по себе FXP не изменится.

Цитата:
И притом в качестве разделителей использует слэши, а не точки как GERMAN

Соответствующие разделители - это только при выводе.
А при присваивании можно использовать почти любые, даже нестандартные типа "+", "=", ',' и т.п.



Исправлено: akvvohinc, 02.06.18 20:20
Ratings: 0 negative/0 positive

Re: Непонятки с фигурными скобками в FPD 2.6
Simple777
Автор

Сообщений: 19009
Дата: 02.06.18 20:24:28ОтветитьЦитировать
:bodr:

Да, после перекомпиляции работает как надо. Вообще говоря, далеко не очевидно, что для того, чтобы пользоваться в программе присвоением даты через фигурные скобки, надо прописывать формат даты в config.fp [sm128]

Да еще не забыть перекомпилироваться.
Ratings: 0 negative/0 positive

Re: Непонятки с фигурными скобками в FPD 2.6
akvvohinc

Сообщений: 2756
Откуда: Москва
Дата: 02.06.18 20:44:27ОтветитьЦитировать
Simple777
Да, после перекомпиляции работает как надо. Вообще говоря, далеко не очевидно, что для того, чтобы пользоваться в программе присвоением даты через фигурные скобки, надо прописывать формат даты в config.fp

Да, не очевидно.

Для этого надо понимать, что происходит с такой "датой" при компиляции - она преобразуется в формат даты, то есть в FXP уже нет никакого строкового представления даты - никаких 1 5 2018.
А при преобразовании во внутренний формат даты компилятор использует текущую (на момент компиляции) настройку SET DATE, а не ту, которая стоит в самой проге - та сработает лишь в Run-time.

Но если ты установишь нужный формат даты в Config.FP и не будешь без нужды менять его в окне Command или в программе на не соответствующий (British и German можно считать соответствующими, а British и USA - нет), то подобная проблема уйдет.

В VFP этой проблемы нет вообще, так как литерал типа "Дата" всегда задается в формате YYYY-MM-DD, то есть никак не зависит от SET DATE.



Исправлено: akvvohinc, 02.06.18 20:48
Ratings: 0 negative/0 positive

Re: Непонятки с фигурными скобками в FPD 2.6
Igor Korolyov

Сообщений: 31499
Дата: 02.06.18 21:27:46ОтветитьЦитировать
akvvohinc
В VFP этой проблемы нет вообще, так как литерал типа "Дата" всегда задается в формате YYYY-MM-DD, то есть никак не зависит от SET DATE.
Это только в "новом" формате "с крышкой" {^yyyy-mm-dd} - "старые" форматы VFP тоже понимает (со всеми вытекающими нюансами), но уже лишь при нестандартной установке SET STRICTDATE - так то ругаться будет сильно, и не откомпилирует
Сам новый формат появился тоже не сразу - наверное в 6 версии... Не помню точно. Т.е. проблему таки признали и решили вполне эффектно - даже "неоднозначные" (но чуть более "понятные", т.к. это уже штука времени исполнения, а не компиляции) CTOD() и то слегка придушили тем же SET STRICTDATE.


------------------
WBR, Igor
Ratings: 0 negative/0 positive

Re: Непонятки с фигурными скобками в FPD 2.6
Simple777
Автор

Сообщений: 19009
Дата: 02.06.18 21:35:12ОтветитьЦитировать
Надо будет сделать поиск в FARe по маске *.prg и поискать ={

И всё к чертям резать, не дожидаясь перитонита! \m/ - поменять на CTOD().

Вроде в реальных проектах нигде фигурных скобок не использовал, а вот в "подножном" инструментарии - не исключено. [sm128]
Ratings: 0 negative/0 positive

Re: Непонятки с фигурными скобками в FPD 2.6
Igor Korolyov

Сообщений: 31499
Дата: 02.06.18 22:22:00ОтветитьЦитировать
Честно говоря не уверен что где-либо в коде имеют смысл литералы даты отличные от 1 января, или от 31 декабря (а этот уже ругнётся при компиляции с "не той системы" set date) - да и то для "ненастоящих" дат - типа спецзначений.


------------------
WBR, Igor
Ratings: 0 negative/0 positive

Re: Непонятки с фигурными скобками в FPD 2.6
Simple777
Автор

Сообщений: 19009
Дата: 02.06.18 22:35:16ОтветитьЦитировать
Даты разные нужны,
Даты разные важны.
[sm128]

Например, дата ввода в действие нового инструктивного письма, меняющего экономические расчеты. И прочая хрень. :rux:
Ratings: 0 negative/0 positive

Re: Непонятки с фигурными скобками в FPD 2.6
akvvohinc

Сообщений: 2756
Откуда: Москва
Дата: 02.06.18 22:49:02ОтветитьЦитировать
Simple777
Например, дата ввода в действие нового инструктивного письма, меняющего экономические расчеты. И прочая хрень.

Щас тебе скажут, что такую хрень надо держать в таблицах, а не зашивать в программу.
Ratings: 0 negative/1 positive

Re: Непонятки с фигурными скобками в FPD 2.6
Igor Korolyov

Сообщений: 31499
Дата: 02.06.18 22:54:23ОтветитьЦитировать
akvvohinc
Щас тебе скажут, что такую хрень надо держать в таблицах, а не зашивать в программу.
По хорошему - да, но кто ж у нас особо то парится по поводу "сомнительных решений"


------------------
WBR, Igor
Ratings: 0 negative/0 positive

Re: Непонятки с фигурными скобками в FPD 2.6
Simple777
Автор

Сообщений: 19009
Дата: 02.06.18 22:55:02ОтветитьЦитировать
Ежели это дата касается бизнес-логики как таковой, то да. А ежели это даты "внешних аномалий", то можно хранить нумер алгоритма в файле временных переменных, например. А юзеру предлагать выбрать из списка нужное. [sm128]

Вааще могу заверить, что "сегодня завтрак в детском саду отменяется".

Нету никаких правил. Нету.
Ratings: 0 negative/0 positive

Re: Непонятки с фигурными скобками в FPD 2.6
Simple777
Автор

Сообщений: 19009
Дата: 03.06.18 07:59:19ОтветитьЦитировать
После поиска в FAR по ={01/ нашел одно сомнительное место.

Сейчас нет возможности проверить. Там есть такая конструкция:

  
  Set date Brit  
  If myvar>={01/02/2013}  
    
     ...  
  Else  
     ...  
  Endi

Будет ли корректно отрабатывать сравнение? В config.fp DATE не прописывалось.
Ratings: 0 negative/0 positive



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

On-line: 60 Grummek  and Guests: 59


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