Главная
Новый форум
 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, 3  Next
 
Post new topic   Reply to topic   printer-friendly view     Forum Index -> Программирование в БЭСТ-4
View previous topic :: View next topic  
Author Message
Vnehaev



Joined: 13 Apr 2007
Posts: 18
Location: Нехаев Валерий Сергеевич
Occupation: Программист
Interests: Калининград

PostPosted: 23 Apr 2007 11:58    Post subject: Следующий номер накладной?!!! Reply with quote

Добрый день Уважаемые. (БЭСТ 4+ Удаленный магазин (12.01 SP31))
Помогите мне пожалуйста с таким вопросом:
Я написал код для спецфункции в реестре акладных Бэста, который позволяет автоматически создавать накладную и импортировать строки из dbf в БЭСТ, так же она настолько интеллектуальна что по поставщику может определить в какую операцию ее засунуть... Все хорошо, но вот с номером накладной как-то не допонял... При импорте создается накладная, строки импортируются, поставщик определяеться, но ... когда оператор начинает вводить следующий номер...Увы номер может пересечься....
Code:
FUNCTION NewNumDoc(cSclad,cVid,cType)
Private cNumDoc
MDOC->(DBPUSH(),SETSCOPE())
cNumDoc := MDOC->(NWDOC("NUMDOC",UPPER(cSclad+cVid+cType),"NOM_DOC","MDOC"))
IF !MDOC->(NVDOC(S_LIB_ADD,,"NUMDOC",UPPER(cSclad+cVid+cType),"NOM_DOC","MDOC",.T.,,{|x| IF(x != NIL,cNumDoc := x,cNumDoc) },.T.))
   NControlMem(UPPER(cSclad+cVid+cType),"NOM_DOC",,.T.)
   cNumDoc := MDOC->(NWDOC("NUMDOC",UPPER(cSclad+cVid+cType),"NOM_DOC","MDOC"))
ENDIF
MDOC->(DBPOP())
RETURN cNumDoc


Подскажите пожалуйста... от куда брать следующий номер для импорта и чтоб все было "Красиво" и не пересекалось...?
Back to top
View user's profile Send private message
nordk



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

PostPosted: 23 Apr 2007 12:17    Post subject: Reply with quote

Да вроде правильно берете.
Просто как я понял Вы пишете не тут же а позже.
И в это вемя вручную могут создать документ с этим номером..
разделите по видам движения ввод ручных накладных от автоматических
Back to top
View user's profile Send private message Send e-mail
Vnehaev



Joined: 13 Apr 2007
Posts: 18
Location: Нехаев Валерий Сергеевич
Occupation: Программист
Interests: Калининград

PostPosted: 23 Apr 2007 12:24    Post subject: Reply with quote

nordk wrote:
Да вроде правильно берете.
Просто как я понял Вы пишете не тут же а позже.
И в это вемя вручную могут создать документ с этим номером..
разделите по видам движения ввод ручных накладных от автоматических


Это будет сложно... Не во всх магазинах стоит данная спецфункция...

Я так понимаю, если два рабочих места в сети и один пользователь создает наладную, а второй пользователь мпортирует, то они могут пересечься? А можно этого как-то избежать?
Back to top
View user's profile Send private message
nordk



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

PostPosted: 23 Apr 2007 12:47    Post subject: Reply with quote

Они могут пересечься, даже если несколько пользователей в сети простонакладные сосздают.
БЭСТ это отслеживает при создании документа.
В данном случае это проблемы Вашего импорта, чтобы он перед импортом прослеживал и менял на другой.
А вообще есть теперь событие "прайс-лист" и необходимость такого импорта сходит на "нет"
Back to top
View user's profile Send private message Send e-mail
Марина



Joined: 27 Aug 2002
Posts: 501
Location: Кондрина Марина Александровна
Occupation: ОАО БКО программист
Interests: Боровичи Новгородской обл

PostPosted: 23 Apr 2007 13:01    Post subject: Reply with quote

А мне как-то показалось из описания проблемы , что номер пересекается, когда этот же оператор сразу вводит вторую накладную, до всякого импорта. Это так?
Back to top
View user's profile Send private message
Vnehaev



Joined: 13 Apr 2007
Posts: 18
Location: Нехаев Валерий Сергеевич
Occupation: Программист
Interests: Калининград

PostPosted: 23 Apr 2007 13:43    Post subject: Reply with quote

Марина wrote:
А мне как-то показалось из описания проблемы , что номер пересекается, когда этот же оператор сразу вводит вторую накладную, до всякого импорта. Это так?

