powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Перебор строк в таблице
25 сообщений из 88, страница 3 из 4
Перебор строк в таблице
    #39283949
ularsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TularsoftЗаставляют :(
Электричество пропадет, скажут лезь в трансформаторную будку, почини. Тоже полезешь?

Владимир правильно написал что ты даже не понимаешь что от тебя просят. Мы тут не телепаты. Я у тебя прошу то что мне необходимо увидеть чтобы понять логику работы твоего кода. Я уже самый простейший вариант предложил, от руки набить табличку и показать данные из полей которые используются в коде. И чего ты набил? Я вижу в коде поле pl_lc, а в таблице не вижу.

Если планируешь и дальше продолжать писать только "помогите", то это в форум работа, с указанием суммы вознаграждения. Помогут. Гарантирую.

Может тебе трудно понять?

Я же нарисовал 2 табл. Если ты не понял из Tempvo t1_lc ищет в proclcdt по pl_lc.
Если находить суммирует.
...
Рейтинг: 0 / 0
Перебор строк в таблице
    #39283955
ularsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ularsoftDima Tпропущено...

Электричество пропадет, скажут лезь в трансформаторную будку, почини. Тоже полезешь?

Владимир правильно написал что ты даже не понимаешь что от тебя просят. Мы тут не телепаты. Я у тебя прошу то что мне необходимо увидеть чтобы понять логику работы твоего кода. Я уже самый простейший вариант предложил, от руки набить табличку и показать данные из полей которые используются в коде. И чего ты набил? Я вижу в коде поле pl_lc, а в таблице не вижу.

Если планируешь и дальше продолжать писать только "помогите", то это в форум работа, с указанием суммы вознаграждения. Помогут. Гарантирую.

Может тебе трудно понять?

Я же нарисовал 2 табл. Если ты не понял из Tempvo t1_lc ищет в proclcdt по pl_lc.
Если находить суммирует.

Курсор Tempvo:
t1_lct1_n6Х5000

Курсор PROCLCDT:
PL_LCPL_DATE1PL_DATE2Х19.11.201418.03.2015Х25.01.201621.06.2016Х24.06.201622.07.2016
...
Рейтинг: 0 / 0
Перебор строк в таблице
    #39283960
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вру, вижу PL_LC. Попозже код тебе сделаю а ты покажешь что в нем не так.
...
Рейтинг: 0 / 0
Перебор строк в таблице
    #39283962
ularsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TВру, вижу PL_LC. Попозже код тебе сделаю а ты покажешь что в нем не так.
...
Рейтинг: 0 / 0
Перебор строк в таблице
    #39283967
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ularsoft"тупой" вариант увеличивает сумму в 3 раза.

Судя по приведенной Вами картинке с содержимым таблиц, у Вас один и тот же счет может иметь несколько периодов. В данном случае, на один счет приходится 3 периода. Правильно?

Но разве у Вас в этом случае не происходит увеличение сумм, если в период отчета попадают 2 периода? Ну, например, если период расчета, скажем, с 20.06.2016 по 27.06.2016. В этом случае будет выбрано 2 записи и сумма остатка будет учтена дважды. Правильно?
...
Рейтинг: 0 / 0
Перебор строк в таблице
    #39283974
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ularsoftКурсор PROCLCDT:
PL_LCPL_DATE1PL_DATE2Х19.11.201418.03.2015Х25.01.201621.06.2016Х24.06.201622.07.2016
Я правильно понимаю что например 22.06 договор был недействителен, но остаток по счету X был и его надо учесть?
...
Рейтинг: 0 / 0
Перебор строк в таблице
    #39283979
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще мне непонятна такая конструкция
Код: sql
1.
SCAN FOR (m_date1>=TTOD(pl_date2)-6 AND m_date1<=TTOD(pl_date2))


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

Судя по приведенной Вами картинке с содержимым таблиц, у Вас один и тот же счет может иметь несколько периодов. В данном случае, на один счет приходится 3 периода. Правильно?

Но разве у Вас в этом случае не происходит увеличение сумм, если в период отчета попадают 2 периода? Ну, например, если период расчета, скажем, с 20.06.2016 по 27.06.2016. В этом случае будет выбрано 2 записи и сумма остатка будет учтена дважды. Правильно?

Да, 3 периода, но 1 из них попадает в расчет.
Например, если период расчета, с 20.06.2016 по 27.06.2016, pl_date2 = 22.07.2016, то
Код: sql
1.
SCAN FOR (m_date1>=TTOD(pl_date2)-6 AND m_date1<=TTOD(pl_date2))



будет
PL_DATE2-6m_date1PL_DATE216.07.201620.07.201622.07.201616.07.201621.07.201622.07.201616.07.201622.07.201622.07.201616.07.201623.07.201622.07.201616.07.201624.07.201622.07.201616.07.201625.07.201622.07.201616.07.201626.07.201622.07.201616.07.201627.07.201622.07.2016

Как раз здесь видно у меня включает в расчет только до 22.07.2016, а за 23, 24, 25, 26, 27 в расчет не включает.
...
Рейтинг: 0 / 0
Перебор строк в таблице
    #39283981
ularsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владимир,

клиент не закрыл договор до 27.07.2016, в этом случае остаток не 0, поэтому я должен вкл в расчет. У меня не получается.
...
Рейтинг: 0 / 0
Перебор строк в таблице
    #39283982
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кажется я понял, если остаток есть, а действующего договора нет, то надо показать последний договор который закончился? Так?
...
Рейтинг: 0 / 0
Перебор строк в таблице
    #39283985
ularsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TКажется я понял, если остаток есть, а действующего договора нет, то надо показать последний договор который закончился? Так?
Теперь ребята вы поняли.
...
Рейтинг: 0 / 0
Перебор строк в таблице
    #39283987
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ularsoftDima TКажется я понял, если остаток есть, а действующего договора нет, то надо показать последний договор который закончился? Так?
Теперь ребята вы поняли.
про неделю до окончания договора в условии объясни, по моему это ерунда какая-то 19482321
там проверка: взять записи, у которых m_date1 попадает в последнюю неделю договора.
...
Рейтинг: 0 / 0
Перебор строк в таблице
    #39283989
ularsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если остаток есть, а действующего договора нет, то надо показать остаток по этому счету.
...
Рейтинг: 0 / 0
Перебор строк в таблице
    #39283994
ularsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ularsoftЕсли остаток есть, а действующего договора нет, то надо показать остаток по этому счету.
Например, если период расчета, с 20.06.2016 по 27.06.2016, pl_date2 = 22.07.2016 - дата окончания договора, то из
курсора Tempvo:
t1_lct1_n6Х5000

будет
PL_DATE2-6m_date1PL_DATE2Значение в EXCEL16.07.201620.07.201622.07.2016 500016.07.201621.07.201622.07.2016 500016.07.201622.07.201622.07.2016 500016.07.201623.07.201622.07.2016 500016.07.201624.07.201622.07.2016 500016.07.201625.07.201622.07.2016 500016.07.201626.07.201622.07.2016 500016.07.201627.07.201622.07.2016 5000

Как раз здесь видно у меня включает в расчет только до 22.07.2016, а за 23, 24, 25, 26, 27 в расчет не включает.[/quot]
...
Рейтинг: 0 / 0
Перебор строк в таблице
    #39284113
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот код примера который я ожидал от тебя увидеть. Я только добавил исходные данные и заменил вывод в эксель на вывод на экран.
Запусти и напиши он так же работает как и у тебя. Т.е. также неправильно, но выводит как нужно. Если все так, то дальше будем его дорабатывать.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
clear
create cursor Tempvo (t1_lc c(16), t1_n6 N(15,2))
insert into Tempvo values ('123ХХХ', 5000)
create cursor proclcdt (PL_LC c(16), PL_DATE1 t, PL_DATE2 t)
insert into proclcdt values ('123ХХХ', {^2014-11-19}, {^2015-03-18})
insert into proclcdt values ('123ХХХ', {^2016-01-25}, {^2016-06-21})
insert into proclcdt values ('123ХХХ', {^2016-06-24}, {^2016-07-22})

for i = 1 to 5
	m_date1 = {^2016-07-20} + i
	SELECT * from proclcdt WHERE LIKE('ХХХ*',SUBSTR(pl_lc,4,5)) ;
		ORDER BY pl_lc INTO CURSOR proclc

	*ex.cells(21,4+j).select
	*ex.cells(21,4+j)=0
	* Обнуляю переменную, где буду хранить сумму за период
	tt1_n6 = 0
	SCAN FOR (m_date1>=TTOD(pl_date2)-6 AND m_date1<=TTOD(pl_date2))
		*** ЕСЛИ ДАТА_ОКОНЧАНИЯ_ДОГОВОРА - ТЕКУЩАЯ_ДАТА<=0, ТОГДА ДОЛЖНЫ ВКЛ В РАСЧЕТ.

		* Считаем сумму за период
		SELECT * from Tempvo WHERE t1_lc=proclc.pl_lc INTO CURSOR tmp
		SELECT tmp
		tt1_n6 = tt1_n6 + tmp.t1_n6
	ENDSCAN 
	* здесь, после окончания цикла, в tt1_n6 находится сумма за период!!! ее и вывожу в Excel.
	*ex.cells(21,4+j).select
	*ex.cells(21,4+j)=ABS(tt1_n6)
	? m_date1, tt1_n6
endfor

return
...
Рейтинг: 0 / 0
Перебор строк в таблице
    #39284148
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ularsoftDima TКажется я понял, если остаток есть, а действующего договора нет, то надо показать последний договор который закончился? Так?
Теперь ребята вы поняли.
Получается пофиг есть или нет договор на конкретную дату, если нет, то главное чтобы был закончившийся более ранний договор.
Если так, то можно просто свести твои данные в одну таблицу
t1_lct1_n6PL_DATE0Х500019.11.2014
где PL_DATE0 это дата открытия первого договора по данному счету.

И дальше всегда выдавать 5000 на любую m_date1 c 19.11.2014. Правильно? Если правильно то это бред какой-то.
...
Рейтинг: 0 / 0
Перебор строк в таблице
    #39284220
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да нормально все. Не будут они делать отчет "задним числом" и "авансовых" договоров с не погашенным остатком у них нет. Ну, и отчет они делают, скорее всего, на текущую неделю. Т.е. все возможные "не стандартные" ситуации пропускаем, как "не существующие" в данной постановке задачи и делаем предельно просто и прямолинейно

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
*** Выборка всех счетов по маске кода
SELECT * from proclcdt WHERE INLIST(SUBSTR(pl_lc,4,5),'XXXXX','YYYYY') ;
ORDER BY pl_lc INTO CURSOR proclc

	    ex.cells(19,4+j)=0

*** Переменная, которая будет хранить вычисленную итоговую сумму
	    tt1_n6 = 0

*** Вот это есть в Вашем коде. Оставьте "как есть"
*** Это сумма тех счетов, период действия которых включает указанную дату
    SCAN FOR (m_date1>=TTOD(pl_date2)-6 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
    ENDSCAN 

*** Теперь надо получить список счетов без дублей, из тех, которые имеют "закрытые" договора
*** Вне зависимости от факта наличия или отсутствия остатка

select distinct proclc.pl_lc ;
from proclc ;
into cursor proclc_Uniq ;
where m_date1 > TTOD(proclc.pl_date2)


*** Вот здесь делает ПОВТОРНЫЙ расчет для учета не нулевого остатка
*** Но уже по курсору proclc_Uniq и без ограничений 
*** анализ даты уже выполнен в момент формирования этого курсора
    SCAN ALL
    	* Считаем сумму ОСТАТКА
	SELECT * from Tempvo WHERE t1_lc=proclc_Uniq.pl_lc INTO CURSOR tmp
	SELECT tmp
	    tt1_n6 = tt1_n6 + tmp.t1_n6
    ENDSCAN 

	    ex.cells(19,4+j)=ABS(tt1_n6)

*** Если дальше по коду есть анализ курсора proclc, то надо вернуться в его рабочую область
select proclc



С точки зрения программиста, код довольно "корявый". Есть возможность его существенно улучшить (ускорить выполнение). Но для этого надо много чего знать. Причем как Вам, чтобы понять, о чем вообще речь, так и нам, чтобы понять, как именно сделать это улучшение. Не думаю, что в этом есть необходимость...
...
Рейтинг: 0 / 0
Перебор строк в таблице
    #39284221
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМДа нормально все. Не будут они делать отчет "задним числом" и "авансовых" договоров с не погашенным остатком у них нет. Ну, и отчет они делают, скорее всего, на текущую неделю. Т.е. все возможные "не стандартные" ситуации пропускаем, как "не существующие" в данной постановке задачи и делаем предельно просто и прямолинейно
Если понятно - объясни поподробнее. Боюсь ТС не сможет. Непонятно зачем размазывать по дням какой-то конкретный остаток на счете? Он же меняться может. Сегодня пополнили, завтра потратили, на то он и счет.
...
Рейтинг: 0 / 0
Перебор строк в таблице
    #39284904
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TВладимирМДа нормально все. Не будут они делать отчет "задним числом" и "авансовых" договоров с не погашенным остатком у них нет. Ну, и отчет они делают, скорее всего, на текущую неделю. Т.е. все возможные "не стандартные" ситуации пропускаем, как "не существующие" в данной постановке задачи и делаем предельно просто и прямолинейно
Если понятно - объясни поподробнее. Боюсь ТС не сможет. Непонятно зачем размазывать по дням какой-то конкретный остаток на счете? Он же меняться может. Сегодня пополнили, завтра потратили, на то он и счет.

Он так коряво описал задачу отображения остатка по договору, срок действия которого закончился на текущей неделе :) Просто способ решения выбран, хм..., специфический

Кстати, если я угадал с постановкой задачи, то можно решить ее чуть попроще в том же стиле

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
*** Выборка всех счетов по маске кода
SELECT * from proclcdt WHERE INLIST(SUBSTR(pl_lc,4,5),'XXXXX','YYYYY') ;
ORDER BY pl_lc INTO CURSOR proclc

	    ex.cells(19,4+j)=0

*** Переменная, которая будет хранить вычисленную итоговую сумму
	    tt1_n6 = 0

*** Вот это есть в Вашем коде. Убираем
**    SCAN FOR (m_date1>=TTOD(pl_date2)-6 AND m_date1<=TTOD(pl_date2))
** Заменяем на вот такой анализ
    SCAN FOR (TTOD(pl_date2) >= m_date1-6 AND TTOD(pl_date2) <= m_date1)
	SELECT * from Tempvo WHERE t1_lc=proclc.pl_lc INTO CURSOR tmp
	SELECT tmp
	    tt1_n6 = tt1_n6 + tmp.t1_n6
    ENDSCAN 

	    ex.cells(19,4+j)=ABS(tt1_n6)



Цель замены: не подогнать дату окончания счета под нужную дату, а найти диапазон, внутри которого должна оказаться дата окончания

Поясню. У Вас есть дата окончания 22.07.2016. И неделя с 20.07.2016 по 27.07.2016.

Что делали Вы? Вы пытались найти пересечение диапазонов. Т.е. на основании даты окончания формировали период с 16.07.2016 по 22.07.2016 и отбирали только те договора, сформированный период по которому пересекался с периодом текущей недели

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

Вот так
Код: sql
1.
SCAN FOR (TTOD(pl_date2) >= m_date1-6 AND TTOD(pl_date2) <= m_date1)

делать вообще нельзя, потому что это "срочные депозиты юр. лиц со сроком погашения до 6 дней ", т.е. вот так
Код: sql
1.
SCAN FOR (m_date1>=TTOD(pl_date2)-6 AND m_date1<=TTOD(pl_date2))

Это значит, что текущая дата должна находиться в диапазон, н-р, с 18.07.16 до 24.07.16, но сроки продлеваются.
...
Рейтинг: 0 / 0
Перебор строк в таблице
    #39285049
ularsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Представьте себе, что есть "массив счетов", в т.ч. срочные депозиты, не важно, что клиент физ. лицо или юр. лицо.
LCOSTATOKX50000Y1000Z230000
У каждого счета X, Y, Z разные сроки.
Наша задача вытащить информацию "со сроком погашения до 6 дней". Т.е. из массива берем счет, какой-то срочный депозит "Х", смотрим сроки из таблицы PROCLCDT, у него были сроки:
PL_LCPL_DATE1PL_DATE2X19/11/201418/03/2015X25/01/201621/06/2016X24/06/201622/07/2016

Я формирую отчет с 18/07/2016 по 24/07/2016, т.е. за неделю, это m_date1 и m_date2. Будем двигаться по m_date1.
Код: sql
1.
SCAN FOR (m_date1>=TTOD(pl_date2)-6 AND m_date1<=TTOD(pl_date2))

Т.е. данный SCAN проверяет даты с 18/07/2016 по 24/07/2016 в промежутке 16/07/2016<m_date1<22/07/2016. Выглядит так:pl_date2-6<=m_date1<=pl_date2В РАСЧЕТ16/07/2016<=18/07/2016<=22/07/2016включает16/07/2016<=19/07/2016<=22/07/2016включает16/07/2016<=20/07/2016<=22/07/2016включает16/07/2016<=21/07/2016<=22/07/2016включает16/07/2016<=22/07/2016<=22/07/2016включает16/07/2016<=23/07/2016<=22/07/2016не включает16/07/2016<=24/07/2016<=22/07/2016не включает

28/07/2016 клиент закрыл счет "Х" - это срочный депозит, но клиент может продлить сроки. Программа должна включить в расчет, если клиент не забрал деньги или не закрыл счет во время. В нашем случае за последние 2 дня в расчет не включает. Об этом и прошу помощи или идеи. Если я формирую отчет с 25/07/2016 по 31/07/2016, тогда реально будет след образом:
pl_date2-6<=m_date1<=pl_date2В РАСЧЕТ16/07/2016<=25/07/2016<=22/07/2016включает16/07/2016<=26/07/2016<=22/07/2016включает16/07/2016<=27/07/2016<=22/07/2016включает16/07/2016<=28/07/2016<=22/07/2016включает16/07/2016<=29/07/2016<=22/07/2016не включает16/07/2016<=30/07/2016<=22/07/2016не включает16/07/2016<=31/07/2016<=22/07/2016не включает
...
Рейтинг: 0 / 0
Перебор строк в таблице
    #39285051
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ularsoftпотому что это "срочные депозиты юр. лиц со сроком погашения до 6 дней ", т.е. вот так
Код: sql
1.
SCAN FOR (m_date1>=TTOD(pl_date2)-6 AND m_date1<=TTOD(pl_date2))


" до 6 дней " и "ровно 6 дней" это разные вещи. Зачем вообще такое писать если у тебя есть дата открытия депозита? т.е. почему так нельзя?
Код: sql
1.
SCAN FOR (m_date1>=TTOD(pl_date1) AND m_date1<=TTOD(pl_date2))


И на это ответь 19483521 , если так решается, то вообще никаких сканов не надо.
...
Рейтинг: 0 / 0
Перебор строк в таблице
    #39285054
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ularsoftНаша задача вытащить информацию "со сроком погашения до 6 дней".
Так бы сразу и сказал. Попробуй
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
clear
create cursor Tempvo (t1_lc c(16), t1_n6 N(15,2))
insert into Tempvo values ('123ХХХ', 5000)
create cursor proclcdt (PL_LC c(16), PL_DATE1 t, PL_DATE2 t)
insert into proclcdt values ('123ХХХ', {^2014-11-19}, {^2015-03-18})
insert into proclcdt values ('123ХХХ', {^2016-01-25}, {^2016-06-21})
insert into proclcdt values ('123ХХХ', {^2016-06-24}, {^2016-07-22})

for i = 1 to 15
	m_date1 = {^2016-07-10} + i
	
	* Макс. даты закрытия счетов
	select pl_lc, max(TTOD(pl_date2)) as pl_dt_max;
		from proclcdt;
		WHERE LIKE('ХХХ*',SUBSTR(pl_lc,4,5));
		group by pl_lc;
		having pl_dt_max <= m_date1 + 6; && те что закрыты или закроются в течении 6 дней
		into cursor proclc
	
	select sum(Tempvo.t1_n6) as nSum;
		from Tempvo join proclc on Tempvo.t1_lc = proclc.pl_lc;
		into cursor tmp

	tt1_n6 = nvl(tmp.nSum, 0)

	? m_date1, tt1_n6
endfor

return
...
Рейтинг: 0 / 0
Перебор строк в таблице
    #39285057
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Суть в том что ты не с той стороны задачу решал. Надо перебирать не договоры, а счета, затем проверять когда он закончится или уже закончился, и исходя из этого решать надо его учитывать или нет.
...
Рейтинг: 0 / 0
Перебор строк в таблице
    #39285073
ularsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TСуть в том что ты не с той стороны задачу решал. Надо перебирать не договоры, а счета, затем проверять когда он закончится или уже закончился, и исходя из этого решать надо его учитывать или нет.
Короче, делаю так
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
m_date1=ThisForm.cl_date1
m_date2=ThisForm.cl_date2
if m_date1>m_date2
   do sprg02 with 'Не верно указан период'
   Thisform.Txdate1.Setfocus
   RETURN
endif   
ex=CREATEOBJECT('Excel.Application')
ex.Visible= .t.
ex.WorkBooks.open(ALLTRIM(sysfile.s_pathfwp)+'k3_2.xlt')

***Календарь
m_sql="select * from "+mp_owner+".kalendar order by k_date"
ok=oODED.Exec_sp(m_sql,'kalendar')
***Сроки
m_sql="select * from "+mp_owner+".Proclcdt"
ok=oODED.Exec_sp(m_sql,'Proclcdt')

DO WHILE m_date1<=m_date2
	ok=OD070(m_date1,'TEMPVO') //Курсор - движение на каждый день
	ex.cells(2,4+j)=m_date1
	SELECT Tempvo

&& Срочные депозиты юр. лиц со сроком погашения до 6 дней
SELECT * from proclcdt WHERE INLIST(pl_lc,'Х','Y') ;
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)
    	* Считаю сумму за период
	SELECT * from Tempvo WHERE t1_n6!=0 AND t1_lc=proclc.pl_lc INTO CURSOR tmp
	SELECT tmp
	    tt1_n6 = tt1_n6 + tmp.t1_n6
    ENDSCAN

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

	j=j+1
	SELECT kalendar
ENDDO
ENDWITH 



Дима, тут с моим кодом нельзя ничего подправить?
...
Рейтинг: 0 / 0
25 сообщений из 88, страница 3 из 4
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Перебор строк в таблице
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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