:: Visual Foxpro, Foxpro for DOS
Re: копирование колонки
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
Igor Korolyov
зачем тратить дорогое время разработчика на приближение к идеалу, если и так всё приемлемо быстро работает.

Таки в Скрижали.
Ratings: 0 negative/0 positive
Re: копирование колонки
lulgu

Сообщений: 1838
Дата регистрации: 30.11.2016
Igor Korolyov
зачем тратить дорогое время разработчика на приближение к идеалу, если и так всё приемлемо быстро работает.

Поэтому и мусолятся двадцать лет одни и те же вопросы уровня FAQ, то что можно было добросовестно сделать один раз.
Ratings: 0 negative/0 positive
Re: копирование колонки
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Simple777
Igor Korolyov
зачем тратить дорогое время разработчика на приближение к идеалу, если и так всё приемлемо быстро работает.
Таки в Скрижали.
Хм, не думал что для тебя вновинку будет один из основных принципов разработки коммерческого ПО
Идеал недостижим - можно всю жизнь улучшать код, и всё равно в нём останутся если и не ошибки, то просто слабые места.
Делают лишь то что приносит пользу (value) для клиента. Само по себе "улучшение/ускорение" не нужно - оно должно добавлять ценности продукту, и лишь тогда этим стоит заниматься.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: копирование колонки
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
Igor Korolyov
не думал что для тебя вновинку будет один из основных принципов разработки коммерческого ПО

Этого принципа я всегда придерживался и придерживаюсь. Однако с такой лаконичной формулировкой не сталкивался. Потому и "в Скрижали". [sm128]
Ratings: 0 negative/0 positive
Re: копирование колонки
lulgu

Сообщений: 1838
Дата регистрации: 30.11.2016
ИК хитер - употребляет слово "идеал", а в доводах идеология халтурщика.

ЗЫ. Надо же, даже Симпла успел стать разработчиком.
Ratings: 2 negative/1 positive
Re: копирование колонки
axeum
Автор

Сообщений: 107
Дата регистрации: 07.07.2020
Доброго всем дня, было интересно почитать про scan и while, но теперь вопрос возник в другом как правильно вписать в скан выбор этих полей? у меня максимум получилось 1 поле(кроме входяшего сальдо и задолжности конец периода) добавить и то только с 1 значением
вот как я объединил 2 курсора
DO while LEN(ALLTRIM(FIELD(lFld))) <> 0
SELECT cur2
poleC = FIELD(lFld)
poleCur2 = "cur2."+ poleC
IF LEN(ALLTRIM(FIELD(lFld))) = 0
EXIT
endif
SELECT ;
cur1.*,;
&poleCur2 as &poleC;
FROM cur1;
left join cur2;
ON cur1.kkd =cur2.kkd;
INTO CURSOR cur1
lFld = lFld + 1
ENDDO

а вот код для переноса в excel у меня все получается перенести на те места куда надо, кроме оставшись полей с оплатами и начислениями каждого месяца, единственное как получалось сделать это забить поле начального месяца всеми, мне кажется надо как то опредилть начало и конец до которой надо переносить информацию( lClns и lClos мои попытки сделать это) но ничего из этого хорошего не получилось(M000093 - последняя из оплат в выбраном периоде) есть 2 колонки с начальным долгом и конечным, которые как раз у меня получилось вставит в excel

IF kol >1
kol = kol*2
ELSE
kol = kol + 1
ENDIF
SELECT cr1
lCln = 5
lClns = 5 + kol - 1
lClo = 6
lClos = 6 + kol - 1
*!* lColmn = kol * 2 + 5
SCAN
***
опред. и запоминание имени поля
***
poleN = FIELD(lClo)
poleN = 'cr1.' +poleN
poleM = FIELD(lCln)
poleM = 'cr1.' + poleM
***
***
loexcel.Cells(lRow,1).Value = ALLTRIM(cr1.nls)
loexcel.Cells(lRow,2).Value = ALLTRIM(cr1.fio)
loexcel.Cells(lRow,3).Value = ALLTRIM(cr1.adres)
loexcel.Cells(lRow,4).value = STR(cr1.itgvh_s,9,2)
*!*
*!* IF lnCln < kol+lnCln
*!* loexcel.Cells(lRow,lnCln).value = str(&poleN,9,2)
*!* ENDIF
*!* SCAN WHILE lCln < lClns
*!* loexcel.Cells(lRow,lCln).value = str(&poleN,9,2)
*!* lRow = lRow + 1
*!* ENDSCAN
loexcel.Cells(lRow,kol+5).value = STR(cr1.itogish,9,2)
lRow = lRow +1
*!* lnClo = 6
*!* IF lnClo <kol+lnClo
*!* loexcel.Cells(lRow,lnClo).value = str(&poleM,9,2)
*!* lnCln = lnCln +2
*!* endif
*!* IF 6+kol >= lnClo
*!* lClo = lClo +2
*!* lCln = lCln +2
*!* endif
endscan



