U bevindt zich nu op een technische pagina over de software Mercator. Deze pagina bevat specifieke informatie die bestemd is voor professionals van de software Mercator. Wenst u naar algemenere informatie over Mercator door te gaan?


   Deze vraag niet meer stellen

In een inventaris zijn de lijnen met geïnventariseerde maar ongewijzigde Artikels niet opgenomen in LIGNES_D

0000002891     -      16-11-2021

Het invoeren van een inventaris levert records op in de tabel LIGNES_D. Deze tabel bevat echter alleen de rijen waarvoor daadwerkelijk een inventariswijziging heeft plaatsgevonden. Als de hoeveelheid in voorraad al correct was op het moment van de inventaris, dan wordt er geen record aangemaakt in LIGNES_D. Dit record zou inderdaad een beweging bevatten met een hoeveelheid op nul. Dit maakt het mogelijk om de groei van de grootte van de tabel LIGNES_D te beperken.

We merken op dat deze regels bij het heropenen van een inventaris wel aanwezig zijn in de Mercator-interface. Om dit mogelijk te maken, heeft Mercator ze opgeslagen als een XML-reeks (overeenkomend met een DataSet .net) in PIEDS_D.INVENT_ZERO.

Deze regels kunnen worden gebruikt in SQL. Hiervoor is het nodig om een conversie uit te voeren zoals hieronder geïllustreerd.

Voorbeeld 1: zet de regels op nul voor één enkele inventaris

declare @xmlData XML, @idoc INT
select @xmlData=INVENT_ZERO  from PIEDS_D where ...

EXEC sp_xml_preparedocument @idoc OUTPUT, @xmlData

SELECT * 
   FROM  OPENXML (@idoc, '/NewDataSet/dt_inv0', 2)
   WITH ([ID] [char](10),
[NATURE] [char](10),
[ID_DEPOT] [char](10),
[DATE] char(20),
[ID_ART] [char](10),
[Q] [float],
[PU] [float],
[TOTAL] [float],
[PIECE] [numeric](11, 0),
[ID_DOC] [char](10),
[NUM_SERIE] [char](19),
[SERIE] [bit],
[ID_USER] [char](10),
[HEURE] [char](5),
[REFERENCE] [char](30),
[ID_LOT] [char](10),
[ID_LOT_ORI] [char](10),
[ID_DEPOT1] [char](10),
[ID_DEPOT2] [char](10),
[Q_ORI] [decimal](15, 5),
[RECNO] [decimal](10, 0),
[LIGNE2] [bit],
[BLOQUE_D1] [bit],
[BLOQUE_D2] [bit],
[ID_LIGNE1] [char](10),
[TYPE] [smallint],
[ID_PROJET] [char](10),
[ID_DESTIN] [char](10),
[DPA] [float],
[PMPA] [float],
[PRIX_REV] [float],
[DISPO] [float],
[CENTRALE] [bit],
[ID_MPLACE] [char](10),
designatio [char](200),
lib_proj [char](200),
lib_dest [char](200),
lib_mplace [char](200),
lib_lot [char](200)
)

De bovenstaande syntaxis moet worden aangepast aan de structuur van uw LIGNES_D en aan de header in de XML-string. De kolomnamen in hoofdletters komen overeen met de structuur van de tabel LIGNES_D, die in kleine letters hebben betrekking op extra kolommen. Deze lijst met kolommen moet worden aangepast aan uw dossier. Merk op dat de kolom DATUM moet worden aangegeven als char (20).

Voorbeeld 2: zet de lijnen op nul voor verschillende inventarissen

Voorbeeld 1 kan worden uitgebreid tot meerdere inventarissen. Gebruik hiervoor de onderstaande SQL-code. De aanpassing van de kolommen moet worden uitgevoerd zoals in voorbeeld nr. 1, maar dit keer op twee plaatsen.

declare @i int, @count int, @xmlData XML, @idoc INT

create table #INVENT_ZERO_TMP (
[ID] [char](10),
[NATURE] [char](10),
[ID_DEPOT] [char](10),
[DATE] char(20),
[ID_ART] [char](10),
[Q] [float],
[PU] [float],
[TOTAL] [float],
[PIECE] [numeric](11, 0),
[ID_DOC] [char](10),
[NUM_SERIE] [char](19),
[SERIE] [bit],
[ID_USER] [char](10),
[HEURE] [char](5),
[REFERENCE] [char](30),
[ID_LOT] [char](10),
[ID_LOT_ORI] [char](10),
[ID_DEPOT1] [char](10),
[ID_DEPOT2] [char](10),
[Q_ORI] [decimal](15, 5),
[RECNO] [decimal](10, 0),
[LIGNE2] [bit],
[BLOQUE_D1] [bit],
[BLOQUE_D2] [bit],
[ID_LIGNE1] [char](10),
[TYPE] [smallint],
[ID_PROJET] [char](10),
[ID_DESTIN] [char](10),
[DPA] [float],
[PMPA] [float],
[PRIX_REV] [float],
[DISPO] [float],
[CENTRALE] [bit],
[ID_MPLACE] [char](10),
designatio [char](200),
lib_proj [char](200),
lib_dest [char](200),
lib_mplace [char](200),
lib_lot [char](200))

select ROW_NUMBER() over (order by id_doc,nature,piece) AS RowNumber,INVENT_ZERO into #PIEDS_D_TMP from PIEDS_D where ... and invent_zero != ''
set @i=1
select @count=isnull(max(RowNumber),0) from #PIEDS_D_TMP

while @i <= @count
begin
select @xmlData=INVENT_ZERO from #PIEDS_D_TMP where RowNumber=@i
EXEC sp_xml_preparedocument @idoc OUTPUT, @xmlData

insert into #INVENT_ZERO_TMP
SELECT * 
   FROM  OPENXML (@idoc, '/NewDataSet/dt_inv0', 2)
   WITH ([ID] [char](10),
[NATURE] [char](10),
[ID_DEPOT] [char](10),
[DATE] char(20),
[ID_ART] [char](10),
[Q] [float],
[PU] [float],
[TOTAL] [float],
[PIECE] [numeric](11, 0),
[ID_DOC] [char](10),
[NUM_SERIE] [char](19),
[SERIE] [bit],
[ID_USER] [char](10),
[HEURE] [char](5),
[REFERENCE] [char](30),
[ID_LOT] [char](10),
[ID_LOT_ORI] [char](10),
[ID_DEPOT1] [char](10),
[ID_DEPOT2] [char](10),
[Q_ORI] [decimal](15, 5),
[RECNO] [decimal](10, 0),
[LIGNE2] [bit],
[BLOQUE_D1] [bit],
[BLOQUE_D2] [bit],
[ID_LIGNE1] [char](10),
[TYPE] [smallint],
[ID_PROJET] [char](10),
[ID_DESTIN] [char](10),
[DPA] [float],
[PMPA] [float],
[PRIX_REV] [float],
[DISPO] [float],
[CENTRALE] [bit],
[ID_MPLACE] [char](10),
designatio [char](200),
lib_proj [char](200),
lib_dest [char](200),
lib_mplace [char](200),
lib_lot [char](200)
)
set @i=@i+1
end
select * from #INVENT_ZERO_TMP order by nature, piece, recno
drop table #INVENT_ZERO_TMP
drop table #PIEDS_D_TMP