diff --git a/ca/ca3300a.rep b/ca/ca3300a.rep
index b7fa56a4f..4beaa048a 100755
--- a/ca/ca3300a.rep
+++ b/ca/ca3300a.rep
@@ -1,6 +1,6 @@
- Bilancio normale di verifica
+ Bilancio di raffronto di verifica
@@ -67,24 +67,6 @@
-
- SALDO:INI_DARE
-
-
- SALDO:INI_AVERE
-
-
- SALDO:MOV_DARE
-
-
- SALDO:MOV_AVERE
-
-
- SALDO:FIN_DARE
-
-
- SALDO:FIN_AVERE
-
CODCONTO
CA_FORMAT_CONTO
@@ -92,6 +74,60 @@
DESCR
+
+ SALDO:INI_DAREP
+
+
+ SALDO:INI_AVEREP
+
+
+ SALDO:MOV_DAREP
+
+
+ SALDO:MOV_AVEREP
+
+
+ SALDO:FIN_DAREP
+
+
+ SALDO:FIN_AVEREP
+
+
+ SALDO:INI_DAREC
+
+
+ SALDO:INI_AVEREC
+
+
+ SALDO:MOV_DAREC
+
+
+ SALDO:MOV_AVEREC
+
+
+ SALDO:FIN_DAREC
+
+
+ SALDO:FIN_AVEREC
+
+
+ #103-#203
+
+
+ #104-#204
+
+
+ #105-#205
+
+
+ #106-#206
+
+
+ #107-#207
+
+
+ #108-#208
+
@@ -117,4 +153,4 @@
USE PCONANA SELECT LEN(CODCONTO)=10
-
+
\ No newline at end of file
diff --git a/ca/ca3900.cpp b/ca/ca3900.cpp
new file mode 100755
index 000000000..d017b53c1
--- /dev/null
+++ b/ca/ca3900.cpp
@@ -0,0 +1,149 @@
+#include
+#include
+#include
+#include
+
+#include "movana.h"
+#include "pconana.h"
+#include "rmovana.h"
+
+#include "ca3.h"
+#include "calib01.h"
+
+////////////////////////////////////////////////////////
+// APPLICAZIONE
+////////////////////////////////////////////////////////
+class TRandom_ca : public TSkeleton_application
+{
+protected:
+ void kill_bill();
+
+public:
+ virtual void main_loop();
+};
+
+void TRandom_ca::kill_bill()
+{
+ const int lnum[3] = { LF_MOVANA, LF_RMOVANA, LF_SALDANA };
+ for (int i = 0; i < 3; i++)
+ {
+ TSystemisamfile f(lnum[i]);
+ f.zap();
+ }
+}
+
+void TRandom_ca::main_loop()
+{
+ TMask mask("Movimenti casuali ma perfetti", 1, 60, 6);
+
+ TReal_field& add_number (short id, int page, const char* prompt, int x, int y, int dim, const char* flags = "", int ndec = 0);
+ mask.add_number(101, 0, "Numero di movimenti ", 1, 1, 4, "U");
+ mask.add_static (DLG_NULL, 0, "@bAttenzione: verranno distrutti movimenti e saldi", 1, 3);
+ mask.add_button(DLG_OK, 0, "", -12, -1, 10, 2);
+ mask.add_button(DLG_QUIT, 0, "", -22, -1, 10, 2);
+ if (mask.run() == K_QUIT)
+ return;
+
+ kill_bill();
+
+ const TMultilevel_code_info& info = ca_multilevel_code_info(LF_PCONANA);
+ TString filter;
+ int len = 0;
+ for (int l = info.levels()-1; l >= 0; l--)
+ len += info.len(l);
+ filter << "LEN(CODCONTO)==" << len;
+
+ TRelation relconti(LF_PCONANA);
+ TCursor curconti(&relconti, filter);
+ const TRecnotype conti = curconti.items();
+ curconti.freeze();
+
+ TRelation relcaus(LF_CAUSALI);
+ TCursor curcaus(&relcaus, "MOVIND=\"X\"");
+ const TRecnotype causali = curcaus.items();
+ curcaus.freeze();
+
+ TEsercizi_contabili esc;
+
+ const int quanti = (mask.get_int(101)+1)/2;
+ TProgind pi(quanti, "Generazione in corso", FALSE, TRUE);
+ for (int m = 0; m < quanti; m++)
+ {
+ pi.addstatus(1);
+ TAnal_mov mov;
+
+ TDate data(TODAY); data -= rand()%365;
+ mov.put(MOVANA_DATAREG, data);
+ mov.put(MOVANA_DATACOMP, data-1L);
+ mov.put(MOVANA_DATADOC, data-2L);
+ mov.put(MOVANA_ANNOES, esc.date2esc(data));
+ mov.put(MOVANA_DESCR, "Movimento random preventivo");
+ mov.put(MOVANA_TIPOMOV, "P");
+ if (causali > 0)
+ {
+ curcaus = rand() % causali;
+ mov.put(MOVANA_CODCAUS, curcaus.curr().get("CODCAUS"));
+ }
+
+ const int rows = rand()%10+1;
+ TImporto tot;
+ int i;
+ for (i = 0; i < rows; i++)
+ {
+ TRectype& rmov = mov.new_row();
+ rmov.put(RMOVANA_DATACOMP, mov.get(MOVANA_DATACOMP));
+ rmov.put(RMOVANA_ANNOES, mov.get(MOVANA_ANNOES));
+
+ TString80 descr; descr.format("Riga casuale %d", i+1);
+ rmov.put(RMOVANA_DESCR, descr);
+
+ curconti = rand() % conti;
+ rmov.put(RMOVANA_CODCONTO, curconti.curr().get(PCONANA_CODCONTO));
+ const TImporto imp(i & 0x1 ? 'A' : 'D', real(10*(rand()%1000+1)));
+ rmov.put(RMOVANA_SEZIONE, imp.sezione());
+ rmov.put(RMOVANA_IMPORTO, imp.valore());
+ tot += imp;
+ }
+
+ tot.normalize();
+ mov.put(MOVANA_SEZIONE, tot.sezione());
+ mov.put(MOVANA_TOTDOC, tot.valore());
+
+ TLocalisamfile fmov(LF_MOVANA);
+ mov.write(fmov);
+
+ // Consuntivo
+ mov.put(MOVANA_NUMREG, mov.get_long(MOVANA_NUMREG)+1);
+ data += rand()%30+30;
+ mov.put(MOVANA_DATAREG, data);
+ mov.put(MOVANA_DATACOMP, data-1L);
+ mov.put(MOVANA_DATADOC, data-2L);
+ mov.put(MOVANA_ANNOES, esc.date2esc(data));
+ mov.put(MOVANA_DESCR, "Movimento random consuntivo");
+ mov.put(MOVANA_TIPOMOV, "");
+
+ tot.set('D', ZERO);
+ for (i = 1; i <= rows; i++)
+ {
+ TRectype& rmov = mov.body()[i];
+ rmov.put(RMOVANA_ANNOES, mov.get(MOVANA_ANNOES));
+ rmov.put(RMOVANA_DATACOMP, mov.get(MOVANA_DATACOMP));
+ real imp = rmov.get(RMOVANA_IMPORTO);
+ imp += real((rand()%100)-50);
+ rmov.put(RMOVANA_IMPORTO, imp);
+ tot += TImporto(rmov.get_char(RMOVANA_SEZIONE), imp);
+ }
+ tot.normalize();
+ mov.put(MOVANA_SEZIONE, tot.sezione());
+ mov.put(MOVANA_TOTDOC, tot.valore());
+
+ mov.write(fmov);
+ }
+}
+
+int ca3900(int argc, char* argv[])
+{
+ TRandom_ca a;
+ a.run(argc, argv, TR("Movimenti casuali ma perfetti"));
+ return 0;
+}
diff --git a/ca/calib02.cpp b/ca/calib02.cpp
index d95ab2cf8..33a4eb7e3 100755
--- a/ca/calib02.cpp
+++ b/ca/calib02.cpp
@@ -359,7 +359,7 @@ const TSaldanal& ca_saldo(const char* conto, const char* costo,
const TDate& dal, const TDate& al, word tipi)
{
static TSaldi_cache* cache = NULL;
- if (cache = NULL)
+ if (cache == NULL)
cache = new TSaldi_cache;
return cache->saldo(conto, costo, commessa, fase, dal, al, tipi);
}