Исправлено 1 раз(а). Последнее : axeum, 03.08.20 12:15
Ratings: 0 negative/0 positive
Re: копирование колонки
of63

Сообщений: 25240
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
> у меня максимум получилось 1 поле(кроме входяшего сальдо и задолжности конец периода) добавить и то только с 1 значением

Не понятна фраза... Попробуй без Excel-я. Если вот так обьединить cur1 и cur2 (немного переиначил твой код), то результат правильный?
Второй абзац, про SCAN - просто переносит этот курсор в строки Excel...
x = "" && список полей, извлекаемых их cur2
SELECT cur2
FOR i=1 TO FCOUNT()
poleC = FIELD(i)
x = x + IIF(EMPTY(x), "", ",") + ALIAS() + "."+ poleC + " AS " + poleC
ENDFOR
SELECT 0 && выберем свободную область, не обязательно
SELECT cur1.*, &x; && обьединяем cur1 и cur2 в cur3
FROM cur1 left join cur2 ON cur1.kkd =cur2.kkd;
INTO CURSOR cur3
BROW && посмотреть результат обьединения
Ratings: 0 negative/0 positive
Re: копирование колонки
axeum
Автор

Сообщений: 107
Дата регистрации: 07.07.2020
я не правильно похоже написал что хотел спросить скинул другой Excel с тем что я имел ввиду, но код правда проще чем у меня и понятней но результат то 1 что через твой что через мой код что через твой(но скрин того что получилось скину), потому что чуть ниже в след строчках кода я объединяю другой курсор с cur3 добавляя как раз эти 2 колонки с долгами, вот - c_itog.itogish,cur_itgs.itgvh_s это как раз я считал итог долга на начало и конец периода
SELECT ;
domkva.nls,;
cur1.*,;
c_itog.itogish,;
cur_itgs.itgvh_s;
from cur1;
left join c_itog ON cur1.kkd = c_itog.kkd;
left join domkva ON cur1.kkd = domkva.kkd;
left join cur_itgs on cur1.kkd = cur_itgs.kkd;
into cursor cr1
конечный результат опять же будет вот такой nls, kkd, fio, adres, n1-n3(период начилений), m1-m3(период оплат),itogish(долг на начало периода), itogish_s(долг на конец периода)
вот у меня и вопрос как правильно перенести периоды оплат и начислений в excel чтобы они встали в нужные колонки
если б это была просто таблица без выбирания нужного диапазона отчет уже давно был бы готов



Исправлено 10 раз(а). Последнее : axeum, 04.08.20 07:04
Ratings: 0 negative/0 positive
Re: копирование колонки
of63

Сообщений: 25240
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Давай попробуем так:

1. Вот ты прислал файл экселя. Он правильный или неправильный? Покажи противоположный файл (непр. или пр.)
2. Сделай тестовую табличку, например из единственного кода KKD, выполни свою программу, покажи, что в результирующем курсоре не нравится.
3. "перенести периоды оплат и начислений в excel чтобы они встали в нужные колонки" - это будет последний этап, после п.2, и на нем пока можно не заморачиваться. ...Если п.2 выполняется правильно (получен ожидаемый курсор), то перейдем к переносу в эксель, для этого потребуется правильный п.1
Ratings: 0 negative/0 positive
Re: копирование колонки
axeum
Автор

Сообщений: 107
Дата регистрации: 07.07.2020
1. вот правильный файл, все долги указаны верно и в правильных строке/колонке НО тут нет начисления и оплаты выбранного периода
2. не то чтобы не устраивает я в силу своего маленького опыта не понимаю а где то не знаю как сделать что либо, в курсоре есть все что нужно НО т.к. кол-во ячеек и их имя зависит от того какой выбран период, я плохо пока понимаю как надо указать именно те колонки которые надо переносить и как правильно указывать для них cells(row,column) и что вписывать после .value =



Исправлено 2 раз(а). Последнее : axeum, 04.08.20 08:14
Ratings: 0 negative/0 positive
Re: копирование колонки
of63

Сообщений: 25240
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
> все долги указаны верно и в правильных строке/колонке НО тут нет начисления и оплаты выбранного периода
> в курсоре есть все что нужно НО т.к. кол-во ячеек и их имя зависит от того какой выбран период,

что-то ты путаешься в показаниях
Ratings: 0 negative/0 positive
Re: копирование колонки
axeum
Автор

