![]() |
:: Главная :: Решения :: Статьи :: Сайт М. Дроздова :: Файловый архив :: Книга по VFP 9 :: Русский Help Online :: OFF-LINE Форум | ![]() |
![]() |
Лисоводы всех стран, объединяйтесь !!! |
Re: копирование колонки | |||
---|---|---|---|
Simple777 Сообщений: 29537 |
Таки в Скрижали. ![]() ![]() |
||
Re: копирование колонки | |||
---|---|---|---|
lulgu Сообщений: 1751 |
Поэтому и мусолятся двадцать лет одни и те же вопросы уровня FAQ, то что можно было добросовестно сделать один раз. ![]() |
||
Re: копирование колонки | |||
---|---|---|---|
Igor Korolyov Сообщений: 34021 |
Хм, не думал что для тебя вновинку будет один из основных принципов разработки коммерческого ПО ![]() Идеал недостижим - можно всю жизнь улучшать код, и всё равно в нём останутся если и не ошибки, то просто слабые места. Делают лишь то что приносит пользу (value) для клиента. Само по себе "улучшение/ускорение" не нужно - оно должно добавлять ценности продукту, и лишь тогда этим стоит заниматься. ------------------ WBR, Igor ![]() |
||
Re: копирование колонки | |||
---|---|---|---|
Simple777 Сообщений: 29537 |
Этого принципа я всегда придерживался и придерживаюсь. Однако с такой лаконичной формулировкой не сталкивался. Потому и "в Скрижали". ![]() ![]() |
||
Re: копирование колонки | |||
---|---|---|---|
lulgu Сообщений: 1751 |
ИК хитер - употребляет слово "идеал", а в доводах идеология халтурщика.
ЗЫ. Надо же, даже Симпла успел стать разработчиком. ![]() |
||
Re: копирование колонки | |||
---|---|---|---|
axeum Автор Сообщений: 48 |
Доброго всем дня, было интересно почитать про 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 Исправлено: axeum, 03.08.20 12:15 ![]() |
||
Re: копирование колонки | |||
---|---|---|---|
of63 Сообщений: 20543 Откуда: Н.Новгород |
> у меня максимум получилось 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 && посмотреть результат обьединения ![]() |
||
Re: копирование колонки | |||
---|---|---|---|
axeum Автор Сообщений: 48 |
я не правильно похоже написал что хотел спросить скинул другой Excel с тем что я имел ввиду, но код правда проще чем у меня и понятней
![]() 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 вот у меня и вопрос как правильно перенести периоды оплат и начислений в excel чтобы они встали в нужные колонки если б это была просто таблица без выбирания нужного диапазона отчет уже давно был бы готов ![]() Исправлено: axeum, 04.08.20 07:04 ![]() |
||
Re: копирование колонки | |||
---|---|---|---|
of63 Сообщений: 20543 Откуда: Н.Новгород |
Давай попробуем так:
1. Вот ты прислал файл экселя. Он правильный или неправильный? Покажи противоположный файл (непр. или пр.) 2. Сделай тестовую табличку, например из единственного кода KKD, выполни свою программу, покажи, что в результирующем курсоре не нравится. 3. "перенести периоды оплат и начислений в excel чтобы они встали в нужные колонки" - это будет последний этап, после п.2, и на нем пока можно не заморачиваться. ...Если п.2 выполняется правильно (получен ожидаемый курсор), то перейдем к переносу в эксель, для этого потребуется правильный п.1 ![]() |
||
Re: копирование колонки | |||
---|---|---|---|
axeum Автор Сообщений: 48 |
1. вот правильный файл, все долги указаны верно и в правильных строке/колонке НО тут нет начисления и оплаты выбранного периода
2. не то чтобы не устраивает я в силу своего маленького опыта не понимаю а где то не знаю как сделать что либо, в курсоре есть все что нужно НО т.к. кол-во ячеек и их имя зависит от того какой выбран период, я плохо пока понимаю как надо указать именно те колонки которые надо переносить и как правильно указывать для них cells(row,column) и что вписывать после .value = Исправлено: axeum, 04.08.20 08:14 ![]() |
||
Re: копирование колонки | |||
---|---|---|---|
of63 Сообщений: 20543 Откуда: Н.Новгород |
> все долги указаны верно и в правильных строке/колонке НО тут нет начисления и оплаты выбранного периода
> в курсоре есть все что нужно НО т.к. кол-во ячеек и их имя зависит от того какой выбран период, что-то ты путаешься в показаниях ![]() ![]() |
||
Re: копирование колонки | |||
---|---|---|---|
axeum Автор Сообщений: 48 |
понял что только запутал
![]() lRow = 1 lColumn = 2 select cursor1 scan .cells(lRow,lColumn).value = str(cur2sor.x,9,2) lRow = lRow +1 endscan .cells(lRow,1).value = str(cursor1.M000091,9,2) ![]() Исправлено: axeum, 04.08.20 09:00 ![]() |
||
Re: копирование колонки | |||
---|---|---|---|
of63 Сообщений: 20543 Откуда: Н.Новгород |
> н впринципе сработает НО если я выберу другой период допустим июнь-июль а это М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.Долг && в ячейке будет число ![]() |
||
Re: копирование колонки | |||
---|---|---|---|
axeum Автор Сообщений: 48 |
lCln = 4 ... poleN = FIELD(lCln) poleN = 'cr1.' +poleN *!* poleM = FIELD(lCln) *!* poleM = 'cr1.' + poleM loexcel.Cells(lRow,lnCln).value = str(&poleN,9,2) Исправлено: axeum, 04.08.20 10:10 ![]() |
||
Re: копирование колонки | |||
---|---|---|---|
of63 Сообщений: 20543 Откуда: Н.Новгород |
Тоже самое! Значит проблема "ведь надо постоянно менять название колонки" решена!
![]() |
||
Re: копирование колонки | |||
---|---|---|---|
axeum Автор Сообщений: 48 |
и да и нет одновременно, сами названия я получил согласен каюсь)вот что получилось, но это только часть ведь так как и с 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 вот май я заполнил а июнь и далее как? Исправлено: axeum, 04.08.20 11:26 ![]() |
||
Re: копирование колонки | |||
---|---|---|---|
of63 Сообщений: 20543 Откуда: Н.Новгород |
Я не понимаю бизнес-процесс, май, июнь... И курсор, который изображаешь, ты отказываешься показать, и сделать его для одного KKD не хочешь...
> если просто добавить в конце +1 к lClns или lClo то после каждой записи будет улетать дальше на 1 колонку вычтитай 1, не будет улетать на 1 колонку (шутка). Без курсора и его желаемой картинки в эксель я не понимаю проблы > остатться на той же записи сохраняй/восстанавливай RECNO до/после вложенного SCAN ![]() |
||
Re: копирование колонки | |||
---|---|---|---|
axeum Автор Сообщений: 48 |
я же скинул скрин с курсором или что ты подразумеваешь под показать курсор?, не смог конечно всю величину развернуть но 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) в поля начисления для июня и июля, разобравшись как это сделать для начислений тогда сделать по аналогии оплаты будет проще(надеюсь) Исправлено: axeum, 04.08.20 12:25 ![]() |
||
Re: копирование колонки | |||
---|---|---|---|
Божья_коровка Сообщений: 23875 |
Да ты ему не скрин скидывай, а просто накидай код курсора с вставкой тестовых данных несколько записей, чтобы Оффа руками пощупать мог. ![]() ![]() Или сделай так, накидай те два источника с данными на основе, которых у тебя получается результирующий запрос. чтобы можно было их гонять с разными условиями и формировать итоговый курсор. Сами данные обезличь, сделай по несколько записей и всё. А то Оффа запутался, как и почему ты формируешь курсор и что в итоге у тебя должно получиться. А так вы оба будете обладать исходными данными для теста и вы лучше поймёте друг друга, будите на одной волне. Доб. Сделай постановку своей проблемы проще, как в математике - ДАНО: два курсора, приложи структуру с тестовыми данными из нескольких записей. Что нужно получить: покажи какой правильный результат нужно получить в итоге. Что ты сделал и что не понимаешь: тут просто кратко приложи запрос или код. которым ты формируешь необходимый тебе результат Особенности выгрузки : вот тут расскажи в двух словах что за проблемы с выгрузкой в эксель. Ты же понимаешь, что Оффа нифига не понимает что ты говоришь ![]() ------------------ Жись, она как зёбра, полоса белая, полоса черная, а мне всегда задница достается... Исправлено: Божья_коровка, 04.08.20 13:42 ![]() |
||
Re: копирование колонки | |||
---|---|---|---|
of63 Сообщений: 20543 Откуда: Н.Новгород |
Может мне сразу ТЗ, данные, оформление на работу, подьемные, премиальные, суточные, удаленку, админский доступ, услуги секретарши... Ага
![]() ![]() |
||
© 2000-2021 Fox Club  |