powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Перебор строк в таблице
25 сообщений из 88, страница 1 из 4
Перебор строк в таблице
    #39173170
ularsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

SELECT Tempvo
SUM t1_n6 TO cm2 FOR INLIST(t1_bs, 'XXXXX','YYYYY')
SELECT * from proclcdt WHERE INLIST(SUBSTR(pl_lc,4,5),'XXXXX','YYYYY') ORDER BY pl_lc INTO CURSOR proclc
ex.cells(16,4+j).select
ex.cells(16,4+j)=0
SCAN FOR m_date1>=TTOD(pl_date2)-7 AND m_date1<=TTOD(pl_date2)
ex.cells(16,4+j).select
ex.cells(16,4+j)=ABS(cm2)
EXIT
ENDSCAN

где, m_date1 - текущая дата, pl_date2 - дата окончания срока
В строке ex.cells(16,4+j) EXCEl я должен вытащить сумму по 'XXXXX','YYYYY', если m_date1 входить в промежуток TTOD(pl_date2)-7 и TTOD(pl_date2)
А у меня общий итог cm2 выходить. Как это сделать? Я правильно делаю?
...
Рейтинг: 0 / 0
Перебор строк в таблице
    #39173203
ularsoftДобрый день!
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
	SELECT Tempvo
	SUM t1_n6 TO cm2 FOR INLIST(t1_bs, 'XXXXX','YYYYY')
	SELECT * from proclcdt WHERE INLIST(SUBSTR(pl_lc,4,5),'XXXXX','YYYYY') ORDER BY pl_lc INTO CURSOR proclc
	    ex.cells(16,4+j).select
	    ex.cells(16,4+j)=0
    SCAN FOR m_date1>=TTOD(pl_date2)-7 AND m_date1<=TTOD(pl_date2)
	    ex.cells(16,4+j).select
	    ex.cells(16,4+j)=ABS(cm2)
        EXIT
    ENDSCAN


где, m_date1 - текущая дата, pl_date2 - дата окончания срока
В строке ex.cells(16,4+j) EXCEl я должен вытащить сумму по 'XXXXX','YYYYY', если m_date1 входить в промежуток TTOD(pl_date2)-7 и TTOD(pl_date2)
А у меня общий итог cm2 выходить. Как это сделать? Я правильно делаю?
Ну правильно. То, что написал, то и получил.
1.
Код: sql
1.
2.
3.
	SELECT Tempvo
	SUM t1_n6 TO cm2 FOR INLIST(t1_bs, 'XXXXX','YYYYY')
    


посчитает итоговую сумму (если я правильно понял)
2.
Код: sql
1.
2.
	    ex.cells(16,4+j).select
	    ex.cells(16,4+j)=ABS(cm2)


выведет эту итоговую сумму. Зачем тогда селект и скан?

Если уж минимально исправлять Вашу программу, то:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
	SELECT Tempvo
	SUM t1_n6 TO cm2 FOR INLIST(t1_bs, 'XXXXX','YYYYY')
	SELECT * from proclcdt WHERE INLIST(SUBSTR(pl_lc,4,5),'XXXXX','YYYYY') ORDER BY pl_lc INTO CURSOR proclc
	    ex.cells(16,4+j).select
	    ex.cells(16,4+j)=0
    tt1_n6 = 0
    SCAN FOR m_date1>=TTOD(pl_date2)-7 AND m_date1<=TTOD(pl_date2)
	    tt1_n6 = tt1_n6 + t1_n6
    ENDSCAN
	    ex.cells(16,4+j).select
	    ex.cells(16,4+j)=ABS(tt1_n6)
...
Рейтинг: 0 / 0
Перебор строк в таблице
    #39173526
ularsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Станислав С...кий1. Посчитает итоговую сумму. Всё верно.
Код: sql
1.
2.
	SELECT Tempvo
	SUM t1_n6 TO cm2 FOR INLIST(t1_bs, 'XXXXX','YYYYY')


2. Выведет эту итоговую сумму. Тоже верно.
Код: sql
1.
2.
	    ex.cells(16,4+j).select
	    ex.cells(16,4+j)=ABS(cm2)


3. Зачем тогда селект и скан?

Я ищу такие же 'XXXXX' и 'YYYYY' в подчиненной таблице proclcdt, их могут быть несколько:
Код: sql
1.
2.
3.
	SELECT * from proclcdt WHERE INLIST(SUBSTR(pl_lc,4,5),'XXXXX','YYYYY') ORDER BY pl_lc INTO CURSOR proclc
	    ex.cells(16,4+j).select
	    ex.cells(16,4+j)=0


Пока, ячейка ex.cells(16,4+j) = 0

Код: sql
1.
    tt1_n6 = 0


Вот тут, я сканирую, если m_date1>=TTOD(pl_date2)-7 AND m_date1<=TTOD(pl_date2),
Код: sql
1.
    SCAN FOR m_date1>=TTOD(pl_date2)-7 AND m_date1<=TTOD(pl_date2)


Тогда
Код: sql
1.
	    tt1_n6 = tt1_n6 + t1_n6


Затем
Код: sql
1.
    ENDSCAN


и вывожу занчения
Код: sql
1.
2.
	    ex.cells(16,4+j).select
	    ex.cells(16,4+j)=ABS(tt1_n6)



Тут у меня берет первую строку, сравнивает с m_date1, если в этот промежуток входить, тогда следующую строку не проверяет, дальше общую сумму выводить. Я должен сканировать все строки и выводить только сумму, которая входить в этот промежуток. Н-р, в табл proclcdt 2 строки по 'XXXXX' и 3 строки 'YYYYY', из 'XXXXX' в этот промежуток входить только 1 строка, ее сумма 5, а 2 строка не входить, из 'YYYYY' в промежуток входить только 2 строки, их сумма 10, а 3 строка не входить, общий результат должен быть 5+10=15. Вот это не получается. Как сделать?
...
Рейтинг: 0 / 0
Перебор строк в таблице
    #39173701
ularsoft...
Тут у меня берет первую строку, сравнивает с m_date1, если в этот промежуток входить, тогда следующую строку не проверяет, дальше общую сумму выводить. Я должен сканировать все строки и выводить только сумму, которая входить в этот промежуток. Н-р, в табл proclcdt 2 строки по 'XXXXX' и 3 строки 'YYYYY', из 'XXXXX' в этот промежуток входить только 1 строка, ее сумма 5, а 2 строка не входить, из 'YYYYY' в промежуток входить только 2 строки, их сумма 10, а 3 строка не входить, общий результат должен быть 5+10=15. Вот это не получается. Как сделать?


1. Если ничего не получается - прочитайте, наконец, инструкцию (народный юмор).
Объясняю:
Код: sql
1.
2.
3.
SCAN FOR m_date1>=TTOD(pl_date2)-7 AND m_date1<=TTOD(pl_date2)
....
ENDSCAN


проходит только по тем строкам, для которых выполняется условие: m_date1>=TTOD(pl_date2)-7 AND m_date1<=TTOD(pl_date2)
Что надо сделать когда мы идем по строкам? Правильно - посчитать ularsoft... сумму, которая входить в этот промежуток.
поэтому я и написал Вам:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
...
* Обнуляем переменную, где будем хранить сумму за период
    tt1_n6 = 0
    SCAN FOR m_date1>=TTOD(pl_date2)-7 AND m_date1<=TTOD(pl_date2)
* Считаем сумму за период
	    tt1_n6 = tt1_n6 + t1_n6
    ENDSCAN
* здесь, после окончания цикла, в tt1_n6 находится сумма за период!!! ее и выводим в Excel.
...



