// экспорт solaris-solaris из офиса с выбором аптечного пункта из диалога
// STDInOutCreateFile(Storage :integer; const DirName :string; FromDate :TDateTime; ToDate :TDateTime)

// Здесь, если не выбрать склад, то раздастся всем складам.
// Также, экспорт происходит по всем накладным, которые не помечены как чеки в ТЗ

const WithoutDialogs = false;
const DefaultDays = 0;

const OutputDir = 'c:\mail\out\';
      Storage  = 0; // Склад, информация по которому передается. Если 0, то будет осуществлен запрос

var Form :TForm;
    Lab,Lab2 :TLabel;
    Lab1 :TLabel;
    EditDate :TDateTimePicker;
    EditDate1 :TdateTimePicker;
    Bevel,Bevel1 :Tbevel;
    Button1 :Tbutton;
    Button2 :tButton;
    ButtonAg :tButton;
    Edit :TEdit;

    IDStorage :integer;

    OutReasonsList :string;
    Table :TTable;

    Storages :array of integer;

    i :integer;

const
    consteditstoragename = 'storagename';

procedure Button1Click(Sender: TButton);
var NM :string;
    i :integer;
begin
  IDStorage := SElectOrg(atStorage);
  if IDStorage <> 0 then begin
    if vartostr(GetOrgParamValue(IDStorage,'CODE')) = ''
    then begin
      idStorage := 0;
      CreateHIntW('Данный контрагент не ассоциирован с почтовым каталогом,'+#13+
       ' необходимо данному контрагенту в поле "альтернативный код"'+#13+
       'вписать имя почтового подкаталога');
    end
    else begin
       nm := vartostr(GetOrgParamVAlue(idStorage,'NAME'));
       { не работает
       for i := 0 to Form.ComponentCount-1 do begin
         if FOrm.Components[i].name = consteditstoragename
         then begin
           TEdit(form.COmponents[i]).text := nm;
         end;
       end;
       }
       Edit.text := nm;
    end;

  end;

end;


function MaxVAlue (VAl1,Val2 :integer) :integer;
begin
  if VAl1 >= Val2 then result := VAl1
  else Result := Val2;
end;


