Понедельник, 25.11.2024, 11:46 PM
Компьютерная лаборатория Андрея Дремина
Приветствую Вас Гость | RSS
Главная Программирование Регистрация Вход
Меню сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Форма входа


Контактная информация :
ICQ#: 268-376-457

Программирование


Рассмотрим следующую задачу:
 
Программа по автоматизации складского учета, кондитерский цех "Загадка"
 
 
1)Необходимо рассчитать РАСХОДНУЮ ПО КАЛЬКУЛЯЦИОННОЙ КАРТОЧКЕ:
 
 

//***********************************************************************
//*** 1 ЭТАП ******* Выбираем записи из базы рецептов (MP_BREZ.DBF) *****
//****************** по номеру изделия, и помещаем во временную таблицу *
Table1->Active=false;
Table1->DatabaseName="C:\\SAAEF\\MATERIAL\\MAIN\\";
Table1->TableName="MP_BREZ.DBF";
Table1->Active=true;
//
Table6->DatabaseName="C:\\SAAEF\\MATERIAL\\TMP\\";
Table6->TableName="MP_BAZA_CALC_TMP.DBF";
Table6->Close();
Table6->Exclusive=true;
Table6->Open();
Table6->EmptyTable();
//Включить индикатор
int Rec=0;
ProgressBar1->Min = 0;
ProgressBar1->Max = Table1->RecordCount;
//*******************
Table1->First();
     while (!Table1->Eof)
        {
           Table6->Insert(); //заполняем таблицу данными
              if (Table1BL->Value==CSpinEdit4->Text)
               {
                 Table6BL ->AsString = Table1BL ->AsString ;
                 Table6PB ->AsString = Table1PB ->AsString ;
                 Table6KOD_TOV ->AsString = Table1KOD_TOV ->AsString ;
                 Table6NAIM_TOV ->AsString = Table1NAIM_TOV ->AsString ;
                 Table6PP ->AsString = Table1PP ->AsString ;
                 Table6KOD_POST ->AsString = "1"; 
                 Table6NAIM_POST ->AsString = "Склад сырья";
           if (ComboBox3->Text==1) //Если работает Бригада1
                {
                   Table6KOD_POL ->AsString = "107";
                   Table6NAIM_POL ->AsString = "Бригада1";
                 }
            if (ComboBox3->Text==2) //Если работает Бригада1
                {
                   Table6KOD_POL ->AsString = "108";
                   Table6NAIM_POL ->AsString = "Бригада2";
                 } 

     Table6->Insert(); //Table6->Edit();
         }
              if (Table1BL->Value!=CSpinEdit4->Text)
                {
                     Table6->Delete();
                }
// Отобразить индикатор
ProgressBar1->Position = Rec;
Rec++;
Application->ProcessMessages();
Table1->Next(); //следующая запись
   }
//****************************************************************
//*** 2 ЭТАП ******* Выбираем текущую цену на сырье из MP_KLAS.DBF
//****************************************************************
Table2->DatabaseName="C:\\SAAEF\\MATERIAL\\"+Edit8->Text;
Table2->TableName="m"+ComboBox4->Text+"_MP_KLAS.dbf";
Table2->Active=false; Table2->Close();
Table2->Active=true; Table2->Open();
//Ввести переменную sql1, содержащую текст SQL - запроса для таблицы оплат
AnsiString sql1;
         Table6->First(); // Table1->TableName=ComboBox1->Text+"_MP_KLAS.dbf";
              while (!Table6->Eof)
                 {
                   Query2->Close();
                   Query2->DatabaseName="C:\\SAAEF\\MATERIAL\\"+Edit8->Text;
sql1="SELECT C_ZAK1 FROM m"+ ComboBox4->Text+"_MP_KLAS.DBF WHERE FLAG=1 AND KOD_TOV="+Table6KOD_TOV->AsString ;
                   Query2->SQL->Clear();
                   Query2->SQL->Add(sql1);
                   Query2->Open();
                   Table6->Edit();
Table6C_ZAK->AsFloat=Query2->FieldByName("C_ZAK1")->AsFloat; //Стоимость сырья, грн.
Table6->FieldByName("NOM_DOK")->AsString=Edit1->Text; //Номер документа
Table6->FieldByName("K_UPGROZ")->AsString=Edit2->Text; //Номер наряда
Table6->FieldByName("PRIZN")->AsString="21"; //Признак движения (21)
Table6->FieldByName("KURS")->AsString=MaskEdit1->Text ;
Table6->FieldByName("SROK")->AsString=DateToStr(DateTimePicker1->Date);
Table6->FieldByName("DAT_ZAP")->AsString=DateToStr(DateTimePicker2->Date);
//САМЫЙ ГЛАВНЫЙ РАСЧЕТ!!! ************************
               Table6SUMZAK->AsFloat=Table6KOL_WSEGO->AsFloat*Table6C_ZAK->AsFloat*Table6KURS->AsFloat; //количество сырья * на цену сырья (грн.)
               Table6K901->AsFloat=Table6KOL_WSEGO->AsFloat*Table6KURS->AsFloat; //количество сырья (всего) (кг)
//*************************************************
         Table6->Post();
Table6->Next();
}
//****************************************************************
//* QUERY1 ****************************************************
Query1->Open();
Edit7->Text=Query1->FieldByName("count of BL")->AsString; //кол-во ингридиентов
Edit10->Text=Query1->FieldByName("sum of KOL_WSEGO")->AsString; // вес по рецепту (1-кг)
Edit9->Text=Query1->FieldByName("sum of SUMZAK")->AsString; // Себестоимость, грн
Query1->Close();
//* Вставляем одну строку (шапка) **********************************************
         Table6->Insert();
