Files correlati : ba3.exe Ricompilazione Demo : [ ] Commento Bug 0001350 cg5.exe -1 - Paramtri di contabilità Lanciando il pgm Parametri ditta e poi premendo "FINE" evidenzia qs errore: "Non esiste probabilmente nessun libro giornale per l'anno 2009" . La base dati in oggetto è:FRATELLIALDROVANDI; è stata posta nell'area FTP nella cartella Ilaria. In riferimento a qs errore, verificando i registri inseriti, scorro con i pulsanti avanti e indietro l'anno 2009, mi si blocca sul registro degli acquisti, anno 2009, premendo FINE evidenzia l'errore "Attività non prevista per questa ditta". L'attività pero' esiste..... git-svn-id: svn://10.65.10.50/trunk@19079 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			239 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			239 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
#include <confapp.h>
 | 
						|
#include <isam.h>
 | 
						|
#include <modaut.h>
 | 
						|
#include <prefix.h>
 | 
						|
#include <relation.h>
 | 
						|
#include <tabutil.h>
 | 
						|
#include <utility.h>
 | 
						|
 | 
						|
#include <attiv.h> 
 | 
						|
 | 
						|
#include "cg5100a.h"
 | 
						|
 | 
						|
class TParametri_ditta : public TConfig_application
 | 
						|
{
 | 
						|
  TArray    _atts;   
 | 
						|
  
 | 
						|
  void swap_file(int logicnum, bool tocom);
 | 
						|
  void load_file(int logicnum);
 | 
						|
  void check_registers(int year);   
 | 
						|
  
 | 
						|
public:
 | 
						|
  virtual bool check_autorization() const  {return FALSE;}
 | 
						|
  virtual const char* get_mask_name() const {return "cg5100a";}
 | 
						|
  virtual bool preprocess_config (TMask& mask, TConfig& config);
 | 
						|
  virtual bool postprocess_config (TMask& mask, TConfig& config);
 | 
						|
  virtual bool postprocess_config_changed(const char* par, const char* var, 
 | 
						|
                                          const char* oldv, const char* newv);
 | 
						|
 | 
						|
  virtual bool user_create(); 
 | 
						|
  TParametri_ditta() : TConfig_application(CONFIG_DITTA) {}
 | 
						|
  virtual ~TParametri_ditta() {}
 | 
						|
};
 | 
						|
 | 
						|
