Nós temos uma baixa por lote em nosso módulo de contas a pagar e usamos uma consulta com o botão run para processar os registros selecionados e baixa-los.
Não vejo problema nesse recurso.
Meu superior autorizou colar o código aqui de como usamos esse recurso:
ONSCRIPTINIT:
[_ids]=:"";
ONRECORD DO BOTÃO RUN:
[_ids].={id_contas_pagar}.",";
ONFINISH DO BOTÃO RUN:
[code]sc_confirm (“Deseja realmente baixar os títulos selecionados?”);
$_banco=MySession(“Banco”);
$_cheque=MySession(“Cheque”);
$_ids=str_replace(",","",[_ids].",");
[_ids]="";
sc_lookup(ds, “select ce.id_historico, h.descricao from nm_configuracao_eventos ce, nm_historicos h where ce.id_historico = h.id_historico and id_config_evento = 1”);
If({ds} != False) {
$_id_historico = $ds[0][0];
$_desc_historico = $ds[0][1];
}
sc_select(campos,
“SELECT cp.id_contas_pagar,cp.numero_documento,cp.valor,cp.caixa_pgto,cp.banco_pgto,cp.agencia_pgto,cp.cheque_pgto,cp.conta_bancaria_pgto,
f.fn_fantasia,cp.id_conta_caixa,cp.id_centro_custo
FROM nm_contas_pagar cp inner join fornecedores f on cp.id_fornecedor=f.fn_codigo
WHERE cp.id_contas_pagar in ($_ids) and cp.valor_pgto=0”);
if ($campos === false)
{
echo "Erro de acesso. Mensagem = " . {campos_erro};
}
else
{
while (!$campos->EOF){
$_id_contas_pagar = $campos->fields[0];
$_nro_documento = $campos->fields[1];
$_valor_pgto = $campos->fields[2];
$_caixa_pgto = $campos->fields[3];
$_banco_pgto = $campos->fields[4];
$_agencia_pgto = $campos->fields[5];
$_cheque_pgto = $campos->fields[6];
$_conta_bancaria_pgto = $campos->fields[7];
$_fn_fantasia = $campos->fields[8];
$_id_conta_caixa = $campos->fields[9];
$_id_centro_custo = $campos->fields[10];
if ($_banco!='')
{
$_Caixa_Pgto=4;
sc_lookup(dset,"SELECT agencia,conta_corrente,banco FROM nm_contas_bancarias where id_conta=$_banco");
If ( $dset != False && !empty($dset) )
{
$_agencia=$dset[0][0];
$_conta_corrente=$dset[0][1];
$_banco_cod=$dset[0][2];
}
If (!empty([_cheque]))
{ $_nro_documento.="[CH:".$_cheque."]";}
sc_exec_sql
(
"insert into nm_lancamentos_bancarios (
id_conta, data_lancamento, tipo, id_historico, favorecido, numero_documento, pre_datado, bom_para, valor, id_conta_caixa, id_centro_custo, id_banco)
values
($_banco,current_date,2,$_id_historico,'$_fn_fantasia','$_nro_documento','N',null,$_valor_pgto,'$_id_conta_caixa','$_id_centro_custo',$_banco)"
);
}
else
{
$_Caixa_Pgto=3;
$_agencia="";
$_conta_corrente="";
$_banco_cod="";
sc_exec_sql(
"insert into nm_lancamentos_caixa
(data_lancamento, id_conta_caixa, id_centro_custo, historico, numero_documento, valor, tipo)
values (CURRENT_DATE, '$_id_conta_caixa', '$_id_centro_custo', '$_desc_historico', '$_numero_documento',$_valor_pgto, 2)");
}
sc_exec_sql("Update nm_contas_pagar Set
Data_pgto=CURRENT_DATE
,Valor_Pgto=$_valor_pgto
,Caixa_Pgto='$_Caixa_Pgto'
,Banco_Pgto='$_banco'
,Agencia_Pgto='$_agencia'
,Conta_Bancaria_pgto='$_conta_corrente'
,Cheque_Pgto='$_cheque'
where id_contas_pagar=$_id_contas_pagar");
$campos->MoveNext();
}
$campos->Close();
}
$_sql=“Update nm_contas_bancarias set dataultlancamento=now() where id_conta=’$_banco’”;
sc_exec_sql($_sql);[/code]
- nas versões 6 e 7 não necessita da macro sc_confirm.
No filtro da consulta criamos campos manuais para informar o banco e conta corrente,nro do cheque de pagamento se houver, a empresa e a data da baixa.
Todos os registros serão baixados com os valores desses campos.
Valores de apropriação da conta como plano de contas, centro de custos vem de uma tabela de parâmetros.
O sistema permite apropriar a conta depois de baixada.
Em nosso caso, executamos a baixa após a confirmação do botão RUN (sc_confirm).
Você pode fazer um select para totalizar os ids selecionados e colocar na mensagem de confrmação ou redirecionar passando os ids selecionados para uma app de controle onde você mostra os totais e ao clicar Ok vc efetua a baixa.