Table6->FieldByName("NOM_DOK")->AsString=Edit1->Text; //Номер документа
Table6->FieldByName("K_UPGROZ")->AsString=Edit2->Text; //Номер наряда
Table6->FieldByName("PRIZN")->AsString="99"; //Признак ШАПКА
Table6->FieldByName("KOD_TOV")->AsString="99"; //Признак ШАПКА
Table6->FieldByName("NAIM_TOV")->AsString=Edit5->Text;
//Признак ШАПКА
Table6->FieldByName("NAIM_TOV")->AsString=Edit5->Text; //Признак ШАПКА
Table6->FieldByName("BL")->AsString=CSpinEdit4->Text; //Признак ШАПКА
Table6->FieldByName("K901")->AsString=MaskEdit1->Text; //Признак ШАПКА
Table6->FieldByName("TIME_ZAP")->AsString=Label13->Caption; //
             Table6->Post();
В этом расчете используются данные из таблицы:


2)При расчете необходимо учитывать,  какой именно материал в данный момент будет использоваться в расход.
Для этого был введен флаг использования материала:
 

int npp=StrToInt(Edit2->Text) ;

if (Application->MessageBox("Сохранить изменения ?","Сохранение изменений", MB_YESNOCANCEL + MB_ICONQUESTION)!=IDYES)
{ Abort();
}
else
{
if (ComboBox1->Text==0)
     { Table1->Edit();
         Table1FLAG->AsString="0";
         IEdit->Text= Table1NAIM_TOV->AsString;
     Table1->Post();
    }
if (ComboBox1->Text==1)
   { Table1->First();
         while (!Table1->Eof)
        { Table1->Edit();
               if (Table1KOD_TOV->AsString==Edit3->Text && Table1K101->AsString==npp)
                       {
                             Table1FLAG->AsString="1";
                             Table1C_ZAK1->AsString=DOC_NUMBEREdit->Text;
                       }
       if (Table1KOD_TOV->AsString==Edit3->Text && Table1K101->AsString!=npp)
             {
               Table1FLAG->AsString="0";
             } 
      if (Table1KOD_TOV->AsString!=Edit3->Text && Table1K101->AsString==npp)
            {
            }
Table1->Post();
Table1->Next();
           } //End While
// DBNavigator->BtnClick(nbRefresh);
}
}

3)Создание Рецептур:






Table3->Open(); Table4->Open(); Table2->Open();
  Variant LoacteResults; 
  Edit6->Text="";
TLocateOptions SearchOptions;
LoacteResults=Table4->Locate("KOD",ComboBox2->Text,
SearchOptions<<
LoacteResults=Table2->Locate("PB",ComboBox2->Text,
SearchOptions<<
CSpinEdit4->Text=ComboBox2->Text;
Edit6->Text=Table4->FieldByName("naim")->AsString;
//******************************************************
     if (ComboBox2->Text=="0") //ВСЕ ИЗДЕЛИЯ
           {
CSpinEdit4->Text='0';
Table4->Active=false; Table2->Active=false;
Table4->Filtered=false; Table2->Filtered=false;
Table4->Open(); Table2->Open();
Edit6->Text="ВСЕ ИЗДЕЛИЯ";
CSpinEdit4->Enabled=false;
           }
//****************************************************** 
     if (ComboBox2->Text!="0") //ИЗДЕЛИЯ ПО ФИЛЬТРУ 100-900
          {
Table4->Active=false; Table2->Active=false;
Table4->Filter="KOD='"+(ComboBox2->Text)+"'";
Table2->Filter="PB='"+(ComboBox2->Text)+"'";
Table4->Filtered=true; Table2->Filtered=true;
Table4->Open(); Table2->Open();
Edit6->Text=Table4->FieldByName("naim")->AsString;
CSpinEdit4->Enabled=true;
         }
//******************************************************
}



if (Application->MessageBox("Вы действительно хотите создать новый рецепт?","Создание нового рецепта!",MB_YESNO) !=IDNO)
   {
         //**************************************************
Table2->Insert();
Table2->Edit();
Table2PB->AsString=ComboBox2->Text;
Table2BL->AsString=CSpinEdit4->Text;
Table2KOL_WSEGO->AsString=MaskEdit1->Text;
Table2C_OPTED->AsString=DOC_NUMBEREdit->Text;
Table2PP->AsString='0';
// ***********************
Table2SUMMA->AsFloat=(StrToFloat(DOC_NUMBEREdit->Text)*StrToFloat(MaskEdit1->Text));
Table2->Post();
//**************************************************
MaskEdit1->Text="00,000000";
DBNavigator1->BtnClick(nbLast);
     } 

else
     {
          Application->MessageBox("Внимание! Вы пытаетесь ввести ошибочные данные!","Ошибка!",MB_ICONSTOP);
     }



4) После проведения всех расчетов, необходимо сформировать отчеты:
СВОДНАЯ ПО НАРЯД-ЗАКАЗУ:
 