Сообщений: 107
Дата регистрации: 07.07.2020
понял что только запутал , в курсоре действительно есть все что нужно, но если б это было nls, kkd, fio, adres, X(долг на начало), Y(долг на конец) то проблем у меня не возникает как и вопросов как перенести их
lRow = 1
lColumn = 2
select cursor1
scan
.cells(lRow,lColumn).value = str(cur2sor.x,9,2)
lRow = lRow +1
endscan
и впринципе все встает на свои места я рад, клиент доволен, все живут спокойно НО повторюсь я не понимаю как надо перенсти в excel те колонки которые имеют динамаческое название? я выбрал период май-июль и соотв май это М000091 июнь М000092 и июль М000093 и если прописать
.cells(lRow,1).value = str(cursor1.M000091,9,2)
он впринципе сработает НО если я выберу другой период допустим июнь-июль а это М000092 и М000093 то привет ошибка, я и спрашиваю как это сделать? ведь надо постоянно менять название колонки до опред. момента(как мне кажется) а у меня не получается это все собрать так чтобы работало, я думаю что надо определить начало и конец для начислений и оплаты и как то попытаться через скан или через иф выгрузить в excel, надеюсь я не запутал еще сильнее(я понимаю что для большинства тут это даже не вопрос и не проблема но т.к. я только начинаю много еще не знаю а с такими отчетами я еще не сталкивался поэтому столько вопросов и не понимаю как что то сделать )



Исправлено 3 раз(а). Последнее : axeum, 04.08.20 09:00
Ratings: 0 negative/0 positive
Re: копирование колонки
of63

Сообщений: 25240
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
> н впринципе сработает НО если я выберу другой период допустим июнь-июль а это М000092 и М000093 то привет ошибка, я и спрашиваю как это сделать? ведь надо постоянно менять название колонки

Для этого тебе уже предложили применять макрос:

не:
.cells(lRow,1).value = str(cursor1.M000091,9,2)

а:
m.f = "M000091" && динамическое имя поля курсора
...
.cells(lRow,1).value = str(cursor1.&f,9,2)


Или немного по другому:
m.f = "M000091" && динамическое имя поля курсора
SELECT ..., &f AS Долг ... INTO CURSOR cursor1 READWRITE && создаем курсор с фиксированным именем поля "Долг" (из динамического имени поля исходного курсора)
...
.cells(lRow,1).value = str(cursor1.Долг,9,2)


Лирическое отступление. Попробуй, может будет лучше в экселе:
не
.cells(lRow,1).value = str(cursor1.Долг,9,2) && в ячейке будет строка (скорее всего)
а
.cells(lRow,1).value = cursor1.Долг && в ячейке будет число
Ratings: 0 negative/0 positive
Re: копирование колонки
axeum
Автор

Сообщений: 107
Дата регистрации: 07.07.2020
of63
а:
m.f = "M000091" && динамическое имя поля курсора
...
.cells(lRow,1).value = str(cursor1.&f,9,2)
lCln = 4
...
poleN = FIELD(lCln)
poleN = 'cr1.' +poleN
*!* poleM = FIELD(lCln)
*!* poleM = 'cr1.' + poleM
loexcel.Cells(lRow,lnCln).value = str(&poleN,9,2)
разве не тоже самое?



Исправлено 1 раз(а). Последнее : axeum, 04.08.20 10:10
Ratings: 0 negative/0 positive
Re: копирование колонки
of63

Сообщений: 25240
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Тоже самое! Значит проблема "ведь надо постоянно менять название колонки" решена!
Ratings: 0 negative/0 positive
Re: копирование колонки
axeum
Автор

Сообщений: 107
Дата регистрации: 07.07.2020
и да и нет одновременно, сами названия я получил согласен каюсь)вот что получилось, но это только часть ведь так как и с lRow тут не поступишь, если просто добавить в конце +1 к lClns или lClo то после каждой записи будет улетать дальше на 1 колонку, я поэтому пытался сделать scan внутри scan
scan
...
loexcel.Cells(lRow,1).Value = ALLTRIM(cr1.nls)
loexcel.Cells(lRow,2).Value = ALLTRIM(cr1.fio)
loexcel.Cells(lRow,3).Value = ALLTRIM(cr1.adres)
loexcel.Cells(lRow,4).value = STR(cr1.itgvh_s,9,2)
loexcel.Cells(lRow,lClns).value = str(&poleN,9,2)
loexcel.Cells(lRow,lClo).value = str(&poleM,9,2)
loexcel.Cells(lRow,kol+5).value = STR(cr1.itogish,9,2)
lRow = lRow +1
endscan
но ничего хорошего опять же не получилось. вот что то типо этого я пытался сделать
scan
...
SCAN
loexcel.Cells(lRow,lCln).value = str(&poleN,9,2)
lRow = lRow + 1
ENDSCAN
endscan
так же пытался через иф но тоже не получилось, я сообразить не могу как изменить переменные для field поменять номер колонки и при этом остатться на той же записи,
вот май я заполнил а июнь и далее как?



Исправлено 4 раз(а). Последнее : axeum, 04.08.20 11:26
Ratings: 0 negative/0 positive
Re: копирование колонки
of63

Сообщений: 25240
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Я не понимаю бизнес-процесс, май, июнь... И курсор, который изображаешь, ты отказываешься показать, и сделать его для одного KKD не хочешь...

> если просто добавить в конце +1 к lClns или lClo то после каждой записи будет улетать дальше на 1 колонку
вычтитай 1, не будет улетать на 1 колонку (шутка). Без курсора и его желаемой картинки в эксель я не понимаю проблы

> остатться на той же записи
сохраняй/восстанавливай RECNO до/после вложенного SCAN
Ratings: 0 negative/0 positive
Re: копирование колонки
axeum
Автор

Сообщений: 107
Дата регистрации: 07.07.2020
я же скинул скрин с курсором или что ты подразумеваешь под показать курсор?, не смог конечно всю величину развернуть но 2 скринами я вроде все поля захватил, я может чего то не понимаю но как изменится информация если будет только 1 ккд и если их будет 100?
кол-во месяцев не изменится(мы его выбираем вот тут скрин приложил)

Есть у нас выбранный период(допустим май-июнь) согласно этому периоду формируется курсор с начислениями в этом периоде kkd,fio,adres,n1-n3 и еще 1 курсор с оплатами kkd, fio, adres, m1-m3
дальше join этих курсоров в 1 и еще добавляем nls
1 общий курсор готов, теперь надо всю эту информация перенести в таблицу,
с nls, fio, adres, poleN(начисление в первом месяце выбранного период для нас это май), poleM(оплата в первом месяце выбранного периода для нас это май) itogvh_s и itogish проблем почти не возникло я смог их перенести
вроде бы все почти готово НО пока что заполнили только большую часть таблицы а не всю таблицу, май заполнен но как теперь перенести июнь(N000092) и июль(N000093) в поля начисления для июня и июля, разобравшись как это сделать для начислений тогда сделать по аналогии оплаты будет проще(надеюсь)



Исправлено 1 раз(а). Последнее : axeum, 04.08.20 12:25
Ratings: 0 negative/0 positive
Re: копирование колонки
Божья_коровка

Сообщений: 25731
Дата регистрации: 23.08.2001
axeum
я же скинул скрин с курсором или что ты подразумеваешь под показать курсор?, не смог конечно всю величину развернуть но 2 скринами я вроде все поля захватил, я может чего то не понимаю но как изменится информация если будет только 1 ккд и если их будет 100?
кол-во месяцев не изменится(мы его выбираем вот тут скрин приложил)
Да ты ему не скрин скидывай, а просто накидай код курсора с вставкой тестовых данных несколько записей, чтобы Оффа руками пощупать мог. Ну или выгрузи курсор в дбф-ку с обезличенными данными и прикрепи в сообщении.

Или сделай так, накидай те два источника с данными на основе, которых у тебя получается результирующий запрос. чтобы можно было их гонять с разными условиями и формировать итоговый курсор. Сами данные обезличь, сделай по несколько записей и всё. А то Оффа запутался, как и почему ты формируешь курсор и что в итоге у тебя должно получиться. А так вы оба будете обладать исходными данными для теста и вы лучше поймёте друг друга, будите на одной волне.

Доб. Сделай постановку своей проблемы проще, как в математике -
ДАНО: два курсора, приложи структуру с тестовыми данными из нескольких записей.
Что нужно получить: покажи какой правильный результат нужно получить в итоге.
Что ты сделал и что не понимаешь: тут просто кратко приложи запрос или код. которым ты формируешь необходимый тебе результат
Особенности выгрузки : вот тут расскажи в двух словах что за проблемы с выгрузкой в эксель.

Ты же понимаешь, что Оффа нифига не понимает что ты говоришь Ты закопался в своей бизнес-логике, которая непонятна другому человеку. А то вы так еще 3 страницы накатаете, но не найдете приемлемое решение.


------------------
Жись, она как зёбра, полоса белая, полоса черная, а мне всегда задница достается...




Исправлено 6 раз(а). Последнее : Божья_коровка, 04.08.20 13:42
Ratings: 0 negative/0 positive
Re: копирование колонки
of63

Сообщений: 25240
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Может мне сразу ТЗ, данные, оформление на работу, подьемные, премиальные, суточные, удаленку, админский доступ, услуги секретарши... Ага
Ratings: 0 negative/1 positive


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

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

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