2. Если хотите обойтись без цикла SCAN...ENDSCAN, то эти же значения можно посчитать в SELECT. В FoxPro хороший движок SQL, который позволяет писать сложные выражения. Должно получиться что-то вроде такого (символ ";" в FoxPro обозначает переход текста на следующую строку):
Код: sql
1.
2.
3.
4.
5.
6.
SELECT sum(t1_n6) as tt1_n6 ;
from proclcdt ;
WHERE INLIST(SUBSTR(pl_lc,4,5),'XXXXX','YYYYY')  and ;
          m_date1>=TTOD(pl_date2)-7 AND m_date1<=TTOD(pl_date2) ;
ORDER BY pl_lc ;
INTO CURSOR proclc
...
Рейтинг: 0 / 0
Перебор строк в таблице
    #39173702
В конце концов, можно использовать ту же команду SUM, только в условие FOR ввести условие на попадание в интервал дат... будет что-то типа:
Код: sql
1.
2.
3.
4.
...
SELECT proclcdt
SUM t1_n6 TO tt1_n6 FOR INLIST(SUBSTR(pl_lc,4,5), 'XXXXX','YYYYY') and m_date1>=TTOD(pl_date2)-7 AND m_date1<=TTOD(pl_date2)
...
...
Рейтинг: 0 / 0
Перебор строк в таблице
    #39173703
В конце концов, можно использовать ту же команду SUM, только в условие FOR ввести условие на попадание в интервал дат... будет что-то типа:
Код: sql
1.
2.
3.
4.
...
SELECT proclcdt
SUM t1_n6 TO tt1_n6 FOR INLIST(SUBSTR(pl_lc,4,5), 'XXXXX','YYYYY') and m_date1>=TTOD(pl_date2)-7 AND m_date1<=TTOD(pl_date2)
...
...
Рейтинг: 0 / 0
Перебор строк в таблице
    #39173704
В конце концов, можно использовать ту же команду SUM, только в условие FOR ввести условие на попадание в интервал дат... будет что-то типа:
Код: sql
1.
2.
3.
4.
...
SELECT proclcdt
SUM t1_n6 TO tt1_n6 FOR INLIST(SUBSTR(pl_lc,4,5), 'XXXXX','YYYYY') and m_date1>=TTOD(pl_date2)-7 AND m_date1<=TTOD(pl_date2)
...
...
Рейтинг: 0 / 0
Перебор строк в таблице
    #39173705
В конце концов, можно использовать ту же команду SUM, только в условие FOR ввести условие на попадание в интервал дат... будет что-то типа:
Код: sql
1.
2.
3.
4.
...
SELECT proclcdt
SUM t1_n6 TO tt1_n6 FOR INLIST(SUBSTR(pl_lc,4,5), 'XXXXX','YYYYY') and m_date1>=TTOD(pl_date2)-7 AND m_date1<=TTOD(pl_date2)
...
...
Рейтинг: 0 / 0
Перебор строк в таблице
    #39173706
В конце концов, можно использовать ту же команду SUM, только в условие FOR ввести условие на попадание в интервал дат... будет что-то типа:
Код: sql
1.
2.
3.
4.
...
SELECT proclcdt
SUM t1_n6 TO tt1_n6 FOR INLIST(SUBSTR(pl_lc,4,5), 'XXXXX','YYYYY') and m_date1>=TTOD(pl_date2)-7 AND m_date1<=TTOD(pl_date2)
...
...
Рейтинг: 0 / 0
Перебор строк в таблице
    #39173707
В конце концов, можно использовать ту же команду SUM, только в условие FOR ввести условие на попадание в интервал дат... будет что-то типа:
Код: sql
1.
2.
3.
4.
...
SELECT proclcdt
SUM t1_n6 TO tt1_n6 FOR INLIST(SUBSTR(pl_lc,4,5), 'XXXXX','YYYYY') and m_date1>=TTOD(pl_date2)-7 AND m_date1<=TTOD(pl_date2)
...
...
Рейтинг: 0 / 0
Перебор строк в таблице
    #39173714
ularsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Станислав С...кийВ конце концов, можно использовать ту же команду SUM, только в условие FOR ввести условие на попадание в интервал дат... будет что-то типа:
Код: sql
1.
2.
3.
4.
...
SELECT proclcdt
SUM t1_n6 TO tt1_n6 FOR INLIST(SUBSTR(pl_lc,4,5), 'XXXXX','YYYYY') and m_date1>=TTOD(pl_date2)-7 AND m_date1<=TTOD(pl_date2)
...



