-- Шаблон создан мастером бланков
-- 11.11.2008 15:03:01
--
БланкСШаблоном "Настройка электронной инвентаризации";

ЭлИнвВкл:L;
ТермДрв:S;
ПринтДрв:S;
ПутьЗадачи:S=[''];
ШаблонПечати:S=[''];
Принтер:S=[''];

var Buf[]:S;
--Var ТермДрвСпис[]:S;
--Var ПринтДрвСпис[]:S;


Func ТермДрв_OnEnter(FieldName: String; Iter: Integer): logical;
var i:i;
  ClearVariable(Buf);
  Buf[1]='CipherOle #Теминалы CipherLab через OLE-компоненту';
  i=Alternate('Выберите драйвер для работы с терминалом/сканером',Buf,-1,1,12);
  ТермДрв=Substr(Buf[i],1,Pos(' #',Buf[i])-1);
  ПутьЗадачи='';
  Return False;
end;


Func ПринтДрв_OnEnter(FieldName: String; Iter: Integer): logical;
var i:i;
  ClearVariable(Buf);
  Buf[1]='EPL2 #Драйвер печати на основе языка разметки EPL2';
  i=Alternate('Выберите драйвер для работы с принтером штрих-кодов',Buf,-1,1,12);
  ПринтДрв=Substr(Buf[i],1,Pos(' #',Buf[i])-1);
  Принтер='';
  ШаблонПечати='';
  Return False;
end;


Proc TaskUpl_OnClick(Sender: String);
  if ПутьЗадачи='' then
    if ChooseFile(ПутьЗадачи,'Выберите файл задачи')=cmCancel then Exit; fi;
  fi;
  if ExecuteFuncL('Раб.Штрихкод.ЗагрузитьЗадачу',ПутьЗадачи) then Message('Задача загружена в терминал'); fi;

end;

Func ШаблонПечати_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var tmp:S;
  Template.HideEditor(False);
  tmp=cur;
  if ChooseFile(tmp,'Выберите шаблон печати')=cmCancel then ^Cur; fi;
  ШаблонПечати=tmp;
  Return tmp ;
end;


Func Принтер_OnEnter(FieldName: String; Iter: Integer): logical;
var i:I;
  if ПринтДрв='EPL2' then
     ClearVariable(Buf);
     Buf[1]='LPT1';
     Buf[2]='LPT2';
     Buf[3]='LPT3';
     Buf[4]='LPT4';
     Buf[5]='LPT5';
     Buf[6]='LPT6';
     Buf[7]='LPT7';
     Buf[8]='LPT8';
     Buf[9]='LPT9';
     Buf[10]='COM1';
     Buf[11]='COM2';
     Buf[12]='COM3';
     Buf[13]='COM4';
     Buf[14]='COM5';
     Buf[15]='COM6';
     Buf[16]='COM7';
     Buf[17]='COM8';
     Buf[18]='COM9';
     i=Alternate('Выберите порт принтера',buf,-1,1,12);
     Принтер=Buf[i];
  fi;
  Return False ;
end;

var DataCard:S='ИНВВЕДОМОСТЬ_0504087';
var DataSubTab:S;
var CodeField:S="Штрихкод";
var NameField:S="НФА_имя";
var NumField:S="колФакт";

var CPT: AutoObject;

--Список драйверов терминалов
--var СканерДрв[1]:S='CipherLab 8xxx через OLE';



Func ИнитCipherOle:L;
var C:AutoObject;
C=CreateAutoObject("ScCt.Cpt");
C.Port=1;
C.BaudRate=1;
C.ConnectionType=0;
C.InitComm();
Раб.Штрихкод.CPT=C;
^(AsInteger(C.LinkTest(''))=0);
end;

Proc ЗакрCipherOle;
var C:AutoObject;
C=Раб.Штрихкод.CPT;
C.CloseComm();
clearvariable(Раб.Штрихкод.CPT);
end;

Func ЗагрузитьЗадачу(Путь:S):L;
var Res:L;
Res=True;
if Раб.Штрихкод.ТермДрв='CipherOle' then
   if ИнитCipherOle then
      CPT.WriteTask(Путь);
     else
      Message('Терминал не найден',mtError);
      Res=False;
   fi;
   ЗакрCipherOle;
  |True: Message('Не найден драйвер для работы с терминалом',mtError); Res=False;
fi;
^Res;
end;

Func ВСканер(Фильтр:S):L;
var wa,war,rs,j,Mem:i;
var Res,Fast:L;
var tmp:S;

--Список поддерживаемых драйверов:
--CipherOle - Теминалы CipherLab через OLE-компоненту
Res=True;
if EnqOkCancel('Данные в сканнере будут заменены данными ведомости (без наличия!)',mtWarning)<>cmOk then ^False; fi;
if Раб.Штрихкод.ТермДрв='CipherOle' then
 wa=openworkarea(DataCard,'',Фильтр);
 try
  war=openarray(wa,1,'ПОЗИЦИИ','');
  try
   rs=records(war);
   if ИнитCipherOle then
      Cpt.DeleteData(1,1);
      CPT.CodePage=0;
      Mem=AsInteger(CPT.FreeMemory);
     --  Trace(AsString(CPT.FreeMemory));
      CPT.BeginWrite(1);
      for j=1 to rs do
       CPT.Field1=GetFieldS(war,j,CodeField);
       tmp=GetFieldS(war,j,CodeField);
       CPT.Field2=GetFieldS(war,j,NameField);
       tmp=GetFieldS(war,j,CodeField);
       CPT.Field3="0";--GetFieldS(war,j,"");
       CPT.AddRecord(3);
       Fast = (Mem>100);
       if Trunc(j,if(Fast,-2,-1))=j then
          CPT.EndWrite();
          Mem=AsInteger(CPT.FreeMemory);
         -- Trace(Str(Mem));
        --  Trace(AsString(CPT.StateMessage));
          if Mem<10 then Message("Память терминала переполнена. Удалите данные и попробуйте еще раз.",mtError); Break; fi;
          CPT.BeginWrite(1);
       fi;
      od;
      CPT.EndWrite();
