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

народ помогите, пожалуйста
Goto page 1, 2  Next
 
Post new topic   Reply to topic   printer-friendly view     Forum Index -> БЭСТ-4
View previous topic :: View next topic  
Author Message
SLS



Joined: 30 Aug 2004
Posts: 22
Location: Свешников Л.С.
Occupation: контора
Interests: Астрахань

PostPosted: 30 Aug 2004 17:14    Post subject: народ помогите, пожалуйста Reply with quote

Мне нужно проставить даты проводок в зависимости от значения поля таблицы SPR_PART. Как аккуратно связать MAIN.dbf->MDOC.dbf->MDOCM.dbf->SPR_PART.dbf. У меня ничего не получается. Желательно кусок кода. PLEASE. Заранее спасибочки.
Back to top
View user's profile Send private message
andre19



Joined: 24 May 2004
Posts: 317
Location: Andre
Occupation: albumin (programmer)
Interests: Новосибирск

PostPosted: 31 Aug 2004 09:06    Post subject: Reply with quote

с кусочком кода врятли помогу а вот в теории предложение внесу
в базе mdoc и базе mdocm и безе main нет одного ключевого поля, но базы mdoc и mdocm связанны между собой по полю numdoc(это только одно из трех полей по которым я рекомендую создать индекс, другие два vid, sclad) а база mdoc связанна с базой main по полю pro, которое есть main.nnoper, ну а дальше дело техники(легко сказанно ,
Back to top
View user's profile Send private message
SLS



Joined: 30 Aug 2004
Posts: 22
Location: Свешников Л.С.
Occupation: контора
Interests: Астрахань

PostPosted: 31 Aug 2004 09:38    Post subject: Reply with quote

Спасибочки, но как раз с техникой у меня и проблемы, а поля вязки я и так знал. Так можно?

DBPUSH("MDOCM")
SPR_PART->(ordsetfocus("TAG_NUM"))
F_SETRELATION("SPR_PART","UPPER(Grup+NNum+Partia)")

DBPUSH("MDOC")
F_SETRELATION("MDOCM","UPPER(Sclad+Vid+Type+CodeDoc+NumDoc)")

NetUse ("Main.dbf")
DBPUSH("Main")
F_SETRELATION("MDOC","UPPER(PRO)",MAIN->(UPPER(NNOPER)))

DBGOTOP()
DO WHILE !EOF()
IF (Spr_par->Sertificat=="Оплачено")
IF ((Main->DataOper)>Date())
Spr_part->(RecLock())
Main->User_date:=Spr_part->DataOper
Spr_part->(F_DbUnlock())
ELSE
Spr_part->(RecLock())
Main->User_date:=Date()
Spr_part->(F_DbUnlock())
ENDIF
SayAndWait(User_date)
ENDIF
DBSKIP()
ENDDO

DBPOP()
DBPOP()
DBPOP()
Back to top
View user's profile Send private message
andre19



Joined: 24 May 2004
Posts: 317
Location: Andre
Occupation: albumin (programmer)
Interests: Новосибирск

PostPosted: 31 Aug 2004 11:57    Post subject: Reply with quote

если тебе нуно подставить в дату проводки дату партии я бы попробовал вот как
1.Берем справочник партий, х=номер_партии,а=дата
2.переключаемся в мдокм и сканим там на наличие документов с этим номером партии
3.Нашол? z=summa,переключаешься на мдок у=про и для этого у в майн ставишь дату_документа=а
*-*-*-*
а вот во внутреннем языке БЭСТа я не силен, если есть что почитать, кунь плиз на мыло, буду благодар
Back to top
View user's profile Send private message
Титов Александр



Joined: 26 Jul 2002
Posts: 975
Location: Титов Александр Александрович
Occupation: Компания БЭСТ
Interests: Москва

PostPosted: 31 Aug 2004 16:54    Post subject: Re: народ помогите, пожалуйста Reply with quote

SLS wrote:
Мне нужно проставить даты проводок в зависимости от значения поля таблицы SPR_PART. Как аккуратно связать MAIN.dbf->MDOC.dbf->MDOCM.dbf->SPR_PART.dbf. У меня ничего не получается. Желательно кусок кода. PLEASE. Заранее спасибочки.

Совокупность проводок по документу относится ко всему документу в целом и не детализируется по строкам. В БЭСТе как раз связка идет наоборот: в документе есть ссылка на группу проводок. А при такой постановке задачи сразу возникают вопросы:
1. Что делать, если в документе несколько партий или не одной?
2. Что делать с проводками, не связанными c накладными?
3. Во все ли проводки по документу надо проставлять одну и ту же дату?
_________________
С уважением, Александр Титов, Компания БЭСТ, Москва, отдел разрабо
Back to top
View user's profile Send private message Visit poster's website
andre19



Joined: 24 May 2004
Posts: 317
Location: Andre
Occupation: albumin (programmer)
Interests: Новосибирск

PostPosted: 01 Sep 2004 07:11    Post subject: Reply with quote

вот про это я тоже хотел упомянуть
Back to top
View user's profile Send private message
SLS



Joined: 30 Aug 2004
Posts: 22
Location: Свешников Л.С.
Occupation: контора
Interests: Астрахань

PostPosted: 01 Sep 2004 15:23    Post subject: Продолжение обсуждения Reply with quote

1. Что делать, если в документе несколько партий или не одной?

Если в документе не одной нужной партии то дату в main.dbf оставлять без изменений.

2. Что делать с проводками, не связанными c накладными?
Оставлять без изменений.

3. Во все ли проводки по документу надо проставлять одну и ту же дату?

Нет не во все, только Дт 68 кт 19.

Вообще задача стояла так.

Зачесть НДС можно только в момент списания материалла в производство, если этот материал оплачен, или в момент оплаты если этот материал уже списан.(наличие сч./ф. считаем по умолчанию= истина)
Мы пошли по такому пути:
1.Открыли партионный учет.

2.В момент оплаты в реестре документов прихода по Ctrl/F5 <Специальные функции> мы проставляем в справочнике партий в поле сертификат строку "Оплачено", а в поле срок.годности дату оплаты.

3. Потом в момент расхода (списание в производство), хотели бы сделать следующее:

3.1 если данная партия товара не оплачена, то проводку Дт 68 Кт 19 не делать совсем.
3.2 если дата оплаты раньше даты списания то сделать Дт 68 кт 19 датой списания.
3.3. если дата оплаты позже даты списания то сделать Дт 68 кт 19 датой оплаты.

Возможно есть другой способ решения.
Back to top
View user's profile Send private message
Титов Александр



Joined: 26 Jul 2002
Posts: 975
Location: Титов Александр Александрович
Occupation: Компания БЭСТ
Interests: Москва

PostPosted: 01 Sep 2004 16:37    Post subject: Re: Продолжение обсуждения Reply with quote

SLS wrote:
1. Что делать, если в документе несколько партий или не одной?

Если в документе не одной нужной партии то дату в main.dbf оставлять без изменений.

2. Что делать с проводками, не связанными c накладными?
Оставлять без изменений.

3. Во все ли проводки по документу надо проставлять одну и ту же дату?

Нет не во все, только Дт 68 кт 19.

Вообще задача стояла так.

Зачесть НДС можно только в момент списания материалла в производство, если этот материал оплачен, или в момент оплаты если этот материал уже списан.(наличие сч./ф. считаем по умолчанию= истина)
Мы пошли по такому пути:
1.Открыли партионный учет.

2.В момент оплаты в реестре документов прихода по Ctrl/F5 <Специальные функции> мы проставляем в справочнике партий в поле сертификат строку "Оплачено", а в поле срок.годности дату оплаты.

3. Потом в момент расхода (списание в производство), хотели бы сделать следующее:

3.1 если данная партия товара не оплачена, то проводку Дт 68 Кт 19 не делать совсем.
3.2 если дата оплаты раньше даты списания то сделать Дт 68 кт 19 датой списания.
3.3. если дата оплаты позже даты списания то сделать Дт 68 кт 19 датой оплаты.

Возможно есть другой способ решения.


Если мы правильно поняли, то где-то примерно так:

Code:


PRIVATE lEnd
dbPush('Spr_Part','Tag_Num')
dbPush('MDoc','MDoc')
DO WHILE  !EOF()
   dbPush('MDocM','MDocM',,{'UPPER(Sclad+Vid+Type+CodeDoc+NumDoc+DTOS(Date))',MDoc->(UPPER(Sclad+Vid+Type+CodeDoc+NumDoc+DTOS(Date)))})
   lEnd:=.F
   DO WHILE  !EOF() .AND. !lEnd
      IF !EMPTY(MDocM->Partia).AND.SPR_PART->(dbSEEK(UPPER(MDOCM->(GRUP+NNUM+Partia)))) .AND. SPR_PART->Sertificat=="Оплачено"
         dbPush('MAIN','Tag_NNOper',,{'NNOper',MDoc->Pro})
         DO WHILE  !EOF() .AND. !lEnd
            IF <нужная проводка> .AND. RecLock()
               Main->User_date:=Spr_part->DataOper
               F_DbUnlock()
               lEnd:= .T.
            ENDIF
            dbSKIP()
         ENDDO
         dbPop()
      ENDIF
      dbSKIP()
   ENDDO
   dbPop()
   dbSKIP()
ENDDO
dbPop()
dbPop()

_________________
С уважением, Александр Титов, Компания БЭСТ, Москва, отдел разрабо
Back to top
View user's profile Send private message Visit poster's website
SLS



Joined: 30 Aug 2004
Posts: 22
Location: Свешников Л.С.
Occupation: контора
Interests: Астрахань

PostPosted: 01 Sep 2004 17:12    Post subject: Thank you Reply with quote

Большое, большое спасибо всем, всем, всем [особенно Александру Титову]....
Back to top
View user's profile Send private message
SLS



Joined: 30 Aug 2004
Posts: 22
Location: Свешников Л.С.
Occupation: контора
Interests: Астрахань

PostPosted: 12 Sep 2004 18:27    Post subject: снова не работает Reply with quote

Здравствуйте, это снова мы, посмотрели только сейчас:
программа заканчивается успешно, но действие после этой строчки не производится: dbPush('MAIN','Tag_NNOper',,{'NNOper',MDoc->Pro})

программа:
PRIVATE lEnd
dbPush('Spr_Part','Tag_Num')
dbPush('MDoc','MDoc')
DO WHILE !EOF()
dbPush('MDocM','MDocM',,{'UPPER(Sclad+Vid+Type+CodeDoc+NumDoc+DTOS(Date))',MDoc->(UPPER(Sclad+Vid+Type+CodeDoc+NumDoc+DTOS(Date)))})
lEnd:=.F
DO WHILE !EOF() .AND. !lEnd
IF !EMPTY(MDocM->Partia).AND.SPR_PART->(dbSEEK(UPPER(MDOCM->(GRUP+NNUM+Partia)))) .AND. SPR_PART->Sertificat=="Оплачено"
dbPush('MAIN','Tag_NNOper',,{'NNOper',MDoc->Pro})
DO WHILE !EOF() .AND. !lEnd
IF <нужная проводка> .AND. RecLock()
Main->User_date:=Spr_part->DataOper
F_DbUnlock()
lEnd:= .T.
ENDIF
dbSKIP()
ENDDO
dbPop()
ENDIF
dbSKIP()
ENDDO
dbPop()
dbSKIP()
ENDDO
dbPop()
dbPop()
Back to top
View user's profile Send private message
Титов Александр



Joined: 26 Jul 2002
Posts: 975
Location: Титов Александр Александрович
Occupation: Компания БЭСТ
Interests: Москва

PostPosted: 13 Sep 2004 07:51    Post subject: Re: снова не работает Reply with quote

SLS wrote:
Здравствуйте, это снова мы, посмотрели только сейчас:
программа заканчивается успешно, но действие после этой строчки не производится: dbPush('MAIN','Tag_NNOper',,{'NNOper',MDoc->Pro})

программа:
PRIVATE lEnd
dbPush('Spr_Part','Tag_Num')
dbPush('MDoc','MDoc')
DO WHILE !EOF()
dbPush('MDocM','MDocM',,{'UPPER(Sclad+Vid+Type+CodeDoc+NumDoc+DTOS(Date))',MDoc->(UPPER(Sclad+Vid+Type+CodeDoc+NumDoc+DTOS(Date)))})
lEnd:=.F
DO WHILE !EOF() .AND. !lEnd
IF !EMPTY(MDocM->Partia).AND.SPR_PART->(dbSEEK(UPPER(MDOCM->(GRUP+NNUM+Partia)))) .AND. SPR_PART->Sertificat=="Оплачено"
dbPush('MAIN','Tag_NNOper',,{'NNOper',MDoc->Pro})
DO WHILE !EOF() .AND. !lEnd
IF <нужная проводка> .AND. RecLock()
Main->User_date:=Spr_part->DataOper
F_DbUnlock()
lEnd:= .T.
ENDIF
dbSKIP()
ENDDO
dbPop()
ENDIF
dbSKIP()
ENDDO
dbPop()
dbSKIP()
ENDDO
dbPop()
dbPop()

Так Вы приведите точный текст программы. Вам дана была заготовка, на основе которой надо было прописать программу, по крайней мере вместо слов <нужная проводка> надо написать логические условия принадлежности проводки к нужному множеству, например TRIM(Main->Dt_Schet) == "68".AND. TRIM(Main->Kt_Schet)="19"
Если это и есть точный текст программы, то конечно работать не будет.
_________________
С уважением, Александр Титов, Компания БЭСТ, Москва, отдел разрабо
Back to top
View user's profile Send private message Visit poster's website
*Andrey



Joined: 13 Sep 2004
Posts: 3
Location: Бугоров Андрей Владимирович
Occupation: Настройка, внедрение БЭСТ-4
Interests: Астрахань

PostPosted: 14 Sep 2004 00:18    Post subject: Reply with quote



п р о г р а м м а:

PRIVATE lEnd, dbName
dbName="MAIN"
dbPush('Spr_Part','Tag_Num')
dbPush('MDoc','MDoc')
DO WHILE !EOF()
dbPush('MDocM','MDocM',,{'UPPER(Sclad+Vid+Type+CodeDoc+NumDoc+DTOS(Date))',MDoc->(UPPER(Sclad+Vid+Type+CodeDoc+NumDoc+DTOS(Date)))})
lEnd:=.F.
DO WHILE !EOF() .AND. !lEnd
SayAndWait("1")
IF EMPTY(MDocM->Partia).AND.IF SPR_PART->(dbSEEK(UPPER(MDOCM->(GRUP+NNUM+Partia)))).AND.ALLTRIM(SPR_PART->Sertificat)=="Оплачено"

SayAndWait("2")

// После этого программа идет на ENDIF
dbName="MAIN"
NETUSE(dbName)

SayAndWait("3")

dbPush('MAIN','Tag_NNOper',,{'NNOper',MDoc->Pro})

SayAndWait("4")

DO WHILE !EOF() .AND. !lEnd
IF LEFT(Main->Dt_schet,2)=="68" .AND. LEFT(Main->Kt_schet,2)=="19" .AND. (Spr_part->DataEnd>Mdoc->Date)
RecLock()
Main->DataOper:=Spr_part->DataEnd
F_DbUnlock()
lEnd:= .T.
ENDIF
dbSKIP()
ENDDO
dbPop()
ENDIF
dbSKIP()
ENDDO
dbPop()
dbSKIP()
ENDDO
dbPop()
dbPop()


В о п р о с

SayAndWait("1")-проходит
SayAndWait("2")-тожэ

SayAndWait("3")- НЕТ
SayAndWait("3")- ТОЖЭ НЕТ

пробовали и NETUSE(Main) и
dbPush('MAIN','Tag_NNOper',,{'NNOper',MDoc->Pro})

Мне кажется что просто не видит MAIN.DBF или доступ к нему закрыт.

происходит как будто стоит
"On Error GoTo endIf". Что дела
Back to top
View user's profile Send private message
Титов Александр



Joined: 26 Jul 2002
Posts: 975
Location: Титов Александр Александрович
Occupation: Компания БЭСТ
Interests: Москва

PostPosted: 14 Sep 2004 08:03    Post subject: Reply with quote

*Andrey wrote:


п р о г р а м м а:

PRIVATE lEnd, dbName
dbName="MAIN"
dbPush('Spr_Part','Tag_Num')
dbPush('MDoc','MDoc')
DO WHILE !EOF()
dbPush('MDocM','MDocM',,{'UPPER(Sclad+Vid+Type+CodeDoc+NumDoc+DTOS(Date))',MDoc->(UPPER(Sclad+Vid+Type+CodeDoc+NumDoc+DTOS(Date)))})
lEnd:=.F.
DO WHILE !EOF() .AND. !lEnd
SayAndWait("1")
IF EMPTY(MDocM->Partia).AND.IF SPR_PART->(dbSEEK(UPPER(MDOCM->(GRUP+NNUM+Partia)))).AND.ALLTRIM(SPR_PART->Sertificat)=="Оплачено"

SayAndWait("2")

// После этого программа идет на ENDIF
dbName="MAIN"
NETUSE(dbName)

SayAndWait("3")

dbPush('MAIN','Tag_NNOper',,{'NNOper',MDoc->Pro})

SayAndWait("4")

DO WHILE !EOF() .AND. !lEnd
IF LEFT(Main->Dt_schet,2)=="68" .AND. LEFT(Main->Kt_schet,2)=="19" .AND. (Spr_part->DataEnd>Mdoc->Date)
RecLock()
Main->DataOper:=Spr_part->DataEnd
F_DbUnlock()
lEnd:= .T.
ENDIF
dbSKIP()
ENDDO
dbPop()
ENDIF
dbSKIP()
ENDDO
dbPop()
dbSKIP()
ENDDO
dbPop()
dbPop()


В о п р о с

SayAndWait("1")-проходит
SayAndWait("2")-тожэ

SayAndWait("3")- НЕТ
SayAndWait("3")- ТОЖЭ НЕТ

пробовали и NETUSE(Main) и
dbPush('MAIN','Tag_NNOper',,{'NNOper',MDoc->Pro})

Мне кажется что просто не видит MAIN.DBF или доступ к нему закрыт.

происходит как будто стоит
"On Error GoTo endIf". Что делать?

Зачем писать во все места?
Мы же с Вами общаемся личными сообщениями. В течение часа Вам будет выслан рабочий вариан
_________________
С уважением, Александр Титов, Компания БЭСТ, Москва, отдел разрабо
Back to top
View user's profile Send private message Visit poster's website
Яков



Joined: 04 Mar 2002
Posts: 618
Location: Яков
Occupation: Экстремальная терапия бизнеса
Interests: Владивосток

PostPosted: 14 Sep 2004 09:48    Post subject: Re: Продолжение обсуждения Reply with quote

SLS wrote:
Зачесть НДС можно только в момент списания материалла в производство, если этот материал оплачен, или в момент оплаты если этот материал уже списан.


Я могу ошибаться, но кажется этот порядок уже не действует.
И НДС по оплаченным материалам можно зачесть по моменту оприходования на склад, а не по факту "списания в производство".

Или это строительство?


Last edited by Яков on 15 Sep 2004 03:29; edited 1 time in total
Back to top
View user's profile Send private message Send e-mail Visit poster's website
*Andrey



Joined: 13 Sep 2004
Posts: 3
Location: Бугоров Андрей Владимирович
Occupation: Настройка, внедрение БЭСТ-4
Interests: Астрахань

PostPosted: 14 Sep 2004 19:25    Post subject: Reply with quote

Ну все, вопрос решили хотя и как то не красиво получилось но работает.
Теперь в типовых операциях ставим проводку на забалансовый аналитический счет скажем "МТ" с кодом аналитики
равным "0"+pPart, это чтобы разбить суммы проводок по партиям, т.к. в документе расхода могут быть партии с разными датами оплаты.
Потом программой меняем дату, Дтсчет и КтСчет в зависимости от ситуации.(или уже оплатили потом спмсали, или списали потом оплатили и т.д.)
Один вопрос остался как быть с частичной оплатой? Но заниматься уже некокда время поджимает (да и как сделать не придумал еще). Попробуем так поработать, а там видно будет.

Спасибо за поддержку сам бы не осилил.

Вот код:

PRIVATE lEnd,Mdata,n
n:=0
DBPUSH()
MDOC->(dbPush())
MDOCM->(dbPush())
SPR_PART->(dbPush())
NetUse("MAIN",LoadPath()+"MAIN")
MAIN->(OrdSetFocus("TAG_NNOPER"))
MDOCM->(OrdSetFocus("MDOCM"))
//MDOC->(SetScope()) --- если нужно пройтись по всем складам - это строчку надо раскомментировать
MDOC->(dbGoTop())
WHILE !MDOC->(EOF().OR.BOF())
MDOCM->(SetScope())
MDOCM->(SetScope('UPPER(Sclad+Vid+Type+CodeDoc+NumDoc+DTOS(Date))',MDoc->(UPPER(Sclad+Vid+Type+CodeDoc+NumDoc+DTOS(Date)))))
MDOCM->(dbGoTop())
lEnd:=.F.


MDOCM->(dbGoTop())

WHILE !MDOCM->(EOF().OR.BOF()) .AND. !lEnd
IF !EMPTY(MDocM->Partia).AND.SPR_PART->(dbSEEK(UPPER(MDOCM->(GRUP+NNUM+Partia)))) .AND. AllTrim(SPR_PART->Sertificat)=="ЋЇ« зҐ­®".AND. (Spr_part->Data_End>Mdoc->Date)




MAIN->(SetScope())
MAIN->(SetScope("NNOPER",MDOC->PRO))
MAIN->(dbGoTop())
WHILE !MAIN->(EOF().OR.BOF()) .AND. !lEnd

// IF ALLTRIM(Main->Dt_Schet) == "6803".AND. ALLTRIM(Main->Kt_Schet)=="193".AND. RecLock()

IF ALLTRIM(Main->Dt_Schet) == "MT".AND. ALLTRIM(Main->Dt_Code)=="0"+MDocM->Partia.AND. RecLock()

Main->DataOper:=Spr_part->Data_End
Main->Dt_Schet:="6803"
Main->Kt_Schet:="193"

//SayAndWait("Ок")
F_DbUnlock()
//lEnd:= .T. // если комментарии проводок одинаковые, эту строчку можно раскомментировать. А можно не раскомментировать.
ENDIF
MAIN->(dbSKIP())
ENDDO
ENDIF
MDOCM->(dbSKIP())
ENDDO
MDOC->(dbSKIP())
ENDDO

MAIN->(dbCloseArea())

SPR_PART->(dbPop())
MDOCM->(dbPop())
MDOC->(dbPop())

DBPOP()
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic   printer-friendly view     Forum Index -> БЭСТ-4 All times are GMT + 4 Hours
Goto page 1, 2  Next
Page 1 of 2

 
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