В таблице tempvo другие данные, в т.ч. остатки по 'XXXXX' и 'YYYYY', а в другой таблице proclcdt сроки по 'XXXXX' и 'YYYYY', pl_date1-начальная дата, pl_date2-конечная дата.
...
Рейтинг: 0 / 0
Перебор строк в таблице
    #39173728
ularsoft,
Вы не заметили, что я написал SELECT proclcdt, то есть перешел в другую рабочую область?
Потому SUM теперь будет работать по таблице proclcdt.

И вообще, никто лучше Вас Вашу систему не знает. Потому, я только даю идеи. А уж применить их - ваша забота.
...
Рейтинг: 0 / 0
Перебор строк в таблице
    #39173743
ularsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Станислав С...кийularsoft,

И вообще, никто лучше Вас Вашу систему не знает. Потому, я только даю идеи. А уж применить их - ваша забота.

Уважаемый Станислав,

Хочу выразить Вам огромную благодарность за то, что Вы мне помогли собраться! Я сделал немного по другому:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
*
SELECT * from proclcdt WHERE INLIST(SUBSTR(pl_lc,4,5),'XXXXX','YYYYY') ;
ORDER BY pl_lc INTO CURSOR proclc
	    ex.cells(19,4+j).select
	    ex.cells(19,4+j)=0
	    tt1_n6 = 0
    SCAN FOR m_date1>=TTOD(pl_date2)-7 AND m_date1<=TTOD(pl_date2)
	SELECT * from Tempvo WHERE t1_lc=proclc.pl_lc INTO CURSOR tmp
	SELECT tmp
	    tt1_n6 = tt1_n6 + tmp.t1_n6
	    EXIT
    ENDSCAN 
	    ex.cells(19,4+j).select
	    ex.cells(19,4+j)=ABS(tt1_n6)
*


Все замечательно...
...
Рейтинг: 0 / 0
Перебор строк в таблице
    #39262952
ularsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ularsoftСтанислав С...кийularsoft,

И вообще, никто лучше Вас Вашу систему не знает. Потому, я только даю идеи. А уж применить их - ваша забота.

Уважаемый Станислав,

Хочу выразить Вам огромную благодарность за то, что Вы мне помогли собраться! Я сделал немного по другому:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
*
SELECT * from proclcdt WHERE INLIST(SUBSTR(pl_lc,4,5),'XXXXX','YYYYY') ;
ORDER BY pl_lc INTO CURSOR proclc
	    ex.cells(19,4+j).select
	    ex.cells(19,4+j)=0
	    tt1_n6 = 0
    SCAN FOR m_date1>=TTOD(pl_date2)-7 AND m_date1<=TTOD(pl_date2)
	SELECT * from Tempvo WHERE t1_lc=proclc.pl_lc INTO CURSOR tmp
	SELECT tmp
	    tt1_n6 = tt1_n6 + tmp.t1_n6
	    EXIT
    ENDSCAN 
	    ex.cells(19,4+j).select
	    ex.cells(19,4+j)=ABS(tt1_n6)
*


Все замечательно...

Уважаемые знатоки!
В продолжении данного обсуждения, хочу спросить кое-что.
Было все замечательно, пока m_date1>=TTOD(pl_date2)-7 AND m_date1<=TTOD(pl_date2) и остатки закрывались во время, в данный момент имею другую проблему:

m_date1 - это дата в календаре.
pl_date2 - конечная дата срока.

Формирую отчет за неделю, т.е. с понедельника по воскресенье.

