for flooders
:: Главная :: Решения :: Статьи :: Сайт М. Дроздова :: Файловый архив :: Книга по VFP 9 :: Русский Help Online :: OFF-LINE Форум
   Лисоводы   всех   стран,  объединяйтесь !!!  

Список Форумов  :: Visual Foxpro, Foxpro for DOS
  

Re: копирование колонки
Simple777

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

Таки в Скрижали.
Ratings: 0 negative/0 positive

Re: копирование колонки
lulgu

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

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

Re: копирование колонки
Igor Korolyov

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


------------------
WBR, Igor
Ratings: 0 negative/0 positive

Re: копирование колонки
Simple777

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

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

Re: копирование колонки
lulgu

Сообщений: 1751
Дата: 01.08.20 21:43:08
ИК хитер - употребляет слово "идеал", а в доводах идеология халтурщика.

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

Re: копирование колонки
axeum
Автор

Сообщений: 48
Дата: 03.08.20 12:13:26
Доброго всем дня, было интересно почитать про 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
Ratings: 0 negative/0 positive

Re: копирование колонки
of63

Сообщений: 20543
Откуда: Н.Новгород
Дата: 03.08.20 16:04:15
> у меня максимум получилось 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
Автор

Сообщений: 48
Дата: 04.08.20 06:23:22
я не правильно похоже написал что хотел спросить скинул другой 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 чтобы они встали в нужные колонки
если б это была просто таблица без выбирания нужного диапазона отчет уже давно был бы готов



Исправлено: axeum, 04.08.20 07:04
Ratings: 0 negative/0 positive

Re: копирование колонки
of63

Сообщений: 20543
Откуда: Н.Новгород
Дата: 04.08.20 07:28:09
Давай попробуем так:

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

Re: копирование колонки
axeum
Автор

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



Исправлено: axeum, 04.08.20 08:14
Ratings: 0 negative/0 positive

Re: копирование колонки
of63

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

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

Re: копирование колонки
axeum
Автор

Сообщений: 48
Дата: 04.08.20 08:53:58
понял что только запутал , в курсоре действительно есть все что нужно, но если б это было 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, надеюсь я не запутал еще сильнее(я понимаю что для большинства тут это даже не вопрос и не проблема но т.к. я только начинаю много еще не знаю а с такими отчетами я еще не сталкивался поэтому столько вопросов и не понимаю как что то сделать )



Исправлено: axeum, 04.08.20 09:00
Ratings: 0 negative/0 positive

Re: копирование колонки
of63

Сообщений: 20543
Откуда: Н.Новгород
Дата: 04.08.20 09:33:38
> н впринципе сработает НО если я выберу другой период допустим июнь-июль а это М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
Автор

Сообщений: 48
Дата: 04.08.20 10:09:55
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)
разве не тоже самое?



Исправлено: axeum, 04.08.20 10:10
Ratings: 0 negative/0 positive

Re: копирование колонки
of63

Сообщений: 20543
Откуда: Н.Новгород
Дата: 04.08.20 10:32:08
Тоже самое! Значит проблема "ведь надо постоянно менять название колонки" решена!
Ratings: 0 negative/0 positive

Re: копирование колонки
axeum
Автор

Сообщений: 48
Дата: 04.08.20 11:15:10
и да и нет одновременно, сами названия я получил согласен каюсь)вот что получилось, но это только часть ведь так как и с 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 поменять номер колонки и при этом остатться на той же записи,
вот май я заполнил а июнь и далее как?



Исправлено: axeum, 04.08.20 11:26
Ratings: 0 negative/0 positive

Re: копирование колонки
of63

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

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

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

Re: копирование колонки
axeum
Автор

Сообщений: 48
Дата: 04.08.20 12:08:04
я же скинул скрин с курсором или что ты подразумеваешь под показать курсор?, не смог конечно всю величину развернуть но 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
Ratings: 0 negative/0 positive

Re: копирование колонки
Божья_коровка

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

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

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

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


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




Исправлено: Божья_коровка, 04.08.20 13:42
Ratings: 0 negative/0 positive

Re: копирование колонки
of63

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



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

On-line: 12 of63 Simple777 Божья_коровка po2  (Гостей: 8)

25.01.2021 19:39:09 exec: 0.3
Mem: 1.535 Mb

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