//**** 1/Этап *************************************************************
//**** Выбираем данные из MXX_MP_KLAS.dbf и помещаем в таблицу расчета ***
Table1->Active=false; Table1->Close();
Table1->DatabaseName="C:\\SAAEF\\MATERIAL\\"+Edit3->Text+"\\";
Table1->TableName="M"+ComboBox1->Text+"_MP_NRZK.DBF";
Table1->Active=false; Table1->Close();
Table1->Active=true; Table1->Open();
Table2->Active=false; Table2->Close();
Table2->DatabaseName="C:\\SAAEF\\MATERIAL\\"+Edit3->Text+"\\";
Table2->TableName="M"+ComboBox1->Text+"_MP_KLAS.DBF";
Table2->Active=false; Table2->Close();
Table2->Active=true; Table2->Open();
//Включить индикатор ***********************************************************
int Rec=0;
ProgressBar1->Min = 0;
ProgressBar1->Max = Table2->RecordCount;
Label1->Caption="1/3-й этап! Выбираем сырье!";
Label1->Visible=true;

//* Empty Table 2 *****************************************
Table3->Close();
Table3->Exclusive=true;
Table3->Open();
Table3->EmptyTable();
Table3->Close();
Table3->Exclusive=false;
Table3->Open();
Table2->First();
              while (!Table2->Eof)
                       {
                            Table3->Insert();
                                Table3KOD_TOV ->AsString = Table2KOD_TOV ->AsString ;
                                Table3NAIM_TOV ->AsString = Table2NAIM_TOV ->AsString ;
                                Table3C_ZAK1 ->AsString = Table2C_ZAK1 ->AsString ; // Цена, грн.
                                Table3K901 ->AsString = Table2K901 ->AsString ; // Остаток на складе, кг
                                Table3FLAG ->AsString = Table2FLAG ->AsString ;
//** Удаляем все с флагом = 0 **************************************************
          if (Table3->FieldByName("FLAG")->AsString=='0')
                  {
                                Table3->Delete();
                  }
          else
                  {
                  }
//******************************************************************************
// Indicator
Sleep(20);
ProgressBar1->Position = Rec;
Rec++;
Application->ProcessMessages();
Table2->Next();
}
Label1->Caption="2/3-й этап! Выбираем кол-во использованного сырья из Н/З!";
Label1->Visible=true;
//******************************************************************************
AnsiString sql1;
Table3->First(); // C:\SAAEF\MATERIAL\tmp MP_BAZA_NRZK_REP.DBF
            while (!Table3->Eof)
              {
                 Query1->Close(); Query1->DatabaseName="C:\\SAAEF\\MATERIAL\\"+Edit3->Text;
                            sql1="SELECT SUM(KOL_WSEGO) FROM m"+ ComboBox1->Text+"_MP_NRZK.DBF WHERE KOD_TOV="+Table3KOD_TOV->AsString+" AND K_UPGROZ="+Edit2->Text ; ;
                   Query1->SQL->Clear();Query1->SQL->Add(sql1);
                   Query1->Open();
                         Table3->Edit();
                       Table3KOL_WSEGO->AsFloat=Query1->FieldByName("SUM OF KOL_WSEGO")->AsFloat; //Суммируем кол-во сырья всего из табл мХХ_MP_NRZK.DBF
                       Table3SUMMA->AsFloat =Table3C_ZAK1->AsFloat*Table3KOL_WSEGO->AsFloat; //Пермножаем цену сырья на кол-во сырья выданного по Н/З
                       Table3K_UPGROZ ->AsString = Edit2->Text ;
                         Table3->Post();
// Indicator
ProgressBar1->Position = Rec;
Rec++;
Application->ProcessMessages();
                  Table3->Next(); 
                 }
ProgressBar1->Min = 0;
ProgressBar1->Max = Table2->RecordCount;
Label1->Caption="3/3-й этап! Удаляем нулевые значения!";
Label1->Visible=true;
//******************************************************************************
Table3->First();
          while (!Table3->Eof)
      {
             n=n+1;
                  if (Table3->FieldByName("KOL_WSEGO")->AsString=='0')
      {
           Table3->Delete(); Button7->Click();
      }
           else
       {
       }
// Indicator
ProgressBar1->Position = Rec;
Rec++;
Application->ProcessMessages();
// Next Record
Label5->Caption=n;
Label5->Visible=true;
Sleep(1);
Table3->Next();
}
//* Подсчет кол-во записей ********************************
Table3->First();
//Упорядочиваем по наименованию сырья
Table3->IndexFieldNames="NAIM_TOV"; //Поле Наименовние товара (сортировка но наименованию товара)
     while (!Table3->Eof)
{
Table3->Edit();
num=num+1;
Table3K101->AsString=num;
Table3->Next();
}
//* *****************************************************
Label5->Caption="100%";
ProgressBar1->Position = 100;
 

