arivd_p.cpp

来自「一个以前收集的基于C/S架构的ERP客户端源代码」· C++ 代码 · 共 324 行

CPP
324
字号
//--------------------------------------------------------------------------
#include <vcl.h>
#include "Arivd_P.h"
#include "Arivh.h"
//--------------------------------------------------------------------------
#pragma hdrstop
#pragma package(smart_init)
#pragma link "fpanel"
#pragma link "SDEdit"
#pragma link "SDGrid"
#pragma link "SDComboBox"
#pragma link "DateEdit"
#pragma resource "*.dfm"

TfrmArivd_P  *frmArivd_P;
//--------------------------------------------------------------------------
__fastcall TfrmArivd_P::TfrmArivd_P(TComponent* Owner)
        : TStdBaseForm(Owner)
{
  btnOK->Enabled = false;
}
//--------------------------------------------------------------------------

void __fastcall TfrmArivd_P::btnOKClick(TObject *Sender)
{
  double dQty,dPrice,dDRate,dDAmt,dTRate,dTAmt,dNAmt,dAmt,dTmp;
  try
  {
    StartWaitForm("正在生成发票行,请稍候......");
    if(sgArivd->RowCount>1)
    {
     int j;
     j=comServer->ItemCount-1;
     if(j>=0)
     {
        comServer->LocateItemByIndex(j);
        j=StrToInt(GetDetailValue("ArivdLine"));
        j=j+1;
     }
     else
        j=1;
     try
     {
       for(int i=1;i<sgArivd->RowCount;i++)
       {
           if(sgArivd->Cells[1][i]=="√")
           {
               comServer->AddItem();
               SetDetailValue("ArivdCode",frmArivh->seArivhCode->Text);
               SetDetailValue("ArivdLine",AnsiString(j));
               SetDetailValue("ArivdArlt",sgArivd->Cells[15][i]);
               SetDetailValue("ArivdDocType",frmArivh->scArivdDocType->ItemData[1]);
               SetDetailValue("ArivdDocCode",sgArivd->Cells[3][i]);
               SetDetailValue("ArivdDocLine",sgArivd->Cells[4][i]);
               SetDetailValue("ArivdGoods",sgArivd->Cells[7][i]);
               SetDetailValue("ArivdUnit",sgArivd->Cells[8][i]);
               if(sgArivd->Cells[2][i] == "")
                throw Exception("请输入红冲数量或金额");
               if(sgArivd->Cells[14][i] == "1") //类型来源是产品,红冲数量
               {
                dQty=DataCarry(StrToFloat(sgArivd->Cells[2][i]),2,0);
                dTmp=DataCarry(StrToFloat(sgArivd->Cells[9][i]),2,0);
                if(dQty-dTmp>0)
                 throw Exception("红冲数量不能大于原发票行数量");
                SetDetailValue("ArivdQty",FloatToStr(dQty));
               }
               else
               {
                dQty=StrToFloat(sgArivd->Cells[9][i]);
                SetDetailValue("ArivdQty",sgArivd->Cells[9][i]);
               }
               if(sgArivd->Cells[10][i] == "")
                throw Exception("缺少物料单价数据");
               dPrice=StrToFloat(sgArivd->Cells[10][i]);
               SetDetailValue("ArivdPrice",sgArivd->Cells[10][i]);
               if(sgArivd->Cells[13][i] == "")
                throw Exception("缺少物料折扣率数据");
               dDRate=StrToFloat(sgArivd->Cells[13][i]);
               SetDetailValue("ArivdDRate",sgArivd->Cells[13][i]);
               //折扣金额=数量*单价*折扣率
               dDAmt=DataCarry(dQty*dPrice*dDRate,2,0);
               SetDetailValue("ArivdDAmt",FloatToStr(dDAmt));
               if(sgArivd->Cells[14][i] == "1")
               {
                //净额=数量*单价-折扣金额
                dNAmt=DataCarry(dQty*dPrice-dDAmt,2,0);
               }
               else //类型来源不是产品,红冲金额
               {
                dNAmt=DataCarry(StrToFloat(sgArivd->Cells[2][i]),2,0);
                dTmp=DataCarry(StrToFloat(sgArivd->Cells[16][i]),2,0);
                if(dNAmt-dTmp>0)
                 throw Exception("红冲金额不能大于原发票行净额");
               }

               SetDetailValue("ArivdNAmt",FloatToStr(dNAmt));
               SetDetailValue("ArivdTaxCode",sgArivd->Cells[11][i]);
               if(sgArivd->Cells[12][i] == "")
                throw Exception("缺少税率数据");
               dTRate=StrToFloat(sgArivd->Cells[12][i]);
               SetDetailValue("ArivdTRate",sgArivd->Cells[12][i]);
               //税额=净额*税率
               dTAmt=DataCarry(dNAmt*dTRate,2,0);
               SetDetailValue("ArivdTAmt",FloatToStr(dTAmt));
               //合计=净额+税额
               dAmt=DataCarry(dNAmt+dTAmt,2,0);
               SetDetailValue("ArivdAmt",FloatToStr(dAmt));

               SetDetailValue("ArivdCAmt","0");
               SetDetailValue("ArivdPzCode","");
               SetDetailValue("ArivdBAmt","0");
               SetDetailValue("ArivdRAmt","0");

               SetDetailValue("ArivdFrom","2");
               SetDetailValue("ArivdDesc","");
               SetDetailValue("ArivdState","0");
               comServer->AddToObject();
               j=j+1;
           }
       }
     }
     catch(Exception &e)
     {
      comServer->FreeItem();
      this->ModalResult=0;
      throw Exception(e.Message);
     }
    }
  }
  __finally
  {
    EndWaitForm();
  }
  Close();
}
//---------------------------------------------------------------------------
void __fastcall TfrmArivd_P::btnCancelClick(TObject *Sender)
{
    Close();
}
//---------------------------------------------------------------------------
void __fastcall TfrmArivd_P::FormShow(TObject *Sender)
{
    InitControlGroup();
}
//---------------------------------------------------------------------------
void __fastcall TfrmArivd_P::InitControlGroup()
{
    sgArivd->RowCount = 1;
    FClientCode=frmArivh->scArivhClient->ItemData[1];
    FCurrencyCode=frmArivh->scArivhCurrency->ItemData[1];
    seClientName->Text=frmArivh->scArivhClient->ItemData[0];
    seCurrencyName->Text=frmArivh->scArivhCurrency->ItemData[0];
    seArivhCode->Text="";
}
//---------------------------------------------------------------------------
AnsiString __fastcall TfrmArivd_P::GetSqlString()
{
    AnsiString  s_SQL;
    s_SQL =" select ArivhCode,ArivdLine,ArivdArlt,ArltFrom,ArivdDocCode,ArivdDocLine,ArivdGoods,ArivdUnit,ArivdQty,ArivdPrice, ";
    s_SQL+=" ArivdTaxCode,ArivdTRate,ArivdDRate,ArivdNAmt from sdArivh,sdArivd,sdArlt ";
    s_SQL+=" where ArivhCode=ArivdCode and ArivdArlt=ArltCode and ArivhCheck=1 and ArivhRed=1 ";
    s_SQL+=" and ArivhClient='"+FClientCode+"' ";
    s_SQL+=" and ArivhCurrency='"+FCurrencyCode+"' ";
    if(seArivhCode->Text != "")
     s_SQL+=" and ArivdCode='"+seArivhCode->Text+"' ";
    s_SQL+=" order by ArivhCode,ArivdLine ";
    return(s_SQL);
}
//---------------------------------------------------------------------------

