Files correlati : Ricompilazione Demo : [ ] Commento : Riportata la versione 1.7 patch 054 aga sul main trunk git-svn-id: svn://10.65.10.50/trunk@9659 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			1303 lines
		
	
	
		
			30 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			1303 lines
		
	
	
		
			30 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
#include "..\db\dblib.h"
 | 
						||
#include "dbcv09.h"
 | 
						||
#include "dbcv00a.h"
 | 
						||
#include <relation.h>
 | 
						||
#include <execp.h>
 | 
						||
#include "..\mg\anamag.h"
 | 
						||
#include "..\mg\mglib.h"
 | 
						||
 | 
						||
void delete_files(const char *wild)
 | 
						||
{
 | 
						||
  TString_array transactions;
 | 
						||
  list_files(wild, transactions);
 | 
						||
  FOR_EACH_ARRAY_ROW(transactions, row, name)
 | 
						||
    remove(*name);
 | 
						||
}
 | 
						||
// ******************************************
 | 
						||
bool force_write(TLocalisamfile & f)
 | 
						||
{
 | 
						||
  int err=f.write();
 | 
						||
  if (err != NOERR) // fallisce se c'e' gia'
 | 
						||
    err=f.rewrite(); 
 | 
						||
  return err;
 | 
						||
}
 | 
						||
 | 
						||
 | 
						||
// ******************************************
 | 
						||
long method2location(int method) 
 | 
						||
{
 | 
						||
  switch (method)
 | 
						||
  {
 | 
						||
    case 0: return 0;
 | 
						||
    case 1: return 1530;
 | 
						||
    case 2: return   59;
 | 
						||
    case 3: return 2008;
 | 
						||
    case 4: return   63;
 | 
						||
    case 5: return 872;
 | 
						||
    case 6: return 66;
 | 
						||
    case 7: return 1700;
 | 
						||
    case 8: return 115;
 | 
						||
    case 9: return 935;
 | 
						||
    case 10: return 911;
 | 
						||
    case 11: return 1812;
 | 
						||
    case 12: return 230;
 | 
						||
    case 13: return 433;
 | 
						||
    case 14: return 272;
 | 
						||
    case 15: return 1382;
 | 
						||
    case 16: return 467;
 | 
						||
    case 17: return 1352;
 | 
						||
    case 18: return 233;
 | 
						||
    case 19: return 498;
 | 
						||
    case 20: return 651;
 | 
						||
    case 21: return 511;
 | 
						||
    case 22: return 519;
 | 
						||
    case 23: return 2017;
 | 
						||
    case 24: return 798;
 | 
						||
    case 25: return 582;
 | 
						||
    case 26: return 618;
 | 
						||
    case 27: return 1190;
 | 
						||
    case 28: return 1360;
 | 
						||
    case 29: return 1727;
 | 
						||
    case 30: return 2081;
 | 
						||
    case 31: return 1330;
 | 
						||
    case 32: return 565;
 | 
						||
    case 33: return 2079;
 | 
						||
    case 34: return 2194;
 | 
						||
    case 35: return 229;
 | 
						||
    case 36: return 2280;
 | 
						||
    case 37: return 60;
 | 
						||
    case 38: return 50037;
 | 
						||
    case 39: return 1154;
 | 
						||
    case 40: return 2153;
 | 
						||
    case 41: return 1569;  // M&M srl
 | 
						||
    case 42: return 1569;
 | 
						||
    case 43: return 2237;
 | 
						||
    case 44: return 2668; // rotolito
 | 
						||
    case 45: return -3; // sconfezionamento
 | 
						||
  }
 | 
						||
  return -99; // terzista generico
 | 
						||
}
 | 
						||
 | 
						||
int location2method(long location) 
 | 
						||
{
 | 
						||
  switch (location)
 | 
						||
  {
 | 
						||
    case 0: return 0;
 | 
						||
    case 1530: return 1;
 | 
						||
    case   59: return 2;
 | 
						||
    case 2008: return 3;
 | 
						||
    case   63: return 4;
 | 
						||
    case 872: return 5;
 | 
						||
    case 66: return 6;
 | 
						||
    case 1700: return 7; // Ex COVER 
 | 
						||
    case 115: return 8;
 | 
						||
    case 935: return 9;
 | 
						||
    case 911: return 10;
 | 
						||
    case 1812: return 11;
 | 
						||
    case 230: return 12;
 | 
						||
    case 433: return 13;
 | 
						||
    case 272: return 14;
 | 
						||
    case 1382: return 15;
 | 
						||
    case 467: return 16;
 | 
						||
    case 1352: return 17;
 | 
						||
    case 233: return 18;
 | 
						||
    case 498: return 19;
 | 
						||
    case 651: return 20;
 | 
						||
    case 511: return 21;
 | 
						||
    case 519: return 22;
 | 
						||
    case 2017: return 23;
 | 
						||
    case 798: return 24;
 | 
						||
    case 582: return 25;
 | 
						||
    case 618: return 26;
 | 
						||
    case 1190: return 27;
 | 
						||
    case 1360: return 28;
 | 
						||
    case 1727: return 29;
 | 
						||
    case 2081: return 30;
 | 
						||
    case 1330: return 31;
 | 
						||
    case 565: return 32;
 | 
						||
    case 2079: return 33;
 | 
						||
    case 2194: return 34;
 | 
						||
    case 229: return 35;
 | 
						||
    case 2280: return 36;
 | 
						||
    case 60: return 37;
 | 
						||
    case 50037: return 38;
 | 
						||
    case 1154: return 39;
 | 
						||
    case 2153: return 40;
 | 
						||
    case -1: return 41;  // M&M srl
 | 
						||
    case 1569: return 42;
 | 
						||
    case 2237: return 43;
 | 
						||
    case 2668: return 44; // ??
 | 
						||
    case -3: return 45; // sconfezionamento
 | 
						||
 | 
						||
  }
 | 
						||
  return 99; // terzista generico
 | 
						||
}
 | 
						||
 | 
						||
 | 
						||
void delete_boms(bool lavsexcl,bool onlylavs)
 | 
						||
{
 | 
						||
  TWait_cursor hourglass;  
 | 
						||
  TIndwin info(60,"Cancellazione distinte...",FALSE,FALSE);
 | 
						||
  TLocalisamfile dist(LF_DIST);
 | 
						||
  TLocalisamfile rdist(LF_RDIST);
 | 
						||
  // distinte
 | 
						||
  for (long i=dist.items(); i>0; i--)
 | 
						||
  {
 | 
						||
    dist.readat(i);
 | 
						||
    const bool is_lav=!cache().get("LAV",dist.get("CODDIST")).empty();
 | 
						||
    if (lavsexcl==!is_lav || onlylavs==is_lav)
 | 
						||
    {
 | 
						||
      // non e' una lavorazione
 | 
						||
      dist.remove();
 | 
						||
    }
 | 
						||
    if ((i%TICK)==0)
 | 
						||
      do_events();
 | 
						||
  }
 | 
						||
  // righe distinte
 | 
						||
  for (i=rdist.items(); i>0; i--)
 | 
						||
  {
 | 
						||
    rdist.readat(i);
 | 
						||
    const bool is_lav=!(rdist.get("TIPO")!="L");
 | 
						||
    if (lavsexcl==!is_lav || onlylavs==is_lav)
 | 
						||
    {
 | 
						||
      // non e' una lavorazione
 | 
						||
      rdist.remove();
 | 
						||
    }
 | 
						||
    if ((i%TICK)==0)
 | 
						||
      do_events();
 | 
						||
  }
 | 
						||
}
 | 
						||
 | 
						||
