Visual Fox Pro 6.0 Запрос логического типа данных не работает! - PullRequest
2 голосов
/ 03 июня 2011

В моей текущей системе есть запрос на создание налогового отчета.Проблема в том, что иногда в нашу систему поступают заказы, которые никогда не поступают, но все равно учитываются в налоговом отчете.Флаг, который устанавливает отправленный заказ, называется «завершенным», и для него будет установлено значение ИСТИНА с использованием логического типа данных.

Две проблемы возникают из следующего кода.Во-первых, кажется, что поле, которое я использую в качестве ограничения 'complete', является зарезервированной функцией FoxPro, потому что она светится синим цветом в то время как в FoxPro.Вторая проблема заключается в том, что он не исключает те записи, которые никогда не отправляются (в основном, ограничение не работает).

РЕДАКТИРОВАННЫЙ КОД:

sele bkmast
set order to county
set filt to between(sysdate, m.ld_start, m.ld_end)
go top
m.lh_countylines = ''
select 000000.0000 as ordamt, import, county, 00000000.00 as amount, date() as start, date() as end dist;
    from bkmast ;
    where !empty(county) ;
    .and. alltrim(county) !='0' ;
    .and. alltrim(county) !='8.00_Wyoming' ;
    .and. alltrim(county) !='Select County' ;
    order by county ;
    into table countytax
m.ln_total=0
m.ln_countamt = 0
scan
    m.lc_county = alltrim(county)
    sele bkmast
    seek m.lc_county
    sum tax to m.ln_amt while county=m.lc_county
    seek m.lc_county            
    sum ordamt to m.ln_ordamt while county=m.lc_county 
    sele countytax
    replace ordamt with m.ln_ordamt
    replace amount with m.ln_amt
    replace startDate with m.ld_start
    replace endDate with m.ld_end
    m.ln_countamt = m.ln_countamt + ordamt
    m.ln_total = m.ln_total + amount
    m.lh_countylines = m.lh_countylines+elemerge(html_frm("TAXCOUNTY1"))
endscan

Любая помощь очень ценится.

Ответы [ 2 ]

3 голосов
/ 03 июня 2011

Работая с Foxpro начиная с FoxBase еще в 1987 году, я никогда не знал команду «complete», и она не документирована напрямую в справке VFP (однако, как уже было сказано, синий цвет выделяется как вызов функции через Complete ( )). Дополнительно. И. давно старый индикатор запроса. «Конец» хотя и является ключевым словом. Я бы попробовал, уточнив столбцы, добавив псевдоним в запрос и изменив Конец на Конечную дату (и соединяя Конец на Начальную дату), например ...

Исходя из вашего другого комментария, я бы сделал предварительный запрос непосредственно в операторе select, затем сделал бы ваши обновления ...

SELECT 
      bk.Import,;
      bk.county,;
      sum( bk.OrdAmt ) AS OrdAmt,;
      sum( bk.Tax ) AS Amount,;
      m.ld_Start AS startDate,;
      m.ld_End AS endDate;
   FROM ;
      bkmast bk ;
   where ;
         sysdate between m.ld_start and m.ld_End;
     AND NOT empty( ALLTRIM( bk.county )) ;
     AND NOT alltrim( bk.county ) == '0' ;
     and NOT alltrim( bk.county ) == '8.00_Wyoming' ;
     and NOT alltrim( bk.county ) == 'Select County' ;
     AND bk.complete;
   group by ;
      bk.Import,;
      bk.county;
   order by;
      bk.county ;
   into;
      table countytax

В этом случае, поскольку при суммировании суммы заказа и налога вам не нужно возвращаться к таблице BKMast ... это уже сделано ... вы можете просто циклически просмотреть набор результатов напрямую. Осталось только подвести итоги по сумме налога и суммы заказа ... Если эти переменные не используются в вашем вызове elemerge (html_frm ("TAXCOUNTY1")), вы можете просто предварительно сложить эти суммы напрямую

select CountyTax
sum OrdAmt, Amount to m.ln_CountAmt, m.ln_Total

scan
    */ These two already summed up from before the scan loop
    ** m.ln_countamt = m.ln_countamt + ordamt
    ** m.ln_total = m.ln_total + amount

    */ Now, continue with the eleMerge() function which will already have the
    */ values in the CountyTax table already summed up
    m.lc_county = alltrim(county)
    m.lh_countylines = m.lh_countylines+elemerge(html_frm("TAXCOUNTY1"))
endscan
1 голос
/ 04 июня 2011

Что произойдет, если вы запустите запрос, в котором будет выполнено только это в предложении WHERE:

SELECT ;
  000000.0000 OrdAmt,;
  bk.Import,;
  bk.county,;
  00000000.00 Amount,;
  date() as startDate,;
  date() as endDate;
from bkmast bk;
where bk.Complete ;
into cursor csrTest

Получает ли это правильный набор записей?Я понимаю, что, возможно, поле «Полное» не содержит того, что вы думаете.

Тамар

...