Hromadná změna prodejních cen |
Top Previous Next |
Seznam témat:
Skript pro hromadnou změnu prodejních cen. Nutná asociace skriptu k browseru skladových položek.
Skript se nejprve zeptá na procento navýšení ceny. Pak se vezmou všechny označené záznamy a u všech změní hodnota ve sloupci prodejní cena o zvolené procento (bez DPH i s DPH). Pokud se narazí na nulovou cenu, zobrazí název skladové položky a poslední nákupní cena a zeptá se uživatele na novou prodejní cenu. Všechny provedené změny se logují do jednoduchého reportu.
{ ************************************************* Skript pro hromadnou změnu prodejní ceny (nutná asociace s browserem skladových položek) ************************************************* }
//pomocné funkce function DejNakupCenu(KodMat: string): double; var V: Variant; begin V := Query('select first i.nakupcena '+ 'from DBA.osklprijemit as i, DBA.udokhd as u, DBA.osklprijemhd as h '+ 'where '+ 'i.material_id = :kodmat and '+ 'i.zruseno = 0 and i.druhdokl = 0 and i.storno = 0 and i.prevedeno = 0 and i.mnoz > i.mnozstor and i.nakupcena > 0 and '+ 'u.obd = i.obd_id and u.age = i.age_id and u.rada = i.rada_id and u.id_dokl = i.dokl_id and '+ 'h.obd_id = i.obd_id and h.age_id = i.age_id and h.rada_id = i.rada_id and h.dokl_id = i.dokl_id and h.druhdokl = i.druhdokl '+ 'order by u.datprip desc,i.id_poradi desc', [KodMat]); if V = Null then Result := 0 //artikl není v příjemkách else Result := V; end;
function ZeptejSeNaCenu(NazevMat: string; var Cena: double): Boolean; begin Result := InputBox('Nulová cena', Format('Artikl (%s) má nulovou prodejní cenu. Zvolte novou cenu na základě poslední nákupní ceny.', [NazevMat]), Cena); end;
function DejSazbuDPH(KodDph: integer): integer; begin Result := Query('select o_getsazbuDPH(:dph, null, null, null)', [KodDph]); end;
//vlastní skript var Qry: TQuery; KodDph: integer; KodMat,NazevMat: string; Proc: double; PrCena,PrCenasDPH: double; PrCenaNew,PrCenasDPHNew: double; Report: TProgressLog; begin //zeptej se na procento navýšení if not InputBox('Změna prodejních cen', 'Navýšení ceny [%]', Proc) then Exit;
Report := TProgressLog.Create('Změna prodejních cen', 'Probíhá změna prodejních cen'); try Report.Write('Akce zahájena.'); Report.Write('Kód; Název; Původní cena (bez DPH); Nová cena (bez DPH)'); Report.Write('-------------------------------------------------------');
//otevři dotaz nad množinou vybraných artiklů (#selrows) Qry := TQuery.Create(nil); try Qry.DatabaseName := DefaultDatabaseName; Qry.SQL.Add('select id_material, nazev, prcena, prcenasdph, dph from #selrows'); Qry.Open; while not Qry.Eof do begin //získej data ze záznamu KodMat := Qry.Fields[0].AsString; NazevMat := Qry.Fields[1].AsString; PrCena := Qry.Fields[2].AsFloat; PrCenasDPH := Qry.Fields[3].AsFloat; KodDph := Qry.Fields[4].AsInteger;
//pokud je prod. cena nulová, nabídni poslední nákupní cenu a zeptej se na prod. cenu if PrCena = 0 then begin PrCenaNew := DejNakupCenu(KodMat); if not ZeptejSeNaCenu(NazevMat, PrCenaNew) then Exit; PrCenasDPHNew := PrCenaNew*(1+DejSazbuDPH(KodDph)/100); end else begin //jinak přepočítej cenu PrCenaNew := PrCena*(1+Proc/100); PrCenasDPHNew := PrCenasDPH*(1+Proc/100); end;
//aktualizuj cenu v databázi pro daný artikl ExecSQL('update dba.omater set prcena=:prcena, prcenasdph=:prcenasdph where id_material=:kodmat', [PrCenaNew, PrCenasDPHNew, KodMat]);
Report.Write(Format('%s; %s; %n; %n', [KodMat, NazevMat, PrCena, PrCenaNew]));
//posuň se na další vybraný záznam Qry.Next; end; finally Qry.Free; end; finally Report.Write('-------------------------------------------------------'); Report.Write('Akce dokončena.'); Report.Finish; Report.Free; end;
//refresh browseru Browser.DoCommand(BrowserForm, cmRefresh); end.
Související témata |