const char * descr_method(int method) 
 | 
						||
{
 | 
						||
  switch (method)
 | 
						||
  {
 | 
						||
    case 1: return ("Areosol lab. Italia");
 | 
						||
    case 2: return ("Areosol service Italia");
 | 
						||
    case 3: return ("Bertoncini");
 | 
						||
    case 4: return ("Bregaglio");
 | 
						||
    case 5: return ("CABL service");
 | 
						||
    case 6: return ("CIP4");
 | 
						||
    case 7: return ("Stabilimenti Cover di PD/PR");
 | 
						||
    case 8: return ("Deskin");
 | 
						||
    case 9: return ("Farmol Safca");
 | 
						||
    case 10: return ("FATAI Nyl");
 | 
						||
    case 11: return ("Hydra Farm.");
 | 
						||
    case 12: return ("IMAPACK");
 | 
						||
    case 13: return ("Interchem Italia");
 | 
						||
    case 14: return ("Ivers Lee Italia");
 | 
						||
    case 15: return ("Liquichim");
 | 
						||
    case 16: return ("Manilab");
 | 
						||
    case 17: return ("MP");
 | 
						||
    case 18: return ("Niada");
 | 
						||
    case 19: return ("Noviplast");
 | 
						||
    case 20: return ("OCE");
 | 
						||
    case 21: return ("Pantapack");
 | 
						||
    case 22: return ("PimepackDue");
 | 
						||
    case 23: return ("Pernici Cereira");
 | 
						||
    case 24: return ("Re.Le.Vi.");
 | 
						||
    case 25: return ("Synthesis");
 | 
						||
    case 26: return ("Treccificio BS");
 | 
						||
    case 27: return ("Tosvar Areosol");
 | 
						||
    case 28: return ("Unifill");
 | 
						||
    case 29: return ("Unispray");
 | 
						||
    case 30: return ("Artical");
 | 
						||
    case 31: return ("La cosmografica");
 | 
						||
    case 32: return ("Chizzoni");
 | 
						||
    case 33: return ("E.Bonetto Lito");
 | 
						||
    case 34: return ("CT Service srl");
 | 
						||
    case 35: return ("M&M sas");
 | 
						||
    case 36: return ("Brelil");
 | 
						||
    case 37: return ("Akronimex");
 | 
						||
    case 38: return ("Globol UK");
 | 
						||
    case 39: return ("Lito Sestese");
 | 
						||
    case 40: return ("Serialfa");
 | 
						||
    case 41: return ("M&M");  // M&M srl
 | 
						||
    case 42: return ("M&M srl");
 | 
						||
    case 43: return ("ERREDI ser. srl");
 | 
						||
    case 44: return ("Rotolito"); // rotolito
 | 
						||
  }
 | 
						||
  return "-- Unknown --";
 | 
						||
}
 | 
						||
 | 
						||
 | 
						||
void num_mag2main_imp(int magno, TString & codimp)
 | 
						||
{
 | 
						||
  switch (magno)
 | 
						||
  {
 | 
						||
    case 91: // magazzino terzisti (suddiviso in locazioni) 
 | 
						||
    case 93: // magazzino terzisti (suddiviso in locazioni)
 | 
						||
    case 25: // magazzino DI FATTURAZIONE
 | 
						||
    case 26: // magazzino interno
 | 
						||
      codimp="SE";
 | 
						||
      break;
 | 
						||
    case 92: // magazzino terzisti (suddiviso in locazioni)
 | 
						||
    case 27: // magazzino DI FATTURAZIONE
 | 
						||
    case 28: // magazzino interno
 | 
						||
      codimp="TS";
 | 
						||
      break;
 | 
						||
    default:
 | 
						||
      codimp="XX";
 | 
						||
  }
 | 
						||
}
 | 
						||
 | 
						||
void complete_gmc(TString & gmc,const char *iclas)
 | 
						||
{
 | 
						||
  TString  des;
 | 
						||
  TString16 subgmc(iclas);
 | 
						||
  char type;
 | 
						||
  if (subgmc=="AM") {
 | 
						||
    type = 'H';
 | 
						||
    des="Ambipur";
 | 
						||
  } else if (subgmc=="IN")  {
 | 
						||
    type = 'H';
 | 
						||
    des="Ambipur";
 | 
						||
  }  else if (subgmc=="KM")  {
 | 
						||
    type = 'H';
 | 
						||
    des="Kiwi Mobili";
 | 
						||
  }  else if (subgmc=="KS")  {
 | 
						||
    type = 'H';
 | 
						||
    des="Kiwi Shoecare";
 | 
						||
  }  else if (subgmc=="OS")  {
 | 
						||
    type = 'H';
 | 
						||
    des="Shoe care generico";
 | 
						||
  }  else if (subgmc=="PV")  {
 | 
						||
    type = 'H';
 | 
						||
    des="Pulizia vetri";
 | 
						||
  }  else if (subgmc=="HA")  {
 | 
						||
    type = 'H';
 | 
						||
    des="House care generico";
 | 
						||
  }  else if (subgmc=="OC")  {
 | 
						||
    type = 'O';
 | 
						||
    des="Oral care generico";
 | 
						||
  }  else if (subgmc=="SB")  {
 | 
						||
    type = 'O';
 | 
						||
    des="Oral care Smithcline Beecham";
 | 
						||
  }  else if (subgmc=="AV")  {                           
 | 
						||
    type = 'P';
 | 
						||
    des="Acqua Velva";
 | 
						||
  }   else if (subgmc=="BA")  {                           
 | 
						||
    type = 'P';
 | 
						||
    des="Badedas";
 | 
						||
  }   else if (subgmc=="BR")  {                           
 | 
						||
    type = 'P';
 | 
						||
    des="Brylcreem";
 | 
						||
  }   else if (subgmc=="DE")  {                           
 | 
						||
    type = 'P';
 | 
						||
    des="Depilzero ";
 | 
						||
  }   else if (subgmc=="FB")  {                           
 | 
						||
    type = 'P';
 | 
						||
    des="Fissan Baby";
 | 
						||
  }   else if (subgmc=="FO")  {                           
 | 
						||
    type = 'P';
 | 
						||
    des="Fissan body generico";
 | 
						||
  }    else if (subgmc=="GL")  {                           
 | 
						||
    type = 'P';
 | 
						||
    des="Glysolid";
 | 
						||
  }  else if (subgmc=="GP")  {                           
 | 
						||
    type = 'P';
 | 
						||
    des="General purpose personal case";
 | 
						||
  }  else if (subgmc=="OB")  {                           
 | 
						||
    type = 'P';
 | 
						||
    des="Personal care generico";
 | 
						||
  }  else if (subgmc=="QU")  {                           
 | 
						||
    type = 'P';
 | 
						||
    des="Quickies";
 | 
						||
  }  else if (subgmc=="SA")  {                           
 | 
						||
    type = 'P';
 | 
						||
    des="Savane";
 | 
						||
  } else if (subgmc=="SO")  {                           
 | 
						||
    type = 'P';
 | 
						||
    des="Super soap";
 | 
						||
  }  else if (subgmc=="SX")  {                           
 | 
						||
    type = 'P';
 | 
						||
    des="Sanex";
 | 
						||
  }  else if (subgmc=="WI")  {                           
 | 
						||
    type = 'P';
 | 
						||
    des="Williams";
 | 
						||
  } else 
 | 
						||
    return;
 | 
						||
  gmc << type << 'C';
 | 
						||
  if (cache().get("GMC",gmc).empty())
 | 
						||
  {
 | 
						||
    cache().discard("GMC",gmc);
 | 
						||
    TTable ttt("GMC");
 | 
						||
    ttt.put("CODTAB",gmc);
 | 
						||
    ttt.put("S0",type=='H' ? "House care" : (type=='P' ? "Personal care" :"Oral care"));
 | 
						||
    ttt.write();
 | 
						||
  }
 | 
						||
  gmc << subgmc;
 | 
						||
  if (cache().get("GMC",gmc).empty())
 | 
						||
  {
 | 
						||
    cache().discard("GMC",gmc);
 | 
						||
    TTable ttt("GMC");
 | 
						||
    ttt.put("CODTAB",gmc);
 | 
						||
    ttt.put("S0",des);
 | 
						||
    ttt.write();
 | 
						||
  }
 | 
						||
}
 | 
						||
 | 
						||