bool TParametri_ditta::user_create()
 | 
						|
{
 | 
						|
  TRelation att(LF_ATTIV);
 | 
						|
	TRectype & r = att.curr();
 | 
						|
  
 | 
						|
  r.put(ATT_CODDITTA, get_firm());
 | 
						|
  
 | 
						|
	TCursor cur(&att, "", 1, &r, &r);
 | 
						|
	const TRecnotype items = cur.items();
 | 
						|
 | 
						|
	cur.freeze();
 | 
						|
  for (cur = 0L; cur.pos() < items; ++cur)
 | 
						|
    // istanzia array _atts on le attivita' della ditta corrente
 | 
						|
    _atts.add(r.get(ATT_CODATT));
 | 
						|
  
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
void TParametri_ditta::check_registers(int year)
 | 
						|
{
 | 
						|
  // controlla che per ogni data attivita' esistano almeno un registro
 | 
						|
  // acquisti, vendite e giornale; warning appropriato in caso negativo 
 | 
						|
  const byte R_ACQ = 0x01;
 | 
						|
  const byte R_VEN = 0x02;
 | 
						|
  const byte R_ALL = R_ACQ | R_VEN;
 | 
						|
  TRelation relreg("REG");
 | 
						|
	TRectype & reg = relreg.curr();
 | 
						|
	bool is_giornale = false;       
 | 
						|
 | 
						|
  for (int i = 0; i < _atts.items(); i++)
 | 
						|
  {
 | 
						|
		byte flags = 0x00;      
 | 
						|
    const TString& att = (TString&)_atts[i];
 | 
						|
 | 
						|
		reg.put("CODTAB", year);
 | 
						|
		
 | 
						|
		TCursor cur(&relreg, "I0==5", 1, ®, ®);
 | 
						|
		
 | 
						|
		is_giornale = cur.items() > 0;
 | 
						|
 | 
						|
		const TString80 filter(format("(S8==\"\")||(S8==\"%s\")", (const char *) att));
 | 
						|
 | 
						|
		cur.setfilter(filter);
 | 
						|
		const TRecnotype items = cur.items();
 | 
						|
 | 
						|
 | 
						|
		for (cur = 0L; (flags !=  R_ALL || !is_giornale) && (cur.pos() < items); ++cur)
 | 
						|
    {          
 | 
						|
			switch (reg.get_int("I0"))
 | 
						|
			{
 | 
						|
			case 1:    // vendite 
 | 
						|
				flags |= R_VEN; break;
 | 
						|
			case 2:    // acquisti
 | 
						|
				flags |= R_ACQ; break;
 | 
						|
			default:
 | 
						|
				break;  
 | 
						|
			}
 | 
						|
    } 
 | 
						|
    if (flags < R_ALL)
 | 
						|
    {      
 | 
						|
      TString wrn(TR("I seguenti registri non esistono per l'attivita' ")); 
 | 
						|
      wrn << att << " (" << year << "):";
 | 
						|
      if ((flags & R_VEN) == 0x00) wrn << TR("\n\tregistro vendite");
 | 
						|
      if ((flags & R_ACQ) == 0x00) wrn << TR("\n\tregistro acquisti");
 | 
						|
      warning_box(wrn);
 | 
						|
    }
 | 
						|
  } 
 | 
						|
 | 
						|
  // libro giornale non si controlla per attivita'
 | 
						|
  if(!is_giornale)
 | 
						|
    warning_box(FR("Non esiste probabilmente nessun libro giornale per l'anno %d"), year);
 | 
						|
}                                      
 | 
						|
 | 
						|
 | 
						|
 | 
						|
void TParametri_ditta::swap_file(int logicnum, bool tocom)
 | 
						|
{
 | 
						|
  TDir dir;
 | 
						|
  TFilename file;
 | 
						|
 | 
						|
  dir.get(logicnum, _lock, _nordir, _sysdirop);
 | 
						|
  file = dir.name();
 | 
						|
  file[0] = tocom ? '%' : '$';
 | 
						|
  dir.set(file, dir.eod(), dir.flags(), dir.des(), dir.expr());
 | 
						|
  dir.put(logicnum, _nordir, _sysdirop);
 | 
						|
  dir.get(logicnum, _lock, (tocom ? _comdir :_nordir), _sysdirop);
 | 
						|
  if (tocom)
 | 
						|
  {
 | 
						|
    file = dir.name();
 | 
						|
    file[0] = '%';
 | 
						|
    dir.set(file, dir.eod(), dir.flags(), dir.des(), dir.expr());
 | 
						|
    dir.put(logicnum, _comdir, _sysdirop);
 | 
						|
  }
 | 
						|
  else
 | 
						|
    dir.get(logicnum, _unlock, (tocom ? _comdir :_nordir), _sysdirop);
 | 
						|
  
 | 
						|
  file = dir.filename();
 | 
						|
  if (dir.eox() == 0L || !file.exist())
 | 
						|
  {
 | 
						|
    set_autoload_new_files(FALSE);
 | 
						|
    TSystemisamfile s(logicnum);
 | 
						|
    s.build(10L);
 | 
						|
    set_autoload_new_files(TRUE);
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
void TParametri_ditta::load_file(int logicnum)
 | 
						|
{
 | 
						|
  TDir dir;
 | 
						|
  dir.get(logicnum);
 | 
						|
 | 
						|
  TSystemisamfile f(logicnum);
 | 
						|
 | 
						|
  if (dir.eox() == 0L)
 | 
						|
    f.build(10L);
 | 
						|
 | 
						|
  TFilename lf;
 | 
						|
  lf.format("%sstd/lf%04d.txt", firm2dir(-1), logicnum);
 | 
						|
  if (lf.exist())
 | 
						|
    f.load(lf, '|', '\0', '\n', TRUE, TRUE);
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
bool TParametri_ditta::preprocess_config (TMask& mask, TConfig& config)
 | 
						|
{ 
 | 
						|
  if (has_module(CGAUT, CHK_DONGLE))
 | 
						|
  {
 | 
						|
    TLocalisamfile mov(LF_MOV); 
 | 
						|
    const bool movempty = mov.empty();
 | 
						|
    mask.enable(CHK_ANCFCM, movempty);
 | 
						|
    mask.enable(CHK_PCTCCM, movempty);
 | 
						|
    if (mask.get(FLD_ANLIIV).empty())
 | 
						|
      mask.set(FLD_ANLIIV, TDate(TODAY).year());
 | 
						|
 | 
						|
    // check auth for Saldaconto              
 | 
						|
    if (!has_module(SCAUT, CHK_DONGLE))
 | 
						|
      // disable saldaconting 
 | 
						|
      mask.disable(-GROUP_SALDACONTO);
 | 
						|
  }
 | 
						|
  else
 | 
						|
    mask.disable(-GROUP_CONTABILITA);
 | 
						|
  return TRUE; 
 | 
						|
}
 | 
						|
 | 
						|
bool TParametri_ditta::postprocess_config(TMask& mask, TConfig& config)
 | 
						|
{          
 | 
						|
  check_registers(mask.get_int(FLD_ANLIIV));
 | 
						|
  mask.field(FLD_ANLIIV).set_dirty(mask.get_int(FLD_ANLIIV) != config.get_int("AnLiIv"));
 | 
						|
  // MI3262
 | 
						|
  // La gestione liquidazione differita e' stata spostata sui parametri liquidazione
 | 
						|
  // ovvero cg5300.cpp
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
bool TParametri_ditta::postprocess_config_changed(const char* par, const char* var, 
 | 
						|
                                                  const char* oldv, const char* newv)
 | 
						|
{
 | 
						|
	const bool changed = strcmp(oldv, newv) != 0;
 | 
						|
 | 
						|
  if (!changed)
 | 
						|
			return TRUE;
 | 
						|
  const TFixed_string v(var);
 | 
						|
	if (v == "AnCfCm")
 | 
						|
  {
 | 
						|
    if (yesno_box(TR("Confermare il cambiamento dell'anagrafica clienti/fornitori")))
 | 
						|
    {
 | 
						|
      swap_file(LF_CLIFO, *newv == 'X');
 | 
						|
      swap_file(LF_INDSP, *newv == 'X');
 | 
						|
    }
 | 
						|
    else
 | 
						|
      return FALSE;
 | 
						|
  }
 | 
						|
  else if (v == "PcTcCm")
 | 
						|
  {
 | 
						|
    if (yesno_box(TR("Confermare il cambiamento del piano conti/causali")))
 | 
						|
    {
 | 
						|
      swap_file(LF_PCON, *newv == 'X');
 | 
						|
      swap_file(LF_CAUSALI, *newv == 'X');
 | 
						|
      swap_file(LF_RCAUSALI, *newv == 'X');
 | 
						|
      prefix().reopen();         
 | 
						|
      if (*newv == 'X')
 | 
						|
      {
 | 
						|
        TDir d;
 | 
						|
        d.get(LF_PCON, _nolock,  _comdir);
 | 
						|
        if (d.eod() == 0 && yesno_box(TR("Si desidera caricare gli archivi standard ?")))
 | 
						|
        {
 | 
						|
          load_file(LF_PCON);
 | 
						|
          load_file(LF_CAUSALI);
 | 
						|
          load_file(LF_RCAUSALI);
 | 
						|
        }
 | 
						|
      }
 | 
						|
    }
 | 
						|
    else
 | 
						|
      return FALSE;
 | 
						|
  }
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
int cg5100 (int argc, char* argv[])
 | 
						|
{
 | 
						|
  TParametri_ditta appc;
 | 
						|
  appc.run(argc, argv, TR("Parametri Ditta"));
 | 
						|
  return 0;
 | 
						|
}
 |