begin
  IDStorage := Storage;

  setlength(storages,0);

  OutReasonsList := '';

  table := ttable.create(nil);
  try
    table.databasename := 'dbkassa';
    table.tablename := 'osnov';
    table.filter := 'ISCASH <> 1';
    Table.filtered := true;
    table.open;

    table.first;
    while not table.eof do
    begin
      if outreasonsList>'' then OutReasonsList := OutReasonsList + ',';
      OutReasonsList := OutReasonsList + QuotedStr(Table.fieldbyname('id').asstring);
      table.next;
    end;
  finally
    table.free
  end;

  //bvmessage(outreasonslist);
  //exit;




  Form := Tform.create(nil);
  try
    begin // создаем форму

      Form.Caption := 'Экспорт данных';
      Form.BorderStyle := bsDialog;
      Form.Width := 300;
      Form.Height := 200;
      Form.position := poScreenCenter;
      Form.Font.name := 'Tahoma';
      Form.ShowHint := true;


      Bevel := tbevel.create(form);
      Bevel.Shape := bsTopLine;
      Bevel.Height := 4;
      Bevel.align := alTop;
      bevel.parent := Form;


      Lab := TLabel.create(form); // удалять не нужно, Form его owner, сам удалит
      Lab.caption := 'Укажите начальную дату прих.накладных:';
      //Lab.font.size := 10;
      Lab.Top := 30;
      Lab.Left := 30; //(Form.clientWidth - Lab.Width) div 2;
      Lab.parent := Form;


      Lab1 := TLabel.create(form); // удалять не нужно, Form его owner, сам удалит
      Lab1.caption := 'Укажите конечную дату:';
      //Lab.font.size := 10;
      Lab1.Top := Lab.Top + Lab.height + 20;
      Lab1.Left := 30; //(Form.clientWidth - Lab.Width) div 2;
      Lab1.parent := Form;


      EditDate := TDateTimePicker.create(Form);
      EditDate.Top := Lab.Top - (EditDAte.height - Lab.Height) div 2  ; //+Lab.Height + 10;
      EditDate.width := 100;
      EditDate.Left := Lab.LEft + maxvalue(Lab.Width,lab1.width) + 20; // (Form.clientWidth - Editdate.width) div 2;
      Editdate.parent := Form;

      Form.clientWidth := EditDate.Left + EditDate.width + 30;


      EditDate1 := TDateTimePicker.create(Form);
      EditDate1.Top := Lab1.Top - (EditDAte1.height - Lab1.Height) div 2  ; //+Lab.Height + 10;
      EditDate1.width := 100;
      EditDate1.Left := EditDate.LEft; // (Form.clientWidth - Editdate.width) div 2;
      Editdate1.parent := Form;
      Editdate1.date := date;



      Lab2 := TLabel.create(form); // удалять не нужно, Form его owner, сам удалит
      Lab2.caption := 'Склад:';
      Lab2.Top := Lab1.Top + Lab1.Height + 20;
      Lab2.Left := Lab.left; //(Form.clientWidth - Lab.Width) div 2;
      Lab2.parent := Form;

      Edit := TEdit.create(Form);
      Edit.name := consteditstoragename;

      if idstorage<>0
      then Edit.Text := asstring(BDEQueryValue('select name from agents where id = :id',[idstorage]))
      else Edit.text := '';


      Edit.left := Lab2.Left + Lab2.Width + 10;
      Edit.Top := Lab2.Top - (Edit.height - Lab2.Height) div 2  ; //+Lab.Height + 10;
      Edit.Width := EditDate.Left + EditDAte.Width - Edit.Left;
      Edit.Enabled := false;
      Edit.Parent := Form;

      ButtonAg := TButton.create(Form);
      ButtonAg.Caption := 'Выбрать';
      ButtonAg.top := Edit.Top + Edit.Height +8 ;
      //ButtonAg.height := Edit.height;
      ButtonAg.Width := 60;
      ButtonAg.Hint := 'Выбрать из списка';
      ButtonAg.Left := EditDate.Left + EditDAte.Width - ButtonAg.Width;
      //ButtonAg.Width := EditDate.Left + EditDAte.Width - ButtonAg.Left;
      ButtonAg.onClick := 'Button1Click';

      ButtonAg.Parent := Form;

      ButtonAg.enabled := idstorage = 0;

      Bevel1 := TBevel.create(Form);
      Bevel1.shape := bsTopLine;
      Bevel1.Height := 4;
      Bevel1.Width := Form.clientWidth - 30;
      Bevel1.Left := (Form.ClientWidth - Bevel1.Width) div 2;
      Bevel1.Top := ButtonAg.Top + ButtonAg.Height + 20;
      Bevel1.parent := Form;

      Button1 := Tbutton.create(Form);
      Button1.Caption := 'Старт';
      Button1.Width := 70;
      Button1.ModalResult := mrOk;
      Button1.Top := Bevel1.Top + 13;
      button1.Default := true;
      Button1.Parent := Form;


      Button2 := Tbutton.create(Form);
      Button2.Caption := 'Отмена';
      Button2.Width := 70;
      Button2.ModalResult := mrCancel;
      Button2.Top := Button1.top;
      Button2.left := Form.ClientWidth - Button2.Width - 35;
      Button2.Cancel := true;
      Button2.Parent := Form;

      Button1.left := Button2.left - Button1.width - 5;


      Form.clientHeight := Button1.Top + Button1.height + 15;

    end;

    EditDate.date := date - DefaultDays;

    while withoutdialogs or (Form.ShowModal = mrOk)
    do begin
      if (IDStorage = 0)
      then begin
        if not withoutdialogs and (getconfirm('Вы не указали ни одного склада.'+#13+'Осуществить передачу по всем складам?') <> mrOk)
        then continue;
      end;

      if idStorage <> 0
      then begin
        setlength(Storages,1);
        Storages[0] := idStorage;
      end
      else begin
        Table := TTAble.create(nil);
        try
          table.databasename := 'dbkassa';
          table.tablename := 'agents';
          table.open;
          table.first;
          table.filter := 'issklad = 1';
          table.filtered := true;
          table.first;
          while not table.eof do begin
            if table.fieldbyname('code').asstring>''
            then begin
              setlength(storages,length(storages)+1);
              storages[length(storages)-1] := table.fieldbyname('id').asinteger;
            end;
            table.next;
          end;


        finally
          table.free;
        end;
      end;

      (*
      for i := 0 to length(storages)-1 do
      begin
        createhint('Экспорт в склад № '+inttostr(storages[i]));
      end;
      *)

      forcedirectories(OutputDir);

      for i := 0 to length(storages)-1 do
      begin
        //createhint('Экспорт в склад № '+inttostr(storages[i]));
        STDInOutCreateFile(storages[i],
                           includetrailingpathdelimiter(outputdir)+ vartostr(GetOrgParamValue(Storages[i],'CODE')),
                           Editdate.date,
                           EditDate1.date,
                           true,
                           false,
                           'DEFAULT',
                           OutReasonsList);
        //STDInOutCreateFile(Storage :integer; const DirName :string; FromDate :TDateTime; ToDate :TDateTime; CheckRef :boolean = true; CheckRefGetAll :Boolean = false; InReasons :string = 'DEFAULT'; OutReasons :string = 'DEFAULT')
        createhint('Экспорт в склад № '+inttostr(storages[i])+' завершен');
      end;
      //createhint('Операция передачи завершена');
      break;

    end;
  finally
    Form.free;
  end;


end.