const char * check_clasdog(long stdo)
 | 
						||
{
 | 
						||
  static TString cld;
 | 
						||
  if (stdo)
 | 
						||
  {
 | 
						||
    cld.format("%010ld",stdo);
 | 
						||
    if (cache().get("%CLD",cld).empty())
 | 
						||
    {
 | 
						||
      cache().discard("%CLD",cld);
 | 
						||
      TTable ttt("%CLD");
 | 
						||
      ttt.put("CODTAB",cld);
 | 
						||
      ttt.put("S0","???");
 | 
						||
      ttt.write();
 | 
						||
    }
 | 
						||
  } 
 | 
						||
  else 
 | 
						||
    cld.cut(0);
 | 
						||
  return cld;
 | 
						||
}
 | 
						||
 | 
						||
void imploc2codmagdep(TString &codimp,TString &location, TString &codmag)
 | 
						||
{
 | 
						||
    
 | 
						||
  int terzista = 0;
 | 
						||
  codmag = codimp;
 | 
						||
  codmag << 1;
 | 
						||
  if (!location.blank())
 | 
						||
  {
 | 
						||
    // must be a terzist....
 | 
						||
    if (atoi(location))
 | 
						||
    {
 | 
						||
      terzista = location2method(atoi(location));
 | 
						||
      if (terzista == 7)
 | 
						||
      {
 | 
						||
        if (codimp!="SE")
 | 
						||
        {
 | 
						||
          if (codimp=="SE3")
 | 
						||
            codmag = "SE1";
 | 
						||
          else
 | 
						||
            codmag = "TS1";
 | 
						||
        }
 | 
						||
      }
 | 
						||
    } 
 | 
						||
    if (location == "CICCA")
 | 
						||
      codmag << "C0";
 | 
						||
    else if (location == "CMINT")
 | 
						||
      codmag << "C1";
 | 
						||
    else if (location == "COMMEX")
 | 
						||
      codmag << "X0";
 | 
						||
    else if (terzista>0)
 | 
						||
    {
 | 
						||
      codmag << format("%02d",terzista);
 | 
						||
      codimp = "XT";
 | 
						||
    } else if (!location.blank())
 | 
						||
      error_box("Locazione sconosciuta '%s'",(const char *)location);
 | 
						||
  } else {
 | 
						||
    codmag << "PF";
 | 
						||
  }    
 | 
						||
}
 | 
						||
 | 
						||
void codimp2codmagdep(TString &codimp,int terzista, TString &codmag)
 | 
						||
{
 | 
						||
  codmag = codimp;
 | 
						||
  codmag << 1;
 | 
						||
  if (terzista>0)
 | 
						||
  {
 | 
						||
    codmag << format("%02d",terzista);
 | 
						||
    codimp = "XT";
 | 
						||
  } else {
 | 
						||
    codmag << "PF";
 | 
						||
  }    
 | 
						||
  if (terzista == 7)
 | 
						||
  {
 | 
						||
    if (codimp=="SE")
 | 
						||
      codimp = "PR";
 | 
						||
    else
 | 
						||
      codimp = "PD";
 | 
						||
  }
 | 
						||
}
 | 
						||
 | 
						||
void num_mag2cod_imp(int magno, TString & codimp)
 | 
						||
{
 | 
						||
  switch (magno)
 | 
						||
  {
 | 
						||
    case 91:
 | 
						||
    case 93:
 | 
						||
      codimp="SE3";
 | 
						||
      break;
 | 
						||
    case 25:
 | 
						||
    case 26:
 | 
						||
      codimp="SE";
 | 
						||
      break;
 | 
						||
    case 92:
 | 
						||
      codimp="TS3";
 | 
						||
      break;
 | 
						||
    case 27:
 | 
						||
    case 28:
 | 
						||
      codimp="TS";
 | 
						||
      break;
 | 
						||
    default:
 | 
						||
      codimp="XX";
 | 
						||
  }
 | 
						||
}
 | 
						||
 | 
						||
int cod_mag2num_mag(TString & codmagdep)
 | 
						||
{
 | 
						||
  const int terzista = atoi(codmagdep.sub(3));
 | 
						||
//  if (terzista!=7)
 | 
						||
//  {
 | 
						||
    TString codmag = codmagdep.left(3);
 | 
						||
    if (codmag=="SE1")
 | 
						||
      return terzista ? 91 : 26;
 | 
						||
    if (codmag=="TS1")
 | 
						||
      return terzista ? 92 : 28;
 | 
						||
    if (!codmag.blank())
 | 
						||
      if (codmag != "VGG" && codmag != "SE3"  && codmag != "TS3")
 | 
						||
      {
 | 
						||
        codmagdep.overwrite("07",3);
 | 
						||
        if (codmag == "COM")
 | 
						||
          return 26;
 | 
						||
        if (codmag  == "PD1")
 | 
						||
          return 92;
 | 
						||
        if (codmag == "PR1")
 | 
						||
          return 91;
 | 
						||
        error_box("Che minchia di magazzino <20> %s?", (const char *)codmag);
 | 
						||
      }
 | 
						||
//  }
 | 
						||
  return -1;
 | 
						||
}
 | 
						||
 | 
						||
void coddep2location(const char * codmag, const char * coddep, TString & codlocation, int & nummag) 
 | 
						||
{
 | 
						||
  codlocation.cut(0);
 | 
						||
  if (coddep[0]>='0' && coddep[0]<='9')
 | 
						||
    codlocation = format("%02d", method2location(atoi(coddep))) ; 
 | 
						||
  else if (coddep == "C0")
 | 
						||
    codlocation = "CICCA";
 | 
						||
  else if (coddep == "C1")
 | 
						||
    codlocation = "CMINT";
 | 
						||
  else if (coddep == "X0")
 | 
						||
    codlocation = "COMMEX";
 | 
						||
}
 | 
						||
 | 
						||
 | 
						||
const TString & converti_codval(const TString & codval)
 | 
						||
{
 | 
						||
  static TString4 _codval;
 | 
						||
  _codval = codval;
 | 
						||
  if (codval == "LIT")
 | 
						||
    _codval.cut(0);
 | 
						||
  else if (codval == "NLG")
 | 
						||
    _codval = "HLG";
 | 
						||
  return _codval;
 | 
						||
}
 | 
						||
