Форум: "Начинающим";
Текущий архив: 2007.12.30;
Скачать: [xml.tar.bz2];
ВнизРабота с записями Найти похожие ветки
← →
allucard (2007-12-04 10:08) [0]Доброго утра всем.
Вопрос:
Есть запись (record) у которой есть поля:type
TMagazin = record
kassa1: integer;
kassa2: integer;
kassa3: integer;
summa: integer;
end;
Как сделать так чтобы при добавлении (или вычитании) с одной из касс автоматически перещитывалась сумма?
(чтобы не перещитывать вручную)
т.е.
например:
kassa1=3;
kassa2=1;
kassa3=2;
summa=5;
kassa1 := kassa1+2;
а сумма сама пересчиталась и была равна 7.
p.s. знаю что на c++ visual studio есть возможность переопределения, как это сделать на дельфи?
Спасибо.
← →
Думкин © (2007-12-04 10:15) [1]В Д7 и не в классе - никак.
← →
allucard (2007-12-04 10:31) [2]Ну, пусть в классе, только как?
type
TMagazin = class;
private
kassa1: integer;
kassa2: integer;
kassa3: integer;
summa: integer;
public
{ Public declarations }
end;
← →
Dennis I. Komarov © (2007-12-04 10:35) [3]> [2] allucard (04.12.07 10:31)
И.......
Это все?
Посмотри как пишутся классы
← →
{RASkov} © (2007-12-04 10:41) [4]> [0] allucard (04.12.07 10:08)
Сделать процедуры типа:procedure AddInKassa(var m: TMagazin; const NK: Byte; const Value: Integer);
begin
with m do begin
case NK of
1: kassa1:=kassa1+Value;
......
end;
summa:=summa+Value;
end;
end;
где m - магазин, NK - номер кассы для операции, Value - значение.....
Вот в таком плане можно.... аналогично вычитание....если нужно)
Но если хочется "нормальной атоматизации", то лучше посмотреть в сторону классов и их методов...
> [2] allucard (04.12.07 10:31)
А немного подумать)
← →
Dennis I. Komarov © (2007-12-04 10:43) [5]TAny=class(TComponent)
private
FKassa1: Integer;
FKassa2: Integer;
FKassa3: Integer;
FSumma: Integer;
procedure SetXML(const Value: TXMLDocument);
protected
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property Kassa1: Integer read FKassa1 write SetKassa1;
property Kassa2: Integer read FKassa2 write SetKassa2;
property Kassa3: Integer read FKassa3 write SetKassa3;
property Summa: Integer read FSumma;
end;
....
procedure SetKassaX
begin
//Тут пересчет суммы
end;
Кажеться вот так
Писал в клиенте, если где что навалял - не бить :)
← →
Думкин © (2007-12-04 10:43) [6]> allucard (04.12.07 10:31) [2]
С помощью свойств. Причем на выбор:TMagazin = class
private
kassa1: integer;
kassa2: integer;
kassa3: integer;
public
function summa: integer;
///Доступ к кассам и т.п
end;
function TMagazin.summa: integer;
begin
Result := kassa1 + kassa2 + kassa3
end;
Или так:TMagazin = class
private
fkassa1: integer;
fkassa2: integer;
fkassa3: integer;
fsumma : integer;
procedure setkassa1(const Value: integer);
public
property kassa1 : integer read fkassa1 write setkassa1;
///Доступ к кассам и т.п
end;
procedure TMagazin.setkassa1(const Value: integer);
begin
fsumma := fsumma-fkassa1+Value;
fkassa1 := Value;
end;
← →
sniknik © (2007-12-04 10:44) [7]вариант
type
TMagazin = class;
private
function GetSumma: integer;
public
kassa1: integer;
kassa2: integer;
kassa3: integer;
property summa: integer read GetSumma;
end;
function TMagazin.GetSumma: integer;
begin
result:= kassa1 + kassa2 + kassa3;
end;
← →
Думкин © (2007-12-04 10:45) [8]
> function summa: integer;property summ : integer read getsumm
;
← →
Dennis I. Komarov © (2007-12-04 10:46) [9]> procedure SetXML(const Value: TXMLDocument);
Это убрать, случайно затесалась :)
← →
Skyle © (2007-12-04 10:47) [10]Есть несколько вариантов разной степени извращённости
1.type
TMagazin = record
Kassa1 : Integer;
Kassa2 : Integer;
...
end;
function MyMagazinSumma (const AMagazin : TMagazin) : Integer;
begin
with AMagazin do
Result := Kassa1 + Kassa2 + ....;
end;
2.type
TMagazin = class
private
FKassa1 : Integer;
FKassa2 : Integer;
function GetSumma : Integer;
public
property Kassa1 : Integer read FKassa1 write FKassa1;
property Kassa1 : Integer read FKassa1 write FKassa1;
property Summa : Integer read GetSumma;
end;
function TMagazin.GetSumma : Integer;
begin
Result := FKassa1 + FKassa2 + ....;
end;
Можно и ещё придумать. Зависит от особенностей использования.
← →
allucard (2007-12-04 10:54) [11]Спасибо.
Сейчас попробую.
← →
allucard (2007-12-04 11:03) [12]
> Dennis I. Komarov © (04.12.07 10:43) [5]
>
> TAny=class(TComponent)
а что существенного мне даст сделать свой компонент наследником TComponent, для моих примитивных целей?)
← →
Anatoly Podgoretsky © (2007-12-04 11:05) [13]summa поле расчетное, поэтому оно физически не нужно и не нужно делать перерасчеты соответственно.
Сделать только три приватных поля и четыре контролируемых свойства. Обязательно запрети прямую запись в kassaX
← →
Skyle © (2007-12-04 11:05) [14]
> allucard (04.12.07 11:03) [12]
Судя по наличию SetXML это была какая-то домашняя заготовка. Можно не обращать внимания.
← →
sniknik © (2007-12-04 11:07) [15]> Можно и ещё придумать. Зависит от особенностей использования.
лучше не придумывать... т.к. конкретно вот эта особенность состоит, имхо, в написании замены базе/таблице.
товарищ не разобрался с готовым и решил что написать свое проще. еще раз ИМХО.
← →
Dennis I. Komarov © (2007-12-04 11:12) [16]> [14] Skyle © (04.12.07 11:05)
Совершенно правильно, выдрал из первого попавшегося, не все исправил :)
> [12] allucard (04.12.07 11:03)
Забей. Я просто показал, что [2] этого мало :)
← →
allucard (2007-12-04 12:47) [17]
Решил всё таки по своему.
Через процедурные типы в записи:
type
TFuncInt = function: integer;
TMagazin = record
kassa1: integer;
kassa2: integer;
kassa3: integer;
summa: TFuncInt;
end;
var Magazin: TMagazin;
function summa: integer;
begin
result := kassa1+kassa2+kassa3;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Magazin.Summa := Summa;
end;
Всем спасибо.
← →
Dennis I. Komarov © (2007-12-04 12:53) [18]А ведь этот софт будет в каком-то магазине :(
← →
allucard (2007-12-04 12:54) [19]:)
← →
allucard (2007-12-04 12:56) [20]главное работает ;)
← →
Anatoly Podgoretsky © (2007-12-04 12:58) [21]> allucard (04.12.2007 12:56:20) [20]
Неправда - это не главное.
Главное, что бы правильно работало, а этот вариант не гарантирует.
Смело можно поменять любую кассу в обход.
Магазин не должен допускать таких вольностей.
← →
sniknik © (2007-12-04 13:00) [22]> Решил всё таки по своему.
пусть через задницу, но свое родное... молодца!
хотя, приведенный код вобще то не рабочий (область видимости не та)... что оставляет надежду на то, что ты воспользовался всетаки какимнибудь из приведенных выше вариантов но постеснялся в этом признаться.
← →
Dennis I. Komarov © (2007-12-04 13:01) [23]> [21] Anatoly Podgoretsky © (04.12.07 12:58)
Магазин не должен допускать таких программистов, т.к. ИМХО - это уже коммерческий софт. И потери могут быть гораздо больше, чем такая экономия.
← →
allucard (2007-12-04 13:49) [24]
> Anatoly Podgoretsky © (04.12.07 12:58) [21]
Я до такого уровня ещё не дошёл.
И понимаю необходимо использовать классы и данные по кассам держать в секции private.
Вы это имели ввмду?
← →
Ega23 © (2007-12-04 13:51) [25]
> Вы это имели ввмду?
Данные по кассам надо держать в сейфе.
← →
Anatoly Podgoretsky © (2007-12-04 14:03) [26]> allucard (04.12.2007 13:49:24) [24]
Тебе достаточно привели примеров, осталось только реализовать.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.12.30;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.008 c