Загрузка на весы

//Вот используя эту библиотеку, кстати OLE,
//http://www.atol.ru/products/software/dr/dr_ves_print/index.html
//наваял загрузку весов прямо из бэста библиотека понимает очень много разных типов весов.

 FUNCTION MAIN
   LOCAL oApp,scale,nProcess
   scale := ARRAY(2)
   TRY
   oApp := CREATEOBJECT( "AddIn.LP45" )
   CATCH
   ALERT("Scale not found!")
   RETURN .F.
   END
 DBPUSH()
 IF TYPE('aPars')!='A'
   RETURN .F.
 ENDIF
 IF LEN(apars)==0
   RETURN .F.
 ENDIF
 IF aPars[1]==1
   oApp:ShowProperties()
 ENDIF
 IF aPars[1]==2
   scale:=SCALE_LIST()
   oApp:CurrentDeviceNumber:=VAL(scale[1])
   oApp:CLEAR()
   oApp:ShowProgress:=.T.
   oApp:DeviceEnabled:=.F.                 //TEST
   oApp:CacheReport:=.T.
   NETUSE("sweight",LOADPATH()+"\TZ\sweight.dbf",,.F.)
   NETUSE("m_price",LOADPATH()+"\TZ\m_price.dbf",,.F.)
   sweight->(ORDSETFOCUS("TAG_CODE"))
   sweight->(DBGOTOP())
   m_price->(ORDSETFOCUS("TAG_CODE"))
   m_price->(DBGOTOP())
   oApp:BeginAdd()
   sweight->(SETSCOPE())
   sweight->(SETSCOPE("UPPER(SHOP+CODE)",UPPER(scale[2]+scale[1])))
   sweight->(DBGOTOP())
   sweight->(F_SETRELATION("m_price", "UPPER(shop+grup+nnum)"))
   nProcess:=PROCES_INI(sweight->(LASTREC()),,,"Обработка")
   WHILE(sweight->(!EOF()))
     IF (LEN(ALLTRIM(sweight->status))==0).AND.;
       (LEN(ALLTRIM(sweight->barcode))!=0)
       oApp:PLU:=VAL(ALLTRIM(sweight->plu))
       oApp:ICode:= VAL(SUBSTR(sweight->barcode,3,5))
       oApp:Price:= m_price->sumoutr
       oApp:NAME:= OEMTOANSI(UPPER(SUBSTR(sweight->NAME,1,20)))
       oApp:Name2:= OEMTOANSI(UPPER(SUBSTR(sweight->NAME,21,20)))
       oApp:GCode:= VAL(SUBSTR(sweight->barcode,1,2))
       oApp:MsgNo:= 0
       oApp:Tare:= 0
       oApp:Life:= 0
       oApp:WareType:= 0
       oApp:SetRecord()
     ENDIF
     PROCES_UPDATE(nProcess)
     sweight->(DBSKIP())
   ENDDO
   PROCES_END(nProcess)
   oApp:EndAdd()
   m_price->(DBCLOSEAREA())
   sweight->(DBCLOSEAREA())
 ENDIF
 DBPOP()
 RETURN .T.
 STATIC FUNCTION SCALE_LIST()
 LOCAL aSet,aSetKey,nTop,nBot,cColHead,aBlockCols,cCurproc,scl
 scl := ARRAY(2)
 aSet:=SAVESET()
 aSetKey:=SAVESETKEY()
 NETUSE("work",LOADPATH()+"\tz\mscales.dbf",,.F.)
 DISPBOX(2,0,22,79,( CHR( 201 ) + CHR( 205 ) + CHR( 187 ) + CHR( 186 ) + CHR( 188 ) + ;
 CHR( 205 ) + CHR( 200 ) + CHR( 186 )+' ' ),"W+/B")
 nTop:=3
 nBot:=21
 cColHead:={"Номер         Наименование"}
 cCurProc:={||"2"}
 aBlockCols:={{{||FIELD->code},0},{{||ALLTRIM(FIELD->NAME)},9}};
 WORK->( INITLIST(nTop,nBot,cColHead,aBlockCols,cCurProc,;
 ,,,,,;
 ,,,,,))
 scl[1]:=work->code
 scl[2]:=work->shop
 WORK->( DBCLOSEAREA() )
 RESTSETKEY(aSetKey)
 RESTSET(aSet)
 RETURN scl
 P.S. Там где написано TEST надо заменить на .Т., для реальной работы с железом. Номера весов в БЭСТ и в драйвере должны совпадать!