void cambio_fisso(const TString & codval, real & val)
 | 
						||
{
 | 
						||
  if (codval == "DEM")
 | 
						||
    val = 989.99913;
 | 
						||
  else if (codval == "FRF")
 | 
						||
    val = 295.182458;
 | 
						||
  else if (codval == "ESP")
 | 
						||
    val = 11.637217;
 | 
						||
  else if (codval == "IEP")
 | 
						||
    val = 2458.555749;
 | 
						||
  else if (codval == "HLG" || codval == "NLG" )
 | 
						||
    val = 878.641019;
 | 
						||
  else if (codval == "")
 | 
						||
    val = 0;
 | 
						||
}
 | 
						||
 | 
						||
void set_workcenter_code(TString & stdwrkc, const char * codimp, long wrkc, int bomm) 
 | 
						||
{
 | 
						||
  int type=int (wrkc/100);
 | 
						||
  if ( type == 1010 || (bomm != 0 && bomm != 99)) // non e' una linea di confezionamento di Segrate o terzista
 | 
						||
  {
 | 
						||
    int lineno;
 | 
						||
    if (type == 1010 )
 | 
						||
    {
 | 
						||
      lineno=int (wrkc - type*100);
 | 
						||
      stdwrkc = codimp;
 | 
						||
    } else {
 | 
						||
      lineno= 100;
 | 
						||
      stdwrkc="X";
 | 
						||
    }
 | 
						||
    switch (lineno)
 | 
						||
    {
 | 
						||
      // centri di lavoro interni all'impianto
 | 
						||
      case 1:
 | 
						||
      case 2:
 | 
						||
      case 4:
 | 
						||
      case 5:
 | 
						||
      case 6:
 | 
						||
      case 7:
 | 
						||
      case 8:
 | 
						||
      case 9:
 | 
						||
      case 10:
 | 
						||
      case 14:
 | 
						||
        stdwrkc << format("%03d", lineno); 
 | 
						||
        break;
 | 
						||
      case 15:
 | 
						||
        stdwrkc << "999"; 
 | 
						||
        break;
 | 
						||
      // centri di lavoro dei terzisti
 | 
						||
      case 100:
 | 
						||
        stdwrkc << format("%02d", bomm);
 | 
						||
        stdwrkc << codimp;
 | 
						||
        break;
 | 
						||
    }
 | 
						||
  } else {
 | 
						||
    stdwrkc="";
 | 
						||
  }
 | 
						||
}
 | 
						||
 | 
						||
void add_stdlabors(const char * item, long wrkc, int bomm) 
 | 
						||
{
 | 
						||
  int type=int (wrkc/100);
 | 
						||
  if ( type == 1010 || (bomm != 0 && bomm != 99)) // non e' una linea di confezionamento di Segrate o terzista
 | 
						||
  {
 | 
						||
    // ************
 | 
						||
    // lav su SEGRATE
 | 
						||
    TString8 postcode("SE");
 | 
						||
    if (bomm != 0 )
 | 
						||
      postcode.format("X%02d%s", bomm,  "SE");
 | 
						||
    TString tmpcode(item);
 | 
						||
    tmpcode << "__" << postcode;
 | 
						||
    TLocalisamfile rdist(LF_RDIST);
 | 
						||
    rdist.put("CODDIST",tmpcode);
 | 
						||
    rdist.read(_isgteq);
 | 
						||
    int nrig=0;
 | 
						||
    while (!rdist.eof() && rdist.get("CODDIST")==item)
 | 
						||
    {
 | 
						||
      if (rdist.get("TIPO")=="L") break;
 | 
						||
      rdist.next();
 | 
						||
      nrig++;
 | 
						||
    }
 | 
						||
    if (rdist.eof() || rdist.get("CODDIST")!=item)
 | 
						||
    {
 | 
						||
      // nessuna lavorazione precedentemente inserita
 | 
						||
      int lineno;
 | 
						||
      if (bomm != 0 )
 | 
						||
        lineno= 100;
 | 
						||
      else 
 | 
						||
        lineno=int (wrkc - type*100);
 | 
						||
      int pzxca;
 | 
						||
      switch (lineno)
 | 
						||
      {
 | 
						||
        case 1:
 | 
						||
          tmpcode="SE_ALCOL1"; 
 | 
						||
          pzxca=12;
 | 
						||
          break;
 | 
						||
        case 2:
 | 
						||
          tmpcode="SE_DOCCIA"; 
 | 
						||
          pzxca=12;                 
 | 
						||
          break;
 | 
						||
        case 4:
 | 
						||
          tmpcode="SE_GLYSOL"; 
 | 
						||
          pzxca=12;
 | 
						||
          break;
 | 
						||
        case 5:
 | 
						||
          tmpcode="SE_BRYLCR"; 
 | 
						||
          pzxca=12;
 | 
						||
          break;
 | 
						||
        case 6:
 | 
						||
          tmpcode="SE_BAGNOS"; 
 | 
						||
          pzxca=12;
 | 
						||
          break;
 | 
						||
        case 7:
 | 
						||
          tmpcode="SE_SAPONE"; 
 | 
						||
          pzxca=12;
 | 
						||
          break;
 | 
						||
        case 8:
 | 
						||
          tmpcode="SE_SAPRIC"; 
 | 
						||
          pzxca=12;       
 | 
						||
          break;
 | 
						||
        case 9:
 | 
						||
          tmpcode="SE_DENTIF"; 
 | 
						||
          pzxca=24;
 | 
						||
          break;
 | 
						||
        case 10:
 | 
						||
          tmpcode="SE_PENTO"; 
 | 
						||
          pzxca=12;
 | 
						||
          break;
 | 
						||
        case 14:
 | 
						||
          tmpcode="SE_ALC.EDT"; 
 | 
						||
          pzxca=12;
 | 
						||
          break;
 | 
						||
        case 15:
 | 
						||
          tmpcode="SE_MANGEN"; 
 | 
						||
          pzxca=0;
 | 
						||
          break;
 | 
						||
        // lavorazioni terzisti
 | 
						||
        case 100:
 | 
						||
          tmpcode="SE_RICONF"; 
 | 
						||
          pzxca=12;
 | 
						||
          break;
 | 
						||
        default:
 | 
						||
          error_box("Linea sconosciuta per l'articolo %s:%d",item,lineno);
 | 
						||
          lineno=0;
 | 
						||
      }
 | 
						||
      TString16 um=cache().get(LF_DIST,item).get("UM");
 | 
						||
      if (lineno && !um.empty())
 | 
						||
      {
 | 
						||
        TToken_string key(item);
 | 
						||
        key.add("1",1);
 | 
						||
        if (cache().get(LF_UMART,key).get("UM")=="CA")
 | 
						||
        {
 | 
						||
          if (pzxca)
 | 
						||
            tmpcode<< "_X" << pzxca;
 | 
						||
        }
 | 
						||
        else if (cache().get(LF_UMART,key).get("UM")=="PZ")
 | 
						||
          tmpcode<< "_SL";
 | 
						||
        real fc;
 | 
						||
        if (cache().get(LF_UMART,key).get("UM")==um)
 | 
						||
        {
 | 
						||
          fc=cache().get(LF_UMART,key).get_real("FC");
 | 
						||
        } else  {
 | 
						||
          key.add("2",1);
 | 
						||
          fc=cache().get(LF_UMART,key).get_real("FC");
 | 
						||
        }
 | 
						||
        if (cache().get("LAV",tmpcode).empty())
 | 
						||
        {
 | 
						||
          if (noyes_box("Impossibile trovare la lavorazione %s per l'articolo %s. Inserimento automatico?", (const char *)tmpcode, item))
 | 
						||
          {
 | 
						||
            cache().discard("LAV",tmpcode);
 | 
						||
            TTable ttt("LAV");
 | 
						||
            ttt.put("CODTAB",tmpcode);
 | 
						||
            ttt.put("S0","???");
 | 
						||
            ttt.put("S6",cache().get(LF_UMART,key).get("UM"));
 | 
						||
            ttt.write();
 | 
						||
          }
 | 
						||
        }
 | 
						||
        rdist.put("CODDIST",item);
 | 
						||
        rdist.put("NRIG",nrig+1);
 | 
						||
        rdist.put("TIPO","L");
 | 
						||
        rdist.put("CODCOMP",tmpcode);
 | 
						||
        rdist.put("UM",um);
 | 
						||
        rdist.put("EXPR",fc.string());
 | 
						||
        rdist.write();
 | 
						||
      }
 | 
						||
    }
 | 
						||
  } 
 | 
						||
}
 | 
						||
 | 
						||
