{Скрипт для экспорта на весы справочника товаров const COMPORT - номер COM порта номер весов указывается в поле Адрес(ADDRESSWEIGH) справочника весов Перед отправкой на весы справочника товаров проводится проверка того что для всех весовых товаров заданы PLU коды. Для отсутствующих присваиваются автоматически (следующте по порядку) } const COMPORT = 1; var q : TcsQuery; f : TcsFormDialog; TableName,ListId,ReportName : String; slAdd,slScale : TSortedList; qPlu,qScale,qLabel : TcsQuery; Plu,i,IdLabel,IdCategory,ScaleCount : Integer; DataSet : TClientDataSet; function MakeLabelSQLText : String; var sl : TStringList; begin sl := TStringList.Create; sl.Clear; if (TableName = 'DOC') then begin sl.Add('select L.Fullname, L.Id, L.CODE, L.BarCode, L.IdCategory,'); sl.Add(' (select LC.CENAPRICE1 from LABELCENA LC where LC.IDSHOP = 1 and LC.IDLABEL = L.ID) as CENA,'); sl.Add(' pl.PLUCODE as PLU, plc.ID as IdPLU '); sl.Add(' from Doc '); sl.Add(' left outer join LABEL L on (L.ID = D.IDLABEL) '); sl.Add(' left outer join PLULABEL PL on (L.ID = PL.IDLABEL) '); sl.Add(' left outer join PLUCODELIST PLC on (PLC.ID = pl.IDPLU)'); sl.Add(' where D.Id in ('+ListId+') and PLC.Id = :IdPlu' ); sl.Add(' l.BarCode like ''25%'''); sl.Add(' order by Fullname'); end else if (ReportName = 'Экспорт на весы из акта переоценки') then begin sl.Add('select L.Fullname, L.Id, L.CODE, L.BarCode, L.IdCategory,'); sl.Add(' ChangeCena_r.Cena_Now as CENA, '); sl.Add(' pl.PLUCODE as PLU, plc.ID as IdPLU '); sl.Add(' from ChangeCena_r '); sl.Add(' left outer join Label L on (L.ID = ChangeCena_r.IDLABEL)'); sl.Add(' left outer join PLULABEL pl on (L.ID = PL.IDLABEL) '); sl.Add(' left outer join PLUCODELIST PLC on (PLC.ID = pl.IDPLU)'); sl.Add(' where ChangeCena_r.IdDoc = ' + IntToStr(frVariables['IdDoc'])); sl.Add(' and PLC.Id = :IdPlu and l.BarCode like ''25%'' order by Fullname'); end else // из картотеки if (TableName = 'LABEL')then begin sl.Add('select L.Fullname, L.Id, L.CODE, L.BarCode, L.IdCategory,'); sl.Add(' (select LC.CENAPRICE1 from LABELCENA LC where LC.IDSHOP = 1 and LC.IDLABEL = L.ID) as CENA,'); sl.Add(' pl.PLUCODE as PLU, plc.ID as IdPLU '); sl.Add(' from LABEL L '); sl.Add(' left outer join PLULABEL pl on (L.ID = PL.IDLABEL) '); sl.Add(' left outer join PLUCODELIST PLC on (PLC.ID = pl.IDPLU)'); sl.Add(' where L.Id in ('+ListId+') and PLC.Id = :IdPlu and l.BarCode like ''25%'' '); sl.Add(' order by L.Fullname '); end else // из распоряжения на изменение цен if (TableName = 'DOCPRICEROW') then begin sl.Add('select L.Fullname, L.Id, L.CODE, L.BarCode, L.IdCategory,'); sl.Add(' (select LC.CENAPRICE1 from LABELCENA LC where LC.IDSHOP = 1 and LC.IDLABEL = L.ID) as CENA,'); sl.Add(' pl.PLUCODE as PLU, plc.ID as IdPLU '); sl.Add(' from label l '); sl.Add(' left outer join PLULABEL pl on (L.ID = PL.IDLABEL)'); sl.Add(' left outer join PLUCODELIST PLC on (PLC.ID = pl.IDPLU) '); sl.Add(' left outer join docpricerow DPR on (L.ID = DPR.Idlabel) '); sl.Add(' where L.Id in ('+ListId+') and PLC.Id = :IdPlu and l.BarCode like ''25%'' and dpr.iddocprice='+ IntToStr(frVariables['iddoc'])); sl.Add(' order by L.Fullname'); end else // из main (отмеченные документы) if (TableName = 'MAIN')then begin sl.Add('select L.Fullname, L.Id, L.CODE, L.BarCode, L.IdCategory,'); sl.Add(' (select LC.CENAPRICE1 from LABELCENA LC where LC.IDSHOP = 1 and LC.IDLABEL = L.ID) as CENA,'); sl.Add(' pl.PLUCODE as PLU, plc.ID as IdPLU '); sl.Add('from main M'); sl.Add('left outer join DOC D on (M.Id = D.IdDoc)'); sl.Add('left outer join LABEL L on (L.ID = D.IdLabel)'); sl.Add('left outer join PLULABEL pl on (L.ID = PL.IDLABEL)'); sl.Add('left outer join PLUCODELIST PLC on (PLC.ID = pl.IDPLU)'); sl.Add('where M.Id in ('+ListId+') and PLC.Id = :IdPlu and l.BarCode l.BarCode like ''25%'' and I.TABLENAME = "MAIN" '); sl.Add('order by L.Fullname'); end; Result := sl.Text; sl.Free; end; function ExportPlu : Integer; begin slScale := TSortedList.Create; qScale := TcsQuery.Create(f); qScale.DatabaseName := MainDatabaseName; qScale.SQL.Add('select * from plucodelist'); qScale.Open; ScaleCount := 0; // выбор категорий товаров для каждых весов while (not qScale.EOF) do begin slScale.Values[qScale.FieldByName('id').AsString] := ','+qScale.FieldByName('LabelGrups').AsString+','; qScale.Next; ScaleCount := ScaleCount + 1; end; qPlu := TcsQuery.Create(f); qPlu.DatabaseName := MainDatabaseName; qPlu.SQL.Add('select count(PluCode) as cnt'); qPlu.SQL.Add('from plulabel'); qPlu.SQL.Add('where idlabel = :IdLabel and IdPlu = :IdScale'); qPlu.Prepare; qLabel := TcsQuery.Create(f); qLabel.DatabaseName := MainDatabaseName; qLabel.SQL.Add('select label.id,label.fullname,label.IdCategory'); qLabel.SQL.Add('from label'); qLabel.SQL.Add('where barcode like ''25%'''); qLabel.Open; f.StatusBar.Panels.Items[0].Text := 'Выполняется проверка PLU'; while (not qLabel.EOF) do begin // Проверяем все весы for i := 0 to ScaleCount-1 do begin if pos(','+qLabel.FieldByName('IdCategory').AsString +',',slScale.Values(slScale[i]))>0 then begin qPlu.ParamByName('IdScale').Value := slScale.Names[i]; qPlu.ParamByName('IdLabel').Value := qLabel.FieldByName('Id').AsInteger; qPlu.Open; // OK if qPlu.FieldByName('cnt').AsInteger = 0 then begin Plu := GetIdValue('PLU_'+slScale.Names[i]); SQLExecute('Insert into PluLabel (Id,IdPlu,IdLabel,PluCode,Status) Values (Gen_Id(PLULABEL,1),'+slScale.Names[i]+','+qLabel.FieldByName('Id').AsString+','+IntToStr(Plu)+',0)'); end; qPlu.close; end; end; qLabel.Next; end; qScale.Close; qScale.Open; qLabel.SQL.Clear; // DataSet := TClientDataSet.Create(f); DataSet.FieldDefs.Clear; DataSet.FieldDefs.Add('PLU',ftString,3,False); DataSet.FieldDefs.Add('CODE',ftString,7,False); DataSet.FieldDefs.Add('FullName',ftString,84,False); DataSet.FieldDefs.Add('Price',ftFloat,0,False); DataSet.FieldDefs.Add('Tara',ftFloat,0,False); DataSet.FieldDefs.Add('DateGoods',ftDateTime,0,False); DataSet.CreateDataSet; qLabel.SQL.Text := MakeLabelSQLText; while (not qScale.EOF) do begin f.StatusBar.Panels.Items[0].Text := 'Загрузка в весы: '+qScale.FieldByName('Prim').AsString; DataSet.EmptyDataSet; qLabel.Close; qLabel.ParamByName('IdPlu').AsInteger := qScale.FieldByName('Id').AsInteger; qLabel.open; while (not qLabel.EOF) do begin if (Pos(','+qlabel.FieldByName('IDCATEGORY').AsString+',',','+qScale.FieldByName('LABELGRUPS').AsString+',') > 0) then begin DataSet.Append; DataSet.FieldByName('PLU').AsString := qLabel.FieldByName('PLU').AsString; DataSet.FieldByName('CODE').AsString := qLabel.FieldByName('CODE').AsString; DataSet.FieldByName('FULLNAME').AsString := qLabel.FieldByName('FULLNAME').AsString; DataSet.FieldByName('PRICE').AsFloat := qLabel.FieldByName('Cena').AsFloat; DataSet.FieldByName('TARA').AsFloat := 0; DataSet.FieldByName('DateGoods').AsDateTime := Date+20; DataSet.Post; end; qLabel.Next; end; ScaleSendPluToMassa(COMPORT,StrToInt(qScale.FieldByName('ADDRESSWEIGH').AsString),DataSet,True); qScale.Next; end; qLabel.Close; qLabel.Free; qScale.Close; qScale.Free; qPlu.Close; qPlu.Free; slScale.Free; end; begin ListId := VarToStr(frVariables['InsertRecordList']); if StrLeft(ListId,1) = ',' then ListId := Substr(ListId,2,Length(ListId)); if StrRight(ListId,1) = ',' then ListId := Substr(ListId,1,Length(ListId)-1); if Empty(ListId) then begin ShowWarning('Нет отмеченных позиций !'); Exit; end; ReportName := VarToStr(frVariables['ReportName']); ReportName := 'Экспорт на весы из картотеки'; f := TcsFormDialog.Create(nil); f.btnOk.Enabled := False; f.Caption := ReportName; f.Width := 350; f.Height := 100; f.PnlTop.Visible := False; f.btnOk.Caption := 'Старт'; if ReportName = 'Экспорт на весы из документа' then TableName:='DOC' else if ReportName = 'Экспорт на весы из картотеки' then TableName := 'LABEL' else if (ReportName = 'Экспорт на весы из акта переоценки') then TableName := '' else if ReportName = 'Экспорт на весы из расп.на изменение цены' then TableName := 'DOCPRICEROW' else if ReportName = 'Экспорт на весы по документам' then TableName := 'MAIN'; if TableName <> '' then f.BtnOk.Enabled := True; if f.ShowModal = mrOk then begin ExportPlu; end; f.Free; end. end.