5)РАСЧЕТ 3% для работников компании:


 

//PR_Raschet_1_QR_3_Proc_PROD
Screen->Cursor=crHourGlass;
Application->CreateForm(__classid(TPR_Raschet_1_QR_3_Proc_PROD), &PR_Raschet_1_QR_3_Proc_PROD);
switch (ComboBox2->ItemIndex)
{ case 0 : PR_Raschet_1_QR_3_Proc_PROD->QRLabel12->Caption="Январь"; break;
         *      *       *
  case 11 : PR_Raschet_1_QR_3_Proc_PROD->QRLabel12->Caption="Декабрь"; break;
}
PR_Raschet_1_QR_3_Proc_PROD->QRLabel13->Caption=Edit2->Text;
Table1->Active=false;
Table1->DatabaseName="C:\\SAAEF\\PRODUCT\\"+Edit2->Text+"\\";
Table1->TableName="M"+ComboBox2->Text+"_MP_BAZA.DBF";
PR_Raschet_1_QR_3_Proc_PROD->Table1->DatabaseName="C:\\SAAEF\\PRODUCT\\TMP";
PR_Raschet_1_QR_3_Proc_PROD->Table1->TableName="MP_OSTATKI.DBF";
PR_Raschet_1_QR_3_Proc_PROD->Table1->Active=false;
if (Table1->Exists ) //mp_BAZA.dbf
{
AnsiString sql2;
ProgressBar1->Visible=true;
Label6->Caption="Подождите! Формируется отчет!";
Label6->Visible=true;
//Очистка временной таблицы
PR_Raschet_1_QR_3_Proc_PROD->Table1->Exclusive=true;
PR_Raschet_1_QR_3_Proc_PROD->Table1->Open();
PR_Raschet_1_QR_3_Proc_PROD->Table1->EmptyTable();
PR_Raschet_1_QR_3_Proc_PROD->Table1->Close();
PR_Raschet_1_QR_3_Proc_PROD->Table1->Exclusive=false;
PR_Raschet_1_QR_3_Proc_PROD->Table1->Open();
//Проверка количества дней в месяце
int find;
              if (ComboBox2->Text=="02")
                       {
               find=27;
                       }
              else if (ComboBox2->Text=="01"||ComboBox2->Text=="03"||ComboBox2->Text=="05"||ComboBox2->Text=="07"||ComboBox2->Text=="08"||ComboBox2->Text=="10"||ComboBox2->Text=="12")
                       {
                find=30;
                       }
              else
                     {
                find=29;
                       }
AnsiString massive_day[31]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31};
int day;
int npp=0;
// int ost=0;
float ost=0;
//*** Заполняем таблицу выбранными данными **************************************************
PR_Raschet_1_QR_3_Proc_PROD->Table1->First();
for (day=0; day<=find; day++)
{
//** 41 вид Отгрузка Водителям ******************************************************************
Query1->Close();
Query1->DatabaseName="C:\\SAAEF\\PRODUCT\\"+Edit2->Text+"\\";
sql2="SELECT SUM(SUMZAK) FROM M"+ComboBox2->Text+"_MP_BAZA.DBF WHERE PRIZN=41 AND KOD_POL="+Edit6->Text+" AND SROK='"+massive_day[day]+"."+ComboBox2->Text+"."+Edit2->Text+"'";
Query1->SQL->Clear();
Query1->SQL->Add(sql2);
Query1->Open();
PR_Raschet_1_QR_3_Proc_PROD->Table1->Insert();
PR_Raschet_1_QR_3_Proc_PROD->Table1->FieldByName("DATOPL")->AsString=massive_day[day]+"."+ComboBox2->Text+"."+Edit2->Text;
PR_Raschet_1_QR_3_Proc_PROD->Table1->FieldByName("SUMZAK")->AsFloat=Query1->FieldByName("SUM OF SUMZAK")->AsFloat;
PR_Raschet_1_QR_3_Proc_PROD->Table1->FieldByName("VID_41")->AsFloat=Query1->FieldByName("SUM OF SUMZAK")->AsFloat;
npp=npp+1;
PR_Raschet_1_QR_3_Proc_PROD->Table1->FieldByName("NPP")->AsString=npp;
//** 42 Вид Картошка ************************************************************************
Query1->Close();
Query1->DatabaseName="C:\\SAAEF\\PRODUCT\\"+Edit2->Text+"\\";
sql2="SELECT SUM(SUMZAK) FROM M"+ComboBox2->Text+"_MP_BAZA.DBF WHERE PRIZN=42 AND KOD_POST="+Edit6->Text+" AND SROK='"+massive_day[day]+"."+ComboBox2->Text+"."+Edit2->Text+"'";
Query1->SQL->Clear();
Query1->SQL->Add(sql2);
Query1->Open();
PR_Raschet_1_QR_3_Proc_PROD->Table1->Edit();
PR_Raschet_1_QR_3_Proc_PROD->Table1->FieldByName("VID_42")->AsFloat=Query1->FieldByName("SUM OF SUMZAK")->AsFloat;
//** 44 KASSA ***********************************************************************
Query1->Close();
Query1->DatabaseName="C:\\SAAEF\\PRODUCT\\"+Edit2->Text+"\\";
sql2="SELECT SUM(SUMZAK) FROM M"+ComboBox2->Text+"_MP_BAZA.DBF WHERE PRIZN=44 AND KOD_POST="+Edit6->Text+" AND SROK='"+massive_day[day]+"."+ComboBox2->Text+"."+Edit2->Text+"'";
Query1->SQL->Clear();
Query1->SQL->Add(sql2);
Query1->Open();
PR_Raschet_1_QR_3_Proc_PROD->Table1->Edit();
PR_Raschet_1_QR_3_Proc_PROD->Table1->FieldByName("VID_44")->AsFloat=Query1->FieldByName("SUM OF SUMZAK")->AsFloat;
//**************************************************************************************

          *                *                  *

//** 60 Списание ************************************************************************
Query1->Close();
Query1->DatabaseName="C:\\SAAEF\\PRODUCT\\"+Edit2->Text+"\\";
sql2="SELECT SUM(SUMZAK) FROM M"+ComboBox2->Text+"_MP_BAZA.DBF WHERE PRIZN=60 AND KOD_POST="+Edit6->Text+" AND SROK='"+massive_day[day]+"."+ComboBox2->Text+"."+Edit2->Text+"'";
Query1->SQL->Clear();
Query1->SQL->Add(sql2);
Query1->Open();
PR_Raschet_1_QR_3_Proc_PROD->Table1->Edit();
PR_Raschet_1_QR_3_Proc_PROD->Table1->FieldByName("VID_60")->AsFloat=Query1->FieldByName("SUM OF SUMZAK")->AsFloat;
//***********************************************************************************************
//** 3 Остаток на начало дня (первый выбор)******************************************************
//** выбираем из остатка на начало месяца и вставляем в первую строку таблицы********************
Query1->Close();
Query1->DatabaseName="C:\\SAAEF\\PRODUCT\\"+Edit2->Text+"\\";
sql2="SELECT SUM(SUMZAK) FROM M"+ComboBox2->Text+"_MP_BAZA.DBF WHERE PRIZN=10 AND KOD_POL="+Edit6->Text;
Query1->SQL->Clear();
Query1->SQL->Add(sql2);
Query1->Open();
PR_Raschet_1_QR_3_Proc_PROD->Table1->Edit();
if (PR_Raschet_1_QR_3_Proc_PROD->Table1->FieldByName("NPP")->AsString=='1')
{
PR_Raschet_1_QR_3_Proc_PROD->Table1->FieldByName("VID_10")->AsFloat=Query1->FieldByName("SUM OF SUMZAK")->AsFloat;
PR_Raschet_1_QR_3_Proc_PROD->Table1->FieldByName("OST_NACH")->AsFloat=Query1->FieldByName("SUM OF SUMZAK")->AsFloat;
}
else
{
PR_Raschet_1_QR_3_Proc_PROD->Table1->FieldByName("VID_10")->AsFloat=0;
PR_Raschet_1_QR_3_Proc_PROD->Table1->FieldByName("OST_NACH")->AsFloat=0;
}
}
// 2 ЭТАП - РАСЧЕТ!!! **************************************************************************
PR_Raschet_1_QR_3_Proc_PROD->Table1->First();
while (!PR_Raschet_1_QR_3_Proc_PROD->Table1->Eof)
            {
PR_Raschet_1_QR_3_Proc_PROD->Table1->Edit();
if (PR_Raschet_1_QR_3_Proc_PROD->Table1->FieldByName("NPP")->AsString=='1') //только для первой записи (на первое число)
            {
PR_Raschet_1_QR_3_Proc_PROD->Table1->FieldByName("OST_KONDAY")->AsFloat= PR_Raschet_1_QR_3_Proc_PROD->Table1->FieldByName("OST_NACH")->AsFloat+PR_Raschet_1_QR_3_Proc_PROD->Table1->FieldByName("VID_41")->AsFloat-PR_Raschet_1_QR_3_Proc_PROD->Table1->FieldByName("VID_42")->AsFloat-PR_Raschet_1_QR_3_Proc_PROD->Table1->FieldByName("VID_43")->AsFloat-PR_Raschet_1_QR_3_Proc_PROD->Table1->FieldByName("VID_44")->AsFloat-PR_Raschet_1_QR_3_Proc_PROD->Table1->FieldByName("VID_32")->AsFloat-PR_Raschet_1_QR_3_Proc_PROD->Table1->FieldByName("VID_60")->AsFloat-PR_Raschet_1_QR_3_Proc_PROD->Table1->FieldByName("VID_30")->AsFloat;
ost= PR_Raschet_1_QR_3_Proc_PROD->Table1->FieldByName("OST_KONDAY")->AsFloat;
         }
else
            {
PR_Raschet_1_QR_3_Proc_PROD->Table1->FieldByName("OST_NACH")->AsFloat= ost;
PR_Raschet_1_QR_3_Proc_PROD->Table1->FieldByName("OST_KONDAY")->AsFloat= PR_Raschet_1_QR_3_Proc_PROD->Table1->FieldByName("OST_NACH")->AsFloat+PR_Raschet_1_QR_3_Proc_PROD->Table1->FieldByName("VID_41")->AsFloat-PR_Raschet_1_QR_3_Proc_PROD->Table1->FieldByName("VID_42")->AsFloat-PR_Raschet_1_QR_3_Proc_PROD->Table1->FieldByName("VID_43")->AsFloat-PR_Raschet_1_QR_3_Proc_PROD->Table1->FieldByName("VID_44")->AsFloat-PR_Raschet_1_QR_3_Proc_PROD->Table1->FieldByName("VID_32")->AsFloat-PR_Raschet_1_QR_3_Proc_PROD->Table1->FieldByName("VID_60")->AsFloat-PR_Raschet_1_QR_3_Proc_PROD->Table1->FieldByName("VID_30")->AsFloat;
ost= PR_Raschet_1_QR_3_Proc_PROD->Table1->FieldByName("OST_KONDAY")->AsFloat;
              }
if (PR_Raschet_1_QR_3_Proc_PROD->Table1->FieldByName("VID_41")->AsString=='0')
         {
PR_Raschet_1_QR_3_Proc_PROD->Table1->FieldByName("OST_NACH")->AsFloat= 0;
PR_Raschet_1_QR_3_Proc_PROD->Table1->FieldByName("OST_KONDAY")->AsFloat= 0;
          }
else
            {
// PR_Raschet_1_QR_Ostatkov_PROD->Table1->FieldByName("OST_NACH")->AsFloat=PR_Raschet_1_QR_Ostatkov_PROD->Table1->FieldByName("OST_NACH")->AsFloat ;
             }
PR_Raschet_1_QR_3_Proc_PROD->Table1->Next();
        } //end while