bool sposta_lavs()
 | 
						||
{
 | 
						||
  TIndwin iw(80, "Spostamento lavorazioni sulle varianti fantasma di impianto",FALSE,FALSE);
 | 
						||
  int err;
 | 
						||
  int nrig,oldnrig;
 | 
						||
  long distno=1L;
 | 
						||
  TString cod="";
 | 
						||
  TLocalisamfile rdist(LF_RDIST);
 | 
						||
  err = rdist.read(_isfirst);
 | 
						||
  bool some_moved=FALSE;
 | 
						||
  while (err == NOERR)  
 | 
						||
  {
 | 
						||
    cod = rdist.get("CODDIST");
 | 
						||
    if ((distno%TICK)==1)
 | 
						||
    {
 | 
						||
      iw.set_text(format("Riga distinta n. %ld", distno));
 | 
						||
      do_events();
 | 
						||
    }
 | 
						||
    distno++;
 | 
						||
    oldnrig=rdist.get_int("NRIG");
 | 
						||
    if (*rdist.get("TIPO") == 'L' && cod.find("__")<=0)
 | 
						||
    {
 | 
						||
      // lavorazione
 | 
						||
      TString newcod(cod);
 | 
						||
      TString codlav(rdist.get("CODCOMP"));
 | 
						||
      TString4 codimp(codlav.left(2));
 | 
						||
      newcod << "__";
 | 
						||
      if (codimp == "L_")
 | 
						||
      {
 | 
						||
        newcod  << "SE";
 | 
						||
        codlav = codlav.sub(1);
 | 
						||
        codlav.insert("SE");
 | 
						||
        rdist.put("CODCOMP", codlav);
 | 
						||
      }
 | 
						||
      else
 | 
						||
        newcod  << codimp;
 | 
						||
      rdist.put("CODDIST", newcod);
 | 
						||
      rdist.put("NRIG", 100+oldnrig);
 | 
						||
      rdist.write();
 | 
						||
      rdist.put("CODDIST", cod);
 | 
						||
      rdist.put("NRIG", oldnrig);
 | 
						||
      rdist.remove();
 | 
						||
      some_moved=TRUE;
 | 
						||
    }
 | 
						||
    rdist.put("NRIG",oldnrig+1);
 | 
						||
    err = rdist.read(_isgteq);
 | 
						||
    nrig++;
 | 
						||
  }
 | 
						||
  return some_moved;
 | 
						||
}
 | 
						||
 | 
						||
bool build2levmsp()
 | 
						||
{
 | 
						||
  if (!noyes_box("La presenza di varianti non di stabilimento identifichera' una distinta NON master. Confermi?"))
 | 
						||
    return FALSE;
 | 
						||
 | 
						||
  TIndwin iw(80, "Creazione articoli MASTER per MSP a 2 livelli",FALSE,FALSE);
 | 
						||
  int err;
 | 
						||
  bool oldmaster,master;
 | 
						||
  long artdist=1L, numdist=1L;
 | 
						||
  TString8 variante;
 | 
						||
  TString cod="";
 | 
						||
  TString distinta="",codvariant="";
 | 
						||
  TLocalisamfile dist(LF_DIST),dist2(LF_DIST);
 | 
						||
  err = dist.read(_isfirst);
 | 
						||
  while (err == NOERR)  
 | 
						||
  {
 | 
						||
    cod = dist.get("CODDIST");
 | 
						||
    if ((numdist%TICK)==1)
 | 
						||
    {
 | 
						||
      iw.set_text(format("Distinta articolo n. %ld/%ld", artdist,numdist));
 | 
						||
      do_events();
 | 
						||
    }
 | 
						||
    numdist++;
 | 
						||
    int var=cod.find("__");
 | 
						||
    if (var <=0) // non variante
 | 
						||
    {
 | 
						||
      distinta=cod;
 | 
						||
 | 
						||
      oldmaster=cache().get(LF_DIST,distinta).get_bool("MASTER");
 | 
						||
      if (cache().get(LF_ANAMAG,distinta).get("GRMERC")[0]=='B')
 | 
						||
        master=FALSE;
 | 
						||
      else
 | 
						||
        master=TRUE;
 | 
						||
 | 
						||
      codvariant=distinta;
 | 
						||
      codvariant << "__";
 | 
						||
      var = codvariant.len();
 | 
						||
      dist2.put("CODDIST",codvariant);
 | 
						||
      err = dist2.read(_isgteq);
 | 
						||
      while (master && err == NOERR)
 | 
						||
      {
 | 
						||
        cod = dist2.get("CODDIST");
 | 
						||
        if (cod.left(var)!=codvariant)
 | 
						||
          break;
 | 
						||
        if (cod[var+2]>'\0') // variante non di stabilimento
 | 
						||
          master=FALSE;
 | 
						||
 | 
						||
        err = dist2.next();
 | 
						||
      }
 | 
						||
      if (master!=oldmaster)
 | 
						||
      {
 | 
						||
        dist2.put("CODDIST",distinta);
 | 
						||
        dist2.read();
 | 
						||
        dist2.put("MASTER",master);
 | 
						||
        dist2.rewrite();
 | 
						||
      }
 | 
						||
      cache().discard(LF_DIST,distinta);
 | 
						||
    }
 | 
						||
    err = dist.next();
 | 
						||
  }
 | 
						||
  
 | 
						||
  return TRUE;
 | 
						||
}
 | 
						||