void __fastcall TfrmArivd_P::FillGridWithData()
{
  AnsiString  ItemStr,s_SQL;
  TComResultSet *RsArivd;
  try
  {
   try
   {
    s_SQL =GetSqlString();
    sgArivd->RowCount=1;
    RsArivd=new  TComResultSet(Handle,g_ClientHandle);
    RsArivd->Open(s_SQL,"");
    while( RsArivd->Eof == 0)
    {
     ItemStr = "\t"+AnsiString("") +
               "\t"+AnsiString("") +
               "\t"+RsArivd->FieldByName("ArivhCode")+
               "\t"+RsArivd->FieldByName("ArivdLine")+
               "\t"+RsArivd->FieldByName("ArivdDocCode")+
               "\t"+RsArivd->FieldByName("ArivdDocLine")+
               "\t"+RsArivd->FieldByName("ArivdGoods")+
               "\t"+RsArivd->FieldByName("ArivdUnit")+
               "\t"+RsArivd->FieldByName("ArivdQty")+
               "\t"+RsArivd->FieldByName("ArivdPrice")+
               "\t"+RsArivd->FieldByName("ArivdTaxCode")+
               "\t"+RsArivd->FieldByName("ArivdTRate")+
               "\t"+RsArivd->FieldByName("ArivdDRate")+
               "\t"+RsArivd->FieldByName("ArltFrom")+
               "\t"+RsArivd->FieldByName("ArivdArlt")+
               "\t"+RsArivd->FieldByName("ArivdNAmt");

     sgArivd->AddItem(ItemStr);
     RsArivd->MoveNext();
    }
    RsArivd->Close();
   }
   catch(Exception &e)
   {
    throw Exception(e.Message);
   }
  }
  __finally
  {
   delete RsArivd;
  }
}
//---------------------------------------------------------------------------
void __fastcall TfrmArivd_P::GetComObject(TComServer *comServerPtr)
{
    comServer = comServerPtr;
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------

void __fastcall TfrmArivd_P::sgArivdDblClick(TObject *Sender)
{
    int ARow=sgArivd->Row;
    int ACol=sgArivd->Col;
    if (ARow < 1) return;
    if (ACol == 1)
    {
      if (sgArivd->Cells[1][ARow] == "√")
      {
       sgArivd->Cells[1][ARow] =  "";
       for (int i=1;i<sgArivd->RowCount;i++)
       {
          if(sgArivd->Cells[1][i]=="√")
          {
             btnOK->Enabled=true;
             break;
          }
          else
             btnOK->Enabled=false;
       }
      }
      else
      {
          sgArivd->Cells[1][ARow] =  "√";
          btnOK->Enabled = true;
      }
    }
}
//---------------------------------------------------------------------------

void __fastcall TfrmArivd_P::bbQueryClick(TObject *Sender)
{
  FillGridWithData();
}
//---------------------------------------------------------------------------

void __fastcall TfrmArivd_P::bbAllClick(TObject *Sender)
{
  if(sgArivd->RowCount <=1)
    return;
  for(int i=1;i<sgArivd->RowCount;i++)
    sgArivd->Cells[1][i] = "√";
  btnOK->Enabled = true;
}
//---------------------------------------------------------------------------

void __fastcall TfrmArivd_P::bbNoneClick(TObject *Sender)
{
  for(int i=1;i<sgArivd->RowCount;i++)
    sgArivd->Cells[1][i] = " ";
  btnOK->Enabled = false;
}
//---------------------------------------------------------------------------

void __fastcall TfrmArivd_P::sgArivdSelectCell(TObject *Sender, int ACol,
      int ARow, bool &CanSelect)
{
 if(sgArivd->Cells[1][ARow]=="√")
  sgArivd->ReadOnly=false;
 else
  sgArivd->ReadOnly=true;
}
//---------------------------------------------------------------------------

void __fastcall TfrmArivd_P::seArivhCodeButtonClick(TObject *Sender)
{
    AnsiString SqlStr;
    SqlStr="003[应收发票][登记日期][操作员] ";
    SqlStr+=" select ArivhCode,ArivhDate,UserName from sdArivh,sdUser ";
    SqlStr+=" where ArivhUser=UserCode and ArivhCheck=1 and ArivhRed=1 and ";
    SqlStr+=" ArivhClient='"+FClientCode+"'and ArivhCurrency='"+FCurrencyCode+"' ";
    SqlStr+=" order by ArivhDate DESC,ArivhCode ";
    TfrmWnQuery *p;
    try
    {
      StartWaitForm("正在查询,请稍候...");
      p=new TfrmWnQuery(this,"蓝字应收发票查询",SqlStr);
    }
    __finally
    {
      EndWaitForm();
    }
    if(p->ShowModal()==mrOk)
    {
      seArivhCode->Text=p->ColData[1];
    }
    delete p;
}
//---------------------------------------------------------------------------


void __fastcall TfrmArivd_P::btnRetryClick(TObject *Sender)
{
 seArivhCode->Text="";
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?