Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    numerazione progressiva annuale

    salve a tutti..ho un piccolo problemino. ho creato un web che faccio girare in un server della mia azienda con il quale gestisco la posta in entrata. la posta deve avere un numero di protocolllo (un numero progressivo che con il cambio dell'anno si riazzeri e riparta da 1). il tutto è stato creato con dreamweaver mx con pagine asp e db access 2000. per adesso il numero di protocollo viene assegnato manualmente (nella pagina inserisci posta, vi è un recordset filtrato per ultimo numero di protocollo e data). questo però causa problemi se qualcuno inserisce un numero diverso (perdo la progressione). vorrei che questo numero potesse essere automatizzato ogni qual volta vado nella pagina inserisci posta. i campi che utilizzo sono: nrcontrollo (numerico, indicizzato si e duplicati ammessi), dataentrata (data dd/mm/aaaa per la quale ho gia una funzione che mi restituisce la data odierna) ed altri campi relativi alla posta in entrata....
    a questo punto mi servirebbe il codice (ed il punto dove inserirlo) che mi genera il numero progressivo e cioè: se la data dell'ultimo nrcontrollo è uguale all'anno in corso allora nrcontrollo + 1, se la dataentrata dell'ultimo nrcontrollo è dell'anno prima allora nrcontrollo=1.
    la dataentrata (data di registrazione della posta) è già automatica nella pagina inserisci posta con questo script:

    <script>
    function den(){
    var now = new Date();
    var giorno = now.getDate();
    var mese = now.getMonth() + 1;
    var anno = now.getFullYear();

    if(giorno<10) giorno = "0"+giorno; //aggiunge lo 0 ai giorni che possono essere scritti con un solo numero
    if(mese<10) mese = "0"+mese; //aggiunge lo 0 ai mesi che possono essere scritti con un solo numero
    document.form1.dataentrata.value=giorno + "/" + mese + "/" + anno + " ";
    }
    onload=den
    </script>
    mi chiedo se sia compatibile questo codice con quello per la numerazione progressiva o se sia integrabile.

  2. #2
    Domanda: non conviene far assegnare in automatico all'inserimento nel database il numero di protocollo attraverso un campo il cui valore viene assegnato da uno script ASP?

    Potresti salvarlo in un file di testo sul server e ogni primo gennaio azzerarlo con un banale if.

    Secondo me JavaScript non è la via giusta. Metti caso che un utente disabiliti (volontariamente o meno) JS nel suo browser. Come fai ad assegnare il numero di protocollo all'email?

  3. #3
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    Ma scusa non ti conviene farlo lato server?

    Fai una query tipo

    select MAX(num_progressivo) from tabella group by anno

    Cosi' avrai una serie di record che contengono il num progressivo piu' alto per l'anno.

    Ovviamente nn conoscendo la tabella ho ipotizzato che tu abbia una colonna anno.
    Se nn la hai dovrai fare dei filtri diversi.

    Dovrai anche considerare se e' effettivamente necessario dare subito il codice.
    Se infatti sono molti utenti diversi che usano il sistema allora dovrai far generare il codice in automatico senza che l'utente possa modificarlo e quindi vedere il codice in fase di inserimento dati.

    Non conosco access in quanto non ho mai dovuto lavorarci sopra grazie a dio e ti consiglio di evitarlo se proprio devi usare dm di microsoft usa MS-sql che e' molto meglio.

    Cmq senza andare OT ti consiglio vivamente di non lasciare all'utente il controllo di quel codice ma di automatizzarlo se possibile gia' nella base di dati con un campo tipo auto_increment sql (o equivalente in access).
    Oppure con un controllo via codice, ma sempre e comunque fallo lato server.

  4. #4
    Originariamente inviato da Napolux
    Domanda: non conviene far assegnare in automatico all'inserimento nel database il numero di protocollo attraverso un campo il cui valore viene assegnato da uno script ASP?

    Potresti salvarlo in un file di testo sul server e ogni primo gennaio azzerarlo con un banale if.

    Secondo me JavaScript non è la via giusta. Metti caso che un utente disabiliti (volontariamente o meno) JS nel suo browser. Come fai ad assegnare il numero di protocollo all'email?
    infatti, a me serve il nrcontrollo (o protocollo) che si generi in automatico, ma non dal db, direttamente dalla pagina inserisci atto.
    mi spiego. quando l'utente vede la pagina di inserimento nuovo atto (o record), deve già visualizzare (ovviamente nei rispettivi campi di testo) sia il nrcontrollo (o protocollo) assegnato all'atto e la dataentrata (automatica che già ho con lo script di prima). tenete presente che devo solo registrare posta cartacea e null'altro!
    grazia a quanti mi state rispondendo!!!!

  5. #5
    avevo già creato la select max(nrcontrollo) as lastinside che funziona e mi restituisce l'ultimo numero registrato. quello che a me serve avere nella pagina inserisci posta l'ultimo nrcontrollo
    - già incrementato di 1 se l'ultima dataentrata fa riferimento all'anno in corso (in riferimento alla data di sistema);
    - oppure parta da 1 se l'ultima dataentrata non fa riferimento all'anno in corso!!!
    esempio:
    ultimo atto registrato in db access chiamato Posta.mdb
    idatto=12
    nrcontrollo=415
    dataentrata=01/03/2009

    allora se oggi che inserisco un nuovo atto, siamo ancora nel 2009, nella pagina inserisci posta (inspostain.asp) i campi testo nel form1 dovrebbero apparire così:

    nrcontrollo=416 (in automatico in campo testo)
    dataentrata=10/03/2009 (in automatico in campo testo) (ipotizzando che la data di sistema sia 10/03/2009)
    ...altri campi liberi

    se invece oggi che inserisco un nuovo atto, siamo nel 2010, nella pagina inserisci posta (inspostain.asp) i campi testo nel form1 dovrebbero apparire così:

    nrcontrollo=1 (in automatico in campo testo)
    dataentrata=01/01/2010 (in automatico in campo testo)(ipotizzando che la data di sistema sia 01/01/2010)
    ...altri campi liberi

  6. #6
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    Si ma se lo fai dalla pagina naascono i problemi che hai descritto sopra.

    Se invece lo nascondi le lo fai inserire a tempo di salvataggio dati allora non ci sono problmemi perche' puoi bloccare la tabella da scrittura, quindi eseguire le istruziuoni, e sbloccare la tabella evitando collisioni con altre routines avviate in sql si puo' fare e addirittura si fa molto piu' tranquillamente usando la un campo auto_increment, quindi mantieni il numero progressivo senza dover uscire di testa.

    In access nn so bene come si possa fare cmq ti consiglio di farlo a tempo salvataggio dati.


    1 generi la pagina con i dati e senza codice
    2 fai inserire all'utente i dati che deve inserire
    3 salvi i dati
    3.1 INvio dati da form a script
    3.2 Connessione al db
    3.3 BLocco della tabella da scrittura
    3.5 Estrazione dell'ultimo codice
    3.6 Generazione del codice successivo
    3.7 Creazione query
    3.8 salvataggio dati
    3.9 Sblocco tabella
    4.0 Termina routine.


    Se fai cosi' non avrai problemi nemmeno in caso di accessi contemporanei.
    IN js o altra tecnica invece tu generi il codice prima e potrebbe succedere che un altro utente salvi con lo stesso codice a quel punto devi fare dei controlli per evitare collisioni etc e sinceramente non e' molto performante come soluzione.

  7. #7
    Originariamente inviato da Virus_101
    Si ma se lo fai dalla pagina naascono i problemi che hai descritto sopra.

    Se invece lo nascondi le lo fai inserire a tempo di salvataggio dati allora non ci sono problmemi perche' puoi bloccare la tabella da scrittura, quindi eseguire le istruziuoni, e sbloccare la tabella evitando collisioni con altre routines avviate in sql si puo' fare e addirittura si fa molto piu' tranquillamente usando la un campo auto_increment, quindi mantieni il numero progressivo senza dover uscire di testa.

    In access nn so bene come si possa fare cmq ti consiglio di farlo a tempo salvataggio dati.


    1 generi la pagina con i dati e senza codice
    2 fai inserire all'utente i dati che deve inserire
    3 salvi i dati
    3.1 INvio dati da form a script
    3.2 Connessione al db
    3.3 BLocco della tabella da scrittura
    3.5 Estrazione dell'ultimo codice
    3.6 Generazione del codice successivo
    3.7 Creazione query
    3.8 salvataggio dati
    3.9 Sblocco tabella
    4.0 Termina routine.


    Se fai cosi' non avrai problemi nemmeno in caso di accessi contemporanei.
    IN js o altra tecnica invece tu generi il codice prima e potrebbe succedere che un altro utente salvi con lo stesso codice a quel punto devi fare dei controlli per evitare collisioni etc e sinceramente non e' molto performante come soluzione.
    mi spiace essere così igno in materia... mi daresti il codice? se vuoi ti posso far dare un okkiata al codice della pagina inpostain.asp!?

  8. #8
    Originariamente inviato da gianfranco.79
    mi spiace essere così igno in materia... mi daresti il codice? se vuoi ti posso far dare un okkiata al codice della pagina inpostain.asp!?
    questo è il codice della pagina inserimento posta:
    <%@LANGUAGE="JAVASCRIPT" CODEPAGE="1252"%>

    <script>
    function den(){
    var now = new Date();
    var giorno = now.getDate();
    var mese = now.getMonth() + 1;
    var anno = now.getFullYear();

    if(giorno<10) giorno = "0"+giorno; //aggiunge lo 0 ai giorni che possono essere scritti con un solo numero
    if(mese<10) mese = "0"+mese; //aggiunge lo 0 ai mesi che possono essere scritti con un solo numero
    document.form1.dataentrata.value=giorno + "/" + mese + "/" + anno + " ";
    }
    onload=den
    </script>
    <%
    // *** Edit Operations: declare variables

    // set the form action variable
    var MM_editAction = Request.ServerVariables("SCRIPT_NAME");
    if (Request.QueryString) {
    MM_editAction += "?" + Request.QueryString;
    }

    // boolean to abort record edit
    var MM_abortEdit = false;

    // query string to execute
    var MM_editQuery = "";
    %>
    <%
    // *** Insert Record: set variables

    if (String(Request("MM_insert")) == "form1") {

    var MM_editConnection = MM_postaconnection_STRING;
    var MM_editTable = "PostaIn";
    var MM_editRedirectUrl = "/Posta/ins_ok.asp";
    var MM_fieldsStr = "nrcontrollo|value|dataentrata|value|iddipendente| value|idoggetto|value|idmittente|value|cittatto|va lue|protatto|value|datatto|value|insnote|value";
    var MM_columnsStr = "nrcontrollo|none,none,NULL|dataentrata|',none,NUL L|iddipendente|',none,''|idoggetto|',none,''|idmit tente|',none,''|cittatto|',none,''|protatto|',none ,''|datatto|',none,NULL|insnote|',none,''";

    // create the MM_fields and MM_columns arrays
    var MM_fields = MM_fieldsStr.split("|");
    var MM_columns = MM_columnsStr.split("|");

    // set the form values
    for (var i=0; i+1 < MM_fields.length; i+=2) {
    MM_fields[i+1] = String(Request.Form(MM_fields[i]));
    }

    // append the query string to the redirect URL
    if (MM_editRedirectUrl && Request.QueryString && Request.QueryString.Count > 0) {
    MM_editRedirectUrl += ((MM_editRedirectUrl.indexOf('?') == -1)?"?":"&") + Request.QueryString;
    }
    }
    %>
    <%
    // *** Insert Record: construct a sql insert statement and execute it

    if (String(Request("MM_insert")) != "undefined") {

    // create the sql insert statement
    var MM_tableValues = "", MM_dbValues = "";
    for (var i=0; i+1 < MM_fields.length; i+=2) {
    var formVal = MM_fields[i+1];
    var MM_typesArray = MM_columns[i+1].split(",");
    var delim = (MM_typesArray[0] != "none") ? MM_typesArray[0] : "";
    var altVal = (MM_typesArray[1] != "none") ? MM_typesArray[1] : "";
    var emptyVal = (MM_typesArray[2] != "none") ? MM_typesArray[2] : "";
    if (formVal == "" || formVal == "undefined") {
    formVal = emptyVal;
    } else {
    if (altVal != "") {
    formVal = altVal;
    } else if (delim == "'") { // escape quotes
    formVal = "'" + formVal.replace(/'/g,"''") + "'";
    } else {
    formVal = delim + formVal + delim;
    }
    }
    MM_tableValues += ((i != 0) ? "," : "") + MM_columns[i];
    MM_dbValues += ((i != 0) ? "," : "") + formVal;
    }
    MM_editQuery = "insert into " + MM_editTable + " (" + MM_tableValues + ") values (" + MM_dbValues + ")";

    if (!MM_abortEdit) {
    // execute the insert
    var MM_editCmd = Server.CreateObject('ADODB.Command');
    MM_editCmd.ActiveConnection = MM_editConnection;
    MM_editCmd.CommandText = MM_editQuery;
    MM_editCmd.Execute();
    MM_editCmd.ActiveConnection.Close();

    if (MM_editRedirectUrl) {
    Response.Redirect(MM_editRedirectUrl);
    }
    }

    }
    %>

    <%
    var dipendenti = Server.CreateObject("ADODB.Recordset");
    dipendenti.ActiveConnection = MM_postaconnection_STRING;
    dipendenti.Source = "SELECT dipendenti FROM dipendenti ORDER BY dipendenti ASC";
    dipendenti.CursorType = 0;
    dipendenti.CursorLocation = 2;
    dipendenti.LockType = 1;
    dipendenti.Open();
    var dipendenti_numRows = 0;
    %>
    <%
    var mittenti = Server.CreateObject("ADODB.Recordset");
    mittenti.ActiveConnection = MM_postaconnection_STRING;
    mittenti.Source = "SELECT mittenti FROM mittenti ORDER BY mittenti ASC";
    mittenti.CursorType = 0;
    mittenti.CursorLocation = 2;
    mittenti.LockType = 1;
    mittenti.Open();
    var mittenti_numRows = 0;
    %>
    <%
    var oggetto = Server.CreateObject("ADODB.Recordset");
    oggetto.ActiveConnection = MM_postaconnection_STRING;
    oggetto.Source = "SELECT oggetto FROM oggetto ORDER BY oggetto ASC";
    oggetto.CursorType = 0;
    oggetto.CursorLocation = 2;
    oggetto.LockType = 1;
    oggetto.Open();
    var oggetto_numRows = 0;
    %>
    <%
    var postain = Server.CreateObject("ADODB.Recordset");
    postain.ActiveConnection = MM_postaconnection_STRING;
    postain.Source = "SELECT * FROM PostaIn ORDER BY dataentrata DESC, nrcontrollo DESC";
    postain.CursorType = 0;
    postain.CursorLocation = 2;
    postain.LockType = 1;
    postain.Open();
    var postain_numRows = 0;
    %>
    <html>
    <head>
    <title>Documento senza titolo</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <script language="JavaScript" type="text/JavaScript">
    <!--
    function MM_findObj(n, d) { //v4.01
    var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
    if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
    for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
    if(!x && d.getElementById) x=d.getElementById(n); return x;
    }

    function MM_validateForm() { //v4.0
    var i,p,q,nm,test,num,min,max,errors='',args=MM_valida teForm.arguments;
    for (i=0; i<(args.length-2); i+=3) { test=args[i+2]; val=MM_findObj(args[i]);
    if (val) { nm=val.name; if ((val=val.value)!="") {
    if (test.indexOf('isEmail')!=-1) { p=val.indexOf('@');
    if (p<1 || p==(val.length-1)) errors+='- '+nm+' must contain an e-mail address.\n';
    } else if (test!='R') { num = parseFloat(val);
    if (isNaN(val)) errors+='- '+nm+' deve essere un numero!\n';
    if (test.indexOf('inRange') != -1) { p=test.indexOf(':');
    min=test.substring(8,p); max=test.substring(p+1);
    if (num<min || max<num) errors+='- '+nm+' must contain a number between '+min+' and '+max+'.\n';
    } } } else if (test.charAt(0) == 'R') errors += '- '+nm+' è obbligatorio!\n'; }
    } if (errors) alert('Attenzione! Tutti i campi sono obbligatori. Questo(i) è(sono) il(i) campo(i) mancante(i):\n'+errors);
    document.MM_returnValue = (errors == '');
    }
    //-->
    </script>
    </head>

    <body>
    <div align="center">


    </p>


    </p>


    <font face="Verdana, Arial, Helvetica, sans-serif">Indietro</font></p>

    <form ACTION="<%=MM_editAction%>" METHOD="POST" name="form1" onSubmit="MM_validateForm('nrcontrollo','','RisNum ','dataentrata','','R','cittatto','','R','protatto ','','R','datatto','','R','insnote','','R');return document.MM_returnValue">
    <table align="center">
    <tr valign="baseline" bgcolor="#FF0000">
    <td colspan="2" align="right" nowrap><div align="center"><font face="Verdana, Arial, Helvetica, sans-serif">Ultimo
    nr registrato: <%=(postain.Fields.Item("nrcontrollo").Value)%> </font></div></td>
    </tr>
    <tr valign="baseline">
    <td nowrap align="right"><font face="Verdana, Arial, Helvetica, sans-serif">Assegna
    nr di controllo:</font></td>
    <td><font face="Verdana, Arial, Helvetica, sans-serif">
    <input name="nrcontrollo" type="text" id="nrcontrollo" size="10" maxlength="10">
    (incrementa di 1)</font></td>
    </tr>
    <tr valign="baseline" bgcolor="#999999">
    <td align="right" nowrap><div align="left"><font color="#FFFFFF" size="3" face="Verdana, Arial, Helvetica, sans-serif">Data
    di registrazione:

    <font size="1">(modifica solo se diverso dalla data odierna)</font></font></div></td>
    <td> <font color="#FFFFFF" size="3" face="Verdana, Arial, Helvetica, sans-serif">
    <input name="dataentrata" type="text" value="" size="10" maxlength="10">
    (gg/mm/aaaa)</font></td>
    </tr>
    <tr valign="baseline">
    <td nowrap align="right"><div align="left"><font size="3" face="Verdana, Arial, Helvetica, sans-serif">Militare
    che registra:</font></div></td>
    <td> <font size="3" face="Verdana, Arial, Helvetica, sans-serif">
    <select name="iddipendente">
    <option value="">SCEGLI</option>
    <%
    while (!dipendenti.EOF) {
    %>
    <option value="<%=(dipendenti.Fields.Item("dipendenti").Va lue)%>"><%=(dipendenti.Fields.Item("dipendenti").V alue)%></option>
    <%
    dipendenti.MoveNext();
    }
    if (dipendenti.CursorType > 0) {
    if (!dipendenti.BOF) dipendenti.MoveFirst();
    } else {
    dipendenti.Requery();
    }
    %>
    </select>
    </font></td>
    </tr>
    <tr valign="baseline" bgcolor="#333333">
    <td colspan="2" align="right" nowrap><div align="center"><font color="#FFFFFF" size="3" face="Verdana, Arial, Helvetica, sans-serif">Dati
    dell'Atto da inserire </font></div></td>
    </tr>
    <tr valign="baseline" bgcolor="#999999">
    <td align="right" nowrap><div align="left"><font color="#FFFFFF" size="3" face="Verdana, Arial, Helvetica, sans-serif">Oggetto:</font></div></td>
    <td> <font color="#FFFFFF" size="3" face="Verdana, Arial, Helvetica, sans-serif">
    <select name="idoggetto">
    <option value="">SCEGLI</option>
    <%
    while (!oggetto.EOF) {
    %>
    <option value="<%=(oggetto.Fields.Item("oggetto").Value)%> "><%=(oggetto.Fields.Item("oggetto").Value)%></option>
    <%
    oggetto.MoveNext();
    }
    if (oggetto.CursorType > 0) {
    if (!oggetto.BOF) oggetto.MoveFirst();
    } else {
    oggetto.Requery();
    }
    %>
    </select>
    </font></td>
    </tr>
    <tr valign="baseline" bgcolor="#999999">
    <td align="right" nowrap><div align="left"><font color="#FFFFFF" size="3" face="Verdana, Arial, Helvetica, sans-serif">Mittente:</font></div></td>
    <td> <font color="#FFFFFF" size="3" face="Verdana, Arial, Helvetica, sans-serif">
    <select name="idmittente">
    <option value="">SCEGLI</option>
    <%
    while (!mittenti.EOF) {
    %>
    <option value="<%=(mittenti.Fields.Item("mittenti").Value) %>"><%=(mittenti.Fields.Item("mittenti").Value)%> </option>
    <%
    mittenti.MoveNext();
    }
    if (mittenti.CursorType > 0) {
    if (!mittenti.BOF) mittenti.MoveFirst();
    } else {
    mittenti.Requery();
    }
    %>
    </select>
    </font></td>
    </tr>
    <tr valign="baseline" bgcolor="#999999">
    <td align="right" nowrap><div align="left"><font color="#FFFFFF" size="3" face="Verdana, Arial, Helvetica, sans-serif">Citt&agrave;:</font></div></td>
    <td> <font color="#FFFFFF" size="3" face="Verdana, Arial, Helvetica, sans-serif">
    <input type="text" name="cittatto" value="" size="32">
    </font></td>
    </tr>
    <tr valign="baseline" bgcolor="#999999">
    <td align="right" nowrap><div align="left"><font color="#FFFFFF" size="3" face="Verdana, Arial, Helvetica, sans-serif">Prot.llo:</font></div></td>
    <td> <font color="#FFFFFF" size="3" face="Verdana, Arial, Helvetica, sans-serif">
    <input type="text" name="protatto" value="" size="32">
    </font></td>
    </tr>
    <tr valign="baseline" bgcolor="#999999">
    <td align="right" nowrap><div align="left"><font color="#FFFFFF" size="3" face="Verdana, Arial, Helvetica, sans-serif">Data
    atto:</font></div></td>
    <td> <font color="#FFFFFF" size="3" face="Verdana, Arial, Helvetica, sans-serif">
    <input name="datatto" type="text" size="10" maxlength="10">
    (gg/mm/aaaa) </font></td>
    </tr>
    <tr valign="baseline" bgcolor="#999999">
    <td align="right" valign="top" nowrap><div align="left"><font color="#FFFFFF" size="3" face="Verdana, Arial, Helvetica, sans-serif">Note:</font></div></td>
    <td> <font color="#FFFFFF" size="3" face="Verdana, Arial, Helvetica, sans-serif">
    <textarea name="insnote" cols="32" rows="3" id="insnote"></textarea>
    </font></td>
    </tr>
    <tr valign="baseline">
    ecc

  9. #9
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    TI consiglio di inserire il codice negli appositi blocchi \[php\]\[\/php\]

    E poi ripeto non conosco asp molto bene ciho lavorato pochissimo.
    Vedi se qlkun'altro puo' aiutarti meglio io lavoro in php java e altro ma se posso evito i linguaggi ms.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.