Disculpen el anterior mensaje pero quería remarcar las partes que me interesaban que vieran. Les envío casi todo el código sin la variables locales, y algunas asignaciones.
Tuve que agregar en el folder uno nuevo que esta remarcado en azul. En él al llamar a la función fsedro, selecciono un producto y me lo agrega a la base oHasedro, y todo bien , pero hete aquí que cuando quiero borrar un producto, me lo borra pero me agrega un nuevo registro duplicado al archivo maestro de clientes Maeclie(el cliente en cuestion) es decir dos registros idénticos (es lo que está en negritas).
Y la verdad no le encuentro la vuelta.
Espero puedan orientarme
FUNCTION BrwClient
if !pasaje("datos");return nil;endif
DATABASE oMemos
aadd(aObj,oMemos)
oMemos:setorder(1)
IF !PASAJE("DOMCLI");return nil;ENDIF
DATABASE oDomcli
aadd(aObj,oDomcli)
oDomcli:setorder(1)
IF !PASAJE("Clitrans");cldata(aObj);return nil;ENDIF
DATABASE oClitrans
oClitrans:setorder(1)
aadd(aObj,oClitrans)
if !pasaje("hasedro");cldata(aObj);return nil;endif
DATABASE oHasedro
oHasedro:setorder(1)
aadd(aObj,oHasedro)
IF !PASAJE("MAECLIE");cldata(aObj);return nil;ENDIF
DATABASE oMae
aadd(aObj,oMae)
oMae:setorder(2)
if nloguin # 10
oMae:setfilter( {|| (oMae:cAlias)->vendedor = nloguin} )
endif
oMae:gotop()
oMae:beof:={||nil}
aadd(aObj,oMae)
finarch(aObj)
define icon surge resource "icomega"
DEFINE DIALOG oDlg RESOURCE "DIALOG_1" icon surge
oDlg:cCaption := "Clientes"
oDlg:bgotfocus := {|| oMae:activate()}
REDEFINE SPLITTER oSplit[1] id 110 COLOR rgb(234,234,234) of odlg _3DLOOK
REDEFINE SPLITTER oSplit[2] id 111 COLOR rgb(234,234,234) of odlg _3DLOOK
REDEFINE LISTBOX olbx;
FIELDS STR(( oMae:cAlias)->NCLI ),; // Campos que contendr
((oMae:cAlias)->NAPE),; // el TBrowse.
(oMae:cAlias)->Domi,;
(oMae:cAlias)->LOCA,;
(oMae:cAlias)->PCIA,;
(oMae:cAlias)->TELE,;
(oMae:cAlias)->CUIT,;
(oMae:cAlias)->IVA,;
(oMae:cAlias)->RUBRO,;
STR((oMae:cAlias)->VENDEDOR);
ON DBLCLICK CLIENTES(olbx,.f.,oMae,oMemos,oDomcli,oClitrans,oHasedro) ID 101 OF oDlg
oLbx:aheaders:= {"Código","Cliente", "Domicilio", "Localidad", "Provincia",;
"Telefono","Cuit","Iva","Rubro","Vendedor"}
oLbx:aColSizes := {60,210,190,190,190,160,90,100,180,60}
oLbx:bSkip = { | nRecs | oMae:Skipper( nRecs ) }
oLbx:nLineStyle := 3
oLbx:lAdjlastcol:= .F.
oLbx:nClrBackFocus := CLR_CYAN
oLbx:nClrForeFocus := CLR_WHITE
REDEFINE RADIO oRad VAR nOrden ID 108, 107, 112 OF oDlg;
ON CHANGE Orden(nOrden,oLbx,oMae,oMemos,oDomcli,oClitrans) // Al detectar un cambio se ejecutar la funci¢n
REDEFINE BTNBMP oNbut[1] id 102 of oDlg resource "btnagregar","btnagrega1" ACTION Clientes( oLbx, .T.,oMae,oMemos,oDomcli,oClitrans,oHasedro ) NOBORDER
REDEFINE BTNBMP oNbut[2] id 103 OF oDlg resource "btncambio","btncambi1" ACTION Clientes( oLbx, .F.,oMae,oMemos,oDomcli,oClitrans,oHasedro) NOBORDER
REDEFINE BTNBMP oNbut[3] id 104 OF oDlg resource "btnbusca","btnbusc1" ACTION Buscar( oLbx, nOrden,oMae,"cli",oMemos,oDomcli,oClitrans,oHasedro) NOBORDER
REDEFINE BTNBMP oNbut[4] id 105 of oDlg resource "btnborra","btnborr1" ACTION autorizo(oLbx,oMae,oMae:nape) NOBORDER
REDEFINE BTNBMP oNbut[5] id 106 OF oDlg resource "btnimpri","btnimpr1" ACTION (reporbase(oMae,ctitulo),olbx:refresh()) NOBORDER
REDEFINE BTNBMP oNbut[6] id 109 OF oDlg resource "btnsalir","btnsali1";
ACTION cierroalias(oMae:calias,oMae,oMemos,oDomcli,oClitrans),oDlg:End() NOBORDER
for z = 1 to len(oNbut)
oDlg:aControls[ z ]:ltransparent := .t.
next
ACTIVATE DIALOG oDlg CENTER NOWAIT VALID (olbx:end(), sysrefresh(),cldata(aObj),.t.)
RETURN( NIL )
/***************************************************************************************************************************/
function clientes(olbx,lnuevo,oMae,oMemos,oDomcli,oClitrans,oHasedro)
LOCAL oBrw
oData:=oClone(oMae)
oHasedro:setfilter()
oHasedro:setfilter({ || (oHasedro:cAlias)->ncli == oMae:ncli })
oHasedro:gotop()
IF lNuevo
iif(!empty(oLbx), orden(2,olbx,oMae),oMae:setorder(1))
oMae:gobottom()
nclia := oMae:ncli
oData:blank()
oData:ncli := nclia + 1
nvendedor := 0
iif(!empty(oLbx), orden(1,olbx,oData),oData:setorder(2))
oData:setorder(1)
titu:= "Nuevo Cliente"
pciaa := ""
else
oMemos:seek(odata:ncli)
if oMemos:found()
cDato := oMemos:informe
endif
oData:goto(nRecno)
oData:load()
if !empty(oData:tipoib)
cConvenio := aConvenio[oData:tipoib]
endif
cConiva := vercond(oData:constiva)
cCongan := vercond(oData:constgan)
cConmono := vercond(oData:constmono)
pciaa := oData:pcia
ivaa:= oData:iva
cPla := oData:plazo
titu := "Modificar Cliente"
nVendedor := oData:vendedor
ENDIF
DEFINE DIALOG oDlgcli RESOURCE "FOLD_CLI" ICON surge
REDEFINE FOLDER oFold id 101 of oDlgcli;
PROMPTS "General","Impuestos","Sedronar","Datos";
DIALOGS "fold_cli1", "fold_cli2","fold_cli4" , "fold_cli3";
oDlgCli:bgotfocus := {|| odata:activate()}
REDEFINE GET oNcli VAR oData:ncli id 106 of oFold:adialogs[1] update
REDEFINE GET oNape VAR oData:nape picture "@!" id 107 of oFold:adialogs[1] update valid CampoNoVacio(oData:nape)
REDEFINE GET oDomi VAR oData:domi id 108 of oFold:adialogs[1] update
REDEFINE GET oLoca VAR oData:loca id 109 of oFold:adialogs[1] update
REDEFINE GET oCpos VAR oData:cpos id 118 of oFold:adialogs[1] update
REDEFINE COMBOBOX oPcia VAR pciaa id 110 items apciaa of oFold:adialogs[1] update valid (oData:nropcia :=(ascan(apciaa, pciaa)-1) ,.t.)
REDEFINE GET oTele VAR oData:tele id 120 of oFold:adialogs[1] update
REDEFINE GET oCuit VAR oData:cuit picture "99-99999999-9" id 113 of oFold:adialogs[1] update VALID altacuit(oData,lnuevo,"maeclie", oDlgcli)
REDEFINE CHECKBOX oConsigna VAR oData:lconsigna id 112 of oFold:adialogs[1] update
REDEFINE GET oRubr VAR oData:rubro picture "@!" id 111 of oFold:adialogs[1] update
REDEFINE GET oVen VAR nvendedor id 117 of oFold:adialogs[1] update ;
VALID iif(oApp:nloguin = 10,.t.,(nohay(),nvendedor := oData:vendedor, oVen:refresh(),.T.))
REDEFINE COMBOBOX oCiva VAR ivaa id 116 items aivaa of oFold:adialogs[1] update valid (oData:ti := strzero(ascan(aIvaa,ivaa),2) ,.t.)
REDEFINE BUTTON ID 121 of oFold:adialogs[1] ACTION AGRTRAN(oData:ncli,oClitrans)
REDEFINE GET oAte VAR oData:ate picture "@!" id 128 of oFold:adialogs[1] update
REDEFINE BUTTON ID 127 of oFold:adialogs[1] ACTION NEWADRESS(oData:ncli,aPciaa,oDomcli)
REDEFINE GET oCos[1] VAR cConiva id 114 of oFold:adialogs[1] update
REDEFINE GET oCos[2] VAR cCongan id 115 of oFold:adialogs[1] update
REDEFINE GET oCos[3] VAR cConmono id 119 of oFold:adialogs[1] update
REDEFINE COMBOBOX oPla VAR cPla id 126 items aPlazos of oFold:adialogs[2] update
REDEFINE GET oPercibe VAR oData:percibe picture "@e 999.99" id 130 of oFold:adialogs[2] update
REDEFINE GET oRetiene VAR oData:retiene picture "@e 999.99" id 131 of oFold:adialogs[2] update
REDEFINE GET oSaldo VAR oData:saldo picture "@e 999,999.99" id 114 of oFold:adialogs[2] update
REDEFINE GET oProm VAR oData:promedio picture "@e 999.99" id 115 of oFold:adialogs[2] update
REDEFINE CHECKBOX oChex var oData:cobro id 103 of oFold:adialogs[2] update
REDEFINE CHECKBOX oCheIb VAR oData:Ingbruto id 124 of oFold:adialogs[2] update
REDEFINE CHECKBOX oChedol VAR oData:facdol id 125 of oFold:adialogs[2] update
REDEFINE CHECKBOX oCheblo VAR oData:remito id 112 of oFold:adialogs[2] update when (oApp:nloguin = 10)
REDEFINE CHECKBOX oChecam VAR oData:difcam id 132 of oFold:adialogs[2] update
REDEFINE CHECKBOX oCheibcap VAR oData:ibcapital id 133 of oFold:adialogs[2] update
REDEFINE COMBOBOX oPla VAR cConvenio id 141 items aConvenio of oFold:adialogs[2] update
REDEFINE GET oPercap VAR oData:percap picture "@e 999.99" id 104 of oFold:adialogs[2] update
REDEFINE GET oRetcap VAR oData:retcap picture "@e 999.99" id 105 of oFold:adialogs[2] update
REDEFINE GET oNroib VAR oData:nroibruto picture "xxxxxxxxxxxxxx" id 140 of oFold:adialogs[2] update
REDEFINE GET oCedr VAR oData:cedronar id 101 of oFold:adialogs[3] update
REDEFINE GET oVtocedro VAR oData:vtocedro picture "@!" id 102 of oFold:adialogs[3] update
REDEFINE GET oInv VAR oData:inv id 103 of oFold:adialogs[3] update
REDEFINE SPLITTER oSplit1 id 107 COLOR rgb(234,234,234) of oFold:adialogs[3] _3DLOOK
REDEFINE LISTBOX oBrw FIELDS STR(( oHasedro:cAlias)->NCLI,5 ), ( oHasedro:cAlias)->PRODUCTO ID 104 OF oFold:adialogs[3]
oBrw:aheaders:= {"Código","Producto"}
oBrw:aColSizes := {100,210}
oBrw:bSkip = { | nRecs | oHasedro:Skipper( nRecs ) }
oBrw:nLineStyle := 3
oBrw:lAdjlastcol:= .t.
oBrw:nClrBackFocus := CLR_CYAN
oBrw:nClrForeFocus := CLR_WHITE
REDEFINE BUTTON nbut[4] ID 105 of oFold:adialogs[3] ACTION fsedron(oBrw,oHasedro,oData:ncli)
REDEFINE BUTTON nbut[5] ID 106 of oFold:adialogs[3] ACTION borro(oBrw,oHasedro,oData)
REDEFINE GET oMem VAR cDato MEMO ID 101 of oFold:adialogs[4];
message "Datos varios del cliente" UPDATE;
MULTILINE
oMem:SetSel(0,0)
REDEFINE BUTTON nbut[1] ID 105 of oDlgcli ACTION(lSalvar := .T.,oDlgcli:End())
REDEFINE BUTTON nbut[2] ID 106 of oDlgcli ACTION(oDlgcli:End()) CANCEL
REDEFINE BUTTON nbut[3] ID 122 of oDlgcli when (iif(lnuevo,nbut[3]:disable(),""),.t.);
ACTION(ctacli(odata:ncli,odata:nape,.f.))
// REDEFINE BUTTON nbut[4] ID 123 of oDlgcli ACTION(MEMCLI(odata:ncli))
ACTIVATE DIALOG ODLGCLI CENTER ON INIT (oNcli:setfocus(),.f.)
IF lSalvar .AND. !EMPTY( odata:nape)
IF lnuevo
odata:append()
ENDIF
oData:tipoib := ascan(aConvenio,cConvenio)
oData:plazo := cPla
oData:vendedor := nvendedor
oData:pcia := pciaa
odata:iva := ivaa //debido a que utilizo una variable
if reviso(odata)
odata:save()
odata:commit()
odata:unlock()
endif
if !empty(cDato)
oMemos:seek(oData:ncli)
if !oMemos:found()
yapar(oMemos)
else
reviso(oMemos)
endif
oMemos:ncli := oData:ncli
oMemos:informe := cDato
oMemos:save()
oMemos:commit()
oMemos:unlock()
endif
iif(!empty(olbx),olbx:refresh(),.f.) // Repintamos el objeto ListBox
ENDIF
sysrefresh()
return nil
/*************************************************************************/
static function fsedron(oBrw,oHasedro,nclia)
local aProd := bprodu()
local oDatasedro:= oclone(oHasedro)
if empty(aProd)
return .f.
endif
if aProd[5] = "S"
oDatasedro:blank()
oDatasedro:ncli := nclia
oDatasedro:codigo := aProd[1]
oDatasedro:producto := aProd[2]
oDatasedro:append()
if reviso(oDatasedro)
oDatasedro:save()
oDatasedro:commit()
oDatasedro:unlock()
endif
oBrw:refresh()
else
msgstop("No pertenece al listado de Sedronar")
endif
sysrefresh()
return nil
/*************************************************************************/
static function borro(oBrw,oHasedro,oData)
if reviso(oHasedro)
oHasedro:delete()
oHasedro:unlock()
endif
oBrw:Gotop()
oBrw:Refresh()
sysrefresh()
return nil