bool rinumera_dist()
 | 
						||
{
 | 
						||
  TIndwin iw(80, "Rinumerazione progr. righe distinte ...",FALSE,FALSE);
 | 
						||
  bool some_done=FALSE;
 | 
						||
  int err;
 | 
						||
  int nrig,oldnrig;
 | 
						||
  long distno=1L;
 | 
						||
  TString cod="";
 | 
						||
  TLocalisamfile rdist(LF_RDIST);
 | 
						||
  err = rdist.read(_isfirst);
 | 
						||
  while (err == NOERR)  
 | 
						||
  {
 | 
						||
    if (cod != rdist.get("CODDIST"))
 | 
						||
    {
 | 
						||
      if ((distno%TICK)==1)
 | 
						||
      {
 | 
						||
        iw.set_text(format("Rinumerazione distinta n. %ld", distno));
 | 
						||
        do_events();
 | 
						||
      }
 | 
						||
      cod = rdist.get("CODDIST");
 | 
						||
      nrig=1;
 | 
						||
      distno++;
 | 
						||
    }
 | 
						||
    oldnrig=rdist.get_int("NRIG");
 | 
						||
    if (oldnrig != nrig)
 | 
						||
    {
 | 
						||
      rdist.put("NRIG",nrig);
 | 
						||
      err = rdist.write();
 | 
						||
      rdist.put("NRIG",oldnrig);
 | 
						||
      err = rdist.remove();
 | 
						||
      some_done=TRUE;
 | 
						||
      rdist.put("NRIG",oldnrig+1);
 | 
						||
      err = rdist.read(_isgteq);
 | 
						||
    } else
 | 
						||
      err = rdist.next();
 | 
						||
    nrig++;
 | 
						||
  }
 | 
						||
  return some_done;
 | 
						||
}
 | 
						||
 | 
						||
bool rinumera_mags()
 | 
						||
{
 | 
						||
  TIndwin iw(80, "Rinumerazione righe di giacenza ...",FALSE,FALSE);
 | 
						||
  bool some_done=FALSE;
 | 
						||
  int err;
 | 
						||
  int nrig,oldnrig=0L;
 | 
						||
  long distno=1L;
 | 
						||
  TString cod="";
 | 
						||
  TLocalisamfile mag(LF_MAG);
 | 
						||
  err = mag.read(_isfirst);
 | 
						||
  while (err == NOERR)  
 | 
						||
  {
 | 
						||
    oldnrig=mag.get_int("NRIGA");
 | 
						||
    if (cod != mag.get("CODART"))
 | 
						||
    {
 | 
						||
      distno++;
 | 
						||
      if ((distno%TICK)==1)
 | 
						||
      {
 | 
						||
        iw.set_text(format("Rinumerazione giacenze: riga %ld", distno));
 | 
						||
        do_events();
 | 
						||
      }
 | 
						||
      cod = mag.get("CODART");
 | 
						||
      nrig=1;
 | 
						||
    }
 | 
						||
    if (oldnrig != nrig)
 | 
						||
    {
 | 
						||
      mag.put("NRIGA",nrig);
 | 
						||
      err = mag.write();
 | 
						||
      mag.put("NRIGA",oldnrig);
 | 
						||
      err = mag.remove();
 | 
						||
      some_done=TRUE;
 | 
						||
    }
 | 
						||
    mag.put("NRIGA",oldnrig+1);
 | 
						||
    err = mag.read(_isgteq);
 | 
						||
    nrig++;
 | 
						||
  }
 | 
						||
  return some_done;
 | 
						||
}
 | 
						||
 | 
						||
bool rinumera_ums()
 | 
						||
{
 | 
						||
  TIndwin iw(80, "Rinumerazione unita' di misura ...",FALSE,FALSE);
 | 
						||
  bool some_done=FALSE;
 | 
						||
  int err;
 | 
						||
  int nrig,oldnrig=0L;
 | 
						||
  long distno=1L;
 | 
						||
  TString cod="";
 | 
						||
  TLocalisamfile umart(LF_UMART);
 | 
						||
  err = umart.read(_isfirst);
 | 
						||
  while (err == NOERR)  
 | 
						||
  {
 | 
						||
    oldnrig=umart.get_int("NRIGA");
 | 
						||
    if (cod != umart.get("CODART"))
 | 
						||
    {
 | 
						||
      distno++;
 | 
						||
      if ((distno%TICK)==1)
 | 
						||
      {
 | 
						||
        iw.set_text(format("Rinumerazione UMS: riga %ld", distno));
 | 
						||
        do_events();
 | 
						||
      }
 | 
						||
      cod = umart.get("CODART");
 | 
						||
      nrig=1;
 | 
						||
    }
 | 
						||
    if (oldnrig != nrig)
 | 
						||
    {
 | 
						||
      umart.put("NRIGA",nrig);
 | 
						||
      err = umart.write();
 | 
						||
      umart.put("NRIGA",oldnrig);
 | 
						||
      err = umart.remove();
 | 
						||
      some_done=TRUE;
 | 
						||
    }
 | 
						||
    umart.put("NRIGA",oldnrig+1);
 | 
						||
    err = umart.read(_isgteq);
 | 
						||
    nrig++;
 | 
						||
  }
 | 
						||
  return some_done;
 | 
						||
}
 | 
						||
 | 
						||
 | 
						||
// Imposta la formula delle varianti sui finiti e semilavorati
 | 
						||
void setformulavar()
 | 
						||
{
 | 
						||
  TIndwin iw(80, "Impostazione formula delle varianti  ...",FALSE,FALSE);
 | 
						||
  int err;
 | 
						||
  long distno=1L;
 | 
						||
  TLocalisamfile dist(LF_DIST);
 | 
						||
  err = dist.read(_isfirst);
 | 
						||
  TString varvar;
 | 
						||
  TString cod(' ',20);
 | 
						||
  while (err == NOERR)  
 | 
						||
  {
 | 
						||
    if ((distno%TICK)==1)
 | 
						||
    {
 | 
						||
      iw.set_text(format("Impostazione formula distinta n. %ld", distno));
 | 
						||
      do_events();
 | 
						||
    }
 | 
						||
    cod=dist.get("CODDIST");
 | 
						||
    if (cod.find("__")<0)
 | 
						||
    {
 | 
						||
      const TRectype &ana=cache().get(LF_ANAMAG,cod);
 | 
						||
      if (!ana.empty())
 | 
						||
      {
 | 
						||
        varvar="VARIANTE=_DISTINTA+\"__\"+";
 | 
						||
        // se non e' un fantasma lo definisce come variante (distinta contenente una riga di tipo variabile)
 | 
						||
        // se e'  un finito, anche varianti di sconfezionamento
 | 
						||
        if (ana.get(ANAMAG_GRMERC)[0]=='F')
 | 
						||
          //varvar << "IF(_IMPIANTO==\"XT\",_LINEA,IF(_LINEA?=\"??9??\",_LINEA,_IMPIANTO))" ;
 | 
						||
          varvar << "IF((_IMPIANTO==\"XT\")||(_LINEA?=\"??9??\"),_LINEA,_IMPIANTO)" ; 
 | 
						||
        else
 | 
						||
          varvar << "IF(_IMPIANTO==\"XT\",_LINEA,_IMPIANTO)" ;
 | 
						||
        if (dist.get("PARAMETRI").blank() || 
 | 
						||
          (varvar != dist.get("PARAMETRI") && 
 | 
						||
            yesno_box("Setto la formula di %s\nattuale:%s;\nnuova  :%s",(const char *)cod,(const char *)dist.get("PARAMETRI") ,(const char *)varvar)))
 | 
						||
        {
 | 
						||
          dist.put("PARAMETRI",varvar);
 | 
						||
          dist.rewrite();
 | 
						||
        }
 | 
						||
      }
 | 
						||
    }
 | 
						||
    err = dist.read(_isnext);
 | 
						||
    distno++;
 | 
						||
  }
 | 
						||
}
 | 
						||
 | 
						||
