| Программирование
Рассмотрим следующую задачу:
Программа по автоматизации складского учета, кондитерский цех "Загадка"
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.
Контактная информация :
ICQ#: 268-376-457
| |