Ho un Grande PROBLEMA ( bel rompicapo estivo !) con Access 2007 che non riesco a risolvere (per mia profonda ignoranza del VBA).
Ho due tabelle : Bollettazioni e CronoMovimenti, collegate (uno a molti) tra di loro da un CodStock e così strutturate:
Tabella :TBL Bollettazioni
Campi: CodStock (alfanumerico univoco); SommaDiBollettazioni (numerico standard a due decimali)
Tabella: TBL CronoMovimenti
Campi: CodStock(alfanumerico); Quantità (numerico standard a due decimali); TipoMovimento (numerico); Data (data in cifre)
Il TipoMovimento può essere =11 oppure =1
Premessa: Per ciascun CodStock , la SOMMA delle Quantità in TBL CronoMovimenti con TipoMovimento = 11 può essere Minore o Uguale o Maggiore alla SommaDiBollettazione ma, comunque, la SOMMA delle Quantità di TipoMovimento =11 + TipoMovimento=1 è sempre superiore alla SommaDiBollettazioni
Problema :
per ciascun CodStock di TBL Bollettazioni, in join con CodStock di TBL CronoMovimenti, la procedura deve :
- Processare ciascun record (a parità di CodStock) presente in TBL CronoMovimenti dalla Data più recente a quella più storica (remota)
- verificare se SommaDiBollettazioni è Uguale o Maggiore di Quantità del singolo record in TBL CronoMovimenti con TipoMovimento =11;
- aggiornare il valore di Quantità del singolo record sottraendo [SommaDiBollettazioni – Quantità] e portando a zero il singolo record in TBL CronoMovimenti ;
- aggiornare la SommaDiBollettazioni in TBL Bollettazioni con il nuovo residuo [SommaDiBolletazioni – Quantità].
Se in TBL CronoMovimenti non ci sono -per il singolo CodStock- TipoMovimenti = 11, la procedura passa alla seconda fase della routine
Il ciclo deve durare FINO A QUANDO
• non ci sono più record (alle stesse condizioni per ciascun CodStock ) da processare in TBL CronoMovimenti in quanto tutti azzerati (nel qual caso potrebbero esserci residui di SommaDiBollettazioni che poi verranno processati nella 2^ parte della routine);
- ovvero FINO a quando SommaDiBollettazioni dello specifico CodStock si riduce a 0(zero) (nel qual caso-ovviamente- potrebbero residuare quantità di TipoMovimento=11 non assorbite e che devono ,quindi, rimanere inalterate).
La 2^ parte della routine (sempre ciclica) deve prevedere che (finito il primo ciclo) eventuali RIMANENZE di SommaDiBollettazioni in TBL Bollettazioni dovranno essere sottratte (con la stessa procedura sopra descritta e sempre a parità di CodStock e dalla data più recente) dalle Quantità della TBL CronoMovimenti aventi ,PERO’, (in questo caso) il TipoMovimento = 1.
Così facendo le SommeDiBollettazioni si azzereranno tutte.
La procedura si conclude Eliminando (sempre a parità di CodStock) dalla TBL CronoMovimenti tutti i record con TipoMovimento = 11 e con quantità = 0
Io ho provato con varie query senza riuscirci: Capisco che è necessario una funzione ciclica in VBA, ma non sono proprio capace di realizzarla. A chi mi aiuta tanta tanta stima e tantissimi grazie.