Code: |
//-------------------------------------------------------
// Расчет и вывод на печать остатков по складам // из номенклатурного справочника. // Аналог [F10] в номенклатурном справочнике. // свернуто по партиям // вер. 1.0 от 12/09/07 // разработано для Б-4+ 12.01 harbour // вызывается из номенклатурного справочника Function user_ostat_nomspr() Local cGrup:='' Local cNNum:='' Local cSclad:='' Local aStru:={} Local aBuf:={'',0} Local cDataBase:='' Local aMsg:={} Local cName:='' Local nSum_Kol:=0 Altd() dbPush() cGrup:=mlabel->Grup cNNum:=mlabel->NNum cName:=Alltrim(Mlabel->Name)+'; '+alltrim(mlabel->Marka)+'; '+alltrim(mlabel->Razmer) // таблица UsDataBase для группировки кол-ва по складам aAdd(aStru,{"Sclad","C",6,0}) aAdd(aStru,{"Kol" ,"N",9,3}) cDataBase:=TEMPFILE(GlobalTmpPath,"dbf") DBCreate(cDataBase,aStru) NetUse("UsDataBase",cDataBase) // заполним таблицу UsDataBase dbPush('mkart','mkart','Empty(mkart->partia)=.t.',{'Upper(Grup+NNum)', Upper(cGrup+cNNum)}) mkart->(dbGoTop()) if mkart->(!Eof()) do while mkart->(!Eof()) aBuf[1]:= mkart->Sclad aBuf[2]:= mkart->KolTek UsDataBase->(AddRec()) UsDataBase->(Gather(aBuf)) UsDataBase->(dbUnLock()) mkart->(dbSkip()) enddo endif dbPop() Sum UsDataBase->Kol to nSum_kol // вывод на печать aAdd(aMsg, 'Остатки товара '+cName) aAdd(aMsg, '----------------------') aAdd(aMsg, '| Склад | Количество|') aAdd(aMsg, '----------------------') UsDataBase->(dbEval({|| aAdd(aMsg,'| '+UsDataBase->Sclad+' | '+str(UsDataBase->Kol,9,3)+' |')})) aADD(aMsg, '----------------------') aAdd(aMsg, '|Итого | '+str(nSum_Kol,9,3)+' |') View(aMsg) UsDataBase->(dbCloseArea()) dbPop() return nil |
nordk wrote: |
Кстати в номенклатурном справочнике не подписано но CTRL-I тоже показывает суммарный остаток по номенклатуре |
Behemoth wrote: | ||
Если, конечно, удастся заставить его работать. У меня не получилось. Получается диалог, из которого можно выйти только по ESC. |
Quote: |
В любой момент могут перестать поддерживать скоб в DBPUSH() |
Quote: |
dbPush()
dbPop() |
Quote: |
UsDataBase->(dbCloseArea()) |
Плешивцев Евгений wrote: | ||||
этот день я обведу чОрным фламастером в календаре, придется переделывать дофига работающих утилит. По моему мнению конструкция
довольно удобна и очень наглядна в исходном коде. |
Плешивцев Евгений wrote: | ||
Более того, фрагмент моей программы (в самом конце):
наотрез не работает если не поставить эти операторные скобки. |
Code: |
mkart->(dbGoTop())
if mkart->(!Eof()) do while mkart->(!Eof()) aBuf[1]:= mkart->Sclad aBuf[2]:= mkart->KolTek UsDataBase->(AddRec()) UsDataBase->(Gather(aBuf)) UsDataBase->(dbUnLock()) mkart->(dbSkip()) enddo endif |
Code: |
mkart->( DBEVAL({|aBuf|aBuf:={mkart->SCLAD,mkart->KolTek},;
UsDataBase->( Addrec() ), ; UsDataBase->(Gather(aBuf)) ; }) ) |
Титов Александр wrote: |
Эту проблему мы решили, поддержим Scope в DbPush. |
nordk wrote: |
Но еще раз повторюсь - сделай по MDOCM будет надежнее и ничуть
не дольше (на глаз незаметно) |
Code: |
//-------------------------------------------------------
// Расчет и вывод на печать остатков по складам // из номенклатурного справочника. // Аналог [F10] в номенклатурном справочнике. // свернуто по партиям // вер. 1.1 от 12/09/07 // разработано для Б-4+ 12.01 harbour // разработано для Кофе-тайм // вызывается из номенклатурного справочника // вер 1.1 - оптимизирован код Function user_ostat_nomspr() Local cGrup:='' Local cNNum:='' Local cSclad:='' Local aStru:={} Local aBuf:={'',0} Local cDataBase:='' Local aMsg:={} Local cName:='' Local nSum_Kol:=0 Local aSet:={} Altd() aSet=SaveSet() cGrup:=mlabel->Grup cNNum:=mlabel->NNum cName:=Alltrim(Mlabel->Name)+'; '+alltrim(mlabel->Marka)+'; '+alltrim(mlabel->Razmer) // таблица UsDataBase для группировки кол-ва по складам aAdd(aStru,{"Sclad","C",6,0}) aAdd(aStru,{"Kol" ,"N",9,3}) cDataBase:=TEMPFILE(GlobalTmpPath,"dbf") DBCreate(cDataBase,aStru) Use &cDataBase Alias UsDataBase New EXCLUSIVE // заполним таблицу UsDataBase dbPush('mkart','mkart','Empty(mkart->partia)=.t.',; {'Upper(Grup+NNum)', Upper(cGrup+cNNum)}) mkart->(DBEVAL({|| aBuf:={mkart->SCLAD,mkart->KolTek},; UsDataBase->( Addrec() ),; UsDataBase->(Gather(aBuf))})) dbPop() Sum UsDataBase->Kol to nSum_kol // вывод на печать aAdd(aMsg, 'Остатки товара: '+cName) aAdd(aMsg, '----------------------') aAdd(aMsg, '| Склад | Количество|') aAdd(aMsg, '----------------------') UsDataBase->(dbEval({|| aAdd(aMsg,'| '+UsDataBase->Sclad+' | '+str(UsDataBase->Kol,9,3)+' |')})) aADD(aMsg, '----------------------') aAdd(aMsg, '|Итого | '+str(nSum_Kol,9,3)+' |') View(aMsg) UsDataBase->(dbClosearea()) RESTSET(aSet) return nil |
output generated using printer-friendly topic mod. All times are GMT + 4 Hours