//Включить индикатор *****************************************************
int Rec=0;
ProgressBar1->Min = 0;
ProgressBar1->Max = Table2->RecordCount;
Table2->First();
while (!Table2->Eof)
       {
Sleep(10);
ProgressBar1->Position = Rec;
Rec++;
Application->ProcessMessages();
Table2->Next();
        } //End While
// * Вывод на экран готового отчета! *************************
Screen->Cursor=crDefault;
PR_Raschet_1_QR_3_Proc_PROD->QuickRep1->Preview();
PR_Raschet_1_QR_3_Proc_PROD->Table1->Active=true;
PR_Raschet_1_QR_3_Proc_PROD->Table1->Close();
//*************************************************************
      }
else
     {
    Application->MessageBox("Таблица БД за указанный месяц отсутствует!","Ошибка!",MB_ICONSTOP);
     }

6)РАСЧЕТ ОСТАТКОВ:
 

 

/PR_Raschet_1_QR_Ostatkov_PROD->
Screen->Cursor=crHourGlass;
Application->CreateForm(__classid(TPR_Raschet_1_QR_Ostatkov_PROD), &PR_Raschet_1_QR_Ostatkov_PROD);
switch (ComboBox2->ItemIndex)
   {
case 0 : PR_Raschet_1_QR_Ostatkov_PROD->QRLabel12->Caption="Январь"; break;

          *             *              *

case 11 : PR_Raschet_1_QR_Ostatkov_PROD->QRLabel12->Caption="Декабрь"; break;
      }
