/*$Id:$*/
/*18.09.2023	17.09.2023	Белых А.И.	saldo_pk.cpp
Создание таблицы со списком контрагентов с не нулевым сальдо на заданную дату
*/
#include "buhg.h"

extern short	startgodb; /*Стартовый год*/


/*********************/
/*запись контрагента во временную таблицу*/
/*******************************************/
int saldo_pk_zvt(const char *kod_kontr,double deb,double kre,const char *imatab)
{
char strsql[512];
SQL_str row;
SQLCURSOR cur;

sprintf(strsql,"select kod_kontr from %s where kod_kontr='%s'",imatab,kod_kontr);

if(iceb_t_sql_readkey(strsql,&row,&cur) == 1)
 sprintf(strsql,"update %s set deb=deb+%.2f,kre=kre+%.2f where kod_kontr='%s'",imatab,deb,kre,row[0]);
else
  sprintf(strsql,"insert into %s values('%s',%.2f,%.2f)",imatab,kod_kontr,deb,kre);

if(iceb_t_sql_zapis(strsql,1,0) != 0)
 return(1);


return(0);
}

/**********************************************/

int saldo_pk(short ds,short ms,short gs,const char *shet,const char *kod_kontr,const char *kod_gk,class iceb_t_tmptab *tabtmp,const char *imatmptab)
{
SQL_str row,row1;
SQLCURSOR cur,cur1;
int kolstr=0,kolstr1=0;
short       gods=startgodb;
char zaprostmp[512];
char strsql[1024];
memset(zaprostmp,'\0',sizeof(zaprostmp));


if(gods == 0)
 gods=gs;


int kolshet=iceb_tu_pole2(shet,',');

sprintf(zaprostmp,"CREATE TEMPORARY TABLE %s (\
kod_kontr char(32) not null DEFAULT '',\
deb double(14,2) NOT NULL DEFAULT 0.,\
kre double(14,2) NOT NULL DEFAULT 0.,\
unique(kod_kontr)) ENGINE = MYISAM",imatmptab);

if(tabtmp->create_tab(imatmptab,zaprostmp) != 0)
 {
  return(1);
 }  




//Составляем список всех контрагентов
if(kolshet == 0)
  sprintf(strsql,"select kodkon,deb,kre from Saldo where ns='%s' and gs=%d",shet,gods);
else
  sprintf(strsql,"select kodkon,deb,kre from Saldo where gs=%d",gods);

if((kolstr=cur.make_cursor(&bd,strsql)) < 0)
 {
  iceb_t_msql_error(&bd,gettext("Ошибка создания курсора !"),strsql);
  return(1);
 }


while(cur.read_cursor(&row) != 0)
 {
  strzag(LINES-1,0,kolstr,++kolstr1);
  if(iceb_tu_proverka(kod_kontr,row[0],0,0) != 0)
   continue;

  if(kod_gk[0] != '\0')
   {
    sprintf(strsql,"select grup from Kontagent where kodkon='%s'",row[0]);
    if(iceb_t_sql_readkey(strsql,&row1,&cur1) == 0)
     if(iceb_tu_proverka(kod_gk,row1[0],0,0) != 0)
      continue;
   }
  saldo_pk_zvt(row[0],atof(row[1]),atof(row[2]),imatmptab);
 }

/*список из проводок*/
if(kolshet == 0)
  sprintf(strsql,"select kodkon,deb,kre from Prov where datp >= '%04d-%02d-%02d' and \
  datp <= '%04d-%02d-%02d' and sh='%s'",gods,1,1,gs,ms,ds,shet);
else
  sprintf(strsql,"select distinct kodkon from Prov where datp >= '%04d-%02d-%02d' and \
  datp <= '%04d-%02d-%02d'",gods,1,1,gs,ms,ds);

if((kolstr=cur.make_cursor(&bd,strsql)) < 0)
 {
  iceb_t_msql_error(&bd,gettext("Ошибка создания курсора !"),strsql);
  return(1);
 }
kolstr1=0;
while(cur.read_cursor(&row) != 0)
 {
  strzag(LINES-1,0,kolstr,++kolstr1);
  if(iceb_tu_proverka(kod_kontr,row[0],0,0) != 0)
   continue;
  if(kod_gk[0] != '\0')
   {
    sprintf(strsql,"select grup from Kontagent where kodkon='%s'",row[0]);
    if(iceb_t_sql_readkey(strsql,&row1,&cur1) == 0)
     if(iceb_tu_proverka(kod_gk,row1[0],0,0) != 0)
      continue;
   }
   
  saldo_pk_zvt(row[0],atof(row[1]),atof(row[2]),imatmptab);
 }


/*удаляем не нужные записи если дебет равняется кредиту то сальдо нулевое*/

sprintf(strsql,"delete from %s where deb = kre",imatmptab);
iceb_t_sql_zapis(strsql,1,0);

return(0);
}
