View previous topic :: View next topic |
Author |
Message |
vla
Joined: 15 Mar 2005 Posts: 60 Location: Гаклин Владимир Ильич Occupation: ООО БэстСиб, консультант Interests: Новосибирск
|
Posted: 14 Sep 2005 07:32 Post subject: Проблема с заполнением многомерного массива |
|
|
Делаю спецфункцию для пакетного формирования записей в книгу продаж. При переборе строк счет-фактуры у меня получается трехуровневый массив, где количество элементов первого уровня соответствует количеству ставок НДС в счет-фактуре.
Но КАК потом записать этот массив в BOOK->SUM_DATA как один элемент четырехуровневого массива - уже второй день голову ломаю. Подскажите, pls.
Попутно еще вопрос - поставив скоб на BOOK по одному индексу и не найдя записи, нужно поставить скоб по другому индексу для NEXT(новый номер) - у меня получается совсем некрасиво, внутри IF. А как правильнее сделать?
Code: | function main
//вызов из реестра счет-фактур
local Mnds1,Mnds2,ln,x,x2,x3,a,b
//размер поля nnoper (до 12-й версии д.б. 7, с нее и выше - 17)
ln:=17
//для
altd()
//массив с кодами ставок НДС
Mnds1:={}
//массив с кодами и суммами по ставкам НДС
Mnds2:={}
//накопим суммы по строкам счет-фактуры (по ставкам НДС)
dbpush("sh_op","tag_type","",{"STR(NNOPER_,ln,0)",str(sh_fact->nnoper,ln,0)})
do while sh_op->(!eof())
x:=ascan(Mnds1,sh_op->oper_nds)
if x>0
Mnds2[x][1][1]:=Mnds2[x][1][1]+sh_op->summa_fact
Mnds2[x][3][1]:=Mnds2[x][3][1]+sh_op->summa_nds
else
aADD(Mnds1,sh_op->oper_nds)
aADD(Mnds2,{{sh_op->summa_fact,.F.},{sh_op->oper_nds,.F.},{sh_op->summa_nds,.F.}})
endif
sh_op->(dbskip())
enddo
dbpop("sh_op")
//теперь книга продаж ...
dbpush("book","tag_fact","",{"str(oper_fact,ln,0)",str(sh_fact->nnoper,ln,0)})
if book->(eof())
//если нет-получаем порядковый номер
dbpop("book")
dbpush("book","tag_num","left(dtos(tek_data),4)=left(dtos(sh_fact->tek_data),4)")
dbgobottom()
x2:=next(tek_nomer)
dbpop("book")
dbpush("book","tag_fact","",{"str(oper_fact,ln,0)",str(sh_fact->nnoper,ln,0)})
//и создаем новую
x:=IncStep("BOOKOPER")
book->(addrec())
book->nnoper:=x
book->oper_fact:=sh_fact->nnoper
book->oper_st:=-1
book->tek_data:=sh_fact->tek_data
book->tek_nomer:=x2
book->type:='1'
book->summa_fact:=sh_fact->summa_fact
book->summa_nds:=sh_fact->summa_nds
book->arxiv:=.f.
book->summa_csh:=sh_fact->summa_csh
book->l_cs:=.f.
//book->sum_data:=???
book->(f_dbunlock())
else
//если есть запись в книге продаж - правим
endif
dbpop("book")
return |
|
|
Back to top |
|
 |
nordk
Joined: 27 Jun 2005 Posts: 1000 Location: Горбунов Константин Occupation: БЭСТ-Партнер Interests: СПб
|
Posted: 14 Sep 2005 12:20 Post subject: |
|
|
Вопрос вижу, надо немножко времени чтобы сконцентрироваться и понять Ваш стиль и дать правильную рекомандацию  |
|
Back to top |
|
 |
nordk
Joined: 27 Jun 2005 Posts: 1000 Location: Горбунов Константин Occupation: БЭСТ-Партнер Interests: СПб
|
Posted: 14 Sep 2005 20:01 Post subject: Re: Проблема с заполнением многомерного массива |
|
|
Quote: | //book->sum_data:=??? |
А что разве book->SUM_DATA:=Mnds2 - не работает ?
Описание текста строения мемо поля можно посмотреть
http://www.bestnet.ru/club/phpBB/viewtopic.php?t=7282
vla wrote: |
//теперь книга продаж ...
dbpush("book","tag_fact","",{"str(oper_fact,ln,0)",str(sh_fact->nnoper,ln,0)})
if book->(eof())
|
Здесь бы я просто
BOOK->( ORDSETFOCUS("tag_fact"))
IF BOOK->( DBSEEK(.........) )
А дальше бы обходился просто SETSCOPE() или DBSEEK()
Вообще слишком часто DBPUSH на мой взгляд не есть гуд - я вообще очень редко применяю, может оно и не правильно, конечно но как правило в начале и в конце программы разумно и в начале и в конце отдельных внутренних функций. Это моя точка зрения |
|
Back to top |
|
 |
vla
Joined: 15 Mar 2005 Posts: 60 Location: Гаклин Владимир Ильич Occupation: ООО БэстСиб, консультант Interests: Новосибирск
|
Posted: 14 Sep 2005 21:21 Post subject: Re: Проблема с заполнением многомерного массива |
|
|
А что разве book->SUM_DATA:=Mnds2 - не работает ?
Описание текста строения мемо поля можно посмотреть
http://www.bestnet.ru/club/phpBB/viewtopic.php?t=7282
Да со строением я "научным тыком" разобрался, но у меня получается трехуровневый массив, а в SUM_DATA он должен встать как один элемент четырехуровневого. Вот с этим проблема...
Здесь бы я просто
BOOK->( ORDSETFOCUS("tag_fact"))
IF BOOK->( DBSEEK(.........) )
Спасибо, попробую. |
|
Back to top |
|
 |
nordk
Joined: 27 Jun 2005 Posts: 1000 Location: Горбунов Константин Occupation: БЭСТ-Партнер Interests: СПб
|
Posted: 14 Sep 2005 21:32 Post subject: |
|
|
Да нет проблем - вы сначала скажите получилось ли этот положить ?
Вы же можете и AADD(array[1,1,1],Mnds2) и в |
|
Back to top |
|
 |
vla
Joined: 15 Mar 2005 Posts: 60 Location: Гаклин Владимир Ильич Occupation: ООО БэстСиб, консультант Interests: Новосибирск
|
Posted: 15 Sep 2005 13:29 Post subject: |
|
|
Quote: | quote="nordk"]Да нет проблем - вы сначала скажите получилось ли этот положить ?
Вы же можете и AADD(array[1,1,1],Mnds2) и все | [/code][/quote]
Ура, получилось. Правда, немного не так:
Code: | Msum:={}
aADD(Msum,Mnds2)
...
book->sum_data:=Msum |
Спасибо! |
|
Back to top |
|
 |
Behemoth

Joined: 15 Mar 2002 Posts: 155 Location: Новиков Алексей Юрьевич Occupation: ПБОЮЛ Interests: Пермь
|
Posted: 21 Sep 2005 17:21 Post subject: |
|
|
Добрый день.
Получилось бы и так
Mnds2:={Mnds2}
или даже так:
book->sum_data:={Mnds2} _________________ С уважением, Новиков Алексей. |
|
Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © phpBB Group
|