PR_Raschet_1_QR_Ostatkov_PROD->QRLabel13->Caption=Edit2->Text;
Table1->Active=false;
Table1->DatabaseName="C:\\SAAEF\\PRODUCT\\"+Edit2->Text+"\\";
Table1->TableName="M"+ComboBox2->Text+"_MP_BAZA.DBF";
PR_Raschet_1_QR_Ostatkov_PROD->Table1->DatabaseName="C:\\SAAEF\\PRODUCT\\TMP";
PR_Raschet_1_QR_Ostatkov_PROD->Table1->TableName="MP_OSTATKI.DBF";
PR_Raschet_1_QR_Ostatkov_PROD->Table1->Active=false;
if (Table1->Exists ) //mp_BAZA.dbf
      {
AnsiString sql2;
ProgressBar1->Visible=true;
Label6->Caption="Подождите! Формируется отчет!";
Label6->Visible=true;
//Очистка временной таблицы
PR_Raschet_1_QR_Ostatkov_PROD->Table1->Exclusive=true;
PR_Raschet_1_QR_Ostatkov_PROD->Table1->Open();
PR_Raschet_1_QR_Ostatkov_PROD->Table1->EmptyTable();
PR_Raschet_1_QR_Ostatkov_PROD->Table1->Close();
PR_Raschet_1_QR_Ostatkov_PROD->Table1->Exclusive=false;
PR_Raschet_1_QR_Ostatkov_PROD->Table1->Open();
//Проверка количества дней в месяце
int find;
if (ComboBox2->Text=="02")
      {
      find=27;
      }
else if (ComboBox2->Text=="01"||ComboBox2->Text=="03"||ComboBox2->Text=="05"||ComboBox2->Text=="07"||ComboBox2->Text=="08"||ComboBox2->Text=="10"||ComboBox2->Text=="12")
       {
      find=30;
       }
else
       {
    find=29;
      }
AnsiString massive_day[31]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31};
int day;
int npp=0;
// int ost=0;
float ost=0;
//*** Заполняем таблицу выбранными данными **************************************************
PR_Raschet_1_QR_Ostatkov_PROD->Table1->First();
for (day=0; day<=find; day++)
       {
//** 41 вид Отгрузка Водителям ******************************************************************
Query1->Close();
Query1->DatabaseName="C:\\SAAEF\\PRODUCT\\"+Edit2->Text+"\\";
sql2="SELECT SUM(SUMZAK) FROM M"+ComboBox2->Text+"_MP_BAZA.DBF WHERE PRIZN=41 AND KOD_POL="+Edit6->Text+" AND SROK='"+massive_day[day]+"."+ComboBox2->Text+"."+Edit2->Text+"'";
Query1->SQL->Clear();
Query1->SQL->Add(sql2);
Query1->Open();
PR_Raschet_1_QR_Ostatkov_PROD->Table1->Insert();
PR_Raschet_1_QR_Ostatkov_PROD->Table1->FieldByName("DATOPL")->AsString=massive_day[day]+"."+ComboBox2->Text+"."+Edit2->Text;
PR_Raschet_1_QR_Ostatkov_PROD->Table1->FieldByName("SUMZAK")->AsFloat=Query1->FieldByName("SUM OF SUMZAK")->AsFloat;
PR_Raschet_1_QR_Ostatkov_PROD->Table1->FieldByName("VID_41")->AsFloat=Query1->FieldByName("SUM OF SUMZAK")->AsFloat;
npp=npp+1;
PR_Raschet_1_QR_Ostatkov_PROD->Table1->FieldByName("NPP")->AsString=npp;
//** 42 Вид Картошка ************************************************************************
Query1->Close();
Query1->DatabaseName="C:\\SAAEF\\PRODUCT\\"+Edit2->Text+"\\";
sql2="SELECT SUM(SUMZAK) FROM M"+ComboBox2->Text+"_MP_BAZA.DBF WHERE PRIZN=42 AND KOD_POST="+Edit6->Text+" AND SROK='"+massive_day[day]+"."+ComboBox2->Text+"."+Edit2->Text+"'";
Query1->SQL->Clear();
Query1->SQL->Add(sql2);
Query1->Open();
PR_Raschet_1_QR_Ostatkov_PROD->Table1->Edit();
PR_Raschet_1_QR_Ostatkov_PROD->Table1->FieldByName("VID_42")->AsFloat=Query1->FieldByName("SUM OF SUMZAK")->AsFloat;
//**************************************************************************************

                 *              *                *

//** 60 Списание ************************************************************************
Query1->Close();
Query1->DatabaseName="C:\\SAAEF\\PRODUCT\\"+Edit2->Text+"\\";
sql2="SELECT SUM(SUMZAK) FROM M"+ComboBox2->Text+"_MP_BAZA.DBF WHERE PRIZN=60 AND KOD_POST="+Edit6->Text+" AND SROK='"+massive_day[day]+"."+ComboBox2->Text+"."+Edit2->Text+"'";
Query1->SQL->Clear();
Query1->SQL->Add(sql2);
Query1->Open();
PR_Raschet_1_QR_Ostatkov_PROD->Table1->Edit();
PR_Raschet_1_QR_Ostatkov_PROD->Table1->FieldByName("VID_60")->AsFloat=Query1->FieldByName("SUM OF SUMZAK")->AsFloat;
//***********************************************************************************************
//** 3 Остаток на начало дня (первый выбор)******************************************************
//** выбираем из остатка на начало месяца и вставляем в первую строку таблицы********************
Query1->Close();
Query1->DatabaseName="C:\\SAAEF\\PRODUCT\\"+Edit2->Text+"\\";
sql2="SELECT SUM(SUMZAK) FROM M"+ComboBox2->Text+"_MP_BAZA.DBF WHERE PRIZN=10 AND KOD_POL="+Edit6->Text;
Query1->SQL->Clear();
Query1->SQL->Add(sql2);
Query1->Open();
PR_Raschet_1_QR_Ostatkov_PROD->Table1->Edit();
if (PR_Raschet_1_QR_Ostatkov_PROD->Table1->FieldByName("NPP")->AsString=='1')
      {
PR_Raschet_1_QR_Ostatkov_PROD->Table1->FieldByName("VID_10")->AsFloat=Query1->FieldByName("SUM OF SUMZAK")->AsFloat;
PR_Raschet_1_QR_Ostatkov_PROD->Table1->FieldByName("OST_NACH")->AsFloat=Query1->FieldByName("SUM OF SUMZAK")->AsFloat;
      }
else
      {
PR_Raschet_1_QR_Ostatkov_PROD->Table1->FieldByName("VID_10")->AsFloat=0;
PR_Raschet_1_QR_Ostatkov_PROD->Table1->FieldByName("OST_NACH")->AsFloat=0;
      }
      }
