21.12.07
Criando uma rotina customizada de autoincremento de ID´s no RM
Uma vamos chamar de qUpdAutoInc e a outra de qGetAutoInc. Estas queries, uma vai obter o valor da chave na tabela GAUTOINC e a outra gravar o novo valor lá.
Na query qGetAutoInc, vamos colocar a seguinte senteça:
SELECT VALAUTOINC FROM GAUTOINC
WHERE CODCOLIGADA = :CODCOLIGADA AND
CODSISTEMA = :CODSISTEMA AND CODAUTOINC = :CODAUTOINC
Esta sentença traz o valor atual do campo informado em CODAUTOINC (que na verdade é o nome do campo chave de uma tabela)
Na qUpdAutoInc, vamos colocar a sentença:
UPDATE GAUTOINC SET VALAUTOINC = :VALAUTOINC
WHERE CODCOLIGADA = :CODCOLIGADA AND
CODSISTEMA = :CODSISTEMA AND CODAUTOINC = :CODAUTOINC
Agora para você fazer o autoincremento, basta fazer:
function TDMFat.GenIDMov: integer;
begin
qGetAutoInc.ParamByName('CODCOLIGADA').AsInteger := CorporeRM.Coligada;
qGetAutoInc.ParamByName('CODSISTEMA').AsString := 'T';
qGetAutoInc.ParamByName('CODAUTOINC').AsString := 'IDMOV';
qGetAutoInc.Open;
Result := qGetAutoInc.fieldbyname('VALAUTOINC').AsInteger + 1;
qGetAutoInc.Close;
qUpdAutoInc.ParamByName('CODCOLIGADA').AsInteger := CorporeRM.Coligada;
qUpdAutoInc.ParamByName('CODSISTEMA').AsString := 'T';
qUpdAutoInc.ParamByName('CODAUTOINC').AsString := 'IDMOV';
qUpdAutoInc.ParamByName('VALAUTOINC').AsInteger := Result;
qUpdAutoInc.ExecSQL;
end;
No caso acima, esta rotina incrementa o campo IDMOV da Tabela TMOV do RM Nucleus. Muitos aqui vão me questionar porque eu não uso o Succ para incrementar o valor do campo. Eu explico: O uso de funções e procedimentos, só se torna conveniente quando a rotina é de complexidade considerável e que não é viável codificar diretamente na estrutura do programa. Para quem não sabe o que acontece com seu programa, quando ele esta sendo executado e encontra uma função o procedimento, ele para de executar, vai ser empilhado e então será executada a rotina (procedimento ou função) em questão. Então ficar usando em demasia, funções como Inc, Succ, dentre outras, irá promover uma relativa lentidão no seu sistema. Eu, particularmente, evito estas funções. Ao invés de usar Inc(i), eu prefiro usar i := i + 1
19.12.07
Parametrizando um projeto no RM Solum
Para resolvermos isto, eu criei um metodo baseado em um arquivo XML que pode ser perfeitamente importado para dentro de um ClientDataset e, de lá, lermos cada campo e inserir os dados conforme o valor do campo.
Passo 1) Crie o arquivo .XML com base no modelo abaixo:
sXMLHead := TempDir +
format('%d.xml',[iIDPrj]);
AssignFile(fXmlDataPacket, sXMLHead);
Rewrite(fXmlDataPacket);
WriteLn(fXmlDataPacket, '<?xml version="1.0" standalone="yes"?>');
WriteLn(fXmlDataPacket, '<DATAPACKET Version="2.0"><METADATA><FIELDS>');
WriteLn(fXmlDataPacket, '<FIELD attrname="BDIPRJSOBRETOTAL" fieldtype="i2"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="BDIPRJATIVO" fieldtype="i2"/><FIELD attrname="BDITRFATIVO" fieldtype="i2"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="BDIGRPISMATIVO" fieldtype="i2"/><FIELD
attrname="CONSIDERARQUANTOBRAS" fieldtype="i2"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="CONSIDERARCASASDEC" fieldtype="i2"/><FIELD
attrname="CASASDECQUANTIDADES" fieldtype="i2"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="CASASDECTAXAS" fieldtype="i2"/><FIELD
attrname="CASASDECMONETARIOS" fieldtype="i2"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="CASASDECPERCENTUAIS" fieldtype="i2"/><FIELD
attrname="CASASDECCOEFICIENTES" fieldtype="i2"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="CALCULARAOABRIRPRJ" fieldtype="i2"/><FIELD
attrname="EXIBIRVALORTRF" fieldtype="i2"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="EXIBIRVALORCMP" fieldtype="i2"/><FIELD
attrname="ACUMSERVMESMOCODCMP" fieldtype="i2"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="LEISOBRECUSTOUNITISM" fieldtype="i2"/><FIELD
attrname="DATAINICIOPDOS" fieldtype="dateTime"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="TIPOPDO" fieldtype="i2"/><FIELD attrname="NUMDIASPDO" fieldtype="i4"/><FIELD attrname="NUMPDOSCRONOG"
fieldtype="i4"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="CAMPOLIVRE1CNT" fieldtype="string" WIDTH="20"/><FIELD attrname="CAMPOLIVRE2CNT" fieldtype="string" WIDTH="20"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="MASCARATAREFA" fieldtype="string" WIDTH="60"/><FIELD attrname="MOEDASECUNDARIA" fieldtype="string" WIDTH="4"/><FIELD
attrname="NUCLEUSTIPOMOVREQ" fieldtype="string" WIDTH="10"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="DESCTAREFA" fieldtype="i2"/><FIELD attrname="CLIVRE1OBRA" fieldtype="string" WIDTH="20"/><FIELD attrname="CLIVRE2OBRA" fieldtype="string" WIDTH="20"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="CLIVRE3OBRA" fieldtype="string" WIDTH="20"/><FIELD attrname="CLIVRE4OBRA" fieldtype="string" WIDTH="20"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="CLIVREVALOR1OBRA" fieldtype="string" WIDTH="20"/><FIELD attrname="CLIVREVALOR2OBRA" fieldtype="string"
WIDTH="20"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="BDIPRJ" fieldtype="fixed" DECIMALS="4" WIDTH="32"/><FIELD attrname="FATORLEISOCIAL1" fieldtype="fixed" DECIMALS="4"
WIDTH="32"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="FATORLEISOCIAL2" fieldtype="fixed" DECIMALS="4"
WIDTH="32"/><FIELD attrname="CLIVREVALOR1PAR" fieldtype="fixed" DECIMALS="4" WIDTH="13"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="CLIVREVALOR2PAR" fieldtype="fixed" DECIMALS="4"
WIDTH="13"/><FIELD attrname="CLIVREVALOR3PAR" fieldtype="fixed" DECIMALS="4" WIDTH="13"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="CLIVREVALOR4PAR" fieldtype="fixed" DECIMALS="4"
WIDTH="13"/><FIELD attrname="CLIVREVALOR5PAR" fieldtype="fixed" DECIMALS="4" WIDTH="13"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="CLIVREVALOR6PAR" fieldtype="fixed" DECIMALS="4"
WIDTH="13"/><FIELD attrname="CLIVREVALOR7PAR" fieldtype="fixed" DECIMALS="4" WIDTH="13"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="CLIVREVALOR8PAR" fieldtype="fixed" DECIMALS="4"
WIDTH="13"/><FIELD attrname="CLIVREVALOR9PAR" fieldtype="fixed" DECIMALS="4" WIDTH="13"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="CLIVREVALOR1PARDESC" fieldtype="string" WIDTH="20"/><FIELD attrname="CLIVREVALOR2PARDESC" fieldtype="string"
WIDTH="20"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="CLIVREVALOR3PARDESC" fieldtype="string" WIDTH="20"/><FIELD attrname="CLIVREVALOR4PARDESC" fieldtype="string"
WIDTH="20"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="CLIVREVALOR5PARDESC" fieldtype="string" WIDTH="20"/><FIELD attrname="CLIVREVALOR6PARDESC" fieldtype="string"
WIDTH="20"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="CLIVREVALOR7PARDESC" fieldtype="string" WIDTH="20"/><FIELD attrname="CLIVREVALOR8PARDESC" fieldtype="string"
WIDTH="20"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="CLIVREVALOR9PARDESC" fieldtype="string" WIDTH="20"/><FIELD attrname="CLIVREVALOR1ISMDESC" fieldtype="string"
WIDTH="20"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="CLIVREVALOR2ISMDESC" fieldtype="string" WIDTH="20"/><FIELD attrname="CLIVREVALOR3ISMDESC" fieldtype="string"
WIDTH="20"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="CLIVREVALOR4ISMDESC" fieldtype="string" WIDTH="20"/><FIELD attrname="CLIVREVALOR5ISMDESC" fieldtype="string"
WIDTH="20"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="CLIVREVALOR6ISMDESC" fieldtype="string" WIDTH="20"/><FIELD attrname="CLIVREVALOR7ISMDESC" fieldtype="string"
WIDTH="20"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="CLIVREVALOR8ISMDESC" fieldtype="string" WIDTH="20"/><FIELD attrname="CLIVREVALOR9ISMDESC" fieldtype="string"
WIDTH="20"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="CASASDECESPECIAIS" fieldtype="i4"/><FIELD
attrname="MASCARAINSUMO" fieldtype="string" WIDTH="25"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="MASCARACOMPOSICAO" fieldtype="string" WIDTH="20"/><FIELD attrname="USARFILTROINSUMO" fieldtype="i2"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="USARFILTROCOMPOSICAO" fieldtype="i2"/><FIELD
attrname="ATUALIZARVISAOINSUMOS" fieldtype="i2"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="ATUALIZARVISAOCOMPOSICOES" fieldtype="i2"/><FIELD attrname="VTRFCOROBRA" fieldtype="i4"/><FIELD attrname="VTRFCORETAPA" fieldtype="i4"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="VTRFCORSERVICOCOTADO" fieldtype="i4"/><FIELD
attrname="VTRFCORSERVICOCOMCMP" fieldtype="i4"/><FIELD attrname="VTRFCORSERVICOCOMISM" fieldtype="i4"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="CMPPRODUCAO" fieldtype="i2"/><FIELD attrname="INTEGRADONUCLEUS" fieldtype="i2"/><FIELD attrname="PERTSABADOS"
fieldtype="i2"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="PERTFERIADOS" fieldtype="i2"/><FIELD attrname="PERTCALENDARIO" fieldtype="string" WIDTH="16"/><FIELD attrname="DESCINSUMO"
fieldtype="i2"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="DESCCOMPOSICAO" fieldtype="i2"/><FIELD
attrname="NUCLEUSTIPOCONTROLE" fieldtype="i2"/><FIELD attrname="NUCLEUSTIPOMOVREQ" fieldtype="string" WIDTH="10"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="CLIVRE1ISMDESC" fieldtype="string" WIDTH="20"/><FIELD attrname="CLIVRE2ISMDESC" fieldtype="string"
WIDTH="20"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="CLIVRE3ISMDESC" fieldtype="string" WIDTH="20"/><FIELD attrname="CLIVRE4ISMDESC" fieldtype="string"
WIDTH="20"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="CLIVRE5ISMDESC" fieldtype="string" WIDTH="20"/><FIELD attrname="CLIVREVALOR10ISMDESC" fieldtype="string"
WIDTH="20"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="CLIVREVALOR11ISMDESC" fieldtype="string" WIDTH="20"/><FIELD attrname="CLIVREVALOR12ISMDESC" fieldtype="string"
WIDTH="20"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="CLIVREVALOR13ISMDESC" fieldtype="string" WIDTH="20"/><FIELD attrname="CLIVREVALOR14ISMDESC" fieldtype="string"
WIDTH="20"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="CLIVRE1CMP" fieldtype="string" WIDTH="20"/><FIELD attrname="CLIVRE2CMP" fieldtype="string" WIDTH="20"/><FIELD attrname="CLIVRE3CMP"
fieldtype="string" WIDTH="20"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="CLIVRE4CMP" fieldtype="string" WIDTH="20"/><FIELD
attrname="CLIVRE5CMP" fieldtype="string" WIDTH="20"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="CLIVREVALOR1CMP" fieldtype="string" WIDTH="20"/><FIELD attrname="CLIVREVALOR2CMP" fieldtype="string"
WIDTH="20"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="CLIVREVALOR3CMP" fieldtype="string" WIDTH="20"/><FIELD attrname="CLIVREVALOR4CMP" fieldtype="string"
WIDTH="20"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="CLIVREVALOR5CMP" fieldtype="string" WIDTH="20"/><FIELD attrname="CLIVRE1TRF" fieldtype="string"
WIDTH="20"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="CLIVRE2TRF" fieldtype="string" WIDTH="20"/><FIELD attrname="CLIVRE3TRF" fieldtype="string" WIDTH="20"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="CLIVRE4TRF" fieldtype="string" WIDTH="20"/><FIELD
attrname="CLIVRE5TRF" fieldtype="string" WIDTH="20"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="CLIVREVALOR1TRF" fieldtype="string" WIDTH="20"/><FIELD attrname="CLIVREVALOR2TRF" fieldtype="string" WIDTH="20"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="CLIVREVALOR3TRF" fieldtype="string" WIDTH="20"/><FIELD attrname="CLIVREVALOR4TRF" fieldtype="string"
WIDTH="20"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="CLIVREVALOR5TRF" fieldtype="string" WIDTH="20"/><FIELD attrname="PERTDOMINGOS" fieldtype="i2"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="INTEGRADOFLUXUS" fieldtype="i2"/><FIELD
attrname="FLUXUSTIPODOCLAN" fieldtype="string" WIDTH="10"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="USARFATORK" fieldtype="i2"/><FIELD attrname="REPETIRCODAUXPLAN" fieldtype="i2"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="IGUALARRECURSOTAREFA" fieldtype="i2"/><FIELD
attrname="INTEGRADOOFICINA" fieldtype="i2"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="CLIVREVALOR15ISMDESC" fieldtype="string"
WIDTH="20"/><FIELD attrname="CLIVREVALOR16ISMDESC" fieldtype="string" WIDTH="20"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="CLIVREVALOR17ISMDESC" fieldtype="string"
WIDTH="20"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="CLIVREVALOR18ISMDESC" fieldtype="string" WIDTH="20"/><FIELD attrname="CLIVREVALOR19ISMDESC" fieldtype="string"
WIDTH="20"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="CLIVREVALOR20ISMDESC" fieldtype="string" WIDTH="20"/><FIELD attrname="CLIVREVALOR21ISMDESC" fieldtype="string"
WIDTH="20"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="CLIVREVALOR22ISMDESC" fieldtype="string" WIDTH="20"/><FIELD attrname="CLIVREVALOR23ISMDESC" fieldtype="string" WIDTH="20"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="CLIVREVALOR24ISMDESC" fieldtype="string" WIDTH="20"/><FIELD attrname="CLIVREVALOR25ISMDESC" fieldtype="string" WIDTH="20"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="CLIVREVALOR10PARDESC" fieldtype="string" WIDTH="20"/><FIELD attrname="CLIVREVALOR11PARDESC" fieldtype="string"
WIDTH="20"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="CLIVREVALOR12PARDESC" fieldtype="string" WIDTH="20"/><FIELD attrname="CLIVREVALOR13PARDESC" fieldtype="string" WIDTH="20"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="CLIVREVALOR14PARDESC" fieldtype="string" WIDTH="20"/><FIELD attrname="CLIVREVALOR15PARDESC" fieldtype="string"
WIDTH="20"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="CLIVREVALOR16PARDESC" fieldtype="string" WIDTH="20"/><FIELD attrname="CLIVREVALOR17PARDESC" fieldtype="string" WIDTH="20"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="CLIVREVALOR18PARDESC" fieldtype="string" WIDTH="20"/><FIELD attrname="CLIVREVALOR19PARDESC" fieldtype="string" WIDTH="20"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="CLIVREVALOR20PARDESC" fieldtype="string" WIDTH="20"/><FIELD attrname="CLIVREVALOR10PAR" fieldtype="fixed" DECIMALS="4"
WIDTH="15"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="CLIVREVALOR11PAR" fieldtype="fixed" DECIMALS="4"
WIDTH="15"/><FIELD attrname="CLIVREVALOR12PAR" fieldtype="fixed" DECIMALS="4" WIDTH="15"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="CLIVREVALOR13PAR" fieldtype="fixed" DECIMALS="4"
WIDTH="15"/><FIELD attrname="CLIVREVALOR14PAR" fieldtype="fixed" DECIMALS="4" WIDTH="15"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="CLIVREVALOR15PAR" fieldtype="fixed" DECIMALS="4"
WIDTH="15"/><FIELD attrname="CLIVREVALOR16PAR" fieldtype="fixed" DECIMALS="4" WIDTH="15"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="CLIVREVALOR17PAR" fieldtype="fixed" DECIMALS="4"
WIDTH="15"/><FIELD attrname="CLIVREVALOR18PAR" fieldtype="fixed" DECIMALS="4" WIDTH="15"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="CLIVREVALOR19PAR" fieldtype="fixed" DECIMALS="4"
WIDTH="15"/><FIELD attrname="CLIVREVALOR20PAR" fieldtype="fixed" DECIMALS="4" WIDTH="15"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="LOGUSRMENU" fieldtype="i2"/><FIELD attrname="LOGUSRISM" fieldtype="i2"/><FIELD attrname="LOGUSRISMPRC" fieldtype="i2"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="LOGUSRISMAPROP" fieldtype="i2"/><FIELD attrname="LOGUSRCMP" fieldtype="i2"/><FIELD attrname="LOGUSRTRF" fieldtype="i2"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="LOGUSRCRON" fieldtype="i2"/><FIELD attrname="ENTERASTAB" fieldtype="i2"/><FIELD attrname="VERPROJECT" fieldtype="i2"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="CASASDECCALC" fieldtype="i2"/><FIELD attrname="INTEGRALABORE" fieldtype="i2"/><FIELD attrname="INTEGRAVITAE" fieldtype="i2"/>'); WriteLn(fXmlDataPacket, '<FIELD attrname="CELCALCBDI" fieldtype="string" WIDTH="4"/><FIELD
attrname="CELCALCLEISOCIAL" fieldtype="string" WIDTH="4"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="FLUXUSTIPODOCLANCCRONOG" fieldtype="string" WIDTH="10"/><FIELD attrname="COEFIMPRODZERO" fieldtype="i4"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="IDPLANLEI" fieldtype="i4"/><FIELD
attrname="IDPLANBDI" fieldtype="i4"/><FIELD attrname="IDPLANLEI2" fieldtype="i4"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="UTILIZAFATORKCMP" fieldtype="i4"/><FIELD
attrname="CELCALCLEISOCIAL2" fieldtype="string" WIDTH="4"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="CODCPG" fieldtype="string" WIDTH="5"/><FIELD attrname="INTEGRADOBONUM" fieldtype="i2"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="JORNADA" fieldtype="fixed" DECIMALS="2" WIDTH="15"/><FIELD attrname="MOEDASECUNDARIA" fieldtype="string" WIDTH="10"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="VINCPROJECT" fieldtype="i4"/><FIELD attrname="ARQPROJECT" fieldtype="string" WIDTH="250"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="NUCLEUSTIPOMOVAPROP" fieldtype="string" WIDTH="10"/><FIELD attrname="CNTPERMITASSOCSUPCEM" fieldtype="i2"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="ARREDONDAISM" fieldtype="i2"/><FIELD
attrname="ARREDONDAQTDECASASDECNUCLEUS" fieldtype="i2"/><FIELD attrname="AUTODIMISMASSOC" fieldtype="i2"/><FIELD attrname="CORINDIRETA" fieldtype="i4"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="UTILIZARATEIOCC" fieldtype="i2"/><FIELD
attrname="DATABASECONVERSAO" fieldtype="dateTime"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="UTILIZAVIGENCIA" fieldtype="i4"/><FIELD
attrname="TIPOMOVNUCLEUSCOTACAO" fieldtype="string" WIDTH="10"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="CNTMEDICAOACIMADECEM" fieldtype="i2"/><FIELD
attrname="PERMITEASSOCTRFCNTSUPVLRORCADO" fieldtype="i2"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="LOGUSRMEDICAO" fieldtype="i2"/><FIELD
attrname="AVISARCRONPREVMENOR100" fieldtype="i4"/><FIELD attrname="DIVIDECOEFPELAPRODUCAO" fieldtype="i4"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="TIPOTRATAMENTOVALOR" fieldtype="i2"/><FIELD
attrname="EDITAPRCUNITARIOLABOREAPROP" fieldtype="i2"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="APLICALEISPRCUNITLABOREAPROP" fieldtype="i2"/><FIELD attrname="INDEXAR" fieldtype="i4"/><FIELD attrname="DATABASEINDEXACAO" fieldtype="dateTime"/><FIELD attrname="UTILIZARATEIODEPTO"
fieldtype="i2"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="CRONOGDESTINOAPROPRIACAO" fieldtype="string" WIDTH="1"/><FIELD attrname="PERMALTERACAOREQMAT" fieldtype="i4"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="LOGUSRREQMAT" fieldtype="i4"/><FIELD
attrname="ORIGEMPRECOMAOOBRAAPROPRIADA" fieldtype="i2"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="CAMPOAPROPRIACAONUCLEUS" fieldtype="string" WIDTH="30"/><FIELD attrname="UTILIZATRAVAMENTOCRONOGPLAN"
fieldtype="i2"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="PDOINICIALALTERCRONPLAN" fieldtype="i4"/><FIELD attrname="PDOFINALALTERCRONPLAN" fieldtype="i4"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="UTILIZATRAVAMENTOCRONOGREAL" fieldtype="i2"/><FIELD attrname="PDOINICIALALTERCRONREAL" fieldtype="i4"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="PDOFINALALTERCRONREAL" fieldtype="i4"/><FIELD
attrname="UTILIZATRAVAMENTOCRONOGMED" fieldtype="i2"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="PDOINICIALALTERCRONMED" fieldtype="i4"/><FIELD
attrname="PDOFINALALTERCRONMED" fieldtype="i4"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="TIPOMOVESTOQUE" fieldtype="string" WIDTH="10"/><FIELD attrname="HABILITAMOVESTOQUE" fieldtype="i2"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="AUTOINCCOMPOSICAO" fieldtype="i4"/><FIELD
attrname="VALINITAUTOINCCOMPOSICAO" fieldtype="i4"/>');
WriteLn(fXmlDataPacket, '<FIELD attrname="APLICAFATORKINSUMOCURVAABC"
fieldtype="i2"/></FIELDS><PARAMS CHANGE_LOG="1 0 4"/></METADATA>');
WriteLn(fXmlDataPacket, '<ROWDATA><ROW RowState="4" CBDIPRJSOBRETOTAL="1" BDIPRJATIVO="1" BDITRFATIVO="1"');
WriteLn(fXmlDataPacket, 'BDIGRPISMATIVO="1"
CONSIDERARQUANTOBRAS="1" CONSIDERARCASASDEC="1" CASASDECQUANTIDADES="2"
CASASDECTAXAS="4" CASASDECMONETARIOS="4" CASASDECPERCENTUAIS="3"');
WriteLn(fXmlDataPacket, 'CASASDECCOEFICIENTES="2" CALCULARAOABRIRPRJ="0" EXIBIRVALORTRF="1" EXIBIRVALORCMP="1" ACUMSERVMESMOCODCMP="1" LEISOBRECUSTOUNITISM="1" DATAINICIOPDOS ="' + sDataInicio + '" TIPOPDO="30" NUMDIASPDO="30"');
WriteLn(fXmlDataPacket, 'NUMPDOSCRONOG="' + IntToStr(iNumPeriodos)+ '" ASCARATAREFA="###.####" MOEDASECUNDARIA="'+ sMoedaCotada + '" NUCLEUSTIPOMOVREQ="2.1.08" DESCTAREFA="1"
BDIPRJ="1.0000" FATORLEISOCIAL1="1.0000" FATORLEISOCIAL2="1.0000" CASASDECESPECIAIS="2"');
WriteLn(fXmlDataPacket, 'MASCARACOMPOSICAO="##.####" USARFILTROINSUMO="0" USARFILTROCOMPOSICAO="0" ATUALIZARVISAOINSUMOS="1" ATUALIZARVISAOCOMPOSICOES="1" VTRFCOROBRA="0" VTRFCORETAPA="0" VTRFCORSERVICOCOTADO=""');
WriteLn(fXmlDataPacket, 'VTRFCORSERVICOCOMCMP="0" VTRFCORSERVICOCOMISM="0" CMPPRODUCAO="1" INTEGRADONUCLEUS="1" PERTSABADOS="0" PERTFERIADOS="1" DESCINSUMO="1" DESCCOMPOSICAO="1" NUCLEUSTIPOMOVREC="2.1.08"');
WriteLn(fXmlDataPacket, 'NUCLEUSTIPOCONTROLE="0" PERTDOMINGOS="0" INTEGRADOFLUXUS="0" USARFATORK="0" REPETIRCODAUXPLAN="0" IGUALARRECURSOTAREFA="1" INTEGRADOOFICINA="0"
LOGUSRMENU="0" LOGUSRISM="0"');
WriteLn(fXmlDataPacket, 'LOGUSRISMPRC="0" LOGUSRISMAPROP="0" LOGUSRCMP="0" LOGUSRTRF="0" LOGUSRCRON="0" ENTERASTAB="0" VERPROJECT="0" CASASDECCALC="0" INTEGRALABORE="0"
INTEGRAVITAE="0"');
WriteLn(fXmlDataPacket, 'CELCALCBDI="0" CELCALCLEISOCIAL="0" COEFIMPRODZERO="0" UTILIZAFATORKCMP="0" INTEGRADOBONUM="0" CNTPERMITASSOCSUPCEM="0" ARREDONDAISM="0" AUTODIMISMASSOC="0" UTILIZARATEIOCC="0"');
WriteLn(fXmlDataPacket, 'UTILIZAVIGENCIA="0" CNTMEDICAOACIMADECEM="0" PERMITEASSOCTRFCNTSUPVLRORCADO="0" LOGUSRMEDICAO="0" AVISARCRONPREVMENOR100="1" DIVIDECOEFPELAPRODUCAO="0" TIPOTRATAMENTOVALOR="1"');
WriteLn(fXmlDataPacket, 'EDITAPRCUNITARIOLABOREAPROP="0" PLICALEISPRCUNITLABOREAPROP="0" INDEXAR="1" UTILIZARATEIODEPTO="0" ARREDONDAQTDECASASDECNUCLEUS="4"
CRONOGDESTINOAPROPRIACAO="R"');
WriteLn(fXmlDataPacket, 'PERMALTERACAOREQMAT="2" LOGUSRREQMAT="0" ORIGEMPRECOMAOOBRAAPROPRIADA="0" CAMPOAPROPRIACAONUCLEUS="DATAEMISSAO" UTILIZATRAVAMENTOCRONOGPLAN="0" UTILIZATRAVAMENTOCRONOGREAL="0"');
WriteLn(fXmlDataPacket, 'UTILIZATRAVAMENTOCRONOGMED="0" TIPOMOVESTOQUE="2.1.08" HABILITAMOVESTOQUE="1" AUTOINCCOMPOSICAO="0" VALINITAUTOINCCOMPOSICAO="1"
APLICAFATORKINSUMOCURVAABC="0"/></ROWDATA></DATAPACKET>');
CloseFile(fXmlDataPacket);
Passo 2) Em seguida, vamos abrir e atribuir este XML a um ClientDataset:
cdsParamProjeto.FileName := sXMLHead;
cdsParamProjeto.Open;
Caso tudo dê certo, o CDS será aberto. Caso ele não consiga ser aberto e gere uma exception, verifique qual a rezão do erro ocorrido. Muito provavelmente há um erro no .xml
Passo 3) Bom, com o CDS aberto, bastará então criarmos uma rotina de loop que irá ler cada coluna do CDS e dar um insert na tabela MPARAMETRO:
for i := 0 to DMProj.cdsParamProjeto.fields.Count-1 do begin
qParamsProjeto.Close;
qParamsProjeto.ParamByName('CODCOLIGADA').AsInteger := CorporeRM.Coligada;
qParamsProjeto.ParamByName('IDPRJ').AsInteger := iIDPrj;
qParamsProjeto.ParamByname('PARAMETRO').AsString := DMProj.cdsParamProjeto.Fields[i].FieldName;
qParamsProjeto.Open;
if qParamsProjeto.Eof then
begin
qParamsProjeto.Insert;
qParamsProjeto.FieldByName('CODCOLIGADA').AsInteger := CorporeRM.Coligada;
qParamsProjeto.FieldByName('IDPRJ').AsInteger := iIDPrj;
qParamsProjeto.FieldByname('PARAMETRO').AsString := DMProj.cdsParamProjeto.Fields[i].FieldName;
case DMProj.cdsParamProjeto.Fields[i].DataType of
ftInteger: qParamsProjeto.FieldByname('VALORINT').AsInteger := cdsParamProjeto.FieldByName(DMProj.cdsParamProjeto.Fields[i].FieldName).AsInteger;
ftSmallint: qParamsProjeto.FieldByname('VALORINT').AsInteger := cdsParamProjeto.FieldByName(DMProj.cdsParamProjeto.Fields[i].FieldName).AsInteger;
ftFloat: qParamsProjeto.FieldByname('VALORFLOAT').AsFloat := cdsParamProjeto.FieldByName(DMProj.cdsParamProjeto.Fields[i].FieldName).AsFloat;
ftDateTime: qParamsProjeto.FieldByname('VALORDATA').AsDateTime := cdsParamProjeto.FieldByName(DMProj.cdsParamProjeto.Fields[i].FieldName).AsDateTime;
ftString: qParamsProjeto.FieldByname('VALORSTR').AsString := cdsParamProjeto.FieldByName(DMProj.cdsParamProjeto.Fields[i].FieldName).AsString;
end;
//
qParamsProjeto.Post;
end;
end;
DMProj.cdsParamProjeto.Close;
DeleteFile(sXMLHead);
//
A sentença que irá alimentar a query qParamsProjeto deverá ser:
select CODCOLIGADA, IDPRJ, PARAMETRO, VALORINT, VALORFLOAT, VALORDATA, VALORSTR from MPARAMETRO where CODCOLIGADA = :CODCOLIGADA and IDPRJ = :IDPRJ AND PARAMETRO = :PARAMETRO
Dar um insert diretamente, irá acarretar erros ao você tentar passar um valor NULL para os valores de parametros que não serão preenchidos. Melhor deixar isto por conta do BDE.
Você pode criar a query em Run-Time mesmo. Depois de gravados os dados na tabela MPARAMETRO, ela não será mais necesária.]
qParamsProjeto := TQuery.Create(nil);
qParamsProjeto.DatabaseName := CorporeRM.DatabaseName;
qParamsProjeto.RequestLive := True;
qParamsProjeto.SQL.Add('select CODCOLIGADA, IDPRJ, PARAMETRO, VALORINT, VALORFLOAT, VALORDATA, VALORSTR from MPARAMETRO');
qParamsProjeto.SQL.Add('where CODCOLIGADA = :CODCOLIGADA and IDPRJ = :IDPRJ AND PARAMETRO = :PARAMETRO');
qParamsProjeto.Prepare;
//
18.12.07
RM 10
1) A tabela FCFO (De fornecedores) agora tem um campo que é obrigatório: PESSOAFISOUJUR. Se o fornecedor for pessoa física, coloque "F" e se jurídica "J"
2) O RM Solum mudou um monte de coisa. Agora, caso você faça o projeto via customização e não cadastrando-o diretamente, você não precisa mais criar o datapacket para que o Solum importe-o para dentro da tabela MPARAMETRO. Você terá que preenchê-la automáticamente.
Tabelas/Campos EXCLUÍDOS da base de dados:
DFILIAL.OPTANTEREGSIMPLIFICADOFEDERAL
DFILIAL.RAMOATIVIDADE
DFILIAL.CAIXAPOSTAL
DFILIAL.CEPCAIXAPOSTAL
DFILIAL.CODATIVFED
DFILIAL.CODATIVIDPRINC
DFILIAL.CODMUNICIPIO
DFILIAL.CONTABIL
DFILIAL.DATAREGJUNTA
DFILIAL.DESCATIVIDPRINC
DFILIAL.FILIALSALDUS
DFILIAL.INSCMUN
DFILIAL.NUMREGJUNTA
DFILIAL.SUFRAMA
DLAF.CLASSECONSUMO
DLAF.CODETDPLACA02
DLAF.CODETDPLACA03
DLAF.FASE
DLAF.GRUPOTENSAO
DLAF.PLACA02
DLAF.PLACA03
DLAF.TIPOUTILIZACAO
DPARAMETROS.AGRUPALANCPARC
DPARAMETROS.CONSISTEPERIODO
DPARAMETROS.CONTABILIZACAOONLINE
DPARAMETROS.CONTROLAATIVO
DPARAMETROS.CONTROLADISPOSITIVOSEGURANCA
DPARAMETROS.DATAINICIOCIAP
DPARAMETROS.DEDUZMATERIAIS
DPARAMETROS.DEDUZSUBEMPREITADA
DPARAMETROS.EDITACGCCF
DPARAMETROS.EDITASOMENTESECFAZ
DPARAMETROS.EMITELIVROCONSTCIVIL
DPARAMETROS.EXPORTARSERIE
DPARAMETROS.INTEGRADOFLUXUS
DPARAMETROS.INTEGRADONUCLEUS
DPARAMETROS.MODELOCIAP
DPARAMETROS.TIPOLIVRO
DPARAMETROS.USAALIQDAPILFOUPRODUTO
DPARAMETROSFILIAL
EPARAMWEB.MOSTRARENDERECOCORRESPONDENCIA
FCFO.CODREDE
FCFO.IDENDENTREGA
FCFO.IDENDERECO
FCFO.IDENDPGTO
FCFO.PAGCAMARACOMPENSACAO
FCFO.PAGCEPAGENCIA
FCFO.PAGCODIGOAGENCIA
FCFO.PAGCONTACORRENTE
FCFO.PAGDIGITOAGENCIA
FCFO.PAGDIGITOAGENCIACONTA
FCFO.PAGFORMAPAGAMENTO
FCFO.PAGNOMEAGENCIA
FCFO.PAGNUMEROBANCO
FCFO.PAGTPCONTA
FCFO.RAMOATIVIDADE
FCFO.SENHA
FCFO.VALOREMABERTO
FPIMPRESSO.IDREL
FPIMPRESSO.ULTNUMGERADO
FPREGIMPRESSAO
GHELP
LEMPRESTIMOS.MULTAPAGA
MPARPRJ
NAGENDA.CODCOLIGADA
NALBUMVERSAO.CODCOLIGADA
NARQUIVONOTICIA.CODCOLIGADA
NCLASSIFICADOS.CODCOLIGADA
NCLASSIFICADOSLOCALIDADE.CODCOLIGADA
NCONTROLEVERSAO.CODCOLIGADA
NEMPREGO.CODCOLIGADA
NEMPREGOFILIAL
NENQUETE.CODCOLIGADA
NENQUETELOCALIDADE.CODCOLIGADA
NENQUETEPERFILPERMIS.CODCOLIGADA
NENQUETEETURMA
NENQUETEUCURSO
NENQUETEUSUARIO.CODCOLIGADA
NENQUETEUSUARIOPERMIS.CODCOLIGADA
NEVENTOLOGIN
NFORUM.CODCOLIGADA
NFORUMDEPARTAMENTO
NFORUMRESPOSTA.CODCOLIGADA
NLOCALIDADE.CODCOLIGADA
NLOGLOGIN
NLOGNOTICIA
NLOGPORTAL.CODCOLIGADA
NMENU.CODCOLIGADA
NNOTICIA.CODCOLIGADA
NNOTICIALOCALIDADE.CODCOLIGADA
NOPCAOENQT.CODCOLIGADA
NPARAMETROS.CODCOLIGADA
NPARAMETROS.IDPARAM
NPARAMETROS.NOMEPARAM
NPARAMETROS.TIPOPARAM
NPARAMSERVEMAIL
NPARAMSERVICOS
NPERFIL.CODCOLIGADA
NPERFILMENU.CODCOLIGADA
NPERFILUSUARIO.CODCOLIGADA
NPERGUNTAENQT.CODCOLIGADA
NPERMISMENUCONTEUDO.CODCOLIGADA
NRESPOSTAENQT.CODCOLIGADA
NUSUARIOLOCALIDADE.CODCOLIGADA
NUSUARIOMENU.CODCOLIGADA
NUSUARIOOPCAOENQT.CODCOLIGADA
NVERSAOCONTEUDO.CODCOLIGADA
NWEBPARTCONFIG.CODCOLIGADA
OFINDICE.PERIODOAVALIACAO
PFUNCPT.REFORMADO
SZAMOSTRAS.CODATENDIMENTO
SZAMOSTRAS.CODPACIENTE
SZAMOSTRAS.DESCEXAMES
SZAMOSTRAS.QTDEXAMES
SZAPRPAESTOQUE.CODESTOQUE
SZAPRPAESTOQUE.GRPESTOQUE
SZATENDIMENTOREC.BAIRRORESPATEND
SZATENDIMENTOREC.CEPRESPATEND
SZATENDIMENTOREC.CIDADERESPATEND
SZATENDIMENTOREC.COMPLRESPATEND
SZATENDIMENTOREC.CPFCGCNF
SZATENDIMENTOREC.DDDTELEFONECOM
SZATENDIMENTOREC.DDDTELEFONERES
SZATENDIMENTOREC.ENDERECORESPATEND
SZATENDIMENTOREC.NOMEACOMPANHANTE
SZATENDIMENTOREC.NOMERESPATEND
SZATENDIMENTOREC.NUMERORESPATEND
SZATENDIMENTOREC.RAMAL
SZATENDIMENTOREC.TELEFONECOM
SZATENDIMENTOREC.TELEFONERES
SZATENDIMENTOREC.TIPORESPONSAVEL
SZATENDIMENTOREC.UFRESPATEND
SZINDICADORPROHOSP
SZITEMPRESCRICAO.CODESTOQUE
SZITEMPRESCRICAO.GRPESTOQUE
SZMAPAAMOSTRA.QTDEAMOSTRA
SZPERFILCCUSTO
SZPRESCRICAO.CODALMOXARIFADO
TMOV.CODETDPLACA02
TMOV.CODETDPLACA03
TMOV.PLACA02
TMOV.PLACA03
TMOVCFO.TIPOLOGRADOURO
TPAR.CAMPOCOMPLEMENTARVISAOPRODUTO
TPARAM
TTMV.CODNAT
TTMV.CODNAT2
TTMVCABECALHO
TTMVEXT.CODNATFORAESTADO
TTMVEXT.CODNATFORAESTADO2
TTMVPARAM
VCONTROLESISTEMA.GERARHABTREINFECHTURMAITEMCURR
VREQUISICAOADMISSAOCOMPL
VREQUISICAOPESSOALCOMPL
VREQUISICAOTREINAMENTOCOMPL
XPARAMETROSCOLIGADA.UTILIZAINTEGRACAOFLPAGTOCOMIS
XTIPORECEITA.CODCOLIGADA
XTIPORECEITA.CODTBFLX
28.9.07
Criando uma rotina de envio de cotação para fornecedores no RM Nucleus
desnecessário. Se for uma cotação de 10 itens, até que vai, mas se forem aquelas megacotações de 1000 a 2000 itens?
Eu fiz uma rotina que dispensa o método usado pelo RM e o faz diretamente via uma customização direta aonde geramos uma planilha para cada fornecedor, enviamos por E-mail para ele preencher e depois ficamos apenas por conta de importarmos a supra-citada pra dentro do RM. Processo bem mais agil que pode
automatizar cotações de infinitas quantidades de intens.
Os passos a serem adotados serão: Montar a lista dos intens cotados, montar a lista dos fornecesdores destino, montar a planilha a ser preenchida pelo fornecedor e depois importar a planilha e gravar na tabela de cotação.
O primeiro passo a ser adotado é montarmos uma sentença SQL que irá buscar os dados da cotação em questão. Para isto a tabela alvo do Nucleus vai ser a TCITMORCAMENTO aonde estão os itens a serem orçados e seus respectivos fornecedores vinculados.
Para este processo funcionar, seus fornecedores deverão estar todos cadastrados na tabela FCFO e com seus respectivos E-Mails vigentes.
Na Unit do Plugin, iremos adicionar os dois itens do menu da customização:
MenuInfo : array [0..MAXMENU-1] of TPlugMenuInfo =
(
(Caption: '&Enviar orçamentos para fornecedores'; Hint: 'Envia itens orçados
na cotação para os fornecedores cadastrados';
Tag: 999992; Event: nil; Process: false; Bitmap: ''),
(Caption: '&Importar orçamentos cotados'; Hint: 'Importa itens orçados pelos
fornecedores cadastrados para a cotação';
Tag: 999992; Event: nil; Process: false; Bitmap: ''),
(Caption: '-'; Hint: '';
);
No Initialize do plugin, iremos declará-las:
i := 0; MenuInfo[i].Event := mnuEnviaCotacaoOrcadaClick;
inc(i); MenuInfo[i].Event := mnuImportaCotacaoOrcadaClick;
inc(i);
Feito isto, você deverá montar uma tela aonde colocaremos dois
DBLookUpComboBox, um progressbar e dois buttons.
Um DBLookup irá receber a lista de cotações em aberto (Todas diferentes do
flag 7 (Cancelado)). A sentença a ser usada na query, deve ser algo parecido
com:
select I.CODCOMPRADOR, I.CODCOTACAO, I.DATLIMRESPTA, P.EMAIL, P.NOME
from TCCOTACAO as I, PPESSOA as P where I.CODCOMPRADOR = P.CODIGO and I.STSCOTACAO
= 1 and I.CODCOLIGADA = 2
Um dos Buttons é para fechar o form o outro irémos inserir as rotinas de montagem da planilha e envio. Nesta rotina, você precisará primeiro criar uma query que busque a relação de fornecedores da cotação e seus
respectívos itens a serem orçados. Lembrando pela ordem que o registro mestre será o fornecedor, e os filhos serão seus itens. Sendo assim, a sentença SQL para listar os fornecedores será a seguinte:
select DISTINCT F.CODCFO, F.NOME, F.EMAIL from TCITMORCAMENTO AS C,
FCFO AS F WHERE F.CODCFO = C.CODCFO AND F.CODCOLIGADA = :CODCOLIGADA AND C.CODCOTACAO
= :CODCOTACAO and F.EMAIL is not null
A lista dos itens destinadas a cada fornecedor, será constituída da seguinte
sentença SQL:
select C.CODCFO,P.CODIGOPRD, P.DESCRICAO, C.CODUND, SUM(I.QUANTIDADE)
QUANTIDADE from TCITMORCAMENTO as C left outer join TPRD as P on P.IDPRD = C.IDPRD,
TMOV as M, TITMMOV as I Where C.CODCFO = :CODCFO AND C.CODCOTACAO = :CODCOTACAO
AND M.IDMOV = C.IDMOV
AND I.IDMOV = M.IDMOV
AND I.IDPRD = C.IDPRD
AND M.STATUS <> 'C'
GROUP BY C.CODCFO,P.CODIGOPRD, P.DESCRICAO, C.CODUND
ORDER BY P.DESCRICAO
Os códigos de status das cotações são:
1 - Composição (Ainda não foi enviado o orçamento para o fornecedor)
2 - Aguardando Resposta dos fornecedores
3 - Ordem de compra Parcialmente gerada
4 - Não usado
5 - Em negociação
6 - Composição
7 - Cancelada
Bom. De posse então dos dados para prepararmos a planilha, você monta uma rotina de escrita em uma planilha excel e mande salvá-la em disco (A Web tá cheia de exemplos de como gravar dados em uma planilha excel). Então criariamos uma rotina que iriia lendo fornecedor por fornecedor, gera a planilha, envia para o destinatrio e, em seguida, apaga a planilha do disco
FOR i := 0 TO DadosFornecedor.Count - 1 DO
BEGIN
DadosFornecedor.items[i];
IF CreateCotacaoSheet(DadosFornecedor,i,Cotacao,DadosItemCotacao, sNameFile) THEN
BEGIN
IF DadosFornecedor.Items[i].EMailUsuario <> '' THEN
BEGIN
SendSMTPMail(PChar(Cotacao.Operador), PChar(Cotacao.EMailOperador), PChar(DadosFornecedor.Items[i].Nome), PChar(DadosFornecedor.Items[i].EMailUsuario),NIL,NIL,pChar('PEDIDO DE ORÇAMENTO Nº ' + Cotacao.CodCotacao + '-' + DadosFornecedor.Items[i].CodFornecedor),PChar(BodyMessage),[PChar(sNameFile)]);
DeleteFile(sNameFile);
END
ELSE
MessageDlg('Fornecedor ' + DadosFornecedor.Items[i].Nome + ' Não possui conta de E-Mail. A planilha será salva no disco!', mtWarning, [mbOk], 0);
END;
END;
MessageDlg('Processo de envio de orçamentos para os fornecedores processado com sucesso!', mtInformation, [mbOk], 0);
SetStatusCotacao(Cotacao.CodCotacao,2);
FreeAndNil(DadosFornecedor);
FreeAndNil(DadosItemCotacao);
//
END;
Note você que esta rotina somente apaga a planilha do disco, se o fornecedor
tiver E-mail. Caso não o tenha ele não apaga pois você pode pegar esta
planilha, imprimir e enviar ela por Fax pro cara.
Depois disto, você deverá mudar o status da cotação para "Aguardando resposta
dos fornecedores". Para isto, você cria uma rotina usando a seguinte sentença
SQL:
UPDATE TCCOTACAO SET STSCOTACAO = :STSCOTACAO WHERE CODCOTACAO = :CODCOTACAO
Para mudar o status para "Aguardando resposta dos fornecedores" use o código 2
no parametro CODCOTACAO
Importando os dados.
Quanto a questão da importação desta planilha, é mais simples ainda.
Geralmente eu salvo a planilha como Texto separado por tabulações e uso a
rotina abaixo para importar os dados para o RM:
procedure TfImpOrcamento.btnImportClick(Sender: TObject);
var
fi : textfile;
BackupName, line, CodCotacao, CodPrd, ValFrete, CodCfo, ValPrazoEntrega,ValPrazoValidade,
NumeroParcelas, ValLimiteResposta, CondicoesPagto, CodCpg, FreteCIFouFob,
Preco, Unitario, IPI, Desconto, ValorDescontado, ValorFinal,
Quantidade, Total, ValTrb, ValCotacao, ValICMS: String;
LimiteResposta, DataEmissao: TDateTime;
Frete, ICMS: Extended;
i, k: integer;
done, decimal : boolean;
iCount, PrazoEntrega, PrazoValidade: integer;
Orcamento : TOrcamento;
DadosOrcamento : TDadosOrcamento;
Item : TItem;
DadosItem : TDadosItem;
begin
if eFileName.Text = '' then
begin
MessageDlg('Você deverá selecionar um arquivo para proceder com a importação', mtError, [mbOk], 0);
eFileName.Setfocus;
Exit;
end
else if IsFileInUse(eFileName.text) then
begin
MessageDlg('Erro ao abrir o arquivo ' + ExtractFileName(eFileName.text)
+ '. O arquivo está sendo usadado por outro processo', mtError, [mbOk], 0);
eFileName.Setfocus;
exit;
end;
try
//
assignfile(fi, eFileName.text);
{$i-} Reset(fi); {$i+}
//
pBar.Max := 40;
//
if ioresult <> 0 then
begin
MessageDlg('Erro ao abrir arquivo ' +
eFileName.text, mtInformation, [mbOk], 0);
exit;
end;
done := False;
//
if not eof(fi) then
begin
//
DadosOrcamento := TDadosOrcamento.Create;
DadosItem := TDadosItem.Create;
//
repeat
if not eof(fi) then
readln(fi, line);
until eof(fi) or (copy(line, 1,10)=
'Fornecedor');
pBar.StepIt;
line := copy(line, 12, length(line));
line := RetiraCaracteres(#$09, line);
CodCfo := copy(Line,1,6);
//
repeat
if not eof(fi) then
readln(fi, line);
until eof(fi) or (copy(line, 1,19)= 'Pedido de Orçamento');
pBar.StepIt;
line := copy(line, 21, length(line));
CodCotacao := LTrim(RetiraPalavra(line, #$09));
//
repeat
if not eof(fi) then
readln(fi, line);
until eof(fi) or (copy(line, 1, 14)= 'Data Lim. Resp');
pBar.StepIt;
line := copy(line, 16, length(line));
ValLimiteResposta := RetiraCaracteres(#$09, line);
//
repeat
if not eof(fi) then
readln(fi, line);
until eof(fi) or (copy(line, 1, 22)= 'Condições de Pagamento');
pBar.StepIt;
line := copy(line, 24, length(line));
CondicoesPagto := RetiraPalavra(line, #$09);
//
repeat
if not eof(fi) then
readln(fi, line);
until eof(fi) or (copy(line, 1, 18)= 'Número de parcelas');
pBar.StepIt;
line := copy(line, 20, length(line));
line := RetiraPalavra(line, #$09);
NumeroParcelas := SomenteDigitos(line,2);
//
repeat
if not eof(fi) then
readln(fi, line);
until eof(fi) or (copy(line, 1, 16)= 'Prazo de entrega');
pBar.StepIt;
line := copy(line, 18, length(line));
ValPrazoEntrega := RetiraPalavra(line, #$09);
ValPrazoEntrega := SomenteDigitos(ValPrazoEntrega,2);
//
repeat
if not eof(fi) then
readln(fi, line);
until eof(fi) or (copy(line, 1, 21)= 'Alíquota ICMS Inclusa');
pBar.StepIt;
line := copy(line, 23, length(line));
line := RetiraPalavra(line, #$09);
ValICMS := SomenteDigitos(line,2);
//
repeat
if not eof(fi) then
readln(fi, line);
until eof(fi) or (copy(line, 1, 21)= 'Validade do Orçamento');
pBar.StepIt;
line := copy(line, 23, length(line));
ValPrazoValidade := RetiraPalavra(line, #$09);
ValPrazoValidade := SomenteDigitos(ValPrazoValidade,2);
//
repeat
if not eof(fi) then
readln(fi, line);
until eof(fi) or (copy(line, 1, 14)= 'Valor do Frete');
pBar.StepIt;
line := copy(line, 16, length(line));
ValFrete := RetiraPalavra(line, #$09);
//
repeat
if not eof(fi) then
readln(fi, line);
until eof(fi) or (copy(line, 1, 13)= 'Tipo de Frete');
pBar.StepIt;
line := copy(line, 15, length(line));
FreteCIFouFob := RetiraPalavra(line, #$09);
//
if not DadosOrcamento.Locate(CodCfo)
then
begin
Orcamento := DadosOrcamento.Add;
//
Orcamento.CodCfo := CodCfo;
Orcamento.CodCotacao := CodCotacao;
Orcamento.CondicoesPagto := CondicoesPagto;
Orcamento.FreteCIFouFob := FreteCIFouFob;
Orcamento.PrazoEntrega := PrazoEntrega;
Orcamento.PrazoValidade := PrazoValidade;
Orcamento.NumeroParcelas := StrToInt(NumeroParcelas);
try
LimiteResposta := StrToDate(ValLimiteResposta);
Orcamento.LimiteResposta := LimiteResposta;
except
end;
Orcamento.DataEmissao := DataEmissao;
try
ICMS := StrToFloat(ValICMS);
Orcamento.ICMS := ICMS;
except
end;
try
Frete := StrToFloat(ValFrete);
Orcamento.Frete := Frete;
except
end;
end;
//
readln(fi, line);
readln(fi, line);
readln(fi, line);
readln(fi, line);
readln(fi, line);
readln(fi, line);
readln(fi, line);
readln(fi, line);
readln(fi, line);
readln(fi, line);
//
while not Eof(fi) do
begin
readln(fi, line);
CodPrd := '';
i := 1;
k := 0;
//
while (i <= length(line))
and (line[i] <> #$09) do
begin
CodPrd := CodPrd + line[i];
inc(i);
end;
inc(i);
if Copy(CodPrd,1,11) = 'Observações' then
Break;
if CodPrd <> '' then
begin
//
Unitario := '';
Quantidade := '';
IPI := '';
Desconto := '';
ValorDescontado := '';
ValorFinal := '';
decimal := false;
k := 0;
//
while (i <= length(line)) and (line[i] <> #$09) do
inc(i);
inc(i);
while (i <= length(line)) and (line[i] <> #$09) do
begin
case line[i] of
'0'..'9':
begin
inc(k);
if not decimal or (k <= 4) then
Quantidade := Quantidade + line[i];
end;
',':
begin
Quantidade := Quantidade + ',';
decimal := true;
k := 0;
end;
end;
inc(i);
end;
try
StrToFloat(Quantidade);
except
Quantidade := '0';
end;
inc(i);
while (i <=
length(line)) and (line[i] <> #$09) do
inc(i);
inc(i);
while (i <= length(line)) and (line[i] <> #$09) do
begin
case line[i] of
'0'..'9':
begin
inc(k);
if not decimal or (k <= 4) then
Unitario := Unitario + line[i];
end;
',':
begin
Unitario := Unitario + ',';
decimal := true;
k := 0;
end;
end;
inc(i);
end;
try
StrToFloat(Unitario);
except
Unitario := '0';
end;
inc(i);
while (i <= length(line)) and (line[i] <> #$09) do
begin
IPI := IPI + line[i];
inc(i);
end;
try
StrToFloat(IPI);
except
IPI := '0';
end;
inc(i);
while (i <= length(line)) and (line[i] <> #$09) do
begin
case
line[i] of
'0'..'9':
begin
inc(k);
if not decimal or (k <= 4) then
Desconto := Desconto + line[i];
end;
',':
begin
Desconto := Desconto + ',';
decimal := true;
k := 0;
end;
end;
inc(i);
end;
try
StrToFloat(Desconto);
except
Desconto := '0';
end;
inc(i);
while (i <=length(line)) and (line[i] <> #$09) do
begin
ValorDescontado := ValorDescontado + line[i];
inc(i);
end;
try
StrToFloat(ValorDescontado);
except
ValorDescontado := '0';
end;
inc(i);
while (i <=length(line)) and (line[i] <> #$09) do
begin
ValorFinal := ValorFinal + line[i];
inc(i);
end;
try
StrToFloat(ValorFinal);
except
ValorFinal := '0';
end;
inc(i);
//
Item := DadosItem.Add;
Item.CodCfo := CodCfo;
Item.CodPrd := CodPrd;
if Unitario <> '0'
then
Item.Status := 0
else
Item.Status := 1;
Item.Unitario := StrToFloat(Unitario);
Item.Quantidade := StrToFloat(Quantidade);
Item.IPI := StrTofloat(IPI);
Item.Desconto := StrToFloat(Desconto);
Item.ValorDescontado := StrToFloat(ValorDescontado);
Item.Valortotal := StrToFloat(ValorFinal);
//
end;
end;
//
try
qryGravaCotacao.ParamByName('VALPRAZOENTREGA').AsInteger := Orcamento.PrazoEntrega;
qryGravaCotacao.ParamByName('DATENTREGA').AsDateTime := Date;
qryGravaCotacao.ParamByName('CODCPG').AsString := BuscaPrazoPagamento(Orcamento.CondicoesPagto, Orcamento.NumeroParcelas);
qryGravaCotacao.ParamByName('VALFRETE').AsFloat := Orcamento.Frete;
qryGravaCotacao.ParamByName('FRETECIFOUFOB').AsInteger := BuscaTipoFrete(Orcamento.FreteCIFouFob);
qryGravaCotacao.ParamByName('VALTRB').AsFloat := Orcamento.ICMS;
qryGravaCotacao.ParamByName('CODCOTACAO').AsString := Orcamento.CodCotacao;
qryGravaCotacao.ParamByName('CODCOLIGADA').AsInteger := CorporeRM.Coligada;
qryGravaCotacao.ParamByName('CODCFO').AsString := Orcamento.CodCfo;
qryGravaCotacao.ExecSQL;
try
for k := 0 to DadosItem.Count-1 do
begin
DadosItem.Items[k];
if
(DadosItem.Items[k].CodCfo = Orcamento.CodCfo) then
begin
try
CodCpg := BuscaPrazoPagamento(Orcamento.CondicoesPagto, Orcamento.NumeroParcelas);
qryGravaItemCotacao.ParamByName('IDPRD').AsInteger := BuscaIDProduto(DadosItem.Items[k].CodPrd);
qryGravaItemCotacao.ParamByName('CODCFO').AsString := DadosItem.Items[k].CodCfo;
qryGravaItemCotacao.ParamByName('VALCOTACAO').AsFloat := DadosItem.Items[k].Unitario;
qryGravaItemCotacao.ParamByName('VALNEGOCIADO').AsFloat := DadosItem.Items[k].Unitario;
qryGravaItemCotacao.ParamByName('VALTRB').AsFloat := DadosItem.Items[k].IPI;
qryGravaItemCotacao.ParamByName('DESCONTO').AsFloat := DadosItem.Items[k].ValorDescontado;
qryGravaItemCotacao.ParamByName('PERCDESCONTO').AsFloat := DadosItem.Items[k].Desconto;
qryGravaItemCotacao.ParamByName('VALTOTCOTACAONEG').AsFloat := 0;
qryGravaItemCotacao.ParamByName('CODCOTACAO').AsString := Orcamento.CodCotacao;
qryGravaItemCotacao.ParamByName('CODCOLIGADA').AsInteger := CorporeRM.Coligada;
qryGravaItemCotacao.ParamByName('STSITEM').AsInteger := DadosItem.Items[k].Status;
//
qryGravaItemCotacao.ParamByName('CFOVENCEDOR').AsFloat := DadosItem.Items[k].Quantidade;
qryGravaItemCotacao.ParamByName('VALTOTCOTACAO').AsFloat := 0; //
(DadosItem.Items[k].Unitario * DadosItem.Items[k].Quantidade);
qryGravaItemCotacao.ParamByName('CODCPGNEGOCIADA').AsString := CodCpg;
qryGravaItemCotacao.ParamByName('CODCPG').AsString := CodCpg;
qryGravaItemCotacao.ExecSQL;
except
MessageDlg('Erro ao tentar gravar o item "' + IntToStr(K) + '" desta
Cotação: '+ Exception(exceptobject).message, mtError, [mbOk], 0);
end;
end
end;
except
MessageDlg('Erro ao tentar gravar os dados nesta Cotação: '+ Exception(exceptobject).message, mtError, [mbOk], 0);
end;
except
MessageDlg('Erro ao tentar ler os dados para esta Cotação: '+ Exception(exceptobject).message, mtError, [mbOk], 0);
end;
//
end;
finally
MessageDlg('Importação realizada com sucesso!', mtInformation, [mbOk], 0);
CloseFile(fi);
SetStatusCotacao(Orcamento.CodCotacao,5);
//
BackupName := ExtractFileName(eFileName.text);
BackupName := ChangeFileExt(BackupName, '.old');
if not RenameFile(eFileName.text, BackupName) then
raise Exception.Create('Não foi possível renomear o arquivo já importado!');
//
end;
end;
cotação. Para isto iremos mexer em duas tabelas: TCORCAMENTO e TCITMORCAMENTO.
Você deve usar a seguinte sentença SQL para gravar os dados na TCORCAMENTO:
update TCORCAMENTO SET VALPRAZOENTREGA = :VALPRAZOENTREGA, DATENTREGA = :DATENTREGA, CODCPG = :CODCPG, VALFRETE = :VALFRETE, FRETECIFOUFOB = :FRETECIFOUFOB, VALTRB = :VALTRB where CODCOTACAO = :CODCOTACAO and CODCOLIGADA = :CODCOLIGADA and CODCFO = :CODCFO
E, para gravar na TCITMORCAMENTO:
update TCITMORCAMENTO set VALCOTACAO = :VALCOTACAO,VALNEGOCIADO = :VALNEGOCIADO, VALTRB = :VALTRB,DESCONTO = :DESCONTO, PERCDESCONTO = :PERCDESCONTO, VALTOTCOTACAONEG =:VALTOTCOTACAONEG, CODMOEDA = 'R$', CODCPG = :CODCPG, CODCPGNEGOCIADA = :CODCPGNEGOCIADA, STSITEM = 0, VALTOTCOTACAO = :VALTOTCOTACAO where CODCOTACAO = :CODCOTACAO and CODCOLIGADA = :CODCOLIGADA and CODCFO = :CODCFO and IDPRD = :IDPRD
Atente para o campo STSITEM da Tabela. Você pode gravar o valor 0 para ele ser atualizado na cotação ou então usar uma regra conforme o que você importar na planilha.
0 = Cotado
1 = Não fornece
2 = Não cotou
4 = Desqualificado
Depois você deve usar aquela mesma rotina de mudança de status da cotação e muda para o status 5 (Em negociação). E pronto!
É isso aí. Peixe mais bem pescado que este não vão encontrar em lugar algum :)
25.9.07
Alterar o número de uma Nota fiscal no RM Núcleus
DECLARE @iIDMOV INT
DECLARE @fVALOR FLOAT
DECLARE @iCODFILIAL INT
DECLARE @fNOVANOTA VARCHAR(8)
DECLARE @dDATAEMISSAO DATETIME
SET @fNOVANOTA = '005819'
SET @iCODFILIAL = 16;
SET @dDATAEMISSAO = '06/13/2007'
SET @iIDMOV = (select IDMOV from TMOV where numeromov = '005819' and codfilial = @iCODFILIAL and codtmv = '2.2.01');
update TMOV set NUMEROMOV = @fNOVANOTA, DATAEMISSAO = @dDATAEMISSAO, DATASAIDA = @dDATAEMISSAO, DATACONTABILIZACAO = @dDATAEMISSAO where idmov = @iIDMOV
update FLAN set NUMERODOCUMENTO = @fNOVANOTA + '-A' where IDMOV = @iIDMOV
update CLCTLOTE set DOCUMENTO = @fNOVANOTA, COMPLEMENTO = @fNOVANOTA + SUBSTRING(COMPLEMENTO,7,40) where CODFILIAL = @iCODFILIAL and LCTREF in (select LCTREF from TMOVCONT where idmov = @iIDMOV)
31.8.07
Exclui um funcionario cadastrado no RM Labore
EXCLUIRFUNCIONARIO '025874'
CREATE PROCEDURE EXCLUIRFUNCIONARIO (
@sCHAPA VARCHAR(6)
)
AS
BEGIN
DECLARE @iCODCOLIGADA INT;
SET @iCODCOLIGADA = 2;
DELETE FROM AABONFUN WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM AAFHTFUN WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM AATUALFUN WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM ABANCOHORFUN WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM ABATFUN WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM ABATREFFUN WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM ABATVIS WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM ACOMPFUN WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM AEAUTFUN WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM AEESPFUN WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM AFOLGFUN WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM AINTEXTRA WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM AIREFFUN WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM AJUSTFUN WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM AMOVFUN WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM AOCORREN WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM APERFUN WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM APERMFUN WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM AREFFUN WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM AREFVIS WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM ARELBANCOHOR WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM ARELFUN WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM ASECVIS WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM AUSOPROV WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPAFUNC = @sCHAPA
DELETE FROM APARFUN WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM FCFO WHERE CODCOLCHAVESESTRANG = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM IBEMFUNC WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
-- DELETE FROM KAPONTAFUNCIONARIO WHERE CODCOLCHAPA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM PDADQUIOSQUE WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM PFAAS WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM PFADICFER WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM PFAVISO WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM PFCODFIX WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM PFCOMPL WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM PFDEPEVENTOS WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM PFDEPMOV WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM PFDEPENDCOMPL WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM PFDEPEND WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM PFEMPRT WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
-- DELETE FROM PFENCAR WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM PFFERIAS WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM PFPERFER WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM PFFERPROG WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM PFFINANC WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM PFMOVCC WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM PFMOVCCCOMPL WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM PFPERFF WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM PFFINANCCOMPL WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM PFPERFFCOMPL WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM PFHSTAFT WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM PFHSTCSD WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM PFHSTFCO WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM PFHSTFER WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM PFHSTHOR WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM PFHSTNDP WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM PFHSTPROV WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM PFHSTSAL WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM PFHSTSEC WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM PFHSTSIT WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM PFMOVTOMADOR WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM PFRATEIOFIXO WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM PFRATEIOTOMADOR WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM PFSALCMP WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM PFSUBSTITUICAO WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM PFUNCVAL WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM PFVALETR WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM PFVERBAS WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM PFVERBASCOMPL WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM PPARDIRF WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPAFUNC = @sCHAPA
DELETE FROM PSUBSTCHEFE WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPASUBST = @sCHAPA
DELETE FROM TITMMOV WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM VADVERTENCIA WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM VBENEFFUNC WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM VCURSOSPESSOAIS WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM VDISTRVERBATREINA WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM VFUNCIONARIO WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM VMOVFUNC WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM VOCORRENCIA WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM VRANKFUNCIONAL WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM VTAREFAPESSOAL WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM VHISTPOSTOPFUNC WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM PFENCARGO WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM PHSTOCORRENCIA WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
DELETE FROM PFUNC WHERE CODCOLIGADA = @iCODCOLIGADA AND CHAPA = @sCHAPA
END
Exclui lançamentos duplicados no Saldus gerados pelo Nucleus
DECLARE @iIDMOV INT
DECLARE @fVALOR FLOAT
DECLARE @iCODFILIAL INT
DECLARE @sCODCONTA VARCHAR(20)
DECLARE @iLCTREF INT
DECLARE @sNUMEROMOV VARCHAR(6)
SET @iCODFILIAL = 4;
SET @sCODCONTA = '3.1.1.010.0004'
SET @sNUMEROMOV = '023053'
SET @iIDMOV = (select IDMOV from TMOV where numeromov = @sNUMEROMOV and codfilial = @iCODFILIAL and codtmv = '2.2.01');
SET @iLCTREF = (select LCTREF from TMOVCONT where idmov = @iIDMOV and CODCONTA = @sCODCONTA)
delete from TMOVCONT where IDMOV in (select idmov FROM TMOV where codlote is null and DATAEMISSAO >= '2006-04-01 00:00:00.000' and codcoligada = 2 and codfilial = 4 and codtmv = '2.2.01')
delete from CLCTLOTE WHERE CODFILIAL = 4 and DOCUMENTO in (select numeromov FROM TMOV where codlote is null and DATAEMISSAO >= '2006-04-01 00:00:00.000' and codcoligada = 2 and codfilial = 4 and codtmv = '2.2.01')
Excluindo um lançamento no RM Fluxus
EXCLUIRMOVIMENTOFLUXUS 158547, 0,2
CREATE PROCEDURE EXCLUIRMOVIMENTOFLUXUS (
@iIDLAN INT,
@STATUSMOVIMENTO VARCHAR(1),
@iCODFILIAL INT
)
AS
BEGIN
DECLARE @iCODCOLIGADA INT;
SET @iCODCOLIGADA = 2;
DELETE FROM FLANRATCCU WHERE IDLAN = @iIDLAN
DELETE FROM FLANCONT WHERE codcoligada = @iCODCOLIGADA and codfilial = @iCODFILIAL and IDLAN = @iIDLAN
DELETE FROM FLANRATDEP WHERE codfilial = @iCODFILIAL and IDLAN = @iIDLAN
DELETE FROM FLAN WHERE codfilial = @iCODFILIAL and IDLAN = @iIDLAN
END
Excluindo um movimento no Núcleus que tenha vínculo com outros módulos do RM
Para executá-la use a seguinte sintaxe no Query Analyxer:
EXCLUIRMOVIMENTOMANUALMENTE '002547', '2.2.01', 'Q', 4
CREATE PROCEDURE EXCLUIRMOVIMENTOMANUALMENTE (
@NUMEROMOVIMENTO VARCHAR(6),
@TIPOMOVIMENTO VARCHAR(6),
@STATUSMOVIMENTO VARCHAR(1),
@CODIGOFILIAL INTEGER
)
/*Excluir movimento manualmente*/
AS
BEGIN
DECLARE @IDMOVIMENTO INTEGER;
SET @IDMOVIMENTO = (SELECT IDMOV FROM TMOV WHERE CODFILIAL = @CODIGOFILIAL AND CODTMV = @TIPOMOVIMENTO
AND STATUS = @STATUSMOVIMENTO AND NUMEROMOV = @NUMEROMOVIMENTO);
DELETE FLANRATCCU WHERE IDLAN in (SELECT IDLAN FROM FLAN WHERE IDMOV in(SELECT IDMOV FROM TMOV
WHERE IDMOV IN (@IDMOVIMENTO)))
DELETE FLANRATDEP WHERE IDLAN in (SELECT IDLAN FROM FLAN WHERE IDMOV in(SELECT IDMOV FROM TMOV
WHERE IDMOV IN (@IDMOVIMENTO)))
DELETE FLANCONT WHERE IDLAN in (SELECT IDLAN FROM FLAN WHERE IDMOV in(SELECT IDMOV FROM TMOV
WHERE IDMOV IN (@IDMOVIMENTO)))
DELETE FLAN WHERE IDLAN in (SELECT IDLAN FROM FLAN WHERE IDMOV in(SELECT IDMOV FROM TMOV
WHERE IDMOV IN (@IDMOVIMENTO)))
DELETE TMOVRATDEP WHERE IDMOV IN (@IDMOVIMENTO)
DELETE TMOVRATCCU WHERE IDMOV IN (@IDMOVIMENTO)
DELETE TTRBMOV WHERE IDMOV IN (@IDMOVIMENTO)
DELETE TITMMOVCOMPL WHERE IDMOV IN (@IDMOVIMENTO)
DELETE TITMMOV WHERE IDMOV IN (@IDMOVIMENTO)
DELETE TMOVRELAC WHERE IDMOVDESTINO IN (@IDMOVIMENTO)
DELETE TMOVHISTORICO WHERE IDMOV IN (@IDMOVIMENTO)
DELETE TMOVCOMPL WHERE IDMOV IN (@IDMOVIMENTO)
DELETE TITMMOVRELAC WHERE IDMOVDESTINO IN (@IDMOVIMENTO)
DELETE TMOVFISCAL WHERE IDMOV IN (@IDMOVIMENTO)
DELETE TMOVRESUMOTRBIT WHERE IDMOV IN (@IDMOVIMENTO)
DELETE TMOVCONT WHERE IDMOV IN (@IDMOVIMENTO)
/*Retira relacionamento*/
UPDATE TMOV SET IDMOVRELAC = NULL WHERE IDMOVRELAC IN (@IDMOVIMENTO)
/*'Atualiza OC com status A Faturar' e 'Atualiza OC com Quantidade Original'*/
UPDATE TMOV SET status = 'A' WHERE CODTMV = '2.1.09' AND IDMOVRELAC IN (@IDMOVIMENTO)
/*'Exclusao especial'*/
DELETE CLCTLOTE WHERE INTEGRACHAVE IN (SELECT RTRIM(LTRIM(STR(IDMOV))) FROM TMOV
WHERE CODFILIAL = @CODIGOFILIAL AND CODTMV = @TIPOMOVIMENTO AND NUMEROMOV = @NUMEROMOVIMENTO)
DELETE CLANCA WHERE LCTREF IN (@IDMOVIMENTO)
DELETE TMOV WHERE IDMOV IN(@IDMOVIMENTO)
END