--       Trace(AsString(CPT.FreeMemory));
     else
      Message('Терминал не найден',mtError);
      Res=False;
   fi;
   ЗакрCipherOle;
  finally
   CloseWorkArea(war);
  end;
 finally
  CloseWorkArea(wa);
 end;
 |True: Message('Не найден драйвер для работы с терминалом',mtError); Res=False;
fi;
^Res;
end;

Func ИзСканера(Фильтр:S):L;
var wa,war,rs,j:i;
var Res:L;
var f1,f2,f3:S;
--Список поддерживаемых драйверов:
--CipherOle - Теминалы CipherLab через OLE-компоненту

Res=True;
if EnqOkCancel('Данные о наличии будут заменены данными из сканера',mtWarning)<>cmOk then ^False; fi;
if Раб.Штрихкод.ТермДрв='CipherOle' then
 wa=openworkarea(DataCard,'',Фильтр);
 try
  war=openarray(wa,1,'ПОЗИЦИИ',CodeField);
  try
   if ИнитCipherOle then
      CPT.CodePage=0;
      CPT.BeginRead(1,1);
      While AsInteger(CPT.ReadRecord() )>0 do
        f1=AsString(CPT.Field1);
        f2=AsString(CPT.Field2);
        f3=AsString(CPT.Field3);
        j=Search(war,1,f1);
        BeginChanging(war);
        if j>0 then
           j=PutFieldI(war,j,NumField,Int(f3));
--          else
--           j=InsertRecord(war);
--           j=PutFieldS(war,j,CodeField,f1);
--           j=PutFieldS(war,j,NameField,f2);
--           j=PutFieldI(war,j,NumField,Int(f3));
        fi;
        EndChanging(war);
      od;
      CPT.EndRead();
     else
      Message('Терминал не найден',mtError);
      Res=False;
   fi;
   ЗакрCipherOle;
  finally
   CloseWorkArea(war);
  end;
 finally
  CloseWorkArea(wa);
 end;
 |True: Message('Не найден драйвер для работы с терминалом',mtError); Res=False;
fi;
^Res;
end;

--Func ПечатьШК(ШК:S;Имя:S;Учн:S;Инв:S):L;
Func ПечатьШК(ИнвКKey:Record):L;
var Res:L;
var OWA,templ,resul:I;
var FName,CS:S;
var НФА,ШК,Имя,Учн,Инв,Завн:S;
Res=True;
OWA=OpenWorkArea('РПО_ИНВКАРТ_ОС','','UKEY='+RecordToString(ИнвКKey));
try
  НФА=GetFieldS(OWA,1,'НФА');
  ШК=GetFieldS(OWA,1,'ШТРИХКОД');
  Имя=Substr(GetFieldS(OWA,1,'НФА_ИМЯ'),1,16);
  if trim(Имя)='' then
     if Name_A(НФА)<>'':
        Имя=Name_A(НФА);
     fi;
  fi;

  Учн=РАБ.НФА.FUNC_LIB.FormatInvAna(НФА,'УЧН.'+GetFieldS(OWA,1,'ИНВ'), 1,'б/н' ,'');
  Инв=РАБ.НФА.FUNC_LIB.FormatInvAna(НФА,'УЧН.'+GetFieldS(OWA,1,'ИНВ'), 2,'б/н' ,'');
  Завн=GetFieldS(OWA,1,'ЗАВОД_НОМ');
finally
  CloseWorkArea(OWA);
end;
if Раб.Штрихкод.ПринтДрв='EPL2' then
   templ=TextFileOpenRead(Раб.Штрихкод.ШаблонПечати);
   FName=PlanVar("CACHE")+"\"+GetGUID;
   if ExistFile(FName) then DeleteFile(FName); fi;
   CreateFile(FName);
   resul=TextFileOpenWrite(FName);
   while not TextFileEndOfFile(templ) do
     CS=TextFileReadLn(templ);
     if Pos('@ШК@',CS)>0 then CS=Substr(CS,1,Pos('@ШК@',CS)-1)+ШК+Substr(CS,Pos('@ШК@',CS)+4,255); fi;
     if Pos('@ИМЯ@',CS)>0 then CS=Substr(CS,1,Pos('@ИМЯ@',CS)-1)+Имя+Substr(CS,Pos('@ИМЯ@',CS)+5,255); fi;
     if Pos('@УЧН@',CS)>0 then CS=Substr(CS,1,Pos('@УЧН@',CS)-1)+Учн+Substr(CS,Pos('@УЧН@',CS)+5,255); fi;
     if Pos('@ИНВ@',CS)>0 then CS=Substr(CS,1,Pos('@ИНВ@',CS)-1)+Инв+Substr(CS,Pos('@ИНВ@',CS)+5,255); fi;
     if Pos('@ЗАВН@',CS)>0 then CS=Substr(CS,1,Pos('@ЗАВН@',CS)-1)+Завн+Substr(CS,Pos('@ЗАВН@',CS)+6,255); fi;
     TextFileWriteLn(resul,CS);
   od;
   TextFileClose(templ);   TextFileClose(resul);
--   ExecuteProgram(FName);
   cs='cmd /C copy "'+FName+'" lpt1';
   ExecuteProgram(cs);

 |True: Message('Не найден драйвер для работы с принтером штрих-кодов',mtError); Res=False;
fi;
^Res;
end;



Конец