// 2 ЭТАП - РАСЧЕТ!!! **************************************************************************
PR_Raschet_1_QR_Ostatkov_PROD->Table1->First();
while (!PR_Raschet_1_QR_Ostatkov_PROD->Table1->Eof)
      {
PR_Raschet_1_QR_Ostatkov_PROD->Table1->Edit();
if (PR_Raschet_1_QR_Ostatkov_PROD->Table1->FieldByName("NPP")->AsString=='1') //только для первой записи (на первое число)
      {
PR_Raschet_1_QR_Ostatkov_PROD->Table1->FieldByName("OST_KONDAY")->AsFloat= PR_Raschet_1_QR_Ostatkov_PROD->Table1->FieldByName("OST_NACH")->AsFloat+PR_Raschet_1_QR_Ostatkov_PROD->Table1->FieldByName("VID_41")->AsFloat-PR_Raschet_1_QR_Ostatkov_PROD->Table1->FieldByName("VID_42")->AsFloat-PR_Raschet_1_QR_Ostatkov_PROD->Table1->FieldByName("VID_43")->AsFloat-PR_Raschet_1_QR_Ostatkov_PROD->Table1->FieldByName("VID_44")->AsFloat-PR_Raschet_1_QR_Ostatkov_PROD->Table1->FieldByName("VID_32")->AsFloat-PR_Raschet_1_QR_Ostatkov_PROD->Table1->FieldByName("VID_60")->AsFloat-PR_Raschet_1_QR_Ostatkov_PROD->Table1->FieldByName("VID_30")->AsFloat;
ost= PR_Raschet_1_QR_Ostatkov_PROD->Table1->FieldByName("OST_KONDAY")->AsFloat;
     }
else
     {
PR_Raschet_1_QR_Ostatkov_PROD->Table1->FieldByName("OST_NACH")->AsFloat= ost;
PR_Raschet_1_QR_Ostatkov_PROD->Table1->FieldByName("OST_KONDAY")->AsFloat= PR_Raschet_1_QR_Ostatkov_PROD->Table1->FieldByName("OST_NACH")->AsFloat+PR_Raschet_1_QR_Ostatkov_PROD->Table1->FieldByName("VID_41")->AsFloat-PR_Raschet_1_QR_Ostatkov_PROD->Table1->FieldByName("VID_42")->AsFloat-PR_Raschet_1_QR_Ostatkov_PROD->Table1->FieldByName("VID_43")->AsFloat-PR_Raschet_1_QR_Ostatkov_PROD->Table1->FieldByName("VID_44")->AsFloat-PR_Raschet_1_QR_Ostatkov_PROD->Table1->FieldByName("VID_32")->AsFloat-PR_Raschet_1_QR_Ostatkov_PROD->Table1->FieldByName("VID_60")->AsFloat-PR_Raschet_1_QR_Ostatkov_PROD->Table1->FieldByName("VID_30")->AsFloat;
ost= PR_Raschet_1_QR_Ostatkov_PROD->Table1->FieldByName("OST_KONDAY")->AsFloat;
      }
if (PR_Raschet_1_QR_Ostatkov_PROD->Table1->FieldByName("VID_41")->AsString=='0')
     {
PR_Raschet_1_QR_Ostatkov_PROD->Table1->FieldByName("OST_NACH")->AsFloat= 0;
PR_Raschet_1_QR_Ostatkov_PROD->Table1->FieldByName("OST_KONDAY")->AsFloat= 0;
     }
else
       {
// PR_Raschet_1_QR_Ostatkov_PROD->Table1->FieldByName("OST_NACH")->AsFloat=PR_Raschet_1_QR_Ostatkov_PROD->Table1->FieldByName("OST_NACH")->AsFloat ;
       }
PR_Raschet_1_QR_Ostatkov_PROD->Table1->Next();
    } //end while
//Включить индикатор *****************************************************
int Rec=0;
ProgressBar1->Min = 0;
ProgressBar1->Max = Table2->RecordCount;
Table2->First();
   while (!Table2->Eof)
       {
Sleep(10);
ProgressBar1->Position = Rec;
Rec++;
Application->ProcessMessages();
Table2->Next();
      } //End While
// * Вывод на экран готового отчета! *************************
Screen->Cursor=crDefault;
PR_Raschet_1_QR_Ostatkov_PROD->QuickRep1->Preview();
PR_Raschet_1_QR_Ostatkov_PROD->Table1->Active=true;
PR_Raschet_1_QR_Ostatkov_PROD->Table1->Close();
//*************************************************************
}
else
{ Application->MessageBox("Таблица БД за указанный месяц отсутствует!","Ошибка!",MB_ICONSTOP);
}
}
// THE END.

Поиск

Календарь

Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz

  • Copyright MyCorp © 2024