Проблема в том, что m_date1 входить в данный промежуток, н-р, до среды, а после остаток в курсоре Tempvo должен входить в расчет. Не могу соображать как это сделать правильно?
...
Рейтинг: 0 / 0
Перебор строк в таблице
    #39263573
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тему не читал, но почему бы не вставить в цикл проверку на совпадение текущей даты с этой "средой"? Если совпало, то делаем EXIT. Возможно, проставляем флаг выхода, чтобы дальше как-то обработать этот факт.
...
Рейтинг: 0 / 0
Перебор строк в таблице
    #39264369
ularsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglirТему не читал, но почему бы не вставить в цикл проверку на совпадение текущей даты с этой "средой"? Если совпало, то делаем EXIT. Возможно, проставляем флаг выхода, чтобы дальше как-то обработать этот факт.

Уважаемый tanglir,

В цикле условие m_date1>=TTOD(pl_date2)-7 AND m_date1<=TTOD(pl_date2) как раз проверяет на совпадение текущей даты диапазоне со сроком. Н-р, если m_date1 = с 20.06.2016 по 26.06.2016, конечный срок pl_date2 = 22.06.2016, то в данный момент у меня включает в расчет с 20.06.2016 по 22.06.2016, это будет правильно если остаток НОЛЬ, иначе должен включится в расчет до конца недели. А у меня не включается.
...
Рейтинг: 0 / 0
Перебор строк в таблице
    #39264376
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ularsoftН-р, если m_date1 = с 20.06.2016 по 26.06.2016, конечный срок pl_date2 = 22.06.2016, то в данный момент у меня включает в расчет с 20.06.2016 по 22.06.2016, это будет правильно если остаток НОЛЬ, иначе должен включится в расчет до конца недели.ну, расчёт до конца недели делается так
Код: sql
1.
2.
m_date1>=TTOD(pl_date2)-7 
 AND m_date1<=max(TTOD(pl_date2), m_date1+7-dow(m_date1,2))

а как сюда проверку "остатка" включить - вам лучше знать.
...
Рейтинг: 0 / 0
Перебор строк в таблице
    #39273489
ularsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglirну, расчёт до конца недели делается так
Код: sql
1.
2.
m_date1>=TTOD(pl_date2)-7 
 AND m_date1<=max(TTOD(pl_date2), m_date1+7-dow(m_date1,2))

а как сюда проверку "остатка" включить - вам лучше знать.
Отчет формируется с 20.06.16 по 26.06.16
Если
SCAN FOR (m_date1>=TTOD(pl_date2)-6 AND m_date1<=TTOD(pl_date2)) or ((TTOD(pl_date2)-m_date1)<0)
то получаю следующие даты:
TTOD(pl_date2)-6< m_date1 < TTOD(pl_date2)
* 18.06.16 < 20.06.16 < 24.06.2016
* 18.06.16 < 21.06.16 < 24.06.2016
* 18.06.16 < 22.06.16 < 24.06.2016
* 18.06.16 < 23.06.16 < 24.06.2016
* 18.06.16 < 24.06.16 < 24.06.2016
* 18.06.16 < 25.06.16 < 24.06.2016
* 18.06.16 < 26.06.16 < 24.06.2016

Беру конкретный pl_lc = XXXX, по нему срок установлен с 26.02.16 по 24.06.16. Поэтому моя программа берет ХХХХ в расчет, потому что данный pl_lc входит в расчет с 20.06.16 по 26.06.16, клиент должен был забрать остаток по ХХХХ 26.06.16, но не забрал. Срок истек, а остаток не пустой.

Делаю так,
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SELECT * from proclcdt WHERE INLIST(pl_lc,'XXXX') ;
ORDER BY pl_lc INTO CURSOR proclc
	    ex.cells(22,4+j).select
	    ex.cells(22,4+j)=0
	    tt1_n6 = 0
    SCAN FOR (m_date1>=TTOD(pl_date2)-6 AND m_date1<=TTOD(pl_date2)) or ((TTOD(pl_date2)-m_date1)<0)
 	SELECT * from Tempvo WHERE t1_lc=proclc.pl_lc INTO CURSOR tmp
	SELECT tmp
	    tt1_n6 = tt1_n6 + tmp.t1_n6
    ENDSCAN
	    ex.cells(22,4+j).select
	    ex.cells(22,4+j)=ABS(tt1_n6)


