home *** CD-ROM | disk | FTP | other *** search
/ ftp.texkom.ru / ftp.texkom.ru.tar / ftp.texkom.ru / kkm1 / DoSaleFromChecks.PRG < prev    next >
Text File  |  2007-07-30  |  10KB  |  292 lines

  1. PROCEDURE DoSaleFromChecks
  2.     LPARAMETERS lSaleNewOnly
  3.     LOCAL lnfh
  4.     lnfh=0
  5.     TRY
  6.         lnfh=FCREATE('DoSaleFromChecks.runned')
  7.     CATCH
  8.     ENDTR
  9.     IF lnfh<=0
  10.         RETURN .F.
  11.     ENDIF
  12. safeclose('c_docs')
  13. safeclose('c_oper')
  14. cacheclear()
  15. WAIT timeout 1
  16.     IF safeuse('c_oper') AND safeuse('c_docs') AND safeuse('k_lenta') AND;
  17.             safeuse('b_docs') AND safeuse('b_oper') AND safeuse('k_kodtov') AND;
  18.             safeuse('b_uslug') AND safeuse('k_uslug') AND safeuse('k_viddoc') AND safeuse('k_kkm')
  19.         LOCAL ldTimeStamp,lnFreeSale(1),lnSumma(1),lnProg,loLenta,lcNomdoc,lnNomOper,lcLetter(1),lnMaxDoc(1),;
  20.             lcDocument,lnKolvo,lnMin,lcViddoc
  21.         ldTimeStamp=DATETIME()
  22.  
  23.         WAIT WINDOW '┬√ßΦ≡α■ φσ∩≡εΣαφφ√σ ≈σΩΦ' NOWAIT NOCLEAR
  24.         SELECT * FROM c_docs WHERE saledoc=SPACE(10) INTO CURSOR TSD NOFILTER
  25.  
  26.         IF _TALLY>0
  27.             WAIT CLEAR
  28.             SELECT kodtov,NAME FROM k_kodtov WHERE artikul='╪╚═╬╠╬═╥└╞'  INTO CURSOR Uslug READWRITE
  29.             APPEND BLANK
  30.             REPLACE NAME WITH '╤ΓεßεΣφα  ±≤∞∞α'
  31.             INDEX ON kodtov TAG kodtov
  32.             SET ORDER TO
  33.             USE IN k_kodtov
  34.  
  35.             SELECT DISTI kkm,lenta,TTOD(DATA) DATA,SPACE(10) nomdoc,.F. new,.T. dosale FROM TSD INTO CURSOR lenta READWRITE ORDER BY 3,1,2
  36.             LOCAL lcTitle,llOldLenta
  37.             lcTitle='╧σ≡σΩα≈ΦΓα■ Σαφφ√σ Φτ ≈σΩεΓ Γ ∩≡εΣαµΦ'
  38.             lnProg=NEWOBJECT('progressbar','utility','LF.EXE',RECCOUNT('lenta')*8+1,lcTitle)
  39.             SCAN
  40.                 lnProg.inc
  41.                 IF !LOCATE('k_kkm','kkm',lenta.kkm)
  42.                     INSERT INTO k_kkm (kkm,viddoc) VALUES (lenta.kkm,oMyVar.cViddoc)
  43.                 ENDIF
  44.                 lcViddoc=k_kkm.viddoc
  45.  
  46.                 SELECT k_lenta
  47.                 LOCATE FOR kkm=lenta.kkm AND lenta=lenta.lenta AND DATA=lenta.DATA
  48.                 llOldLenta=FOUND()
  49.                 IF llOldLenta AND LOCATE('b_docs','nomdoc',k_lenta.nomdoc)
  50.                     SELECT lenta
  51.                     REPLACE nomdoc WITH k_lenta.nomdoc
  52.                     lcNomdoc=lenta.nomdoc
  53.                 ELSE
  54.                     IF llOldLenta
  55.                         lcNomdoc=k_lenta.nomdoc
  56.                     ELSE
  57.                         lcNomdoc=getnkey('GEP_SETU','DOCUMENT','NOMDOC')
  58.                     ENDIF
  59.                     SELECT lenta
  60.                     REPLACE nomdoc WITH lcNomdoc,new WITH .T.
  61.                     SCATTER NAME loLenta
  62.                     INSERT INTO k_lenta FROM NAME loLenta
  63.                 ENDIF
  64.                 lnProg.inc
  65.                 _SCREEN.CAPTION='╬ß≡αßα≥√Γα■ ∩≡εΣαµΦ τα '+TRANSFORM(DATA)+' ∩ε ╩╩╠ '+TRANSFORM(kkm)+' δσφ≥α ╣'+TRANSFORM(lenta)
  66.  
  67.  
  68.  
  69.                 SELECT nomdoc,skid,USER,data FROM TSD;
  70.                     WHERE kkm=lenta.kkm AND lenta=lenta.lenta AND TTOD(DATA)=lenta.DATA;
  71.                     INTO CURSOR Nomdocs
  72.  
  73.                 SELECT o.kodtov,o.cena,d.skid,o.cenap,o.nomtov,d.USER,SUM(kolvo) kolvo,MAX(data) as timestamp;
  74.                     FROM Nomdocs d inner JOIN c_oper o ON d.nomdoc=o.nomdoc;
  75.                     INTO CURSOR curSaleList GROUP BY 1,2,3,4,5,6
  76.  
  77.                 safeclose('FreeSales')
  78.                 SELECT cs.kodtov,T.NAME,SUM(cs.kolvo*cs.cena) SUMMA FROM curSaleList cs,Uslug T;
  79.                     WHERE cs.kodtov=T.kodtov;
  80.                     INTO CURSOR FreeSales READWRITE GROUP BY 1,2
  81.  
  82.                 lnProg.inc
  83.  
  84.                 REPLACE kodtov WITH oMyVar.cUslKod FOR EMPTY(kodtov)
  85.  
  86.                 SCAN
  87.                     SELECT b_uslug
  88.                     LOCATE FOR nomdoc=lcNomdoc AND kod=FreeSales.kodtov;
  89.  
  90.                     IF !FOUND()
  91.                         INSERT INTO b_uslug (nomdoc,kod,SUMMA) VALUES (lcNomdoc,FreeSales.kodtov,FreeSales.SUMMA)
  92.                         IF !LOCATE('k_uslug','kod',FreeSales.kodtov) AND USED('k_uslug')
  93.                             INSERT INTO k_uslug (kod,NAME,showinlist) VALUE(FreeSales.kodtov,FreeSales.NAME,.T.)
  94.                         ENDIF
  95.                     ELSE
  96.                         REPLACE SUMMA WITH SUMMA+FreeSales.SUMMA
  97.                     ENDIF
  98.                 ENDSCAN
  99.  
  100.                 lnProg.inc
  101.  
  102.                 safeclose('CurOper')
  103.                 SELECT cs.kodtov,NVL(k.artikul,SPACE(50)) artikul,NVL(k.NAME,SPACE(100)) NAME,;
  104.                     cs.kolvo,cs.cena,cs.nomtov,lcNomdoc nomdoc,'RUB' TipVal,;
  105.                     SPACE(10) nomoper,cs.TIMESTAMP TIMESTAMP,cs.USER USER,cs.cenap,cs.skid,;
  106.                     cs.TIMESTAMP createdon,cs.USER createdby;
  107.                     FROM curSaleList cs LEFT JOIN k_kodtov k ON cs.kodtov=k.kodtov;
  108.                     WHERE !EXIST(SELE kodtov FROM Uslug WHERE kodtov=cs.kodtov);
  109.                     INTO CURSOR CurOper READWRITE
  110.                 indexall()
  111.                 lnProg.inc
  112.  
  113.                 REPLACE USER WITH oMyVar.cUser FOR EMPTY(USER)
  114.  
  115.                 lnSumma=0
  116.  
  117.                 IF lenta.new OR !LOCATE('b_docs','nomdoc',lcNomdoc)
  118.                     SELECT NVL(SUM(kolvo*cena),0) FROM CurOper INTO ARRAY lnSumma
  119.  
  120.                     * ┬√ßΦ≡ασ∞ ∩σ≡Γ≤■ ß≤ΩΓ≤ ΣεΩ≤∞σφ≥α, ±επδα±φε ≤ΩαταφφεΘ Γ K_VIDDOC
  121.                     lcLetter='╩'
  122.                     SELECT DOC FROM k_viddoc WHERE kod=lcViddoc INTO ARRAY lcLetter
  123.                     lnMaxDoc=0
  124.                     * ╤≈Φ≥ασ∞ ∞αΩ±Φ∞αδⁿφ√Θ φε∞σ≡ ΣεΩ≤∞σφ≥α, ±επδα±φε ∩σ≡ΓεΘ ß≤ΩΓσ Φ StartPeriod - Σα≥α φα≈αδα ∩σ≡Φ≤Σα
  125.                     SELE TOP 1 VAL(SUBSTR(DOCUMENT,2)) FROM b_docs INTO ARRAY lnMaxDoc;
  126.                         WHERE DOCUMENT=m.lcLetter AND DATA>=M.oMyVar.dStartPeriod ORDE BY 1 DESC
  127.  
  128.                     lcDocument=m.lcLetter+PADL(INT(lnMaxDoc)+1,7)+'/1'
  129.                     * ─εßαΓδ σ∞ τα∩Φ±ⁿ Γ B_DOCS
  130.                     lnFreeSale=0
  131.                     SELECT NVL(SUM(SUMMA),0) FROM FreeSales INTO ARRAY lnFreeSale
  132.  
  133.                     INSERT INTO b_docs (nomdoc,DATA,MEMBER,SUMMA,DOCUMENT,vidcen,viddoc,TIMESTAMP,USER,Tipdoc,TipVal,COMMENT,createdon,createdby);
  134.                         VALUES (lcNomdoc,lenta.DATA,oMyVar.cRoznMember,lnSumma+lnFreeSale,lcDocument,1,lcViddoc,;
  135.                         ldTimeStamp,oMyVar.cUser,'02','RUB','╧≡εΣαµΦ ∩ε ╩╩╠ '+TRANSF(k_kkm.kkm)+' ╩╦ '+TRANSFORM(lenta.lenta),ldTimeStamp,oMyVar.cUser)
  136.                 ENDIF
  137.                 IF !lenta.new
  138.                     SELECTALL('B_OPER','BOPER','NOMDOC',lcNomdoc)
  139.                     indexall()
  140.                     SELECT CU.* FROM CurOper CU ;
  141.                         WHERE EXIST(SELE .T. FROM BOPER BO WHERE kodtov=CU.kodtov AND BO.cena=CU.cena AND BO.skid=CU.skid AND BO.nomtov=CU.nomtov) ;
  142.                         INTO CURSOR OLDKODS
  143.                     SCAN
  144.                         SELECT CurOper
  145.                         LOCATE FOR kodtov=OLDKODS.kodtov AND cena=OLDKODS.cena AND skid=OLDKODS.skid AND nomtov=OLDKODS.nomtov
  146.                         SELECT BOPER
  147.                         LOCATE FOR nomdoc=lcNomdoc AND kodtov=OLDKODS.kodtov AND cena=OLDKODS.cena AND skid=OLDKODS.skid AND nomtov=OLDKODS.nomtov
  148.                         IF FOUND() AND LOCATE('B_OPER','NOMOPER',BOPER.nomoper)
  149.                             REPLACE kolvo WITH kolvo+CurOper.kolvo,TIMESTAMP WITH ldTimeStamp,USER WITH CurOper.USER IN B_OPER
  150.                             IF CurOper.kolvo<0
  151.                                 IF safeuse('m_oper','','nomdoc',.T.) AND SEEK(lcNomdoc)
  152.                                     LOCAL loCuroper,lnKolvo,lnMin
  153.                                     lnKolvo=ABS(CurOper.kolvo)
  154.                                     SCAN WHILE nomdoc=lcNomdoc
  155.                                         IF kodtov=CurOper.kodtov AND kolvo>0
  156.                                             lnMin=MIN(m_oper.kolvo,lnKolvo)
  157.                                             IF lnMin=m_oper.kolvo
  158.                                                 deleteoper(m_oper.nomoper,,.T.)
  159.                                             ELSE
  160.                                                 SCATTER NAME loCuroper
  161.                                                 loCuroper.kolvo=loCuroper.kolvo-lnMin
  162.                                                 changeoper(,loCuroper)
  163.                                             ENDIF
  164.                                             lnKolvo=lnKolvo-lnMin
  165.                                             IF lnKolvo=0
  166.                                                 EXIT
  167.                                             ENDIF
  168.                                         ENDIF
  169.                                     ENDSCAN
  170.                                 ENDIF
  171.                             ENDIF
  172.                             DELETE IN CurOper
  173.                         ENDIF
  174.                     ENDSCAN
  175.                 ENDIF
  176.                 lnProg.inc
  177.  
  178.                 SELECT CurOper
  179.                 safeclose('CurOper1')
  180.                 SELECT * FROM CurOper INTO CURSOR CurOper1 READWRITE
  181.                 USE IN CurOper
  182.                 IF _TALLY>0
  183.                     lnNomOper=INT(VAL(getnkey('GEP_SETU','M_OPER','NOMOPER',,,_TALLY)))-1
  184.                     SELECT CurOper1
  185.                     REPLACE ALL nomoper WITH PADL(lnNomOper+RECNO(),10,'0')
  186.                 ENDIF
  187.  
  188.                 IF !USED('CurOperAll')
  189.                     SELECT * FROM CurOper1 INTO CURSOR CurOperAll READWRITE
  190.                 ELSE
  191.                     SELECT CurOperAll
  192.                     APPEND FROM DBF('CurOper1')
  193.                 ENDIF
  194.                 * ─εßαΓδ σ∞ ε∩σ≡α÷ΦΦ ∩ε ΣεΩ≤∞σφ≥≤.
  195.                 lnProg.inc
  196.  
  197.                 SELECT B_OPER
  198.                 APPEND FROM DBF('curoper1')
  199.                 cacheclear()
  200.                 lnProg.inc
  201.                 SELECT Nomdocs
  202.                 SCAN
  203.                     UPDATE c_docs SET saledoc=lcNomdoc WHERE nomdoc=Nomdocs.nomdoc
  204.                 ENDSCAN
  205.                 cacheclear()
  206.             ENDSCAN
  207.             lnProg=0
  208.  
  209.             lcTitle='╤∩Φ±√Γα■ ∩≡εΣαµΦ'
  210.             lnProg=NEWOBJECT('progressbar','utility','LF.EXE',RECCOUNT('lenta')+1,lcTitle)
  211.             SCAN
  212.                 IF !lenta.new
  213.                     calcbdocsum(lenta.nomdoc)
  214.                 ENDIF
  215.                 IF lenta.dosale AND LOCATE('k_kkm','kkm',lenta.kkm) AND k_kkm.dosale
  216.                     IF lSaleNewOnly
  217.                         saletov(lenta.nomdoc)
  218.                     ELSE
  219.                         saledoc(lenta.nomdoc,.T.,.T.,.T.,.T.)
  220.                     ENDIF
  221.                 ENDIF
  222.                 lnProg.inc
  223.             ENDSCAN
  224.             lnProg=0
  225.         ENDIF
  226.         WAIT CLEAR
  227.     ENDIF
  228. ENDPROC
  229.  
  230. PROCEDURE saletov
  231.     LPARAMETERS cNomdoc
  232.     SELECT kodtov,nomtov,cena,SUM(kolvo) kolvo FROM CurOperAll GROUP BY 1,2,3;
  233.         WHERE nomdoc=cNomdoc;
  234.         INTO CURSOR BOPER HAVING SUM(kolvo)>0
  235.     IF _TALLY>0
  236.         PUBLIC pcXML
  237.         CURSORTOXML('BOPER','pcXML',3,1+16,0,"1")
  238.         NewSession('DoSaleTov(['+cNomdoc+'],pcXML)')
  239.         RELEASE pcXML
  240.     ENDIF
  241. ENDPROC
  242. PROCEDURE DoSaleTov
  243.     LPARAMETERS cNomdoc,cOpers
  244.     SELECT *,DATA1 datadoc FROM b_docs INTO CURSOR CurDoc WHERE nomdoc=cNomdoc READWR
  245.     IF !LOCATE('k_viddoc','kod',CurDoc.viddoc) OR !k_viddoc.notcngdate
  246.         REPLACE DATA WITH DATE() IN CurDoc
  247.     ENDIF
  248.  
  249.     =XMLTOCURSOR(cOpers,'BOPER')
  250.     LOCAL lcViddoc
  251.     lcViddoc=CurDoc.viddoc
  252.     WAIT WINDOW NOWAIT NOCLEAR '┬√ßΦ≡α■ ε±≥α≥ΩΦ'
  253.     SL_OstByList('boper',.T.)
  254.     WAIT WINDOW NOWAIT NOCLEAR '╘Φδⁿ≥≡≤■ ε±≥α≥ΩΦ'
  255.     SL_FilterOst('ost',lcViddoc,.T.)
  256.     WAIT WINDOW NOWAIT NOCLEAR '╤ε≡≥Φ≡≤■ ε±≥α≥ΩΦ'
  257.     SL_SortOst('ost',lcViddoc)
  258.     WAIT WINDOW NOWAIT NOCLEAR '═αßΦ≡α■ ε∩σ≡α÷ΦΦ'
  259.     SL_CollectOst('Ost','boper')
  260.     WAIT CLEAR
  261.  
  262.     SELECT ost
  263.  
  264.     DELETE FOR kolvo=0
  265.     LOCATE FOR kolvo>0
  266.     IF !FOUND()
  267.         RETURN
  268.     ENDIF
  269.  
  270.     WAIT WINDOW NOWAIT NOCLEAR '╚Σσ≥ ±∩Φ±αφΦσ ≥εΓα≡α'
  271.     safeclose('CurOper')
  272.     LOCAL lcPodr,lcMol,lcPlace
  273.     lcPodr=SPACE(LEN(m_realp.podr))
  274.     lcMol=SPACE(LEN(m_realp.mol))
  275.     lcPlace=SPACE(LEN(m_realp.place))
  276.  
  277.     SELECT T.podr podrf,T.mol molf,T.place placef,lcPodr podrt,lcMol molt,lcPlace placet,;
  278.         T.kodtov,T.nomtov,T.cena cena1,0 cenav1,T.kolvo,CurDoc.TipVal TipVal,k.serial;
  279.         FROM ost T,k_kodtov k;
  280.         WHERE T.kodtov=k.kodtov;
  281.         INTO CURS CurOper READWRITE
  282.  
  283.     GO TOP
  284.     LOCAL llReturnStatus
  285.     llReturnStatus=0
  286.     IF SaveDoc(.T.,.T.)
  287.         UPDATE b_docs SET DATA1=CurDoc.datadoc WHERE nomdoc=cNomdoc
  288.     ENDIF
  289.     WAIT CLEAR
  290.     RETURN llReturnStatus
  291. ENDPROC
  292.