void round_date(TDate& date, const int bucket_size, bool up) 
 | 
						||
{
 | 
						||
 | 
						||
  // Riporta la data al primo lunedi prima dell'inizio
 | 
						||
  const int wday = date.wday();
 | 
						||
  if (wday > 1) date -= wday-1;
 | 
						||
 | 
						||
  //TDate begin("01-01-1999");
 | 
						||
  TDate begin(TODAY);
 | 
						||
  begin.set_day(1);
 | 
						||
  const int wday2 = begin.wday();
 | 
						||
  if (wday2 > 1) 
 | 
						||
    begin -= wday2-1; // primo lunedi' considerato
 | 
						||
 | 
						||
  int bucks=int((date-begin) / bucket_size);
 | 
						||
  
 | 
						||
  date=begin;
 | 
						||
  date+=bucket_size*bucks;
 | 
						||
 | 
						||
  if (up) // Arrotonda alla fine del bucket
 | 
						||
    date += (bucket_size - 1);
 | 
						||
  else    // Arrotonda all'inizio del bucket  
 | 
						||
    date = date ;
 | 
						||
}
 | 
						||
 | 
						||
 | 
						||
 | 
						||
bool check_mag_locations(const TString &path,const TFilename &source)
 | 
						||
{
 | 
						||
  TImport_file movmag(path,source);
 | 
						||
  movmag.first();
 | 
						||
  long l;
 | 
						||
  do {
 | 
						||
    l= movmag.get_long("TLOCT");
 | 
						||
    if (location2method(l)==99)
 | 
						||
      if (yesno_box("Locazione %ld sconosciuta. Interrompo?",l))
 | 
						||
        return FALSE;
 | 
						||
  } while (!movmag.next());
 | 
						||
  return TRUE;
 | 
						||
}
 | 
						||
 | 
						||
bool bonifica_vendite(TMask &m, const TString & codimp)
 | 
						||
{
 | 
						||
  TString8 codnum=codimp;
 | 
						||
  codnum<< "MM";
 | 
						||
  TRelation *r= new TRelation(LF_DOC);
 | 
						||
  r->add(LF_RIGHEDOC,"CODNUM==CODNUM|ANNO==ANNO|PROVV==PROVV|NDOC==NDOC");
 | 
						||
  TCursor c(r);
 | 
						||
  TRectype frec(LF_DOC);
 | 
						||
  frec.put("CODNUM",codnum);
 | 
						||
  frec.put("PROVV","D");
 | 
						||
  frec.put("ANNO" ,"1999");
 | 
						||
  c.setregion(frec,frec);
 | 
						||
  c.freeze();
 | 
						||
 | 
						||
  const long items=c.items();
 | 
						||
  TProgind info(items,"Eliminazione causali di riga dalle bolle di vendita...",FALSE,TRUE);
 | 
						||
  for (long i= 0; i< items ; i++)
 | 
						||
  {
 | 
						||
    c=i;
 | 
						||
    info.addstatus(1);
 | 
						||
    TRelation *r =c.relation();
 | 
						||
    TLocalisamfile & teste = c.relation()->lfile(LF_DOC);
 | 
						||
    TLocalisamfile & righe = c.relation()->lfile(LF_RIGHEDOC);
 | 
						||
    if (teste.get("CAUSMAG")=="VNENT")
 | 
						||
    {
 | 
						||
      bool ok = r->is_first_match(LF_RIGHEDOC);
 | 
						||
      while (ok)
 | 
						||
      {
 | 
						||
        real q=righe.get("QTA");
 | 
						||
        if (righe.get("CAUSMAG")=="SCAR")
 | 
						||
          q=-q;
 | 
						||
  
 | 
						||
        righe.put("CAUSMAG"," ");
 | 
						||
        righe.put("QTA",q);
 | 
						||
        righe .rewrite();
 | 
						||
        ok = r->next_match(LF_RIGHEDOC);
 | 
						||
      }
 | 
						||
    }
 | 
						||
  }
 | 
						||
  return TRUE;
 | 
						||
}
 | 
						||
 | 
						||
 | 
						||
 | 
						||
int inserisci_articolo(const char * codart, const char * um)
 | 
						||
{
 | 
						||
  delete_files("NA_0*.ini");
 | 
						||
  {
 | 
						||
    TConfig art_ini("NA_00001.ini");
 | 
						||
    art_ini.set_paragraph("Transaction");
 | 
						||
    art_ini.set("Action","INSERT");
 | 
						||
    if (um && *um)
 | 
						||
      art_ini.set("Mode","AUTO");
 | 
						||
    else
 | 
						||
    {
 | 
						||
      // cerca di capire la mejo unit' di misura
 | 
						||
      switch (*codart)
 | 
						||
      {
 | 
						||
        case '0':
 | 
						||
        case '1':
 | 
						||
        case '2':
 | 
						||
        case '3':
 | 
						||
        case '4':
 | 
						||
         um  = "PZ";
 | 
						||
         break;
 | 
						||
        case '5':
 | 
						||
         um  = "CA";
 | 
						||
         break;
 | 
						||
        case 'U':
 | 
						||
          switch (*(codart+1))
 | 
						||
          {
 | 
						||
            case '0':
 | 
						||
              um  = "KG";
 | 
						||
              break;
 | 
						||
            case 'K':
 | 
						||
              if ((*(codart+2)) <= '9')
 | 
						||
                um  = "CA";
 | 
						||
              break;
 | 
						||
          }
 | 
						||
          break;
 | 
						||
      }
 | 
						||
    }
 | 
						||
    art_ini.set("Firm","1");
 | 
						||
    art_ini.set_paragraph("47");
 | 
						||
    art_ini.set("CODART",codart);
 | 
						||
    art_ini.set("DESCR",format("*--- descrizione art. %s", codart));
 | 
						||
    art_ini.set("CODIVA","20");
 | 
						||
    art_ini.set_paragraph("49,1");
 | 
						||
    if (um && *um)
 | 
						||
    {
 | 
						||
      art_ini.set("UM",um);
 | 
						||
      if (strcmp(um,"KG")==0 || strcmp(um,"GR")== 0)
 | 
						||
        art_ini.set("UMP",um); // unita' di misura del peso
 | 
						||
      art_ini.set("FC","1.0");
 | 
						||
    }
 | 
						||
  }
 | 
						||
  TExternal_app *_gestart=NULL;
 | 
						||
  if (_gestart==NULL)
 | 
						||
    _gestart = new TExternal_app("ve2.exe -3 -iNA_000*.ini");
 | 
						||
  while (_gestart->run()!=0 && yesno_box("Ritento l'esecuzione di ve2.exe ?"))
 | 
						||
    ;
 | 
						||
  return 0;               
 | 
						||
}
 | 
						||
 | 
						||
// **************************************
 | 
						||
 | 
						||
TImport_file::TImport_file(const char *path, const char * name)
 | 
						||
{
 | 
						||
  TFilename fname(path);
 | 
						||
  fname.add(name);
 | 
						||
  _f = new TExternisamfile(fname, TRUE, TRUE);
 | 
						||
  _f->setkey(1);
 | 
						||
}
 | 
						||
void TImport_file::zero(const char filler)
 | 
						||
{
 | 
						||
  _f->zero(filler);
 | 
						||
}
 | 
						||
 | 
						||
void TImport_file::put(const char *field, const char * val)
 | 
						||
{
 | 
						||
  _f->put(field,val);
 | 
						||
}
 | 
						||
 | 
						||
TString & TImport_file::get(const char *field)
 | 
						||
{
 | 
						||
  _sbuffer = _f->get(field);
 | 
						||
  return _sbuffer.trim();
 | 
						||
}                                                               
 | 
						||
 | 
						||