ДА и до импорта и после номера ИНОГДА пересекаються...(( В этом и проблемма. Процесс формирования номера накладной по стандарту не учитывет процесс формирования номера по спецфункции. Открыл MEMDAT.dbf и вижу такую картину:
появилась новая строчка:
memdat.Ident=NOM_DOC
memdat.Value=b59328... и т.д.

т.е. Это поле нумерует накладные по импорту, однако стандартный ввод накладной нумерует другая строчка MEMDAT:
memdat.Ident=SR0000000000000000000011КОД СУММЫ В РЕЕСТРЕ
memdat.Value=!!!Ё?

Можно ли каким образом это использовать?
Back to top
View user's profile Send private message
Марина



Joined: 27 Aug 2002
Posts: 501
Location: Кондрина Марина Александровна
Occupation: ОАО БКО программист
Interests: Боровичи Новгородской обл

PostPosted: 23 Apr 2007 13:59    Post subject: Reply with quote

Когда я писала свои накладные из спецфункции, у меня была такая проблема, сейчас я вам дам код, как у меня работает, но что и почему сделала именно так, сейчас точно не помню. Видите, у меня memdat еще используется и почему-то свои альясы для memdat и mdoc открыты. Попробуйте сделать в этом роде, может получится, у меня ошибок не происходит

Code:


priv S_LIB_ADD:=2
...
netuse("memdat1",npath+"sclad\memdat.dbf",,.f.)
ordsetfocus("tag_ident")
nnumdoc:=New1NumDoc(nsclad,nVid,nType,nCodeDoc)
memdat1->(dbclosearea())

...

FUNCTION New1NumDoc(cSclad,cVid,cType,cCodeDoc)
//----------------------------------------------------------------------------//
// Генерация уникального номера документа
LOCAL cNumDoc
   MDOC1->(dbPush(),SetScope())

   cNumDoc := MDOC1->(NWDOC("NUMDOC",UPPER(cSclad+cVid+cType+cCodeDoc),"NOM_DOC","MDOC","memdat1"))
   IF  !MDOC1->(NVDOC(S_LIB_ADD,,"NUMDOC",UPPER(cSclad+cVid+cType+cCodeDoc),"NOM_DOC","MDOC",.T.,"memdat1",{|x| IF(x != NIL,cNumDoc := x,cNumDoc) },.T.))
     NControlMem(UPPER(cSclad+cVid+cType+pCodeDoc1),"NOM_DOC","memdat1",.T.)
     cNumDoc := MDOC1->(NWDOC("NUMDOC",UPPER(cSclad+cVid+cType+cCodeDoc),"NOM_DOC","MDOC","memdat1"))
   ENDIF
   MDOC1->(dbPop())
RETURN cNumDoc

Back to top
View user's profile Send private message
Vnehaev



Joined: 13 Apr 2007
Posts: 18
Location: Нехаев Валерий Сергеевич
Occupation: Программист
Interests: Калининград

PostPosted: 23 Apr 2007 14:02    Post subject: Reply with quote

Марина wrote:
Когда я писала свои накладные из спецфункции, у меня была такая проблема, сейчас я вам дам код, как у меня работает, но что и почему сделала именно так, сейчас точно не помню. Видите, у меня memdat еще используется и почему-то свои альясы для memdat и mdoc открыты. Попробуйте сделать в этом роде, может получится, у меня ошибок не происходит



Вопрос есть...к стати... А что за фишка такая:
Code:
priv S_LIB_ADD:=2


Что за переменная и с чем ее едя
Back to top
View user's profile Send private message
Марина



Joined: 27 Aug 2002
Posts: 501
Location: Кондрина Марина Александровна
Occupation: ОАО БКО программист
Interests: Боровичи Новгородской обл

PostPosted: 23 Apr 2007 14:10    Post subject: Reply with quote

Это пусть Константин ответит. Форум-то за прошлый год пропал, а память дырявая
Back to top
View user's profile Send private message
Марина



Joined: 27 Aug 2002
Posts: 501
Location: Кондрина Марина Александровна
Occupation: ОАО БКО программист
Interests: Боровичи Новгородской обл

PostPosted: 23 Apr 2007 14:14    Post subject: Reply with quote

Так может вам надо при вызове вместо NOM_DOC забухать это ужасное SR0000...
Back to top
View user's profile Send private message
Vnehaev



Joined: 13 Apr 2007
Posts: 18
Location: Нехаев Валерий Сергеевич
Occupation: Программист
Interests: Калининград

PostPosted: 23 Apr 2007 14:19    Post subject: Reply with quote

Марина wrote:
Так может вам надо при вызове вместо NOM_DOC забухать это ужасное SR0000...


Страшно...опасная это штука...
Если вводить в ручную...то это пойдет индивидуально для одной рабочей станции...а если их 20...это под каждую станцию подстраиваться надо... нее. На другой станции,например у меня,другое поле задействовано: SR00000000000000AUTO1011КОД СУММЫ В РЕЕСТРЕ... нужен смысл этих SR0000... Может кто подскажет???
Back to top
View user's profile Send private message
nordk



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

PostPosted: 23 Apr 2007 14:46    Post subject: Reply with quote

Ну вобщем понятно.
Вы функцю вызываете не из реестра документов удаленного склада а извне, соотвественно она не знает что это какой-то конкретный вид движения удаленного склада и заполняет оответствующим образом.
Как я и писал раньше нумерация привязана к конкретному виду движения и отличает склад от удаленного....
У Вас в Вашей задаче это неучтено
Back to top
View user's profile Send private message Send e-mail
Vnehaev



Joined: 13 Apr 2007
Posts: 18
Location: Нехаев Валерий Сергеевич
Occupation: Программист
Interests: Калининград

PostPosted: 23 Apr 2007 14:48    Post subject: Reply with quote

Марина wrote:
Когда я писала свои накладные из спецфункции, у меня была такая проблема, сейчас я вам дам код, как у меня работает, но что и почему сделала именно так, сейчас точно не помню. Видите, у меня memdat еще используется и почему-то свои альясы для memdat и mdoc открыты. Попробуйте сделать в этом роде, может получится, у меня ошибок не происходит

Code:


priv S_LIB_ADD:=2
...
netuse("memdat1",npath+"sclad\memdat.dbf",,.f.)
ordsetfocus("tag_ident")
nnumdoc:=New1NumDoc(nsclad,nVid,nType,nCodeDoc)
memdat1->(dbclosearea())

...

FUNCTION New1NumDoc(cSclad,cVid,cType,cCodeDoc)
//----------------------------------------------------------------------------//
// Генерация уникального номера документа
LOCAL cNumDoc
   MDOC1->(dbPush(),SetScope())

   cNumDoc := MDOC1->(NWDOC("NUMDOC",UPPER(cSclad+cVid+cType+cCodeDoc),"NOM_DOC","MDOC","memdat1"))
   IF  !MDOC1->(NVDOC(S_LIB_ADD,,"NUMDOC",UPPER(cSclad+cVid+cType+cCodeDoc),"NOM_DOC","MDOC",.T.,"memdat1",{|x| IF(x != NIL,cNumDoc := x,cNumDoc) },.T.))
     NControlMem(UPPER(cSclad+cVid+cType+pCodeDoc1),"NOM_DOC","memdat1",.T.)
     cNumDoc := MDOC1->(NWDOC("NUMDOC",UPPER(cSclad+cVid+cType+cCodeDoc),"NOM_DOC","MDOC","memdat1"))
   ENDIF
   MDOC1->(dbPop())
RETURN cNumDoc



К стати. С этим кодом номер документа меняеться в зависимости от типа, вида и кода операции Type=1, Vid=1, codeoper=01. А в бэсте идет генерация номеров накладных только от типа и вида движения. Или я ошибаю
Back to top
View user's profile Send private message
Vnehaev



Joined: 13 Apr 2007
Posts: 18
Location: Нехаев Валерий Сергеевич
Occupation: Программист
Interests: Калининград

PostPosted: 23 Apr 2007 14:52    Post subject: Reply with quote

nordk wrote:
Ну вобщем понятно.
Вы функцю вызываете не из реестра документов удаленного склада а извне, соотвественно она не знает что это какой-то конкретный вид движения удаленного склада и заполняет оответствующим образом.
Как я и писал раньше нумерация привязана к конкретному виду движения и отличает склад от удаленного....
У Вас в Вашей задаче это неучтено


В общем-то так и было задумано , что спецфункция будет вызываться извне, однако у меня возникли трудности и время поджимало, и поэтому спецфункция запускаеться из РЕЕСТРА накладных, а в зависимости от поставщиков она записывает накладные в устангвленный тип и вид движения, даже если открыт не тот реестр с видом и типом движения
Back to top
View user's profile Send private message
Vnehaev



Joined: 13 Apr 2007
Posts: 18
Location: Нехаев Валерий Сергеевич
Occupation: Программист
Interests: Калининград

PostPosted: 23 Apr 2007 15:02    Post subject: Reply with quote

А
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, 3  Next
Page 1 of 3

 
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