Главная
Новый форум
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Проблема с заполнением многомерного массива

 
Post new topic   Reply to topic   printer-friendly view     Forum Index -> Программирование в БЭСТ-4
View previous topic :: View next topic  
Author Message
vla



Joined: 15 Mar 2005
Posts: 60
Location: Гаклин Владимир Ильич
Occupation: ООО БэстСиб, консультант
Interests: Новосибирск

PostPosted: 14 Sep 2005 07:32    Post subject: Проблема с заполнением многомерного массива Reply with quote

Делаю спецфункцию для пакетного формирования записей в книгу продаж. При переборе строк счет-фактуры у меня получается трехуровневый массив, где количество элементов первого уровня соответствует количеству ставок НДС в счет-фактуре.
Но КАК потом записать этот массив в 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
View user's profile Send private message
nordk



Joined: 27 Jun 2005
Posts: 1000
Location: Горбунов Константин
Occupation: БЭСТ-Партнер
Interests: СПб

PostPosted: 14 Sep 2005 12:20    Post subject: Reply with quote

Вопрос вижу, надо немножко времени чтобы сконцентрироваться и понять Ваш стиль и дать правильную рекомандацию
Back to top
View user's profile Send private message Send e-mail
nordk



Joined: 27 Jun 2005
Posts: 1000
Location: Горбунов Константин
Occupation: БЭСТ-Партнер
Interests: СПб

PostPosted: 14 Sep 2005 20:01    Post subject: Re: Проблема с заполнением многомерного массива Reply with quote

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
View user's profile Send private message Send e-mail
vla



Joined: 15 Mar 2005
Posts: 60
Location: Гаклин Владимир Ильич
Occupation: ООО БэстСиб, консультант
Interests: Новосибирск

PostPosted: 14 Sep 2005 21:21    Post subject: Re: Проблема с заполнением многомерного массива Reply with quote

А что разве 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
View user's profile Send private message
nordk



Joined: 27 Jun 2005
Posts: 1000
Location: Горбунов Константин
Occupation: БЭСТ-Партнер
Interests: СПб

PostPosted: 14 Sep 2005 21:32    Post subject: Reply with quote

Да нет проблем - вы сначала скажите получилось ли этот положить ?
Вы же можете и AADD(array[1,1,1],Mnds2) и в
Back to top
View user's profile Send private message Send e-mail
vla



Joined: 15 Mar 2005
Posts: 60
Location: Гаклин Владимир Ильич
Occupation: ООО БэстСиб, консультант
Interests: Новосибирск

PostPosted: 15 Sep 2005 13:29    Post subject: Reply with quote

Quote:
quote="nordk"]Да нет проблем - вы сначала скажите получилось ли этот положить ?
Вы же можете и AADD(array[1,1,1],Mnds2) и все
[/code][/quote]

Ура, получилось. Правда, немного не так:
Code:
 Msum:={}
  aADD(Msum,Mnds2)
  ...
  book->sum_data:=Msum

Спасибо!
Back to top
View user's profile Send private message
Behemoth



Joined: 15 Mar 2002
Posts: 155
Location: Новиков Алексей Юрьевич
Occupation: ПБОЮЛ
Interests: Пермь

PostPosted: 21 Sep 2005 17:21    Post subject: Reply with quote

Добрый день.

Получилось бы и так

Mnds2:={Mnds2}

или даже так:

book->sum_data:={Mnds2}
_________________
С уважением, Новиков Алексей.
Back to top
View user's profile Send private message Send e-mail
Display posts from previous:   
Post new topic   Reply to topic   printer-friendly view     Forum Index -> Программирование в БЭСТ-4 All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
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

Rambler
Rambler's Top100 Рейтинг@Mail.ru