Hola les adjunto un progama que funciona bien pero tuve que agregar una base de datos y me da un problema , les adjunto el c贸digo y luego sigo con la explicaci贸n del problema ...
FUNCTION BrwClient
LOCAL oLbx ///
LOCAL z := 0
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)
[color=#804040] if !pasaje("hasedro");cldata(aObj);return nil;endif
DATABASE oHasedro
oHasedro:setorder(1)
aadd(aObj,oHasedro)[/color]
[color=#800040] IF !PASAJE("MAECLIE");cldata(aObj);return nil;ENDIF
DATABASE oMae
aadd(aObj,oMae)
oMae:setorder(2)[/color]
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)
// Varios variables locales
DEFAULT lNuevo := .F.
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,oMae)
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.)
[color=#800040] 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 [/color]
sysrefresh()
return nil
/*************************************************************************/
static function fsedron(oBrw,oHasedro,nclia)
local aProd := bprodu()
local oDatasedro:= oclone(oHasedro)
if empty(aProd)
return .f.
endif
oDatasedro:activate()
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
/*************************************************************************/
[size=150]static function borro(oBrw,oHasedro,oData,oMae)[/size]
if reviso(oHasedro)
oHasedro:delete()
oHasedro:unlock()
endif
oBrw:Gotop()
oBrw:Refresh()
sysrefresh()
return nil