📄 qtsylib.c
字号:
Orig->sl = 1.0;
Orig->je+=CurrSP->je;
Orig->ssje+=CurrSP->ssje;
Orig->sj = Orig->je;
Orig->sjsj = Orig->ssje;
}
else
{
Orig->sl+=CurrSP->sl; //计算数量
if(!CurrSP->state) //金额
{
Orig->je=Orig->sj*Orig->sl;
Orig->ssje=Orig->sjsj*Orig->sl;
}
else
{
Orig->je+=CurrSP->je;
Orig->ssje+=CurrSP->ssje;
}
}
return 100+Orig->RecNo;
}
return 0;
}
//根据条码取商品明细(条码串,商品明细指针)
int Check_TM(char *tm)
{
int m=0,n=0,i,k;
for(i=0;i<12;i+=2)
{
m+=tm[i]-'0'; //奇数位之和
n+=tm[i+1]-'0'; //偶数位之和
}
m+=n*3;
m%=10;
m=(10-m)%10;
k=tm[12]-'0';
if(m!=k)
{
MsgBoxEx("条码校验错误!",1);
return 0;
}
return 1;
}
int sql_tm(_SPStruct *CurrSP,int Att)
//
{
DBCHAR spbm[9];
DBFLT8 pack,sj,yhj;
char tm[20],_spbm[9],_buf[21],tmsw;
//double tmppack,tmpsj;
double value;
int bMark=0,nLen,Result=2;
CurrSP->state=0; //设置状态为0
CurrSP->mark = 0;
CurrSP->bzsl=1.0;
strcpy(tm,CurrSP->sptm);
nLen = strlen(CurrSP->sptm); //输入的编码长度
if(nLen>=8) //假设是条码
{
tmsw = CurrSP->sptm[0];
//允许条码称表,假设是条码称表
if(Param.Xzbm[0]!='0'&&nLen>=13&&
(tmsw==Param.Xzbm[1]||tmsw==Param.Xzbm[2]||tmsw==Param.Xzbm[3]))
{
if(Param.Xzbm[4]=='1'&&!Check_TM(tm)) return 1;
uf_strmid(_spbm,CurrSP->sptm,1,6); //取6位
bMark=!sql_spbm(CurrSP,_spbm); //从条码称中查询商品
if(bMark)
{
if(CurrSP->sj==0) CurrSP->sj=1;
//求金额
uf_strmid(_spbm,CurrSP->sptm,7,5); //取5位金额
value=atof(_spbm); //转换成实数
if(Param.Xzbm[0]=='1')
{
CurrSP->je=uf_round(value,2)/100; //取两位小数
CurrSP->sl=CurrSP->je/CurrSP->sj; //计算数量
}
else
{
CurrSP->sl=value;
CurrSP->je=CurrSP->sj*CurrSP->sl;
}
CurrSP->sjsj=CurrSP->sj; //实际售价等于售价
CurrSP->ssje=CurrSP->je;
CurrSP->state=1; //设置条码秤商品标记
CurrSP->mark = 1;
}
}
if((!bMark)&&Param.Scan[0]=='1') //允许多条码表
{
//从多条码表中查询商品
//tmppack=0;
//tmpsj=0;
if(!__syfs||dbproc==NULL||DBDEAD(dbproc)) //单机多条码
{
Result=GetDataFromDbf(&_DTMDataSet,_DTMFields,"tm",tm);
if(!Result)
{
GetDataFromField(_DTMDataSet.FieldCount,_DTMFields,"spbm",spbm,NULL);
GetDataFromField(_DTMDataSet.FieldCount,_DTMFields,"sl",_buf,&pack);
GetDataFromField(_DTMDataSet.FieldCount,_DTMFields,"sj",_buf,&sj);
GetDataFromField(_DTMDataSet.FieldCount,_DTMFields,"yhj",_buf,&yhj);
yhj=(yhj==0)?sj:yhj;
}
}
else
{
dbfreebuf(dbproc);
dbcmd(dbproc," select spbm,isnull(sl,1),isnull(sj,1),isnull(yhj,1)");
dbcmd(dbproc, " from jxc_dtmb ");
dbfcmd(dbproc," where tm='%s' ",tm);
dbsqlexec(dbproc);
while((result_code=dbresults(dbproc))!=NO_MORE_RESULTS)
if(result_code==SUCCEED)
{
dbbind(dbproc, 1, NTBSTRINGBIND, (DBINT) 0, spbm);
dbbind(dbproc, 2, FLT8BIND, (DBINT) 0,(BYTE *) &pack);
dbbind(dbproc, 3, FLT8BIND, (DBINT) 0,(BYTE *) &sj);
dbbind(dbproc, 4, FLT8BIND, (DBINT) 0,(BYTE *) &yhj);
while(dbnextrow(dbproc)!=NO_MORE_ROWS);
if(DBCOUNT(dbproc)) //无该商品
Result=0;
}
else break;
}
if(!Result)
{
bMark = 1;
strcpy(CurrSP->spbm,spbm);
CurrSP->sl=1; //数量
sj=(sj==0)?1.0:sj;
pack=(pack==0)?1.0:pack;
yhj=sj;
CurrSP->bzsl=pack; //包装数量
if(pack>1)
{
CurrSP->je=sj; //金额默认等于售价
CurrSP->ssje=sj;
CurrSP->sj=sj;
CurrSP->sjsj=CurrSP->sj;
CurrSP->yhj=yhj;
CurrSP->state=2; //设置多条码销售商品
CurrSP->mark = 2;
}
}
}
}
//bMark=1时,已经成功根据条码查询出商品
Result=0;
if(Att)
Result=sql_spexists(CurrSP); //检查商品是否存在
if(!Result) //商品尚未存在
return sql_spxx(CurrSP);
else
return Result;
}
//更改收银员密码
int sql_changpw(char *PW)
{
dbfreebuf(dbproc);
dbfcmd(dbproc," update jxc_syyb set mm='%s'",PW);
dbfcmd(dbproc," where syybm='%s' ",Syy_No);
dbsqlexec(dbproc);
while ((result_code = dbresults(dbproc)) != NO_MORE_RESULTS)
if(result_code==FAIL)
{
MsgBoxEx("更改密码失败!",1);
return 0;
}
return 1;
}
// 交班
int sql_jbdata(void)
{
char DateTime[21];
if(dbproc==NULL||DBDEAD(dbproc))
{
MsgBoxEx("网络未连通,不能够进行交班!",1);
return -4;
}
dbfreebuf(dbproc);
dbfcmd(dbproc," update jxc_syjb set jbsyy='%s',jbsj=getdate() ",Syy_No);
dbfcmd(dbproc," where syjh='%s' ",Param.SyjNo);
dbsqlexec(dbproc);
while ((result_code = dbresults(dbproc)) != NO_MORE_RESULTS)
if(result_code==FAIL)
{
MsgBoxEx("不能够成功交班!",1);
return -4;
}
GetlocalTime(DateTime,NULL,NULL);
Dbf_jb(DateTime); //写人本地表
ResetAll(); //复位所有数据
return 0;
}
//取YTPOS系统的设置值(返回串,设置变量名)
int sql_global(char *value,char *var_name)
{
DBCHAR var_save[81];
int Result=2;
if(!__syfs||dbproc==NULL||DBDEAD(dbproc)) //取单机的全局变量
{
Result=GetDataFromDbf(&_SYSDataSet,_SYSFields,"var_name",var_name);
if(!Result) //找到
GetDataFromField(_SYSDataSet.FieldCount,
_SYSFields,"var_save",var_save,NULL);
}
else
{
dbfreebuf(dbproc);
dbcmd(dbproc," select var_save from ytsys_globle ");
dbfcmd(dbproc," where var_name='%s' ",var_name);
dbsqlexec(dbproc);
while((result_code=dbresults(dbproc))!=NO_MORE_RESULTS)
if(result_code == SUCCEED)
{
dbbind(dbproc, 1, NTBSTRINGBIND, (DBINT) 0, var_save);
while (dbnextrow(dbproc) != NO_MORE_ROWS);
if(DBCOUNT(dbproc)==0)
Result = 1;
else
Result = 0;
}
else break;
}
if(!Result) //!Result
strcpy(value,var_save);
return (Result==0)?1:0; //1:0
}
// 初始化前台收银系统变量
void sql_initglobal()
{
char g_temp[61];
Printf("\n\n取前台收银变量: ",clWhite);
Printf("\n 管理员密码:g_user_sh...OK",clSilver);
if(sql_global(g_cashcode ,"g_qt_cash")!=1)
strcpy(g_cashcode,"ytpos");
Printf("\n 商场名称",clSilver);
sql_global(g_scmc,"g_qt_head");
/* Printf("\n 购货凭证脚注",clSilver);
sql_global(g_qt_foot,"g_qt_foot");
Printf("\n 条码秤商品时点打折标记",clSilver);
sql_global(g_qt_tmsd,"g_qt_tmsd");
Printf("\n 条码秤商品类别打折标记",clSilver);
sql_global(g_qt_tmlb,"g_qt_tmlb");
if(Param.Title[0]!='\0')
strcpy(g_scmc,Param.Title);
else
strcpy(g_scmc,g_qt_head);
strcpy(g_scmc,g_qt_head); */
if(sql_global(g_VIPsw,"g_VIPsw")!=1) //VIP卡首位 默认为空
strcpy(g_VIPsw,"");
if(sql_global(g_VIPyhl,"g_VIPyhl")!=1) //VIP卡优惠率 默认为1
strcpy(g_VIPyhl,"1");
if(sql_global(g_xyksy,"g_qt_xyksy")!=1) //无的话,默认为0
strcpy(g_xyksy,"1");
g_lsdhex[0]='\0';
sql_global(g_lsdhex,"g_lsdh");
if(sql_global(g_temp,"g_qt_cap")&&g_temp[0]!='\0')
sprintf(p_Formats[1],"%s\n",g_temp);
if(sql_global(g_temp,"g_qt_title")&&g_temp[0]!='\0')
sprintf(p_Formats[2],"%s\n",g_temp);
if(sql_global(g_temp,"g_qt_t1")&&g_temp[0]!='\0')
{
sprintf(p_Formats[_nFormat++],"%s\n",g_temp);
_nFormatx++;
}
if(sql_global(g_temp,"g_qt_t2")&&g_temp[0]!='\0')
{
sprintf(p_Formats[_nFormat++],"%s\n",g_temp);
_nFormatx++;
}
if(sql_global(g_temp,"g_qt_gg1")&&g_temp[0]!='\0')
sprintf(p_Formats[_nFormatx++],"%s\n",g_temp);
if(sql_global(g_temp,"g_qt_gg2")&&g_temp[0]!='\0')
sprintf(p_Formats[_nFormatx++],"%s\n",g_temp);
if(sql_global(g_temp,"g_qt_gg3")&&g_temp[0]!='\0')
sprintf(p_Formats[_nFormatx++],"%s\n",g_temp);
if(Param.bz[0]=='1'||Param.bz[0]=='2') //允许税控
{
if(sql_global(g_temp,"g_qt_sl1")&&g_temp[0]!='\0') //取税率1
g_sl[0]=atof(g_temp);
if(sql_global(g_temp,"g_qt_sl2")&&g_temp[0]!='\0') //取税率2
g_sl[1]=atof(g_temp);
if(sql_global(g_temp,"g_qt_sl3")&&g_temp[0]!='\0') //取税率3
g_sl[2]=atof(g_temp);
if(sql_global(g_temp,"g_qt_sl4")&&g_temp[0]!='\0') //取税率4
g_sl[3]=atof(g_temp);
}
}
//初始化当前班次的存储目录和文件
void dbf_InitFile(void)
{
//数据存储目录
char _g_bc[5]; //班次的前4位
char _Path[40]; //工作路径
FILE *fp;
char buf[1024];
uf_strmid(_g_bc,g_bc,0,4); //取班次的前4位
strcpy(_Path,"Data\\");
strcat(_Path,_g_bc); //设置数据存储路径
strcpy(_OrigXsd,_Path);
strcat(_OrigXsd,"\\X");
strcat(_OrigXsd,g_bc);
strcat(_OrigXsd,".dbf"); //当前使用的销售单文件,包含路径
strcpy(_OrigWqb,_Path);
strcat(_OrigWqb,"\\W");
strcat(_OrigWqb,g_bc);
strcat(_OrigWqb,".dbf"); //当前使用的未确认交易文件,包含路径
if(!FileExists(_OrigXsd)) //检查文件是否存在
{
mkdir(_Path); //建立目录
fp=fopen("Data\\jxc_xsdb.dbf","rb");
fread(&buf,866,1,fp);
fclose(fp);
fp=fopen(_OrigXsd,"wb+");
fwrite(&buf,866,1,fp);
fclose(fp);
fp=fopen(_OrigWqb,"wb+");
fwrite(&buf,866,1,fp);
fclose(fp);
}
}
// 初始化班次
// g_scjbsj:上次交班时间
void sql_initbc()
{
char tmpjbsj[9],tmp[9]="00:00:00",nDate[11];
DBINT xsbs=0,maxlsh=0;
DBCHAR tmp_scjbsj[30],dMaxTime[21],bcMax[7];
//提示
Printf("\n\n取收银机上次交班时间: ",clSilver);
sprintf(__bvalue," select jbsj from jxc_syjb where syjh=%s ... ",Param.SyjNo);
Printf(__bvalue,clSilver);
sql_time(g_now); //取当前日期时间
sql_time(g_now);
uf_strmid(nDate,g_now,0,10); //分离日期
strcpy(dMaxTime,g_now);
if(__syfs==0||dbproc==NULL||DBDEAD(dbproc))
{
GetDataFromDbf(&_SYJDataSet,_SYJFields,"syjh",Param.SyjNo);
GetDataFromField(_SYJDataSet.FieldCount,_SYJFields,"jbsj",g_scjbsj,NULL);
bcMax[0] = '\0';
}
else
{
//求上次交班时间
dbfreebuf(dbproc);
dbcmd(dbproc," select convert(char(10),jbsj,102)+' '+convert(char(8),jbsj,8) ");
dbfcmd(dbproc," from jxc_syjb where syjh='%s' ",Param.SyjNo);
dbsqlexec(dbproc);
while((result_code=dbresults(dbproc)) != NO_MORE_RESULTS)
if(result_code==SUCCEED)
{
dbbind(dbproc,1,NTBSTRINGBIND,(DBINT)0,tmp_scjbsj);
while(dbnextrow(dbproc)!=NO_MORE_ROWS)
strcpy(g_scjbsj,tmp_scjbsj); //g_scjbsj 上次交班时间
}
else break;
//求销售单表中该收银机的最大时间及相应的班次
dbfreebuf(dbproc);
dbfcmd(dbproc," select max(convert(char(10),dtime,102)+' '+convert(char(8),dtime,8)),max(bc) from %s",_jxc_xsdb);
dbfcmd(dbproc," where dtime>='%s' and syjh='%s' ",nDate,Param.SyjNo);
dbsqlexec(dbproc);
while((result_code=dbresults(dbproc))!=NO_MORE_RESULTS)
{
if(result_code==SUCCEED)
{
dbbind(dbproc,1,NTBSTRINGBIND,(DBINT)0,dMaxTime);
dbbind(dbproc,2,NTBSTRINGBIND,(DBINT)0,bcMax);
while(dbnextrow(dbproc)!=NO_MORE_ROWS);
}
else break;
}
}
sprintf(__bvalue,"%s..%s..OK",g_scjbsj,Param.SyjNo);
Printf(__bvalue,clSilver);
SleepEx(100);
//
// g_qt_jbsj 前台交班时间
Printf("\n取前台统一交班时间: g_qt_jbsj=",clSilver);
if(sql_global(tmpjbsj,"g_qt_jbsj")!=1)
strcpy(tmpjbsj,"13:25:00");
sprintf(__bvalue,"%s ... OK",tmpjbsj);
Printf(__bvalue,clSilver);
SleepEx(200);
uf_strmid(tmp,g_now,11,8); //析取时间
//处理班次
/*
Tjfs[1]=1时,一天一个班次
tmp 现在的时间
tmpjbsj 系统设定的交班时间
g_scjbsj 本台收银机上次交班时间
dMaxTime 本台收银机销售的最大时间
*/
switch(Param.Tjfs[1])
{
case '2':if(__syfs>0&&strcmp(tmp,tmpjbsj)>=0)
{
g_bc[0]=g_now[2];
g_bc[1]=g_now[3];
g_bc[2]=g_now[5];
g_bc[3]=g_now[6];
g_bc[4]=g_now[8];
g_bc[5]=g_now[9];
}
else
{
sql_anyday(dMaxTime);
g_bc[0]=dMaxTime[2];
g_bc[1]=dMaxTime[3];
g_bc[2]=dMaxTime[5];
g_bc[3]=dMaxTime[6];
g_bc[4]=dMaxTime[8];
g_bc[5]=dMaxTime[9];
}
break;
default:if(Param.Tjfs[1]=='1'||(__syfs=
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -