El problema es que tu procedimiento LlenarEtiqueta utiliza variables globales
Código Delphi
[-]
procedure llenaretiqueta(subtotal: Currency);
begin
subtotal := datos.sqcalcularcoti.FieldByName('totalcoti').AsCurrency;
formeditarcot.etsubtotal.Caption := FormatCurr('#0,.00', subtotal);
iva := (subtotal * 0.12);
formeditarcot.etiva.Caption := FormatCurr('#0,.00', iva);
total := (subtotal + iva);
formeditarcot.ettotal.Caption := FormatCurr('#0,.00', total);
actualizarmontos(documentonro, total, iva, subtotal);
end;
Primero que nada señalar que hay algo extraño en tu procedimiento, y es que recibe un parametro subtotal el cual no utilizas para nada dentro de tu procedimiento. Osea, la primer linea lo que hace es asignar un valor a subtotal.
Yo diria que elimines dicho parametro y utilices una variable local, asi
Código Delphi
[-]procedure llenaretiqueta;
var
subtotal: Currency;
begin
subtotal := datos.sqcalcularcoti.FieldByName('totalcoti').AsCurrency;
end;
Las que subraye son variables globales. A veces suele ser confuso el tema de las globales porque es dificil determinar exactamente sobre que form "esta trabajando el procedimiento"
Una alternativa mejor es incluir el procedimiento como
metodo dentro del form sobre el cual queres que trabaje:
Código Delphi
[-]
unit Unit1;
interface
uses
...
type
TForm1 = class(TForm)
public
procedure llenaretiqueta(subtotal: Currency);
end;
implementation
...
procedure TForm1.llenaretiqueta(subtotal: Currency);
begin
formeditarcot.ettotal.Caption := FormatCurr('#0,.00', total);
ettotal.Caption := FormatCurr('#0,.00', total);
end;
Entonces ahora la forma de invocar al codigo cambia un poco porque mas que un "procedimiento suelto" lo que necesitas es una variable TForm1 (en mi ejemplo, en tu caso es el nombre que tiene tu clase Form) y luego invocar a ese procedimiento llenarEtiqueta. Es similar a como invocas a ShowModal, por ejemplo:
Código Delphi
[-]
var
Form1: TForm1;
begin
Form1 := TForm1.Create(nil); try
Form1.LlenarEtiqueta(0);
Form1.ShowModal; Form1.LlenarEtiqueta(123); finally
Form1.Free; end;
end;
Lo importante es que entiendas sobre que elemento estas trabajando:
Código Delphi
[-]formeditarcot.ettotal.Caption := lo que sea
Esa sentencia de codigo esta actualizando el valor del caption de un (edit o label asumo) llamado ettotal, pero sobre el form que es referenciado por la variable formeditarcot
----
En realidad tu problema es mas de conceptos porque estas programando mas de forma procedimental (o pascal clasico) y no orientado a objetos.. y este tipo de cosas es chocante
Creo que lo mas adecuado es que leas algo de material relacionado a programacion orientada a objetos. Un muy buen punto de partida es el libro
La Cara Oculta de Delphi 6
Este hilo recopila algunos links a recursos para iniciados en Delphi