А у меня программа включает в расчет с 20.06.16 по 24.06.16, не включает с 25.06.16 по 26.06.16, а должен. Как это сделать? У кого какие идеи! Заранее благодарен.
...
Рейтинг: 0 / 0
Перебор строк в таблице
    #39273495
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ularsoft,

а можно конкретные данные в теге [ CSV ]?
вот этот курсор procls, который вы получаете первым запросом
и выборки из tempvo на каждом шаге
и желаемый результат
с объяснением, как именно он получается и на каком этапе сейчас происходит затык
именно на вот этих конкретных данных

потому как я не понимаю, например, как
ularsoftконкретный pl_lc = XXXX, по нему срок установлен с 26.02.16 по 24.06.16соотносится с
ularsoftклиент должен был забрать остаток по ХХХХ 26.06.16, но не забрал, а это, в свою очередь, с
ularsoftА у меня программа включает в расчет с 20.06.16 по 24.06.16, не включает с 25.06.16 по 26.06.16, а долженВы хотите, чтобы программа включала в расчёт отсутствующие в таблицах данные, что ли?..
...
Рейтинг: 0 / 0
Перебор строк в таблице
    #39273500
ularsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglirВы хотите, чтобы программа включала в расчёт отсутствующие в таблицах данные, что ли?

Уважаемый tanglir,
В таблице TEMPVO хранятся остатки. В таблице PROCLCDT устанавливаются сроки для любого счета.
Код: sql
1.
2.
SELECT * from proclcdt WHERE INLIST(pl_lc,'ХХХХ') ;
ORDER BY pl_lc INTO CURSOR proclc


Этим запросом получаю курсор proclc с ХХХХ и проверяю m_date1 в промежутке с TTOD(proclc.pl_date2)-6 по TTOD(proclc.pl_date2). Если m_date1 с 20.06.16 по 26.06.16 входит в данный промежуток, тогда вывожу сумму из TEMPVO в Excel.

На данном примере по ХХХХ установлен срок с 26.02.16 по 24.06.16, программа до 24.06.16 включает в расчет а дальше не включает, потому что истек срок. А тетки говорят, что если срок истек, но остаток не ноль, необх вкл в расчет.
...
Рейтинг: 0 / 0
Перебор строк в таблице
    #39273545
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ещё раз
внимательно и по пунктам

tanglirконкретные данные в теге [ CSV ]:
-курсор procls, который вы получаете первым запросом
-и выборки из tempvo на каждом шаге
и желаемый результат
с объяснением, как именно он получается и на каком этапе сейчас происходит затык
именно на вот этих конкретных данных
потому как на данный момент даже чтоб понять, кто на ком стоялm_date - параметр, а p_date - поле в курсоре или наоборот - надо листать обратно и выискивать намёки в коде.

ularsoftесли срок истек, но остаток не ноль, необх вкл в расчет.Вроде б уже предлагал - проверить пересечение сроков, и если остаётся необработанный кусок - так обработать его отдельно (если уж прямо в том цикле почему-то нельзя). А если хочется не общих советов, а детальных, тогда надо для начала внятно, на примере объяснить, что вообще происходит.
...
Рейтинг: 0 / 0
Перебор строк в таблице
    #39273640
ularsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot tanglir]ещё раз
внимательно и по пунктам

tanglirконкретные данные в теге [ CSV ]:
-курсор procls, который вы получаете первым запросом
-и выборки из tempvo на каждом шаге
и желаемый результат
с объяснением, как именно он получается и на каком этапе сейчас происходит затык
именно на вот этих конкретных данных
потому как на данный момент даже чтоб понять, кто на ком стоялm_date - параметр, а p_date - поле в курсоре или наоборот - надо листать обратно и выискивать намёки в коде.

