// скрипт сканирует файл grls2013.xls (реестр цен) и расставляет МНН во всех товарах, где совпали "торговое наименование" реестра  и начало наименования в нашем справочнике

// поля в исходном справочнике
const
  FieldMNN = 'МНН';
  FieldTorgName = 'Торговое наименование';
  //FieldTorgName = 'Торговое наименование лекарстве';

  MissStrings = 1; // пропустить строк. Если не нужно пропускать, то указать 0  (автоматический пропуск пустых) или -1 -ничего не пропускать

var
  CDS :TClientdataset;
  TAble :TTable;

  FName :string;
  strval :string;

  changedcnt :integer=0;
begin

  with TOpenDialog.create(selfscript) do
  try
    title := 'Выберите сканируемый файл';
    if not execute then exit;

    fname := Filename;
    if fname = '' then exit;
  finally
    free
  end;

  cds := tclientdataset.create(selfscript);
  try
    table := ttable.create(selfscript);

    table.tablename := 'tovar';
    table.databasename := 'dbkassa';
    table.open;
    table.indexfieldnames := 'name';

    with tmywait.create1('Идет перенос данных',selfscript) do
    try

      advancedtext := 'Открываем таблицы';

      ReadXLS(cds,FName,false,true,MissStrings);

      if cds.findfield(fieldmnn)=nil
      then raiseexception('Поле "'+FieldMNN+'" не найдено в полученной таблице');

      if cds.findfield(fieldTorgName)=nil
      then raiseexception('Поле "'+FieldTorgName+'" не найдено в полученной таблице');

      progressbarmax := cds.recordcount;

      cds.indexfieldnames := fieldtorgname;
      cds.first;

      advancedtext := 'Изменение данных в справочнике товаров';

      while not cds.eof do begin

          {
          BDEExecSQL('update tovar set intername = :nm where upper(name) like :nm1',[
             cds.fieldbyname(FieldMNN).asstring,
             ansiuppercase(cds.fieldbyname(FieldTorgName).asstring)+'%',
             ],table.databasename);
          }



        if (length(cds.fieldbyname(fieldmnn).asstring)>2) // бывает, что мнн не указан, либо прочерки какие-нибудь стоят
           and (cds.fieldbyname(fieldmnn).asstring<>'Нет')
           and (cds.fieldbyname(fieldmnn).asstring<>'_____')
        then begin
          strval := ansiuppercase(cds.fieldbyname(FieldTorgName).asstring);

          if not table.active
          then begin
            table.open;
            table.indexfieldnames := 'name';
          end;

          table.first;
          table.findnearest([strval]);
          while not table.eof and (pos(strval,ansiuppercase(table.fieldbyname('name').asstring))=1) do
          begin
            if trim(table.fieldbyname('intername').asstring) <>  trim(cds.fieldbyname(fieldmnn).asstring)
            then begin

              {
              createhinti('Поиск: '+strval+': '+cds.fieldbyname(fieldmnn).asstring+#13+
                          'Нашли: '+table.fieldbyname('name').asstring+': '+table.fieldbyname('intername').asstring,'',100);
              //createhinti(asstring(table.fieldbyname('intername').asstring = cds.fieldbyname(fieldmnn).asstring),'',100);
              if changedcnt>30 then exit;
              }



              table.edit;
              table.fieldbyname('intername').asstring := trim(cds.fieldbyname(fieldmnn).asstring);
              table.post;
              inc(changedcnt);
              advancedtext := 'Изменение данных в справочнике товаров, заменено '+inttostr(changedcnt)+' строк';
            end;
            table.next;
            application.processmessages;
          end;
        end;

        cds.next;
        incprogress;
        application.processmessages;

      end;

      CreateHintI('Процедура завершена'+#13+'Заменено '+inttostr(changedcnt)+' строк','Замена торговых наименований',1000);



    finally
      free
    end;


  finally
    cds.free;
  end;

end.