TString & TImport_file::get_codice(const char *field)
 | 
						||
{
 | 
						||
  _sbuffer = _f->get(field);
 | 
						||
  _sbuffer.trim();
 | 
						||
  // special computing....
 | 
						||
  if (_sbuffer == "U00254G")
 | 
						||
    _sbuffer = "U00254";
 | 
						||
 | 
						||
  return _sbuffer;
 | 
						||
}
 | 
						||
const real & TImport_file::get_real(const char *field)
 | 
						||
{
 | 
						||
  get(field).replace(',','.');
 | 
						||
  _rbuffer=real(_sbuffer);
 | 
						||
  return _rbuffer;
 | 
						||
}
 | 
						||
const long TImport_file::get_long(const char *field)
 | 
						||
{
 | 
						||
  const long l= _f->get_long(field);
 | 
						||
  return l;
 | 
						||
}
 | 
						||
const TDate & TImport_file::get_date(const char *field)
 | 
						||
{
 | 
						||
  _dbuffer=_f->get_long(field);
 | 
						||
  return _dbuffer;
 | 
						||
}
 | 
						||
 | 
						||
bool TImport_file::first()
 | 
						||
{
 | 
						||
  return _f->first();
 | 
						||
}
 | 
						||
bool TImport_file::prev()
 | 
						||
{
 | 
						||
  return _f->prev();
 | 
						||
}
 | 
						||
bool TImport_file::next()
 | 
						||
{
 | 
						||
  return _f->next();
 | 
						||
}
 | 
						||
bool TImport_file::eof()
 | 
						||
{
 | 
						||
  return _f->eof();
 | 
						||
}
 | 
						||
 | 
						||
long TImport_file::items()
 | 
						||
{
 | 
						||
  return _f->items();
 | 
						||
}
 | 
						||
 | 
						||
 | 
						||
int TImport_file::read(int mode)
 | 
						||
{
 | 
						||
  int err = _f->read(mode);
 | 
						||
  return err;
 | 
						||
}
 | 
						||
int TImport_file::write()
 | 
						||
{
 | 
						||
  return _f->write();
 | 
						||
}
 | 
						||
void TImport_file::zap(bool pack)
 | 
						||
{
 | 
						||
  _f->zap();
 | 
						||
}
 | 
						||
 | 
						||
        
 | 
						||
// **************************************
 | 
						||
void TSupport_file::zap()
 | 
						||
{
 | 
						||
  int err;
 | 
						||
  for (long i=_f->items(); i>0; i--)
 | 
						||
  {
 | 
						||
    _f->readat(i);
 | 
						||
    err=_f->remove();
 | 
						||
  }
 | 
						||
}
 | 
						||
int TSupport_file::read(TRectype & r)
 | 
						||
{
 | 
						||
  CHECK(r.num() == _f->num(),"TIpo record inconsistente");
 | 
						||
  TString k(r.build_key(1));
 | 
						||
  r = _cache->get(k); 
 | 
						||
  if (r.empty())
 | 
						||
    return _iskeynotfound;
 | 
						||
  return NOERR;
 | 
						||
}
 | 
						||
int TSupport_file::write()
 | 
						||
{
 | 
						||
  TString k(_f->curr().build_key(1));
 | 
						||
  _cache->discard(k); 
 | 
						||
  return _f->write();
 | 
						||
}
 | 
						||
  
 | 
						||
void TSupport_file::put(const char * field, const char * value)
 | 
						||
{
 | 
						||
  _f->put(field,value);
 | 
						||
}
 | 
						||
 | 
						||
TSupport_file::TSupport_file (int logicnum,const char * radix)
 | 
						||
{
 | 
						||
  _f = new TIsamtempfile(logicnum,radix,FALSE,FALSE);
 | 
						||
  _cache= new TRecord_cache(_f);
 | 
						||
}
 | 
						||
TSupport_file::~TSupport_file()
 | 
						||
{
 | 
						||
  delete _f;
 | 
						||
  delete _cache;
 | 
						||
}
 | 
						||
 | 
						||
 | 
						||
bool  number_box(const char * prompt, real & v)
 | 
						||
{
 | 
						||
  TMask m("Input",1,60,10);
 | 
						||
  m.add_number(FIRST_FIELD,0,prompt, 2,2,18,"",3);
 | 
						||
  m.set(FIRST_FIELD,v);
 | 
						||
  m.add_button(DLG_OK,0,"OK",-12 ,6,10,2);
 | 
						||
  m.add_button(DLG_CANCEL,0,"Annulla", -22,6,10,2);
 | 
						||
  if (m.run()==K_ESC)
 | 
						||
    return FALSE;
 | 
						||
  v = m.get_real(FIRST_FIELD);
 | 
						||
  return TRUE;
 | 
						||
}
 | 
						||
const char * external_refnum(TImport_file &import)
 | 
						||
{
 | 
						||
  static TString _wrk;
 | 
						||
  _wrk=import.get("TCOM");
 | 
						||
  while (_wrk[0] && (_wrk[0]<'0' || _wrk[0]>'9' || _wrk[0]=='/'|| _wrk[0]=='-'|| _wrk[0]=='.'))
 | 
						||
    _wrk = _wrk.mid(1);
 | 
						||
  int lenextdoc=_wrk.len();
 | 
						||
  if (lenextdoc > 6)
 | 
						||
    _wrk.cut(lenextdoc-6);
 | 
						||
  _wrk.trim();
 | 
						||
  if (_wrk.len()>7)
 | 
						||
    _wrk = _wrk.right(7);
 | 
						||
  if (atol(_wrk)==0L)
 | 
						||
    return "";
 | 
						||
  return _wrk;
 | 
						||
}
 | 
						||
const char * external_refdate(TImport_file &import)
 | 
						||
{
 | 
						||
  static TString _wrk;
 | 
						||
  _wrk=import.get("TCOM");
 | 
						||
  while (_wrk[0] && (_wrk[0]<'0' || _wrk[0]>'9' || _wrk[0]=='/'|| _wrk[0]=='-'|| _wrk[0]=='.'))
 | 
						||
    _wrk = _wrk.mid(1);
 | 
						||
  if (_wrk.len() < 6)
 | 
						||
    _wrk.cut(0);
 | 
						||
  else
 | 
						||
  {
 | 
						||
    _wrk = _wrk.right(6);
 | 
						||
    if (atol(_wrk)==0L)
 | 
						||
      return "";
 | 
						||
    if (_wrk[5]=='9')
 | 
						||
      _wrk.insert("19",4);
 | 
						||
    else
 | 
						||
      _wrk.insert("20",4);
 | 
						||
    _wrk.insert("-",4);
 | 
						||
    _wrk.insert("-",2);
 | 
						||
  }
 | 
						||
  return _wrk;
 | 
						||
}
 | 
						||
long trascode_for(const long oldcod)
 | 
						||
{
 | 
						||
  static TExternisamfile *_trascofor=NULL;
 | 
						||
  if (_trascofor==NULL)
 | 
						||
    _trascofor=new TExternisamfile("TRS_FORN",TRUE, TRUE);
 | 
						||
  _trascofor->put("OLDCODE", oldcod);
 | 
						||
  if (_trascofor->read()==NOERR)
 | 
						||
  {
 | 
						||
    long newcod = _trascofor->get_long("newcode");
 | 
						||
    return newcod > 0 ? newcod : oldcod;
 | 
						||
  }
 | 
						||
  return oldcod;
 | 
						||
}
 | 
						||
 |