diff --git a/si/si0200.cpp b/si/si0200.cpp index 7c8eb0cc3..0c412a8b6 100755 --- a/si/si0200.cpp +++ b/si/si0200.cpp @@ -102,6 +102,7 @@ void TListe_application::set_limits() { TCursor * c = _form->cursor(); TRelation * r = c->relation(); + const int headlnum = r->lfile().num(); TString16 tipo(_select_mask->get(F_TIPOCF)); TString16 cli_fr(_select_mask->get(F_CODFR)); TString16 cli_to(_select_mask->get(F_CODTO)); @@ -109,31 +110,56 @@ void TListe_application::set_limits() from.put("TIPOCF", tipo); TRectype to(from); - if (cli_fr.empty() && cli_to.empty()) - { - TString16 rag_fr(_select_mask->get(F_RAGSOCFR)); - if (rag_fr.not_empty()) - from.put("RAGSOC", rag_fr); - TString16 rag_to(_select_mask->get(F_RAGSOCTO)); - if (rag_to.not_empty()) - to.put("RAGSOC", rag_to); - c->setkey(2); + TString filter("("); + if (headlnum == LF_DOC) + { + if (cli_fr.empty() && cli_to.empty()) + { + TString16 rag_fr(_select_mask->get(F_RAGSOCFR)); + if (rag_fr.not_empty()) + filter << format("&&(20->RAGSOC>=\"%s\")", (const char *) rag_fr); + TString16 rag_to(_select_mask->get(F_RAGSOCTO)); + if (rag_to.not_empty()) + filter << format("&&(20->RAGSOC<=\"%s\")", (const char *) rag_to); + } + else + { + TString16 cli_fr(_select_mask->get(F_CODFR)); + if (cli_fr.not_empty()) + from.put("CODCF", cli_fr); + TString16 rag_to(_select_mask->get(F_CODTO)); + if (rag_to.not_empty()) + to.put("CODCF", cli_to); + c->setkey(2); + } + c->setregion(from, to); } else { - TString16 cli_fr(_select_mask->get(F_CODFR)); - if (cli_fr.not_empty()) - from.put("CODCF", cli_fr); - TString16 rag_to(_select_mask->get(F_CODTO)); - if (rag_to.not_empty()) - to.put("CODCF", cli_to); - c->setkey(1); - } - c->setregion(from, to); - TString filter; + if (cli_fr.empty() && cli_to.empty()) + { + TString16 rag_fr(_select_mask->get(F_RAGSOCFR)); + if (rag_fr.not_empty()) + filter << format("&&(20->RAGSOC>=\"%s\")", (const char *) rag_fr); + TString16 rag_to(_select_mask->get(F_RAGSOCTO)); + if (rag_to.not_empty()) + filter << format("&&(20->RAGSOC<=\"%s\")", (const char *) rag_to); + } + else + { + TString16 cli_fr(_select_mask->get(F_CODFR)); + if (cli_fr.not_empty()) + from.put("CODCF", cli_fr); + TString16 rag_to(_select_mask->get(F_CODTO)); + if (rag_to.not_empty()) + to.put("CODCF", cli_to); + } + } + if (filter != "(") + filter << "&&"; + filter << format("(ANNO==%d)", _select_mask->get_int(F_ANNO)); + filter << format("&&(PROVV==\"%c\")", _select_mask->get(F_PROVV)[0]); - filter << format("((33->ANNO==%d)", _select_mask->get_int(F_ANNO)); - filter << format("&&(33->PROVV==\"%c\")", _select_mask->get(F_PROVV)[0]); TSheet_field & s = _select_mask->sfield(F_SHEETNUMS); const int rows = s.items(); @@ -149,7 +175,7 @@ void TListe_application::set_limits() if (riga.empty_items() || sw.empty()) break; // Interrompe alla prima riga vuota... - e1.format("(33->CODNUM==\"%s\"", (const char*)sw); + e1.format("(CODNUM==\"%s\"", (const char*)sw); e2 = ""; for (int k=1; k<=6; k++) // Famme vede' li stati generali... Aho' A BURINO! Che e' la Rivoluzione Francese? { @@ -179,16 +205,16 @@ void TListe_application::set_limits() } TDate data_fr(_select_mask->get(F_DA_DATADOC)); if (data_fr.ok()) - filter << format("&&(ANSI(33->DATADOC)>=%s)", (const char *) data_fr.string(ANSI)); + filter << format("&&(ANSI(33->DATADOC)>=\"%s\")", (const char *) data_fr.string(ANSI)); TDate data_to(_select_mask->get(F_A_DATADOC)); if (data_to.ok()) - filter << format("&&(ANSI(33->DATADOC)>=%s)", (const char *) data_to.string(ANSI)); - TDate art_fr(_select_mask->get(F_SERVFR)); - if (art_fr.ok()) + filter << format("&&(ANSI(33->DATADOC)<=\"%s\")", (const char *) data_to.string(ANSI)); + TString80 art_fr(_select_mask->get(F_SERVFR)); + if (art_fr.not_empty()) filter << format("&&(34->CODARTMAG>=\"%s\")", (const char *) art_fr); - TDate art_to(_select_mask->get(F_SERVTO)); - if (art_to.ok()) - filter << format("&&(34->CODARTMAG>=\"%s\")", (const char *) art_to); + TString80 art_to(_select_mask->get(F_SERVTO)); + if (art_to.not_empty()) + filter << format("&&(34->CODARTMAG<=\"%s\")", (const char *) art_to); filter << ")"; c->setfilter(filter, TRUE);