ularsoftSELECT * from proclcdt WHERE INLIST(pl_lc,'1272031100002234') ORDER BY pl_lc INTO CURSOR proclc
ex.cells(22,4+j).select
ex.cells(22,4+j)=0
* Обнуляем переменную, где будем хранить сумму за период m_date2
tt1_n6 = 0
SCAN FOR (m_date1>=TTOD(pl_date2)-6 AND m_date1<=TTOD(pl_date2))
* 18.06.16 <= 20.06.16 <= 24.06.2016
* 18.06.16 <= 21.06.16 <= 24.06.2016
* 18.06.16 <= 22.06.16 <= 24.06.2016
* 18.06.16 <= 23.06.16 <= 24.06.2016
* 18.06.16 <= 24.06.16 <= 24.06.2016
* Считаем сумму за период
SELECT * from Tempvo WHERE t1_lc=proclc.pl_lc INTO CURSOR tmp
SELECT tmp
tt1_n6 = tt1_n6 + tmp.t1_n6
*exit
ENDSCAN
* 18.06.16 <= 25.06.16 <= 24.06.2016 && За этот день не включает в расчет, но остаток не пустой
* 18.06.16 <= 26.06.16 <= 24.06.2016 && За этот день не включает в расчет, но остаток не пустой

* здесь, после окончания цикла, в tt1_n6 находится сумма за период!!! ее и выводим в Excel.
ex.cells(22,4+j).select
ex.cells(22,4+j)=ABS(tt1_n6)

т.е. условие (m_date1>=TTOD(pl_date2)-6 AND m_date1<=TTOD(pl_date2)) проверяется до срока окончания и уходит в конец, потому что последние 2 даты не входит в промежуток.
...
Рейтинг: 0 / 0
Перебор строк в таблице
    #39273673
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
всё, я пас
...
Рейтинг: 0 / 0
Перебор строк в таблице
    #39275230
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ularsoft
Код: sql
1.
SCAN FOR (m_date1>=TTOD(pl_date2)-6 AND m_date1<=TTOD(pl_date2)) or ((TTOD(pl_date2)-m_date1)<0)



А у меня программа включает в расчет с 20.06.16 по 24.06.16, не включает с 25.06.16 по 26.06.16, а должен.
1. Какая версия FoxPro?
2. Для одной записи таблицы PROCLCDT может существовать только одна запись таблицы TEMPVO?

Т.е. связь между таблицами Tempvo.t1_lc = proclc.pl_lc - это связь один-к-одному или тут возможен вариант много-ко-многим?

3. Если вместо вычитания дат использовать простое сравнение проблема останется?

Код: sql
1.
SCAN FOR (...) or (TTOD(pl_date2) < m_date1)



4. "Не пустой остаток" - это значение поля Tempvo.t1_n6 отлично от нуля?

5. Если в командном окне выполнить такой запрос

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
* Для версии VFP6 или старше
m_date1 = {^2016-06-26}

select proclc.pl_lc, proclc.pl_date2, Tempvo.t1_n6 ;
from Tempvo ;
inner join proclc on Tempvo.t1_lc = proclc.pl_lc ;
where INLIST(proclc.pl_lc,'XXXX') ;
	and ((m.m_date1 between TTOD(proclc.pl_date2)-6 AND TTOD(proclc.pl_date2)) ;
		or (TTOD(proclc.pl_date2) < m.m_date1)) ;
order by proclc.pl_lc



Будет ли в открывшемся Browse-окне отображена нужная запись? Есть ли в выборке "дубли" по значению поля proclc.pl_lc? Т.е. может ли быть несколько записей с одним и тем же значением proclc.pl_lc?
...
Рейтинг: 0 / 0
Перебор строк в таблице
    #39275231
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tempvo - это таблица или тоже ранее сделанная выборка? Если это выборка, то была ли она сформирована с учетом значения переменной m_date1? Т.е. а есть ли вообще запись с суммой остатка, для Вашего проблемного значения?

Код: sql
1.
select * from Tempvo where Tempvo.t1_lc = '1272031100002234'
...
Рейтинг: 0 / 0
25 сообщений из 88, страница 1 из 4
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Перебор строк в таблице
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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