1867 lines
88 KiB
ObjectPascal
1867 lines
88 KiB
ObjectPascal
unit journalscripts;
|
||
|
||
interface
|
||
|
||
uses Classes, cgiDM, SysUtils, DB;
|
||
|
||
type
|
||
|
||
{ TSQLScripts48 }
|
||
|
||
TSQLScripts48 = class
|
||
private
|
||
StartDate, EndDate: String;
|
||
gid, cid, year: integer;
|
||
isEmpty: boolean;
|
||
isError: boolean;
|
||
Data: TNIDBDM;
|
||
|
||
PeopleInfPageCount : integer;
|
||
MissingListenersPageCount : integer;
|
||
SheduleTermsPageCount : integer;
|
||
PerfomancePageCount : integer;
|
||
fScript: TStrings;
|
||
procedure RunScript(State: string);
|
||
procedure CreateEmptyTemplate(TableName: string; RowCount: integer);
|
||
procedure CreateEmptyCrossTab(RowTable, ColTable: string; CrossTable: String);
|
||
procedure CreateTmpAllCourses;
|
||
procedure CreateListCoursesPages;
|
||
procedure CreateMainTemplTable;
|
||
procedure CreatePeoplesOnPages;
|
||
procedure CreatePeoplesList;
|
||
procedure CreateTemplGrades;
|
||
procedure CreateLeftTable;
|
||
procedure CreateRightTable;
|
||
procedure CreateHomeWork;
|
||
procedure CreatePeopleInf;
|
||
procedure CreateMissingTable;
|
||
procedure CreateTerms;
|
||
procedure CreateSheduleTerms;
|
||
procedure CreatePerfomanceTable;
|
||
procedure CratePeoplesForDO;
|
||
procedure CreateEmptyReport;
|
||
procedure CreateEmptycontents(emptyRows: integer);
|
||
procedure CreateContetnts;
|
||
procedure CreateHealthSheet;
|
||
function CheckGroupShedule: boolean;
|
||
procedure CreateColsRows;
|
||
procedure ClearScript;
|
||
procedure CreateJournalMonitoring;
|
||
private
|
||
sqlTimeSeconds: integer;
|
||
step: integer;
|
||
|
||
procedure AddSeconds(Sender: TObject);
|
||
procedure AddToLogFile(Str: string);
|
||
public
|
||
OneGroup, TwoGroup, ThreeGroup, FourGroup,
|
||
PageStart, PageContinue: string;
|
||
|
||
constructor Create(AData: TNIDBDM; yearId, agid, acid: integer; Empty: boolean);
|
||
destructor Destroy; override;
|
||
|
||
function CreateReport:boolean;
|
||
function GetSQL(ScriptNum: integer):string;
|
||
end;
|
||
|
||
const
|
||
EmptyContentsRowsCount = 35; //Количество строк в пустом оглавлении
|
||
|
||
implementation
|
||
uses
|
||
extTypes;
|
||
{ SQLScripts48 }
|
||
|
||
|
||
|
||
procedure TSQLScripts48.AddSeconds(Sender: TObject);
|
||
begin
|
||
Inc(sqlTimeSeconds);
|
||
end;
|
||
|
||
|
||
|
||
function TSQLScripts48.CheckGroupShedule: boolean;
|
||
var
|
||
SQL: string;
|
||
begin
|
||
SQL := 'SELECT COUNT(*) FROM nnz_schedule WHERE gid = ' + inttostr(gid);
|
||
Result := not (Data.QueryValue(SQL) = '0');
|
||
end;
|
||
|
||
|
||
|
||
procedure TSQLScripts48.ClearScript;
|
||
begin
|
||
end;
|
||
|
||
procedure TSQLScripts48.CratePeoplesForDO;
|
||
var
|
||
SQL: string;
|
||
begin
|
||
//Создать 42 человека для ДО
|
||
SQL :=
|
||
' DROP TABLE IF EXISTS tmp_report_journal_DO_peoples_t; '+
|
||
' CREATE TEMPORARY TABLE tmp_report_journal_DO_peoples_t AS '+
|
||
' SELECT DISTINCT row_number() over (order by p.fio) AS num, p.mid, p.fio '+
|
||
' FROM tmp_report_main_peoples p '+
|
||
' ORDER BY p.fio; '+
|
||
' DROP TABLE IF EXISTS tmp_report_journal_DO_peoples; '+
|
||
' CREATE TEMPORARY TABLE tmp_report_journal_DO_peoples AS '+
|
||
' SELECT e.e_num num, t.mid, t.fio '+
|
||
' FROM tmp_report_empty_people e '+
|
||
' LEFT JOIN tmp_report_journal_DO_peoples_t t ON t.num = e.e_num;';
|
||
fScript.Add(SQL);
|
||
end;
|
||
|
||
constructor TSQLScripts48.Create(AData: TNIDBDM; yearId, agid, acid: integer;
|
||
Empty: boolean);
|
||
begin
|
||
Data := AData;
|
||
self.StartDate := TNIDBDM.DateAsSQL(Data.QueryDateValue('SELECT sy.BegDate FROM school_year sy WHERE sy.xp_key = ' + IntToStr(yearId)));
|
||
self.EndDate := TNIDBDM.DateAsSQL(Data.QueryDateValue('SELECT sy.EndDate FROM school_year sy WHERE sy.xp_key = ' + IntToStr(yearId)));
|
||
self.gid := agid;
|
||
self.cid := acid;
|
||
self.isEmpty := Empty;
|
||
isError := False;
|
||
self.year := yearId;
|
||
fScript := TStringList.Create;
|
||
step := 0;
|
||
end;
|
||
|
||
|
||
function TSQLScripts48.CreateReport: boolean;
|
||
begin
|
||
if OneGroup = '' then OneGroup := '26';
|
||
if TwoGroup = '' then TwoGroup := '12';
|
||
if ThreeGroup = '' then ThreeGroup := '8';
|
||
if FourGroup = '' then FourGroup := '6';
|
||
if PageStart = '' then PageStart := '1';
|
||
|
||
isError := True;
|
||
if not(isEmpty) then
|
||
begin
|
||
|
||
//Создать пустой шаблон размером 42 x 26
|
||
CreateEmptyTemplate('people',42);
|
||
CreateEmptyTemplate('lessons',26);
|
||
CreateEmptyCrossTab('people','lessons','grades');
|
||
CreateEmptyTemplate('people_half',21);
|
||
//Получить список всех занятий по датам с предметами за период
|
||
CreateTmpAllCourses;
|
||
//Создать список занятий с датами по страницам
|
||
CreateListCoursesPages;
|
||
//Сформировать основной шаблон
|
||
CreateMainTemplTable;
|
||
//Сформировать учеников по периодам на каждую страницу
|
||
CreatePeoplesOnPages;
|
||
CreatePeoplesList;
|
||
//Соединяем учеников и добавляем оценки
|
||
CreateTemplGrades;
|
||
//Формирование списка учеников
|
||
CreateLeftTable;
|
||
//Формирование таблицы для вывода оценок
|
||
CreateRightTable;
|
||
//Добавить домашнее задание
|
||
CreateHomeWork;
|
||
//Добавить информацию об учениках
|
||
|
||
CreatePeopleInf;
|
||
//Создать таблицу с пропусками занятий
|
||
CreateMissingTable;
|
||
//Создать выборку по периодам для текущей группы
|
||
CreateTerms;
|
||
//Формирование сводной ведомости учета посещаемости
|
||
CreateSheduleTerms;
|
||
//Заполняем сводную ведомость успеваемости обучающихся по периодам
|
||
CreatePerfomanceTable;
|
||
//Создать 42 человека для ДО
|
||
CratePeoplesForDO;
|
||
//Сформировать оглавление
|
||
CreateContetnts;
|
||
//Заполнить листок здоровья
|
||
CreateHealthSheet;
|
||
//Заполенить таблицу мониторинга журнала
|
||
CreateJournalMonitoring;
|
||
|
||
end else
|
||
begin
|
||
CreateEmptyTemplate('people',42);
|
||
CreateEmptyTemplate('lessons',26);
|
||
CreateEmptyCrossTab('people','lessons','grades');
|
||
|
||
CreateEmptyReport;
|
||
//Создаёт пустое оглавление с указанным количеством строк
|
||
CreateEmptycontents(EmptyContentsRowsCount);
|
||
CreateTerms;
|
||
CreateSheduleTerms;
|
||
end;
|
||
CreateColsRows;
|
||
RunScript('Завершение');
|
||
isError := False;
|
||
Result := not isError;
|
||
end;
|
||
|
||
procedure TSQLScripts48.CreateColsRows;
|
||
var
|
||
SQL: string;
|
||
begin
|
||
SQL :=
|
||
'DROP TABLE IF EXISTS tmp_journal_grades_cols; '+
|
||
'CREATE TEMPORARY TABLE tmp_journal_grades_cols AS '+
|
||
'select PageNum,cid,PrintDate, date from tmp_report_journal_Right group by PageNum,cid,PrintDate,date; '+
|
||
'DROP TABLE IF EXISTS tmp_journal_grades_rows; '+
|
||
'CREATE TEMPORARY TABLE tmp_journal_grades_rows AS '+
|
||
'SELECT PageNum,cid,p_num,fio,deduction from tmp_report_journal_Right where fio<>'''' group by PageNum,cid,p_num,fio,deduction; ';
|
||
fScript.Add(SQL);
|
||
SQL :=
|
||
'DROP TABLE IF EXISTS tmp_journal_1st_row; '+
|
||
'CREATE TEMPORARY TABLE tmp_journal_1st_row AS '+
|
||
'SELECT c.PageNum,c.cid,c.PrintDate,c.date '+
|
||
'FROM tmp_journal_grades_cols c '+
|
||
'WHERE not exists (select 1 from tmp_report_journal_Right d where d.pagenum=c.pagenum and d.cid=c.cid and d.printdate=c.printdate and d.p_num=1);' +
|
||
'INSERT INTO tmp_report_journal_Right(PageNum,cid,PrintDate,date,p_num, grade) '+
|
||
'SELECT PageNum,cid,PrintDate,date,1,null FROM tmp_journal_1st_row; ';
|
||
fScript.Add(SQL);
|
||
end;
|
||
|
||
procedure TSQLScripts48.CreateContetnts;
|
||
var
|
||
SQL: string;
|
||
ContPage: string;
|
||
PageShift: array[0..6] of integer;
|
||
i: integer;
|
||
begin
|
||
PageShift[0] := 0;
|
||
PageShift[1] := PeopleInfPageCount;
|
||
PageShift[2] := MissingListenersPageCount;
|
||
PageShift[3] := SheduleTermsPageCount;
|
||
PageShift[4] := PerfomancePageCount;
|
||
PageShift[5] := 2;
|
||
PageShift[6] := 1;
|
||
for i :=1 to 6 do
|
||
PageShift[i] := PageShift[i]+PageShift[i-1];
|
||
//Формирование оглавления по LMS-5328
|
||
SQL := ' DROP TABLE IF EXISTS tmp_contents_t; ' +
|
||
' CREATE TEMPORARY TABLE tmp_contents_t AS ' +
|
||
' SELECT COUNT( DISTINCT PageNum) num, cs.CID, COALESCE(co.ord,200) ord ' +
|
||
' FROM tmp_report_journal_dates cs' +
|
||
' JOIN courses c ON c.CID = cs.CID' +
|
||
' LEFT JOIN (SELECT DISTINCT cid, ord FROM tmp_report_journal_Left) co ON co.cid = c.cid ' +
|
||
' GROUP BY cs.CID ' +
|
||
' ORDER BY ord, cid, PageNum; '+
|
||
|
||
' DROP TABLE IF EXISTS tmp_contents_t2; ' +
|
||
' CREATE TEMPORARY TABLE tmp_contents_t2 AS ' +
|
||
' SELECT sum(num) over(order by ord,cid,num) as num, null as summ, CID' +
|
||
' FROM tmp_contents_t' +
|
||
' ORDER BY ord, cid, num;';
|
||
|
||
if (PageContinue = '') or (PageContinue = '0') then
|
||
ContPage:='(SELECT MAX(summ) FROM tmp_contents_t2) '
|
||
else
|
||
ContPage := PageContinue;
|
||
SQL := SQL +
|
||
' DROP TABLE IF EXISTS tmp_contents; ' +
|
||
' CREATE TEMPORARY TABLE tmp_contents AS ' +
|
||
' (SELECT concat(upper(left(xp_Subject_Without_Year(c.Title),1)),substr(xp_Subject_Without_Year(c.Title),2)) name, cnt.num ' +
|
||
' FROM tmp_contents_t2 cnt' +
|
||
' JOIN courses c ON c.CID = cnt.CID' +
|
||
{' LEFT JOIN tmp_courses_2 t2 ON t2.CID = cnt.CID' +
|
||
' LEFT JOIN tmp_courses_order co ON (UPPER(co.name) LIKE (UPPER(xp_Subject_Without_Year(c.Title))))' +
|
||
' ORDER BY COALESCE(co.order_num,200) + IF(cntGid = 1, 0, 100)) '+ }
|
||
|
||
//' LEFT JOIN (SELECT DISTINCT cid, ord FROM tmp_courses_3) t3 ON t3.cid = cnt.cid'+
|
||
' ORDER BY num, summ) '+
|
||
|
||
' UNION (SELECT ''Общие сведения об обучающихся'' as name, '+ContPage+' as num)' +
|
||
' UNION (SELECT ''Сведения о количестве уроков, пропущенных обучающимися'' as name, '+ContPage+' + ' +inttostr(PageShift[1]) + ' as num)' +
|
||
' UNION (SELECT ''Сводная ведомость учета посещаемости'' as name,'+ContPage+' + ' +inttostr(PageShift[2]) + ' as num)' +
|
||
' UNION (SELECT ''Сводная ведомость учета успеваемости'' as name, '+ContPage+' + ' +inttostr(PageShift[3]) + ' as num)' +
|
||
' UNION (SELECT ''Сведения о занятиях и кружках, в факультативах и других дополнительных занятиях'' as name, '+ContPage+' + ' +inttostr(PageShift[4]) + ' as num)' +
|
||
' UNION (SELECT ''Замечания по ведению классного журнала'' as name, '+ContPage+' + ' +inttostr(PageShift[5]) +' as num)' +
|
||
' UNION (SELECT ''Листок здоровья'' as name, '+ContPage+' + ' +inttostr(PageShift[6]) +' as num); ';
|
||
|
||
fScript.Add(SQL);
|
||
end;
|
||
|
||
procedure TSQLScripts48.CreateRightTable;
|
||
var
|
||
SQL: string;
|
||
begin
|
||
//Формирование таблицы для вывода оценок
|
||
SQL :=
|
||
' DROP TABLE IF EXISTS tmp_report_journal_Right;'+
|
||
' CREATE TEMPORARY TABLE tmp_report_journal_Right AS '+
|
||
' SELECT DISTINCT CONCAT(p.cid,''00'',p.PageNum,''00'',p.p_num) + 0 AS ConStr, '+
|
||
' p.cid, p.PageNum, p.date, p.grade, p.p_grade orderStr, p.sheid, '+
|
||
' IF(p.sheid > 10000000,xp_fget_RM_term(p.sheid - 10000000),'+
|
||
' to_char(p.date, ''dd.mm'')) PrintDate, '+
|
||
' CONCAT(LPAD(CAST(p.p_num AS char(2)), 2,''0''), COALESCE(p.fio,'''')) fio, '+
|
||
' p.p_num, CAST('''' as CHAR(100)) deduction '+
|
||
' FROM tmp_report_journal_main_templ_with_peoples p '+
|
||
' ORDER BY p.cid, p.PageNum, ISNULL(p.date), p.date;'+
|
||
' CREATE INDEX PAGECID ON tmp_report_journal_Right(PageNum,cid); ';
|
||
fScript.Add(SQL);
|
||
SQL := ' CREATE INDEX index_right_cid_pn_num ON tmp_report_journal_Right(cid, PageNum, p_num); '+
|
||
' CREATE INDEX index_peop_cid_pn_num ON tmp_report_journal_main_templ_with_peoples (cid, PageNum, p_num); ';
|
||
fScript.Add(SQL);
|
||
SQL := ' UPDATE tmp_report_journal_Right l '+
|
||
//' JOIN tmp_report_journal_main_templ_with_peoples p ON p.cid = l.cid and p.PageNum = l.PageNum AND p.p_num = l.p_num '+
|
||
//' SET l.deduction = p.deduction; ';
|
||
' SET l.deduction = (SELECT p.deduction FROM tmp_report_journal_main_templ_with_peoples p WHERE p.cid = l.cid and p.PageNum = l.PageNum AND p.p_num = l.p_num LIMIT 1);';
|
||
fScript.Add(SQL);
|
||
SQL := ' UPDATE tmp_report_journal_Right SET deduction = '''' WHERE deduction is NULL; ';
|
||
fScript.Add(SQL);
|
||
end;
|
||
|
||
procedure TSQLScripts48.CreateSheduleTerms;
|
||
var
|
||
SQL: string;
|
||
begin
|
||
//Формирование сводной ведомости учета посещаемости
|
||
SQL := ' DROP TABLE IF EXISTS tmp_report_journal_SheduleTerms_terms; '+
|
||
' CREATE TEMPORARY TABLE tmp_report_journal_SheduleTerms_terms AS '+
|
||
' SELECT * FROM tmp_report_journal_terms; '+
|
||
|
||
' INSERT INTO tmp_report_journal_SheduleTerms_terms '+
|
||
' SELECT MIN(BegDate), MAX(EndDate), ''За год'', 0'+
|
||
' FROM tmp_report_journal_terms; '+
|
||
|
||
' DROP TABLE IF EXISTS tmp_report_journal_terms_t2; '+
|
||
' CREATE TEMPORARY TABLE tmp_report_journal_terms_t2 AS '+
|
||
' SELECT emp.e_num, t.trmid, p.mid '+
|
||
' FROM tmp_report_empty_people emp '+
|
||
' LEFT JOIN tmp_report_journal_SheduleTerms_terms t ON 1=1 '+
|
||
' LEFT JOIN tmp_report_page_missing_peoples p ON p.num = emp.e_num; '+
|
||
|
||
' DROP TABLE IF EXISTS tmp_report_journal_terms_t3; '+
|
||
' CREATE TEMPORARY TABLE tmp_report_journal_terms_t3 AS '+
|
||
' SELECT * FROM tmp_report_journal_SheduleTerms_terms; '+
|
||
|
||
' DROP TABLE IF EXISTS tmp_report_journal_terms_t4; '+
|
||
' CREATE TEMPORARY TABLE tmp_report_journal_terms_t4 AS '+
|
||
' SELECT * FROM tmp_report_journal_SheduleTerms_terms; '+
|
||
|
||
' DROP TABLE IF EXISTS tmp_report_journal_full_date_missing; '+
|
||
' CREATE TEMPORARY TABLE tmp_report_journal_full_date_missing AS '+
|
||
' SELECT c.mid, c.date, SUM(IF(c.ConMissing = m.ConMissing,1,0)) AS ConMissing, SUM(IF(c.ConMissing = m.ConDisease,1,0)) ConDisease '+
|
||
' FROM tmp_report_journal_missing m '+
|
||
' JOIN tmp_report_page_peoples_dates_courses c ON '+
|
||
' c.mid = m.mid AND c.date = m.date AND c.ConMissing = m.ConMissing '+
|
||
' WHERE c.ConMissing = m.ConMissing OR c.ConMissing = m.ConDisease '+
|
||
' GROUP BY c.mid, c.date; '+
|
||
|
||
' DROP TABLE IF EXISTS tmp_report_journal_terms_main_t; '+
|
||
' CREATE TEMPORARY TABLE tmp_report_journal_terms_main_t AS '+
|
||
' SELECT t.e_num, t.trmid, t.mid, xp_f_get_mid_fio(t.mid,0) fio, '+
|
||
' ter.title AS title, a.CntMissing, ter.BegDate, a.CntDisease, '+
|
||
' b.CntMissingFullDay, b.CntDiseaseFullDay '+
|
||
' FROM tmp_report_journal_terms_t2 t '+
|
||
//Только пропуски
|
||
' LEFT JOIN (SELECT mis.MID, tt.trmid, SUM(mis.ConMissing) CntMissing, SUM(mis.ConDisease) CntDisease '+
|
||
' FROM tmp_report_journal_missing mis '+
|
||
' JOIN tmp_report_journal_SheduleTerms_terms tt ON mis.date BETWEEN tt.BegDate AND tt.EndDate '+
|
||
' WHERE NOT mid IS NULL '+
|
||
' GROUP BY mis.MID, tt.trmid) a ON a.MID = t.MID AND a.trmid = t.trmid '+
|
||
//FullDay
|
||
' LEFT JOIN (SELECT mis.MID, tt2.trmid, SUM(mis.ConMissing) CntMissingFullDay, SUM(mis.ConDisease) CntDiseaseFullDay '+
|
||
' FROM tmp_report_journal_full_date_missing mis '+
|
||
' JOIN tmp_report_journal_terms_t4 tt2 ON mis.date BETWEEN tt2.BegDate AND tt2.EndDate '+
|
||
' WHERE NOT mid IS NULL '+
|
||
' GROUP BY mis.MID, tt2.trmid) b ON b.MID = t.MID AND b.trmid = t.trmid '+
|
||
' LEFT JOIN tmp_report_journal_terms_t3 ter ON ter.trmid = t.trmid; ';
|
||
fScript.Add(SQL);
|
||
SheduleTermsPageCount := 1 ;
|
||
end;
|
||
|
||
|
||
|
||
|
||
procedure TSQLScripts48.CreateEmptycontents(emptyRows: integer);
|
||
var
|
||
i: integer;
|
||
SQL: string;
|
||
begin
|
||
SQL := ' DROP TABLE IF EXISTS tmp_contents; ' +
|
||
' CREATE TEMPORARY TABLE tmp_contents AS ' +
|
||
' SELECT '''' as name, 0 as num; ';
|
||
fScript.Add(SQL);
|
||
SQL := ' INSERT INTO tmp_contents '+
|
||
' SELECT '''' as name, 0 as num; ';
|
||
for I := 0 to emptyRows - 1 do
|
||
begin
|
||
fScript.Add(SQL);
|
||
end;
|
||
end;
|
||
|
||
procedure TSQLScripts48.CreateEmptyCrossTab(RowTable, ColTable: string;
|
||
CrossTable: String);
|
||
var
|
||
SQL: string;
|
||
begin
|
||
SQL := format(
|
||
'DROP TABLE IF EXISTS tmp_report_empty_%0:s; '+
|
||
'CREATE TEMPORARY TABLE tmp_report_empty_%0:s (p_num integer, p_grade integer); ',
|
||
[CrossTable]);
|
||
fScript.Add(SQL);
|
||
SQL := format(
|
||
'INSERT INTO tmp_report_empty_%0:s (p_num,p_grade) '+
|
||
'SELECT row.e_num,col.e_num FROM tmp_report_empty_%1:s col,tmp_report_empty_%2:s row ; ',
|
||
[CrossTable,ColTable,RowTable]);
|
||
fScript.Add(SQL);
|
||
end;
|
||
|
||
procedure TSQLScripts48.CreateEmptyReport;
|
||
var
|
||
SQL: string;
|
||
begin
|
||
CreateEmptyTemplate('pages',65);
|
||
SQL := ' DROP TABLE IF EXISTS tmp_report_journal_Left; '+
|
||
' CREATE TEMPORARY TABLE tmp_report_journal_Left AS '+
|
||
' SELECT '+
|
||
' 0 AS ConStr, '+
|
||
' 0 + 0 AS fio, '+
|
||
' 0 AS OrderNum, '+
|
||
' e_num + 0 AS PageNum, '+
|
||
' 0 AS cid, '+
|
||
' ''0'' AS CourseName, '+
|
||
' 0 AS subGid,'+
|
||
' ''0'' AS mounthNames, '+
|
||
' 200 as ord, '+
|
||
' 0 AS deduction'+
|
||
' FROM tmp_report_empty_pages; ';
|
||
fScript.Add(SQL);
|
||
SQL := ' DROP TABLE IF EXISTS tmp_monitoring_L; '+
|
||
' CREATE TEMPORARY TABLE tmp_monitoring_L AS '+
|
||
' SELECT 0 as e_num, 0 as jmid, 0 as MounthDate, 0 as checkText, 0 as IsChecked ';
|
||
fScript.Add(SQL);
|
||
SQL := ' DROP TABLE IF EXISTS tmp_monitoring_R; '+
|
||
' CREATE TEMPORARY TABLE tmp_monitoring_R AS '+
|
||
' SELECT 0 as e_num, 0 as jmid, 0 as MounthDate, 0 as checkText, 0 as IsChecked ';
|
||
fScript.Add(SQL);
|
||
SQL := ' DROP TABLE IF EXISTS tmp_report_journal_Right; '+
|
||
' CREATE TEMPORARY TABLE tmp_report_journal_Right AS '+
|
||
' SELECT '+
|
||
' t.e_num AS PageNum, '+
|
||
' 0 AS ConStr, '+
|
||
' p_num AS fio, '+
|
||
' p_num AS OrderNum, '+
|
||
//' p_num AS PrintDate, '+
|
||
' '' '' AS PrintDate, '+
|
||
' 0 AS date, '+
|
||
' '' '' AS grade, '+
|
||
' 0 AS orderStr, '+
|
||
' 0 AS sheid, '+
|
||
' 0 AS cid, '+
|
||
' ''0'' AS CourseName, '+
|
||
' 0 AS subGid, '+
|
||
' ''0'' AS mounthNames, '+
|
||
' p_num, '+
|
||
' '''' AS deduction ' +
|
||
' FROM tmp_report_empty_grades '+
|
||
' LEFT JOIN tmp_report_empty_pages t ON 1=1 ';
|
||
fScript.Add(SQL);
|
||
// Общие сведения об обучающихся
|
||
CreateEmptyTemplate('people',42);
|
||
SQL := ' DROP TABLE IF EXISTS tmp_report_page_peoples; '+
|
||
' CREATE TEMPORARY TABLE tmp_report_page_peoples AS '+
|
||
' SELECT DISTINCT '+
|
||
' e_num / 21 + 1 as ordPage, '+
|
||
' e_num % 21 + 1 as ordNum, '+
|
||
' e_num as num, '+
|
||
' '' '' personalNum, '+
|
||
' 0 AS mid, '' '' AS fio, '' '' AS Sex, '' '' AS Birthday, '+
|
||
' '' '' as FamilyFIO, '' '' as FamilyWork, '' '' as HomeAdr '+
|
||
' FROM tmp_report_empty_people p; ';
|
||
fScript.Add(SQL);
|
||
// Сведения о количестве пропущенных уроков
|
||
CreateEmptyCrossTab('people','pages','main');
|
||
CreateEmptyTemplate('terms',4);
|
||
SQL := ' DROP TABLE IF EXISTS tmp_report_journal_missing; '+
|
||
' CREATE TEMPORARY TABLE tmp_report_journal_missing AS '+
|
||
' SELECT DISTINCT '+
|
||
' t.e_num + 0 AS ordPage, '+
|
||
//' 1 AS ordPage, '+
|
||
' p_grade AS ordNum, '+
|
||
' 0 AS mid, '+
|
||
' ''0'' AS PrintDate1, '+
|
||
' p_num AS date, '+
|
||
' '' '' AS ConMissing, '+
|
||
' 0 AS ConDisease '+
|
||
//' p_grade AS fio, '+
|
||
//' p_num AS PrintDate, '+
|
||
''+
|
||
' FROM tmp_report_empty_grades '+
|
||
' LEFT JOIN tmp_report_empty_terms t ON 1=1 ';
|
||
//' FROM tmp_report_empty_65 t; ';
|
||
fScript.Add(SQL);
|
||
// Сводная ведомость успеваемости
|
||
SQL := ' DROP TABLE IF EXISTS tmp_report_perfomance_t; '+
|
||
' CREATE TEMPORARY TABLE tmp_report_perfomance_t AS '+
|
||
' SELECT ''I четверть'' AS title, 1 AS Ord '+
|
||
' UNION SELECT ''II четверть'' AS title, 2 AS Ord '+
|
||
' UNION SELECT ''III четверть'' AS title, 3 AS Ord '+
|
||
' UNION SELECT ''IV четверть'' AS title, 4 AS Ord '+
|
||
' UNION SELECT ''Год. оценка'' AS title, 5 AS Ord '+
|
||
' UNION SELECT ''Экз. оценка'' AS title, 6 AS Ord '+
|
||
' UNION SELECT ''Итог. оценка'' AS title, 7 AS Ord ; ';
|
||
fScript.Add(SQL);
|
||
SQL := ' DROP TABLE IF EXISTS tmp_report_journal_perfomance_peoples; '+
|
||
' CREATE TEMPORARY TABLE tmp_report_journal_perfomance_peoples AS '+
|
||
' SELECT 0 AS mid, 0 as page; ';
|
||
fScript.Add(SQL);
|
||
CreateEmptyTemplate('periods',6);
|
||
SQL := ' DROP TABLE IF EXISTS tmp_report_journal_perfomance_main_t; '+
|
||
' CREATE TEMPORARY TABLE tmp_report_journal_perfomance_main_t AS '+
|
||
' SELECT * '+
|
||
' FROM tmp_report_empty_periods '+
|
||
' LEFT JOIN tmp_report_perfomance_t ON 1=1; ';
|
||
fScript.Add(SQL);
|
||
CreateEmptyTemplate('courses',18);
|
||
CreateEmptyTemplate('perf_pages',7);
|
||
SQL := ' DROP TABLE IF EXISTS tmp_report_journal_perfomance_main; '+
|
||
' CREATE TEMPORARY TABLE tmp_report_journal_perfomance_main AS '+
|
||
' SELECT DISTINCT '+
|
||
' '' '' AS fio, '+
|
||
' m.title as termname, '+
|
||
//' m.e_num AS OrderNum, '+
|
||
' 6 * (t.e_num - 1) + m.e_num AS OrderNum, '+
|
||
' m.Ord AS TermOrder, '+
|
||
' m.Ord AS trmtid, '+
|
||
' m.Ord AS trmid, '+
|
||
' m.e_num as mid, '+
|
||
//' t.e_num + 0 AS page, '+
|
||
' t.e_num AS page, '+
|
||
' 0 AS PeopPage, '+
|
||
' 0 as cid, '+
|
||
//' n.e_num AS CourseName, '+
|
||
' n.e_num AS CourseName, '+
|
||
' 0 AS BegDate, '+
|
||
' '' '' AS Grade, '+
|
||
' 0 AS OrderEnd, '+
|
||
' 0 AS councilDecisionMode, '+
|
||
' 0 as toYear, '+
|
||
' '''' as toText, '+
|
||
' '''' as protocolNumber, '+
|
||
' '''' as prikazNumber, '+
|
||
' CAST(NULL AS date) protocolDate, '+
|
||
' CAST(NULL AS date) prikazDate, '+
|
||
' 7 as midCount '+
|
||
' FROM tmp_report_journal_perfomance_main_t m'+
|
||
' LEFT JOIN tmp_report_empty_perf_pages t ON 1=1 '+
|
||
' LEFT JOIN tmp_report_empty_courses n ON 1=1 ';
|
||
fScript.Add(SQL);
|
||
SQL := ' DROP TABLE IF EXISTS tmp_report_page_missing_peoples; '+
|
||
' CREATE TEMPORARY TABLE tmp_report_page_missing_peoples AS '+
|
||
' SELECT DISTINCT 1 num, 0 mid; ';
|
||
fScript.Add(SQL);
|
||
CreateEmptyTemplate('lessons',26);
|
||
|
||
SQL := ' DROP TABLE IF EXISTS tmp_report_journal_homeWork_3;'+
|
||
' CREATE TEMPORARY TABLE tmp_report_journal_homeWork_3 AS '+
|
||
' SELECT 0 AS ConStr2, '' '' as date, '' '' as text, '' '' as TemaPlanText, 0 as tMain, '+
|
||
' CONCAT(t.e_num * 1000,0) + 0 AS ConStrPage, '+
|
||
' '' '' teacherFIO, '+
|
||
' '' '' SUBteacherFIO, 0 mainGid, 0 as SHEID,null as PrintDate, 0 as part '+
|
||
' FROM tmp_report_empty_lessons '+
|
||
' LEFT JOIN tmp_report_empty_pages t ON 1=1; '+
|
||
|
||
' DROP TABLE IF EXISTS tmp_report_journal_homeWork_3_group_counter;'+
|
||
' CREATE TEMPORARY TABLE tmp_report_journal_homeWork_3_group_counter AS '+
|
||
' SELECT 0 as ConStrPage, 0 as cn ';
|
||
fScript.Add(SQL);
|
||
SQL := ' DROP TABLE IF EXISTS tmp_report_journal_homeWork_4;'+
|
||
' CREATE TEMPORARY TABLE tmp_report_journal_homeWork_4 AS '+
|
||
' SELECT 0 AS ConStr2, '' '' as date, '' '' as text, '' '' as TemaPlanText, 0 as tMain, '+
|
||
' 1000 AS ConStrPage, '+
|
||
' '' '' teacherFIO, '+
|
||
' '' '' SUBteacherFIO, 0 mainGid, 0 as SHEID, null as PrintDate,0 as part '+
|
||
' FROM tmp_report_empty_lessons t; '+
|
||
|
||
' DROP TABLE IF EXISTS tmp_report_journal_homeWork_4_group_counter;'+
|
||
' CREATE TEMPORARY TABLE tmp_report_journal_homeWork_4_group_counter AS '+
|
||
' SELECT 0 as ConStrPage, 0 as cn ';
|
||
fScript.Add(SQL);
|
||
SQL := ' DROP TABLE IF EXISTS tmp_report_journal_DO_peoples; '+
|
||
' CREATE TEMPORARY TABLE tmp_report_journal_DO_peoples AS '+
|
||
' SELECT e_num num, 0 as mid, '' '' as fio '+
|
||
' FROM tmp_report_empty_people; ';
|
||
fScript.Add(SQL);
|
||
SQL := ' DROP TABLE IF EXISTS tmp_report_journal_health_sheet;'+
|
||
' CREATE TEMPORARY TABLE tmp_report_journal_health_sheet AS '+
|
||
' SELECT DISTINCT e_num num, 0 as mid, '''' as fio, '''' as yearBirthday, '+
|
||
' '''' as healthGroupTitle, '''' physicalTitle, '''' desk_number, '''' doctors_recommendation '+
|
||
' FROM tmp_report_empty_people; ';
|
||
fScript.Add(SQL);
|
||
SQL := ' DROP TABLE IF EXISTS tmp_report_journal_terms_main_t; '+
|
||
' CREATE TEMPORARY TABLE tmp_report_journal_terms_main_t AS '+
|
||
' SELECT 0 as e_num, 0 as trmid, 0 as mid, '''' as fio, '+
|
||
' '''' AS title, 0 as CntMissing, '''' as BegDate, '''' as CntDisease, '+
|
||
' 0 as CntMissingFullDay, 0 as CntDiseaseFullDay; ';
|
||
fScript.Add(SQL);
|
||
SQL := ' DROP TABLE IF EXISTS tmp_report_page_peoples_dates_courses; '+
|
||
' CREATE TEMPORARY TABLE tmp_report_page_peoples_dates_courses AS '+
|
||
' SELECT DISTINCT 0 AS mid, '''' AS date, 0 as ConMissing, 0 AS num; ';
|
||
fScript.Add(SQL);
|
||
end;
|
||
|
||
|
||
procedure TSQLScripts48.CreateEmptyTemplate(TableName: string;
|
||
RowCount: integer);
|
||
var
|
||
SQL: string;
|
||
i: integer;
|
||
begin
|
||
SQL := format(
|
||
'DROP TABLE IF EXISTS tmp_report_empty_%0:s; '+
|
||
'CREATE TEMPORARY TABLE tmp_report_empty_%0:s (e_num integer); ',
|
||
[TableName]);
|
||
fScript.Add(SQL);
|
||
for i := 1 to RowCount do
|
||
fScript.Add(format('INSERT INTO tmp_report_empty_%0:s (e_num) VALUES (%1:d); ',[TableName,i]));
|
||
end;
|
||
|
||
procedure TSQLScripts48.CreateHealthSheet;
|
||
var
|
||
SQL: string;
|
||
begin
|
||
SQL := ' DROP TABLE IF EXISTS tmp_report_journal_health_sheet_t;'+
|
||
' CREATE TEMPORARY TABLE tmp_report_journal_health_sheet_t AS '+
|
||
' SELECT DISTINCT p.mid, p.fio, year(xpf.Birthday) yearBirthday, '+
|
||
' hg.title as healthGroupTitle, '+
|
||
' pg.title as physicalTitle, xpf.desk_number, '+
|
||
' xpf.doctors_recommendation '+
|
||
' FROM tmp_report_journal_peoples_pages p '+
|
||
' LEFT JOIN xp_personal_file xpf '+
|
||
' ON xpf.mid = p.mid'+
|
||
' LEFT JOIN HealthGroup hg '+
|
||
' ON hg.HID = xpf.HealthGroup '+
|
||
' LEFT JOIN physicalgroup pg '+
|
||
' ON pg.pid = xpf.PhysicalGroup '+
|
||
' ORDER BY p.fio; ';
|
||
fScript.Add(SQL);
|
||
SQL := ' DROP TABLE IF EXISTS tmp_report_journal_health_sheet;'+
|
||
' CREATE TEMPORARY TABLE tmp_report_journal_health_sheet AS '+
|
||
' SELECT a.* '+
|
||
' FROM tmp_report_empty_people e '+
|
||
' LEFT JOIN (SELECT row_number() over (order by p.fio) AS num, p.* FROM tmp_report_journal_health_sheet_t p) a '+
|
||
' ON e.e_num = a.num;';
|
||
fScript.Add(SQL);
|
||
runscript('Информация о здоровье');
|
||
end;
|
||
|
||
procedure TSQLScripts48.CreateHomeWork;
|
||
var
|
||
SQL: string;
|
||
begin
|
||
//Добавить домашнее задание
|
||
SQL :=
|
||
' DROP TABLE IF EXISTS tmp_report_journal_homeWork_t;'+
|
||
' CREATE TEMPORARY TABLE tmp_report_journal_homeWork_t AS '+
|
||
' SELECT DISTINCT dp.PageNum, dp.cid, dp.date, dp.teacher_mid MainTeacher, '+
|
||
' CONCAT(dp.cid,''00'',dp.PageNum,''001'') + 0 AS ConStr1, '+
|
||
' CONCAT(dp.cid,''00'',dp.PageNum,''002'') + 0 AS ConStr2, '+
|
||
' hw.teacher_mid, hw.text, ROW_NUMBER() OVER (ORDER BY dp.cid, dp.PageNum, ISNULL(dp.date),dp.date) as num, '+
|
||
' CONCAT(DAY(dp.date), ''.'', MONTH(dp.date)) PrintDate '+
|
||
' FROM tmp_report_journal_main_templ_with_peoples dp '+
|
||
' LEFT JOIN nnz_homework hw ON hw.sheid = dp.sheid AND hw.week_id = dp.week_id '+
|
||
' ORDER BY dp.cid, dp.PageNum, ISNULL(dp.date),dp.date;';
|
||
fScript.Add(SQL);
|
||
SQL := ' DROP TABLE IF EXISTS tmp_report_journal_homeWork_t2;'+
|
||
' CREATE TEMPORARY TABLE tmp_report_journal_homeWork_t2 AS '+
|
||
' SELECT DISTINCT emp.e_num, t.constr1, t.constr2 '+
|
||
' FROM tmp_report_empty_people_half emp '+
|
||
' LEFT JOIN tmp_report_journal_homeWork_t t ON 1=1; ';
|
||
fScript.Add(SQL);
|
||
SQL := ' CREATE INDEX cons ON tmp_report_journal_homeWork_t(constr1,constr2); '+
|
||
' DROP TABLE IF EXISTS tmp_report_journal_homeWork;'+
|
||
' CREATE TEMPORARY TABLE tmp_report_journal_homeWork AS '+
|
||
' SELECT emp.e_num, emp.constr1, emp.constr2, ht.PageNum, ht.cid, ht.date, '+
|
||
' ht.teacher_mid, ht.text, ht.num, ht.PrintDate, ht.MainTeacher '+
|
||
' FROM tmp_report_journal_homeWork_t2 emp '+
|
||
' LEFT JOIN tmp_report_journal_homeWork_t ht ON ht.num = emp.e_num AND ht.constr1 = emp.constr1 AND ht.constr2 = emp.constr2;';
|
||
fScript.Add(SQL);
|
||
SQL := 'DROP TABLE IF EXISTS tmp_report_stat_courses_2;'+
|
||
'CREATE TEMPORARY TABLE tmp_report_stat_courses_2 AS '+
|
||
'SELECT * FROM tmp_report_stat_courses; ';
|
||
fScript.Add(SQL);
|
||
SQL := 'CREATE INDEX templSheid ON tmp_report_journal_main_templ(sheid, week_id);';
|
||
fScript.Add(SQL);
|
||
SQL := ' DROP TABLE IF EXISTS tmp_report_journal_homeWork_3;'+
|
||
' CREATE TEMPORARY TABLE tmp_report_journal_homeWork_3 AS '+
|
||
'SELECT DISTINCT CONCAT(dp.cid,''00'',dp.PageNum,''002'') + 0 AS ConStr2, dp.date, '+
|
||
' to_char(dp.date, ''dd.mm'') as PrintDate,'+
|
||
'replace(hw.text,''\r\n'','''') text, replace(o.title,''\r\n'','''') TemaPlanText, dp.teacher_mid tMain, '+
|
||
' CONCAT(dp.PageNum * 1000,dp.cid) + 0 AS ConStrPage, '+
|
||
' c.teacher_mid teacherFIO, '+
|
||
' xp_f_get_mid_fio(dp.subTeacher, 1) SUBteacherFIO, '+
|
||
' dp.mainGid, dp.cid, '+
|
||
' case '+
|
||
' when dp.week_id=9999998 then 10000000-dp.sheid '+
|
||
' when dp.week_id=9999999 then -1000000 '+
|
||
' else (SELECT period FROM nnz_schedule WHERE SHEID = dp.sheid) '+
|
||
' end as part, '+
|
||
' dp.sheid, dp.plan, dp.fact '+
|
||
//' FROM tmp_report_journal_main_templ_with_peoples dp '+
|
||
' FROM ( SELECT t.cid, t.PageNum, sc.sheid, sc.date, sc.mainGid, sc.week_Id, '+
|
||
' case when sc.week_id in (9999998,9999999) then null else sc.teacher_mid end as teacher_mid, '+
|
||
' case when sc.week_id in (9999998,9999999) then null else sc.subTeacher end as subTeacher, '+
|
||
' case when sc.week_id in (9999998,9999999) then null else sc.plan end as plan, '+
|
||
' case when sc.week_id in (9999998,9999999) then null else sc.fact end as fact '+
|
||
|
||
' FROM ( '+
|
||
' SELECT DISTINCT cid, PageNum, multySHEID, date '+
|
||
' FROM tmp_report_journal_main_templ_with_peoples '+
|
||
' WHERE NOT date IS NULL '+
|
||
//' AND SUBSTRING_INDEX(SUBSTRING_INDEX(mainGid, '','', 1), '','', -1) <> 0 '+
|
||
' ) t '+
|
||
' LEFT JOIN tmp_report_stat_courses sc ON t.cid = sc.cid AND sc.date = t.date AND FIND_IN_SET(sc.SHEID ,t.multySHEID) <> 0 ' + //AND sc.sheid = t.multySHEID '+
|
||
' ) dp '+
|
||
' LEFT JOIN nnz_homework hw ON hw.sheid = dp.sheid AND hw.week_id = dp.week_id '+
|
||
' LEFT JOIN nnz_schedule_modules sm '+
|
||
' ON (sm.SHEID = dp.SHEID '+
|
||
' AND sm.week_id = dp.week_id) '+
|
||
' LEFT OUTER JOIN organizations o '+
|
||
' ON (o.oid = sm.module_id) '+
|
||
' JOIN (SELECT string_agg(DISTINCT xp_f_get_mid_fio(css.teacher_mid,0),'', '') as teacher_mid, t.cid,t.PageNum, css.mainGid '+
|
||
' FROM tmp_report_journal_main_templ t '+
|
||
' JOIN tmp_report_stat_courses_2 css ON css.cid = t.cid and css.week_id = t.week_id '+
|
||
' GROUP BY t.cid, t.PageNum, css.mainGid) c ON c.cid = dp.cid AND c.PageNum = dp.PageNum AND c.mainGid = SUBSTRING_INDEX(SUBSTRING_INDEX(dp.mainGid, '','', 1), '','', -1) '+
|
||
' WHERE NOT dp.date is NULL '+
|
||
//' AND dp.SHEID < 10000000 '+
|
||
' Order by dp.mainGid, dp.date, part, dp.sheid; '+
|
||
|
||
' DROP TABLE IF EXISTS tmp_report_journal_homeWork_3_group_counter; '+
|
||
' CREATE TEMPORARY TABLE tmp_report_journal_homeWork_3_group_counter AS '+
|
||
' SELECT ConStrPage, COUNT(DISTINCT mainGid) cn '+
|
||
' FROM tmp_report_journal_homeWork_3 '+
|
||
' GROUP BY ConStrPage; ';
|
||
fScript.Add(SQL);
|
||
SQL := format(
|
||
'UPDATE tmp_report_journal_homeWork_3 t SET '+
|
||
' sheid = 10000000-sheid, '+
|
||
' PrintDate= case part when -1000000 then elt(abs(sheid) - 10000000,''Год'',''Экз'',''Итог'') else xp_fget_RM_term(-part) end, '+
|
||
' plan=('+
|
||
'select count(*) from nnz_schedule s '+
|
||
' join nnz_weeks w on w.sh_var_id=s.sh_var_id '+
|
||
' and s.day_of_week-1 between WeekDay(w.wstart_date) and WeekDay(w.wend_date) '+
|
||
' and w.wstart_date + (s.day_of_week - 1 -WeekDay(w.wstart_date)) * interval ''1 day'' not in (select date from holidays) '+
|
||
' join nnz_schedule_variants v on v.sh_var_id=s.sh_var_id '+
|
||
' join term_weeks tw on tw.week_id=w.week_id '+
|
||
' join terms t on t.trmid=tw.trmid and t.year=v.s_year_id '+
|
||
' join courses c on c.cid=s.cid '+
|
||
' join groupname g on g.gid=s.gid '+
|
||
' left join groupname g2 on g2.gid=g.owner_gid '+
|
||
' join group_history gh on gh.gid=coalesce(g2.gid,g.gid) and gh.school_year=t.year and gh.term_type_id=t.term_type_id '+
|
||
' where case part when -1000000 then t.year=%0:s else t.trmid=-part end '+
|
||
' and c.cid=t.cid and g.gid=MainGid '+
|
||
' ), '+
|
||
' fact=('+
|
||
'select count(*) from nnz_schedule s '+
|
||
' join nnz_weeks w on w.sh_var_id=s.sh_var_id '+
|
||
' and s.day_of_week-1 between WeekDay(w.wstart_date) and WeekDay(w.wend_date) '+
|
||
' and w.wstart_date + (s.day_of_week - 1 -WeekDay(w.wstart_date)) * interval ''1 day'' not in (select date from holidays) '+
|
||
' join nnz_sh_module_fact f on f.sheid=s.sheid and f.week_id=w.week_id '+
|
||
' join nnz_schedule_variants v on v.sh_var_id=s.sh_var_id '+
|
||
' join term_weeks tw on tw.week_id=w.week_id '+
|
||
' join terms t on t.trmid=tw.trmid and t.year=v.s_year_id '+
|
||
' join courses c on c.cid=s.cid '+
|
||
' join groupname g on g.gid=s.gid '+
|
||
' left join groupname g2 on g2.gid=g.owner_gid '+
|
||
' join group_history gh on gh.gid=coalesce(g2.gid,g.gid) and gh.school_year=t.year and gh.term_type_id=t.term_type_id '+
|
||
' where case part when -1000000 then t.year=%0:s else t.trmid=-part end and c.cid=t.cid and g.gid=MainGid '+
|
||
') '+
|
||
'WHERE part<0; ',
|
||
[self.year]);
|
||
fScript.Add(SQL);
|
||
SQL :=
|
||
'UPDATE tmp_report_journal_homeWork_3 SET '+
|
||
' TemaPlanText=concat(''Дано по плану - '', plan,'', по факту - '', fact ) '+
|
||
'WHERE part<0; ';
|
||
fScript.Add(SQL);
|
||
SQL := ' DROP TABLE IF EXISTS tmp_report_journal_homeWork_4;'+
|
||
' CREATE TEMPORARY TABLE tmp_report_journal_homeWork_4 AS '+
|
||
'SELECT DISTINCT CONCAT(dp.cid,''00'',dp.PageNum,''001'') + 0 AS ConStr1, dp.date, '+
|
||
' to_char(dp.date, ''dd.mm'') as PrintDate,'+
|
||
'replace(hw.text,''\r\n'','''') text, replace(o.title,''\r\n'','''') TemaPlanText, dp.teacher_mid tMain, '+
|
||
' CONCAT(dp.PageNum * 1000,dp.cid) + 0 AS ConStrPage, '+
|
||
' c.teacher_mid teacherFIO, '+
|
||
' xp_f_get_mid_fio(dp.subTeacher, 1) SUBteacherFIO, '+
|
||
' dp.mainGid, dp.cid, '+
|
||
' case '+
|
||
' when dp.week_id=9999999 then -1000000 '+
|
||
' when dp.week_id=9999998 then 10000000-dp.sheid '+
|
||
' else (SELECT period FROM nnz_schedule WHERE SHEID = dp.sheid) '+
|
||
' end as part, '+
|
||
' dp.sheid, dp.plan, dp.fact '+
|
||
//' FROM tmp_report_journal_main_templ_with_peoples dp '+
|
||
' FROM ( SELECT t.cid, t.PageNum, sc.sheid, sc.date, sc.mainGid, sc.week_Id, '+
|
||
' case when sc.week_id in (9999998,9999999) then null else sc.teacher_mid end as teacher_mid, '+
|
||
' case when sc.week_id in (9999998,9999999) then null else sc.subTeacher end as subTeacher, '+
|
||
' case when sc.week_id in (9999998,9999999) then null else sc.plan end as plan, '+
|
||
' case when sc.week_id in (9999998,9999999) then null else sc.fact end as fact '+
|
||
' FROM ( '+
|
||
' SELECT DISTINCT cid, PageNum, multySHEID, date '+
|
||
' FROM tmp_report_journal_main_templ_with_peoples '+
|
||
' WHERE NOT date IS NULL '+
|
||
//' AND SUBSTRING_INDEX(SUBSTRING_INDEX(mainGid, '','', 1), '','', -1) <> 0 '+
|
||
' ) t '+
|
||
' LEFT JOIN tmp_report_stat_courses sc ON t.cid = sc.cid AND sc.date = t.date AND FIND_IN_SET(sc.SHEID ,t.multySHEID) <> 0 ' + // AND sc.sheid = t.multySHEID '+
|
||
' ) dp '+
|
||
' LEFT JOIN nnz_homework hw ON hw.sheid = dp.sheid AND hw.week_id = dp.week_id '+
|
||
' LEFT JOIN nnz_schedule_modules sm '+
|
||
' ON (sm.SHEID = dp.SHEID '+
|
||
' AND sm.week_id = dp.week_id) '+
|
||
' LEFT OUTER JOIN organizations o '+
|
||
' ON (o.oid = sm.module_id) '+
|
||
' JOIN (SELECT string_agg(DISTINCT xp_f_get_mid_fio(css.teacher_mid,0),'', '') as teacher_mid, t.cid,t.PageNum, css.mainGid '+
|
||
' FROM tmp_report_journal_main_templ t '+
|
||
' JOIN tmp_report_stat_courses_2 css ON css.cid = t.cid and css.week_id = t.week_id '+
|
||
' GROUP BY t.cid, t.PageNum, css.mainGid) c ON c.cid = dp.cid AND c.PageNum = dp.PageNum AND c.mainGid = SUBSTRING_INDEX(SUBSTRING_INDEX(dp.mainGid, '','', 1), '','', -1) '+
|
||
' WHERE NOT dp.date is NULL and dp.PageNum = 1 AND dp.cid = (SELECT cid FROM tmp_report_journal_Left ORDER BY ord, PageNum, cid, OrderNum LIMIT 1) '+
|
||
//' AND dp.SHEID < 10000000 '+
|
||
' Order by dp.mainGid, dp.date, part, dp.sheid; '+
|
||
|
||
' DROP TABLE IF EXISTS tmp_report_journal_homeWork_4_group_counter;'+
|
||
' CREATE TEMPORARY TABLE tmp_report_journal_homeWork_4_group_counter AS '+
|
||
' SELECT COUNT(DISTINCT mainGid) cn '+
|
||
' FROM tmp_report_journal_homeWork_4; ';
|
||
fScript.Add(SQL);
|
||
SQL := format(
|
||
'UPDATE tmp_report_journal_homeWork_4 t SET '+
|
||
' sheid = 10000000-sheid, '+
|
||
' PrintDate= case part when -1000000 then elt(abs(sheid) - 10000000,''Год'',''Экз'',''Итог'') else xp_fget_RM_term(-part) end, '+
|
||
' plan=('+
|
||
'select count(*) from nnz_schedule s '+
|
||
' join nnz_weeks w on w.sh_var_id=s.sh_var_id '+
|
||
' and s.day_of_week-1 between WeekDay(w.wstart_date) and WeekDay(w.wend_date) '+
|
||
' and w.wstart_date + (s.day_of_week - 1 -WeekDay(w.wstart_date)) * interval ''1 day'' not in (select date from holidays) '+
|
||
' join nnz_schedule_variants v on v.sh_var_id=s.sh_var_id '+
|
||
' join term_weeks tw on tw.week_id=w.week_id '+
|
||
' join terms t on t.trmid=tw.trmid and t.year=v.s_year_id '+
|
||
' join courses c on c.cid=s.cid '+
|
||
' join groupname g on g.gid=s.gid '+
|
||
' left join groupname g2 on g2.gid=g.owner_gid '+
|
||
' join group_history gh on gh.gid=coalesce(g2.gid,g.gid) and gh.school_year=t.year and gh.term_type_id=t.term_type_id '+
|
||
' where case part when -1000000 then t.year=%0:s else t.trmid=-part end '+
|
||
' and c.cid=t.cid and g.gid=MainGid '+
|
||
' ), '+
|
||
' fact=('+
|
||
'select count(*) from nnz_schedule s '+
|
||
' join nnz_weeks w on w.sh_var_id=s.sh_var_id '+
|
||
' and s.day_of_week-1 between WeekDay(w.wstart_date) and WeekDay(w.wend_date) '+
|
||
' and w.wstart_date + (s.day_of_week - 1 -WeekDay(w.wstart_date)) * interval ''1 day'' not in (select date from holidays) '+
|
||
' join nnz_sh_module_fact f on f.sheid=s.sheid and f.week_id=w.week_id '+
|
||
' join nnz_schedule_variants v on v.sh_var_id=s.sh_var_id '+
|
||
' join term_weeks tw on tw.week_id=w.week_id '+
|
||
' join terms t on t.trmid=tw.trmid and t.year=v.s_year_id '+
|
||
' join courses c on c.cid=s.cid '+
|
||
' join groupname g on g.gid=s.gid '+
|
||
' left join groupname g2 on g2.gid=g.owner_gid '+
|
||
' join group_history gh on gh.gid=coalesce(g2.gid,g.gid) and gh.school_year=t.year and gh.term_type_id=t.term_type_id '+
|
||
' where case part when -1000000 then t.year=%0:s else t.trmid=-part end '+
|
||
' and c.cid=t.cid and g.gid=MainGid '+
|
||
') '+
|
||
'WHERE part<0; ',
|
||
[self.year]);
|
||
fScript.Add(SQL);
|
||
SQL :=
|
||
'UPDATE tmp_report_journal_homeWork_4 SET '+
|
||
' TemaPlanText=concat(''Дано по плану - '', plan,'', по факту - '', fact ) '+
|
||
'WHERE part<0; ';
|
||
fScript.Add(SQL);
|
||
runscript('Домашняя работа');
|
||
end;
|
||
|
||
procedure TSQLScripts48.CreateJournalMonitoring;
|
||
var
|
||
SQL: string;
|
||
MonCount, RowsCout: integer;
|
||
CorrectionNumber: integer;
|
||
begin
|
||
//Опреедить количество замечаний по журналу
|
||
|
||
MonCount := StrToInt(
|
||
Data.QueryValue(
|
||
Format(('SELECT COUNT(*) FROM journal_monitoring J WHERE J.gid = %0:s AND J.CheckDate BETWEEN %1:s AND %2:s; '),
|
||
[gid, StartDate, EndDate])
|
||
)
|
||
);
|
||
|
||
// if (MonCount Mod 44) = 0 then
|
||
// CorrectionNumber := 1
|
||
// else
|
||
// CorrectionNumber := 1;
|
||
|
||
CorrectionNumber := 1;
|
||
|
||
RowsCout := ((MonCount Div 44) + CorrectionNumber) * 44;
|
||
|
||
CreateEmptyTemplate('monitoring', RowsCout);
|
||
CreateEmptyTemplate('monitoring_L', Round(RowsCout/2));
|
||
CreateEmptyTemplate('monitoring_R', Round(RowsCout/2));
|
||
|
||
SQL :=
|
||
' DROP TABLE IF EXISTS tmp_monitoring_main; '+
|
||
' CREATE TEMPORARY TABLE tmp_monitoring_main AS '+
|
||
' SELECT num,jmid, MounthDate,checkText,IsChecked, '+
|
||
' CASE WHEN(100*num / 44 %% 100 +1) >50 THEN ''R'' ELSE ''L'' END AS table_part '+
|
||
'FROM ( '+
|
||
'SELECT ROW_NUMBER() OVER (ORDER BY J.CheckDate, J.CheckCid) as num, J.jmid, '+
|
||
' CAST(concat( CASE MONTH(J.CheckDate) WHEN 1 THEN ''январь'' WHEN 2 THEN ''февраль'' '+
|
||
' WHEN 3 THEN ''март'' WHEN 4 THEN ''апрель'' WHEN 5 THEN ''май'' '+
|
||
' WHEN 6 THEN ''июнь'' WHEN 7 THEN ''июль'' WHEN 8 THEN ''август'' '+
|
||
' WHEN 9 THEN ''сентябрь'' WHEN 10 THEN ''октябрь'' WHEN 11 THEN ''ноябрь'' ELSE ''декабрь'' END, '' / '', DAY(J.CheckDate)) AS CHAR(50)) AS MounthDate, '+
|
||
' CONCAT(C.Name, '', '', J.CheckText) as checkText, '+
|
||
' xp_f_get_mid_fio(J.ExecMid, 1) AS IsChecked '+
|
||
'FROM out_journal_monitoring J '+
|
||
'LEFT JOIN out_courses C ON C.xp_key = J.CheckCid '+
|
||
'WHERE J.gid = 77 AND J.CheckDate BETWEEN %1:s AND %2:s '+
|
||
'ORDER BY J.CheckDate, J.CheckCid '+
|
||
') t; ';
|
||
SQL := Format(SQL, [gid, StartDate, EndDate]);
|
||
fScript.Add(SQL);
|
||
|
||
SQL := ' DROP TABLE IF EXISTS tmp_monitoring; '+
|
||
' CREATE TEMPORARY TABLE tmp_monitoring AS '+
|
||
' SELECT t.e_num, m.jmid, m.MounthDate, m.checkText, m.IsChecked, m.table_part, '+
|
||
' ROW_NUMBER() OVER ( PARTITION BY table_part ORDER BY m.table_part, m.MounthDate_ as table_num '+
|
||
' FROM tmp_report_empty_monitoring t '+
|
||
' LEFT JOIN tmp_monitoring_main m ON m.num = t.e_num; ';
|
||
fScript.Add(SQL);
|
||
|
||
SQL := ' DROP TABLE IF EXISTS tmp_monitoring_L; '+
|
||
' CREATE TEMPORARY TABLE tmp_monitoring_L AS '+
|
||
' SELECT t.e_num, m.jmid, m.MounthDate, m.checkText, m.IsChecked '+
|
||
' FROM tmp_report_empty_monitoring_L t '+
|
||
' LEFT JOIN tmp_monitoring m ON m.table_num = t.e_num AND m.table_part = ''L''; ';
|
||
fScript.Add(SQL);
|
||
|
||
SQL := ' DROP TABLE IF EXISTS tmp_monitoring_R; '+
|
||
' CREATE TEMPORARY TABLE tmp_monitoring_R AS '+
|
||
' SELECT t.e_num, m.jmid, m.MounthDate, m.checkText, m.IsChecked '+
|
||
' FROM tmp_report_empty_monitoring_R t '+
|
||
' LEFT JOIN tmp_monitoring m ON m.table_num = t.e_num AND m.table_part = ''R''; ';
|
||
fScript.Add(SQL);
|
||
|
||
end;
|
||
|
||
procedure TSQLScripts48.CreateLeftTable;
|
||
var
|
||
SQL: string;
|
||
begin
|
||
SQL := ' CREATE INDEX PAGECID ON tmp_report_journal_main_templ_with_peoples(fio,p_num,PageNum,cid,subGid,date, SHEID); '+
|
||
' CREATE INDEX CONAME ON tmp_courses_order(name); '+
|
||
' CREATE INDEX t2CID ON tmp_courses_2(cid); '+
|
||
' CREATE INDEX stcid ON tmp_report_stat_courses(cid,title); ';
|
||
fScript.Add(SQL);
|
||
SQL := ' DROP TABLE IF EXISTS tmp_report_stat_courses_tmp;'+
|
||
' CREATE TEMPORARY TABLE tmp_report_stat_courses_tmp AS '+
|
||
' SELECT DISTINCT cid, title FROM tmp_report_stat_courses; '+
|
||
' CREATE INDEX statCcid ON tmp_report_stat_courses_tmp(cid); ';
|
||
fScript.Add(SQL);
|
||
|
||
//Формирование списка учеников
|
||
SQL := ' DROP TABLE IF EXISTS tmp_report_journal_Left;'+
|
||
' CREATE TEMPORARY TABLE tmp_report_journal_Left AS '+
|
||
' SELECT DISTINCT '+
|
||
' CONCAT(p.cid,''00'',p.PageNum,''00'',p.p_num) + 0 AS ConStr, '+
|
||
//' p.fio, '+
|
||
' CONCAT(LPAD(CAST(p.p_num AS char(2)), 2,''0''), COALESCE(p.fio,'''')) fio, '+
|
||
//' CONCAT(LPAD(CAST(p.p_num AS char(2)), 2,''0''), COALESCE(p.fio,''''),'' <font color=red>'', COALESCE(p.deduction, ''''),''</font>'') fio, '+
|
||
' p.p_num OrderNum, p.PageNum, p.cid, xp_Subject_Without_Year(cu.title) as CourseName, p.subGid, '+
|
||
' CAST('' '' AS char(255)) as mounthNames, '+
|
||
//' 200 ord '+
|
||
//' COALESCE(co.order_num,200) ord '+
|
||
' COALESCE(co.ord,200) ord '+
|
||
' FROM tmp_report_journal_main_templ_with_peoples p '+
|
||
//' LEFT JOIN tmp_report_stat_courses_tmp a ON a.cid = p.cid '+
|
||
' LEFT JOIN courses cu ON cu.cid = p.cid '+
|
||
' LEFT JOIN (SELECT DISTINCT cid, ord FROM tmp_courses_3) co ON co.cid = p.cid '+
|
||
//' LEFT JOIN tmp_courses_order co ON UPPER(co.name) LIKE (UPPER(xp_Subject_Without_Year(cu.Title))) '+
|
||
//' LEFT JOIN tmp_courses_2 t2 ON t2.CID = cu.CID '+
|
||
' GROUP BY p.fio, p.p_num, p.PageNum, p.cid, p.subGid ; ';
|
||
fScript.Add(SQL);
|
||
SQL := ' UPDATE tmp_report_journal_Left '+
|
||
' SET mounthNames = ( SELECT string_agg(DISTINCT LOWER(if (p.SHEID < 10000000, getConst(CONCAT(''Month.'',MONTH(p.date))),NULL)), '', '' ORDER BY p.date) '+
|
||
' FROM tmp_report_journal_main_templ_with_peoples p WHERE CONCAT(p.cid,''00'',p.PageNum,''00'',p.p_num) + 0 = tmp_report_journal_Left.ConStr) ;';
|
||
|
||
SQL := ' UPDATE tmp_report_journal_Left l '+
|
||
' JOIN ( SELECT string_agg(DISTINCT LOWER(if (p.SHEID < 10000000, getConst(CONCAT(''Month.'',MONTH(p.date))),NULL)), '', '' ORDER BY p.date) dates, '+
|
||
' CONCAT(p.cid,''00'',p.PageNum,''00'',p.p_num) + 0 ConStr '+
|
||
' FROM tmp_report_journal_main_templ_with_peoples p '+
|
||
' GROUP BY p.cid,p.PageNum,p.p_num '+
|
||
' ) b ON b.ConStr = l.ConStr '+
|
||
' SET mounthNames = b.dates;';
|
||
fScript.Add(SQL);
|
||
SQL := ' CREATE INDEX PAGECID ON tmp_report_journal_Left(PageNum,cid); ';
|
||
fScript.Add(SQL);
|
||
runscript('Формирование левой части');
|
||
end;
|
||
|
||
procedure TSQLScripts48.CreateListCoursesPages;
|
||
var
|
||
SQL: string;
|
||
begin
|
||
//Тут сортировка по LMS-5328
|
||
SQL := ' DROP TABLE IF EXISTS tmp_courses_order;' +
|
||
' CREATE TEMPORARY TABLE tmp_courses_order' +
|
||
' ( order_num int,' +
|
||
' name varchar(255) );';
|
||
fScript.Add(SQL);
|
||
fScript.Add(
|
||
' INSERT INTO tmp_courses_order VALUES '+
|
||
'(1,''Русский язык''),'+
|
||
'(2,''Литература''),'+
|
||
'(3,''Иностранный язык''),'+
|
||
'(3,''Английский язык''),'+
|
||
'(3,''Французский язык''),'+
|
||
'(3,''Китайский язык''),'+
|
||
'(3,''Немецкий язык''),'+
|
||
'(3,''Английский''),'+
|
||
'(3,''Французский''),'+
|
||
'(3,''Китайский''),'+
|
||
'(3,''Немецкий''),'+
|
||
'(4,''Математика''),'+
|
||
'(5,''Алгебра''),'+
|
||
'(6,''Геометрия''),'+
|
||
'(7,''Информатика''),'+
|
||
'(8,''История России''),'+
|
||
'(9,''Всеобщая история''),'+
|
||
'(10,''Обществознание''),'+
|
||
'(11,''География''),'+
|
||
'(12,''Физика''),'+
|
||
'(13,''Химия''),'+
|
||
'(14,''Биология''),'+
|
||
'(15,''Музыка''),'+
|
||
'(16,''Изобразительное искусств''),'+
|
||
'(17,''Технология''),'+
|
||
'(18,''Основы безопасности жизнедеятельности''),'+
|
||
'(19,''Физическая культура'');');
|
||
fScript.Add(
|
||
' DROP TABLE IF EXISTS tmp_courses_2;' +
|
||
' CREATE TEMPORARY TABLE tmp_courses_2 AS' +
|
||
' SELECT CID, COUNT(DISTINCT mainGid) cntGid' +
|
||
' FROM tmp_report_stat_courses' +
|
||
' WHERE mainGid <> 0 '+
|
||
' GROUP BY CID;');
|
||
fScript.Add(
|
||
' DROP TABLE IF EXISTS tmp_courses_3; '+
|
||
' CREATE TEMPORARY TABLE tmp_courses_3 AS' +
|
||
' SELECT cs.date, cs.SHEID, cs.week_id, cs.teacher_mid, '+
|
||
' cs.subTeacher, cs.mainGid, cs.CID,' +
|
||
' (COALESCE(co.order_num,200) + IF(cntGid = 1, 0, 100)) ord' +
|
||
' FROM tmp_report_stat_courses cs' +
|
||
' JOIN courses c ON c.CID = cs.CID' +
|
||
' LEFT JOIN tmp_courses_2 t2 ON t2.CID = cs.CID' +
|
||
' LEFT JOIN tmp_courses_order co ON UPPER(co.name) LIKE (UPPER(c.Title)) OR UPPER(co.name) LIKE (UPPER(cs.title));');
|
||
fScript.Add( ' DROP TABLE IF EXISTS tmp_report_stat_courses_d; '+
|
||
' CREATE TEMPORARY TABLE tmp_report_stat_courses_d AS '+
|
||
' SELECT '+
|
||
' xp_part, '+
|
||
' MIN(SHEID) SHEID, MAX(SHEID) SHEID_MAX,'+
|
||
' title, '+
|
||
' CID, '+
|
||
' array_agg(teacher_mid) teacher_mid, '+
|
||
' week_id, '+
|
||
' string_agg(subTeacher, '','') subTeacher, '+
|
||
' date, '+
|
||
' array_agg(mainGid) mainGid, '+
|
||
' array_agg(SHEID) multySHEID '+
|
||
' FROM tmp_report_stat_courses tmp '+
|
||
' GROUP BY xp_part, title, cid, week_id, date; ');
|
||
//Создать список занятий с датами по страницам
|
||
fScript.Add(
|
||
|
||
' DROP TABLE IF EXISTS tmp_report_journal_dates; '+
|
||
' CREATE TEMPORARY TABLE tmp_report_journal_dates AS '+
|
||
' SELECT @max_h := CASE t.cntGid WHEN 1 THEN '+OneGroup+' WHEN 2 THEN '+TwoGroup+' WHEN 3 THEN '+ThreeGroup+' WHEN 4 THEN '+FourGroup+' ELSE '+OneGroup+' END AS MaxH, '+
|
||
' @hw_count := (SELECT COUNT(*) FROM nnz_schedule sh JOIN nnz_weeks w ON (sh.sh_var_id = w.sh_var_id) WHERE '+
|
||
' (sh.gid = cs.mainGid OR sh.gid in (SELECT gid FROM groupname WHERE owner_gid = '+inttostr(gid)+')) AND sh.cid = cs.cid '+
|
||
' AND cs.xp_part = sh.period '+
|
||
' AND w.wstart_date + (sh.day_of_week - 1 -WeekDay(w.wstart_date)) * interval ''1 day'' = cs.date '+
|
||
' ) as HwCount, '+
|
||
' CASE WHEN (NOT (@cid_t = cs.CID)) THEN @page_t:=1 '+
|
||
' ELSE (CASE WHEN ((@hw_i >= @max_h) AND (not(cs.date = @last_date) OR (t.cntGid = 1))) THEN @page_t:=@page_t+1 ELSE @page_t END) END AS PageNum, '+
|
||
' CASE WHEN ((@cid_t=cs.CID) AND ((@hw_i < @max_h) OR ((cs.date = @last_date) AND (t.cntGid <> 1)))) THEN @hw_i:=@hw_i+1 ELSE @hw_i:=0 END hw_num, '+
|
||
' CASE WHEN (@hw_i = 0) THEN @i:=1 ELSE @i:=@i+1 END num, '+
|
||
' @cid_t:=cs.CID as CID, '+
|
||
' @last_date := cs.date as m_date, '+
|
||
' cs.date, '+
|
||
' cs.SHEID,cs.SHEID_MAX, cs.week_id, cs.teacher_mid, cs.subTeacher, cs.mainGid, cs.multySHEID '+
|
||
' FROM (SELECT * FROM tmp_report_stat_courses_d ORDER BY cid,date) cs '+
|
||
' JOIN tmp_courses_2 t ON t.cid = cs.cid '+
|
||
//' JOIN nnz_schedule sh ON sh.sheid = cs.sheid AND sh.st_state_id <> 2 '+
|
||
' ORDER BY cid, date; ');
|
||
RunScript('Список дисциплин');
|
||
end;
|
||
|
||
procedure TSQLScripts48.CreateMainTemplTable;
|
||
var
|
||
SQL: string;
|
||
begin
|
||
//Сформировать основной шаблон
|
||
SQL := ' CREATE INDEX index_cid ON tmp_report_journal_dates(cid); '+
|
||
' DROP TABLE IF EXISTS tmp_report_journal_main_templ_t; '+
|
||
' CREATE TEMPORARY TABLE tmp_report_journal_main_templ_t AS '+
|
||
' SELECT m.p_num, m.p_grade, d.cid, d.PageNum '+
|
||
' FROM tmp_report_empty_grades m '+
|
||
' LEFT JOIN (SELECT DISTINCT CID, PageNum FROM tmp_report_journal_dates) d ON 1=1; ';
|
||
fScript.Add(SQL);
|
||
SQL := ' DROP TABLE IF EXISTS tmp_report_journal_main_templ; '+
|
||
' CREATE TEMPORARY TABLE tmp_report_journal_main_templ AS '+
|
||
' SELECT mt.p_num, mt.p_grade, mt.cid, mt.PageNum, '+
|
||
' d.date, d.SHEID,d.SHEID_MAX, d.week_id, d.teacher_mid, d.subTeacher, d.mainGid, d.multySHEID '+
|
||
' FROM tmp_report_journal_main_templ_t mt '+
|
||
' LEFT JOIN tmp_report_journal_dates d ON d.cid = mt.cid AND d.PageNum = mt.PageNum AND d.num = mt.p_grade; ';
|
||
fScript.Add(SQL);
|
||
RunScript('Формирование сетки');
|
||
end;
|
||
|
||
procedure TSQLScripts48.CreateMissingTable;
|
||
var
|
||
SQL: string;
|
||
begin
|
||
//Создадим таблицу с пропусками занятий
|
||
SQL := ' DROP TABLE IF EXISTS tmp_report_page_missing_peoples; '+
|
||
' CREATE TEMPORARY TABLE tmp_report_page_missing_peoples AS '+
|
||
' SELECT row_number() over (order by fio) as num, p.mid '+
|
||
' FROM tmp_report_main_peoples p; ';
|
||
fScript.Add(SQL);
|
||
SQL := ' DROP TABLE IF EXISTS tmp_report_page_missing_peoples_dates; '+
|
||
' CREATE TEMPORARY TABLE tmp_report_page_missing_peoples_dates AS '+
|
||
' SELECT DISTINCT p.mid, p.date, COUNT(p.grade) ConMissing, SUM(if(sgv.isdisease <> 0,1,0)) ConDisease, mp.num '+
|
||
' FROM tmp_report_journal_main_templ_with_peoples p '+
|
||
' JOIN tmp_report_page_missing_peoples mp ON mp.mid = p.mid '+
|
||
' LEFT JOIN schedule_grades_values sgv ON xp_fget_not_grade(grade) LIKE CONCAT(''%'',TRIM(sgv.Value),''%'') '+// TRIM(sgv.Value) = Trim(grade) '+
|
||
' WHERE xp_fget_not_grade(grade) LIKE CONCAT(''%'',getConst(''n''),''%'') OR sgv.isdisease <> 0 '+
|
||
' GROUP BY p.mid, p.date, mp.num '+
|
||
' ORDER BY p.date; ';
|
||
fScript.Add(SQL);
|
||
SQL := ' DROP TABLE IF EXISTS tmp_report_page_peoples_dates_courses; '+
|
||
' CREATE TEMPORARY TABLE tmp_report_page_peoples_dates_courses AS '+
|
||
' SELECT DISTINCT p.mid, p.date, COUNT(*) ConMissing, mp.num '+
|
||
' FROM tmp_report_journal_main_templ_with_peoples p '+
|
||
' JOIN tmp_report_page_missing_peoples mp ON mp.mid = p.mid '+
|
||
' LEFT JOIN schedule_grades_values sgv ON TRIM(sgv.Value) = Trim(grade) '+
|
||
' GROUP BY p.mid, p.date, mp.num '+
|
||
' ORDER BY p.date; ';
|
||
fScript.Add(SQL);
|
||
SQL := ' DROP TABLE IF EXISTS tmp_report_journal_missing_dates; '+
|
||
' CREATE TEMPORARY TABLE tmp_report_journal_missing_dates AS '+
|
||
' SELECT DISTINCT date '+
|
||
' FROM tmp_report_journal_main_templ_with_peoples '+
|
||
' LEFT JOIN schedule_grades_values sgv ON xp_fget_not_grade(grade) LIKE CONCAT(''%'',TRIM(sgv.Value),''%'') '+// TRIM(sgv.Value) = Trim(grade) '+
|
||
' WHERE xp_fget_not_grade(grade) LIKE CONCAT(''%'',getConst(''n''),''%'') OR sgv.isdisease <> 0 '+
|
||
' ORDER BY date; ';
|
||
fScript.Add(SQL);
|
||
SQL := ' SET @i := 0;'+
|
||
' SET @page := 1;'+
|
||
' DROP TABLE IF EXISTS tmp_report_journal_missing_t1; '+
|
||
' CREATE TEMPORARY TABLE tmp_report_journal_missing_t1 AS '+
|
||
' SELECT DISTINCT IF(@i = 63, @page := @page + 1, @page) page, '+
|
||
' IF(@i = 63, @i := 1, @i := @i + 1 ) num, date '+
|
||
' FROM tmp_report_journal_missing_dates '+
|
||
' ORDER BY date; ';
|
||
fScript.Add(SQL);
|
||
SQL := ' DROP TABLE IF EXISTS tmp_report_journal_missing_t2; '+
|
||
' CREATE TEMPORARY TABLE tmp_report_journal_missing_t2 AS '+
|
||
' SELECT DISTINCT t.e_num, m.page, m.date FROM tmp_report_empty_people t '+
|
||
' LEFT JOIN tmp_report_journal_missing_t1 m ON 1=1; ';
|
||
fScript.Add(SQL);
|
||
SQL := ' DROP TABLE IF EXISTS tmp_report_journal_missing; '+
|
||
' CREATE TEMPORARY TABLE tmp_report_journal_missing AS '+
|
||
' SELECT t2.e_num ordNum, t2.page ordPage, t2.date, p.mid, pd.ConMissing, pd.ConDisease '+
|
||
' FROM tmp_report_journal_missing_t2 t2 '+
|
||
' LEFT JOIN tmp_report_page_missing_peoples p ON p.num = t2.e_num '+
|
||
' LEFT JOIN tmp_report_page_missing_peoples_dates pd ON pd.num = t2.e_num AND pd.date = t2.date '+
|
||
' ORDER BY t2.date; ';
|
||
fScript.Add(SQL);
|
||
RunScript('Пропуски занятий');
|
||
SQL := ' SELECT COUNT(DISTINCT page) FROM tmp_report_journal_missing_t1; ';
|
||
MissingListenersPageCount := Data.QueryIntValue(SQL);
|
||
|
||
if (Data.QueryValue('SELECT COUNT(date) FROM tmp_report_journal_missing') = '0') then
|
||
begin
|
||
SQL := ' UPDATE tmp_report_journal_missing '+
|
||
' SET date = ''1900-01-01'' , ordPage = 1; ';
|
||
//' VALUES (0,''1900-01-01'',0,0)';
|
||
fScript.Add(SQL);
|
||
{SQL := ' UPDATE tmp_report_journal_missing '+
|
||
' SET ordPage = 1';
|
||
//' VALUES (0,''1900-01-01'',0,0)';
|
||
Data.ExecuteSQL(SQL); }
|
||
end;
|
||
|
||
|
||
end;
|
||
|
||
procedure TSQLScripts48.CreatePeopleInf;
|
||
var
|
||
SQL: string;
|
||
begin
|
||
//Добавить информацию об учениках
|
||
SQL := ' SET @i := 0; SET @page := 1;'+
|
||
' DROP TABLE IF EXISTS tmp_report_page_peoples_t; '+
|
||
' CREATE TEMPORARY TABLE tmp_report_page_peoples_t AS '+
|
||
' SELECT DISTINCT '+
|
||
' IF(@i = 22, @page := 2, @page) page, '+
|
||
' IF(@i = 22, @i := 1, @i := @i + 1 ) num, '+
|
||
' CONCAT_WS(''-'',xp.Liter,xp.Number) personalNum, '+
|
||
' p.mid, fio, xp.Sex, xp.Birthday, fam.FamilyFIO,fam.FamilyWork, '+
|
||
' replace(CONCAT_WS('', '',xp.RegistrationAddress, COALESCE(xp.`Phone home`,xp.`Phone cell`)),''\r\n'','''') HomeAdr '+
|
||
' FROM tmp_report_journal_peoples_pages p '+
|
||
' LEFT JOIN xp_Personal_File xp ON xp.mid = p.mid '+
|
||
' LEFT JOIN ( SELECT mid, '+
|
||
' STRING_AGG(DISTINCT xp_format_fio(LastName,FirstName,Patronymic,0) , '',\r\n'') FamilyFIO, '+
|
||
' STRING_AGG(DISTINCT CONCAT_WS('', '',NULLIF(TRIM(WorkPlace),''''),Speciality,WorkPhone) , '',\r\n'') FamilyWork '+
|
||
' FROM xp_personal_file_family '+
|
||
' WHERE LegalRepresentative = -1 '+
|
||
' GROUP BY mid '+
|
||
' ) fam ON fam.mid = p.mid '+
|
||
' ORDER BY fio; ';
|
||
fScript.Add(SQL);
|
||
{SQL := ' DROP TABLE IF EXISTS tmp_report_empty_21; '+
|
||
' CREATE TEMPORARY TABLE tmp_report_empty_21 '+
|
||
' SELECT e_num FROM tmp_report_empty_50 LIMIT 21; ';}
|
||
|
||
SQL := ' DROP TABLE IF EXISTS tmp_report_page_peoples_t2; '+
|
||
' CREATE TEMPORARY TABLE tmp_report_page_peoples_t2 AS '+
|
||
' SELECT DISTINCT empt.e_num, p.page '+
|
||
' FROM tmp_report_empty_people_half empt '+
|
||
' LEFT JOIN tmp_report_page_peoples_t p ON 1=1; ';
|
||
fScript.Add(SQL);
|
||
SQL := ' DROP TABLE IF EXISTS tmp_report_page_peoples; '+
|
||
' CREATE TEMPORARY TABLE tmp_report_page_peoples AS '+
|
||
' SELECT t1.e_num ordNum, t1.page ordPage, t.*'+
|
||
' FROM tmp_report_page_peoples_t2 t1 '+
|
||
' LEFT JOIN tmp_report_page_peoples_t t ON t.num = t1.e_num AND t.page = t1.page; ';
|
||
fScript.Add(SQL);
|
||
RunScript('Список учащихся');
|
||
SQL := ' SELECT COUNT(DISTINCT page) FROM tmp_report_page_peoples_t; ';
|
||
PeopleInfPageCount := Data.QueryIntValue(SQL);
|
||
end;
|
||
|
||
procedure TSQLScripts48.CreatePeoplesList;
|
||
var
|
||
SQL: string;
|
||
begin
|
||
//Список всех MID
|
||
SQL := ' DROP TABLE IF EXISTS tmp_report_main_peoples; '+
|
||
' CREATE TEMPORARY TABLE tmp_report_main_peoples AS '+
|
||
' SELECT DISTINCT mid, xp_f_get_mid_fio(mid,0) as fio FROM tmp_report_journal_peoples_pages '+
|
||
' ORDER BY xp_f_get_mid_fio(mid,0);';
|
||
fScript.Add(SQL);
|
||
end;
|
||
|
||
procedure TSQLScripts48.CreatePeoplesOnPages;
|
||
var
|
||
ds: TDataSet;
|
||
SQL: string;
|
||
begin
|
||
//Сформировать учеников по периодам на каждую страницу
|
||
SQL := ' DROP TABLE IF EXISTS tmp_report_journal_peoples_pages; '+
|
||
' CREATE TEMPORARY TABLE tmp_report_journal_peoples_pages '+
|
||
' (mid int, fio varchar(255), cid int, PageNum int, OrderNum int, subGid int); ';
|
||
fScript.Add(SQL);
|
||
RunScript('Заполнение страниц');
|
||
SQL := ' SELECT t2.cid, t2.PageNum, MIN(t2.date) stDate, MAX(t2.date) endDate '+
|
||
' FROM tmp_report_journal_main_templ t2 '+
|
||
' GROUP BY cid, PageNum ORDER BY cid, PageNum ';
|
||
with Data.GetData(SQL) do
|
||
try
|
||
while not eof do
|
||
begin
|
||
SQL := Format(' CALL xp_fill_groupuser_period(%s, %s, %s); ',
|
||
[TNIDBDM.DateAsSQL(FieldByName('stDate').AsVariant),
|
||
TNIDBDM.DateAsSQL(FieldByName('endDate').AsVariant),
|
||
gid]);
|
||
fScript.Add(SQL);
|
||
{
|
||
SQL := Format(
|
||
|
||
' SET @i := 0; SET @gid_t := 0; '+
|
||
' INSERT INTO tmp_report_journal_peoples_pages '+
|
||
' SELECT DISTINCT gp.mid, xp_f_get_mid_fio(gp.MID,0) AS fio, '+
|
||
' %s as cid, %s as PageNum, IF(gp.gid = @gid, @i := @i + 1, IF(@i = 0, @i := 1, @i := 22)) as OrderNum, '+
|
||
' (@gid := gp.gid) as subGid '+
|
||
' FROM groupuser_period gp '+
|
||
//' WHERE CASE WHEN (SELECT )(cid = '+ FieldByName('cid').asString + ') ' +
|
||
' WHERE CASE WHEN (SELECT COUNT(*) FROM groupuser_period_t WHERE cid = '+FieldByName('cid').asString+') = 0 '+
|
||
' THEN cid = -1 ELSE cid = '+FieldByName('cid').asString+' END '+
|
||
' ORDER BY gp.gid; ',
|
||
[FieldByName('cid').AsString,
|
||
FieldByName('PageNum').AsString]);
|
||
Data.ExecuteSQL(SQL);
|
||
}
|
||
SQL := Format(
|
||
' DROP TABLE IF EXISTS groupuser_period_t; '+
|
||
' CREATE TEMPORARY TABLE groupuser_period_t AS '+
|
||
' SELECT * FROM groupuser_period; '+
|
||
' DROP TABLE IF EXISTS groupuser_period_t2; '+
|
||
' CREATE TEMPORARY TABLE groupuser_period_t2 AS '+
|
||
' SELECT DISTINCT gp.mid, xp_f_get_mid_fio(gp.MID,0) AS fio, '+
|
||
' %s as cid, %s as PageNum, gp.gid '+
|
||
' FROM groupuser_period gp '+
|
||
' WHERE CASE WHEN (SELECT COUNT(*) FROM groupuser_period_t WHERE cid = '+FieldByName('cid').asString+') = 0 '+
|
||
' THEN cid = -1 ELSE cid = '+FieldByName('cid').asString+' END '+
|
||
' ORDER BY gp.gid; ',
|
||
[FieldByName('cid').AsString,
|
||
FieldByName('PageNum').AsString]);
|
||
fScript.Add(SQL);
|
||
SQL := ' SET @i := 0; SET @gid_t := 0; '+
|
||
' SET @def_count = 0; '+
|
||
' SET @gid_count = '+
|
||
' (SELECT CASE (SELECT COUNT(DISTINCT gid) FROM groupuser_period_t2) ' +
|
||
' WHEN 2 THEN 22 '+
|
||
' WHEN 3 THEN 15 '+
|
||
' WHEN 4 THEN 10 '+
|
||
' WHEN 5 THEN 8 '+
|
||
' ELSE 1 END); ' +
|
||
' INSERT INTO tmp_report_journal_peoples_pages '+
|
||
' SELECT mid, fio, cid, PageNum, '+
|
||
' IF(gid = @gid_t or (@gid_count = 1 AND @i > 0), @i := @i + 1, IF(@i = 0, @i := 1, @i := @def_count := @def_count + @gid_count)) as OrderNum, '+
|
||
' (@gid_t := gid) as subGid '+
|
||
' FROM groupuser_period_t2 '+
|
||
' ORDER BY subGid, fio; ';
|
||
fScript.Add(SQL);
|
||
Next;
|
||
end;
|
||
Finally
|
||
Free;
|
||
end;
|
||
runscript('Заполнение страниц');
|
||
end;
|
||
|
||
procedure TSQLScripts48.CreatePerfomanceTable;
|
||
var
|
||
SQL: string;
|
||
tmpstr: string;
|
||
i: integer;
|
||
begin
|
||
//Заполняем сводную ведомость успеваемости обучающихся по периодам
|
||
//-- Список учеников
|
||
SQL := ' SET @i := 0; SET @page := 0; '+
|
||
' DROP TABLE IF EXISTS tmp_report_journal_perfomance_peoples_t; '+
|
||
' CREATE TEMPORARY TABLE tmp_report_journal_perfomance_peoples_t AS '+
|
||
' SELECT DISTINCT p.mid, CONCAT_WS('' '',p_t.LastName,p_t.FirstName,p_t.Patronymic) as fio '+ // p.fio '+
|
||
' FROM tmp_report_journal_peoples_pages p '+
|
||
' JOIN people p_t ON p_t.mid = p.mid '+
|
||
' ORDER BY p.fio; ';
|
||
fScript.Add(SQL);
|
||
|
||
SQL :=
|
||
//-- Список периодов
|
||
' DROP TABLE IF EXISTS tmp_report_journal_perfomance_templates; '+
|
||
' CREATE TEMPORARY TABLE tmp_report_journal_perfomance_templates AS '+
|
||
' SELECT t.title, t.trmid, 1 AS TermOrder, t.BegDate, t.trmtid '+
|
||
' FROM tmp_report_journal_terms_periods t ORDER BY t.BegDate; ';
|
||
fScript.Add(SQL);
|
||
//begin for
|
||
for i := 1 to 3 do
|
||
begin
|
||
case i of
|
||
1 : tmpstr := 'Год. оценка';
|
||
2 : tmpstr := 'Экз. оценка';
|
||
3 : tmpstr := 'Итог. оценка';
|
||
end;
|
||
if Data.QueryValue(
|
||
'SELECT IF(FIND_IN_SET('+inttostr(i)+',sy.year_grade_types) <> 0,1,0) FROM school_year sy '+
|
||
'WHERE sy.xp_key = ' + inttostr(year)) = '1' then
|
||
begin
|
||
SQL :=
|
||
' INSERT INTO tmp_report_journal_perfomance_templates VALUES '+
|
||
' ('+TNIDBDM.StringAsSQL(tmpstr)+',0,'+IntToStr(i + 1)+',NULL,'+IntToStr(i)+'); ';
|
||
//' (''Экзам. оценка'',0,3,NULL,2), (''Итоговая оценка'',0,4,NULL,3); '+
|
||
fScript.Add(SQL);
|
||
end;
|
||
end;
|
||
//end for
|
||
SQL :=
|
||
//' SET @colP = (SELECT TRUNCATE((42 / (SELECT COUNT(title) + 3 FROM tmp_report_journal_terms_periods)),0) a);'+
|
||
' SET @colP = (SELECT TRUNCATE((42 / (SELECT COUNT(*) FROM tmp_report_journal_perfomance_templates)),0) a);'+
|
||
|
||
' DROP TABLE IF EXISTS tmp_report_journal_perfomance_peoples; '+
|
||
' CREATE TEMPORARY TABLE tmp_report_journal_perfomance_peoples AS '+
|
||
//' SELECT IF(@i = @colP, @page := @page + 1, @page) page, '+
|
||
' SELECT IF(@i mod @colP = 0, @page := @page + 1, @page) page, '+
|
||
//' IF(@i = @colP, @i := 1, @i := @i + 1 ) OrderNum, '+
|
||
' @i := @i + 1 OrderNum, '+
|
||
' t.mid, t.fio '+
|
||
' FROM tmp_report_journal_perfomance_peoples_t t '+
|
||
' ORDER BY t.fio; ';
|
||
fScript.Add(SQL);
|
||
//-- Список курсов
|
||
SQL :=
|
||
' SET @page := 1; SET @i := 0;'+
|
||
' DROP TABLE IF EXISTS tmp_report_journal_perfomance_courses_t; '+
|
||
' CREATE TEMPORARY TABLE tmp_report_journal_perfomance_courses_t AS '+
|
||
' SELECT DISTINCT c.cid, c.title '+
|
||
' FROM tmp_report_stat_courses c '+
|
||
' WHERE c.SHEID < 10000000 '+
|
||
' ORDER BY c.title; ';
|
||
fScript.Add(SQL);
|
||
SQL :=
|
||
' DROP TABLE IF EXISTS tmp_report_journal_perfomance_courses; '+
|
||
' CREATE TEMPORARY TABLE tmp_report_journal_perfomance_courses AS '+
|
||
' SELECT DISTINCT IF(@i = 18, @page := @page + 1, @page) page, '+
|
||
' IF(@i = 18, @i := 1, @i := @i + 1 ) num, '+
|
||
' t.cid, t.title '+
|
||
' FROM tmp_report_journal_perfomance_courses_t t; ';
|
||
fScript.Add(SQL);
|
||
SQL :=
|
||
//-- Все ученики за все периоды по всем курсам
|
||
' DROP TABLE IF EXISTS tmp_report_journal_perfomance_main; '+
|
||
' CREATE TEMPORARY TABLE tmp_report_journal_perfomance_main AS '+
|
||
' SELECT p.mid, p.fio, p.OrderNum, t.trmid, t.title TermName, '+
|
||
' t.TermOrder, t.trmtid, t.BegDate, c.cid, c.title CourseName, '+
|
||
' c.page, CAST(0 as CHAR(50)) AS Grade, '+
|
||
' CASE WHEN trmtid = 7 THEN 1 '+
|
||
' WHEN trmtid = 8 THEN 3 '+
|
||
' WHEN trmtid = 9 THEN 2 '+
|
||
' END AS OrderEnd, '+
|
||
' 0 as councilDecisionMode, '+
|
||
' 0 as toYear, '+
|
||
' CAST('''' AS char(255)) toText, '+
|
||
' CAST('''' AS char(255)) protocolNumber, CAST('''' AS char(255)) prikazNumber, '+
|
||
' CAST(NULL AS date) protocolDate, CAST(NULL AS date) prikazDate, '+
|
||
' 0 as midCount '+
|
||
' FROM tmp_report_journal_perfomance_peoples p '+
|
||
' LEFT JOIN tmp_report_journal_perfomance_templates t ON 1=1 '+
|
||
' LEFT JOIN tmp_report_journal_perfomance_courses c ON 1=1; ';
|
||
fScript.Add(SQL);
|
||
SQL :=
|
||
' UPDATE tmp_report_journal_perfomance_main m '+
|
||
' JOIN term_grades tg ON tg.MID = m.MID AND tg.CID = m.CID AND tg.trmid = m.trmid AND tg.trmtid = m.trmtid '+
|
||
' SET m.grade = COALESCE(TRIM(tg.grade),0) '+ // LMS-6299/3 Выводим все проставленные оценки
|
||
' /* WHERE '+
|
||
' NOT EXISTS( '+
|
||
' SELECT 1 '+
|
||
' FROM groupuser_transfer gt '+
|
||
' JOIN terms t ON to_date(t.term_begin, ''dd.mm.yyyy'') >= gt.xp_date '+
|
||
' JOIN school_year sy ON gt.xp_date BETWEEN sy.BegDate AND sy.EndDate AND sy.xp_key = '+ inttostr(year) +
|
||
' WHERE gt.mid = m.MID '+
|
||
' AND t.trmid = m.trmid '+
|
||
' AND gt.group_from = '+inttostr(gid)+') */; ';
|
||
{
|
||
' UPDATE tmp_report_journal_perfomance_main m '+
|
||
' JOIN term_grades tg ON tg.MID = m.MID AND tg.CID = m.CID AND tg.trmid = m.trmid AND tg.trmtid = 7 '+
|
||
' SET m.grade = TRIM(tg.grade) '+
|
||
//' WHERE m.grade = 0; '+
|
||
}
|
||
fScript.Add(SQL);
|
||
SQL :=
|
||
' UPDATE tmp_report_journal_perfomance_main m '+
|
||
' JOIN nnz_year_grades y ON y.CID = m.cid AND y.MID = m.MID AND y.s_year_id = '+inttostr(year)+' AND y.y_grtype_id = m.trmtid '+
|
||
' SET m.grade = TRIM(y.grade) '+
|
||
' WHERE not m.TermOrder = 1; ';
|
||
{
|
||
' UPDATE tmp_report_journal_perfomance_main m '+
|
||
' JOIN nnz_year_grades y ON y.CID = m.cid AND y.MID = m.MID AND y.s_year_id = '+year+' AND y.y_grtype_id = 2 '+
|
||
' SET m.grade = TRIM(y.grade) '+
|
||
' WHERE m.TermOrder = 2; '+
|
||
|
||
' UPDATE tmp_report_journal_perfomance_main m '+
|
||
' JOIN nnz_year_grades y ON y.CID = m.cid AND y.MID = m.MID AND y.s_year_id = '+year+' AND y.y_grtype_id = 3 '+
|
||
' SET m.grade = TRIM(y.grade) '+
|
||
' WHERE m.TermOrder = 3; ';
|
||
}
|
||
fScript.Add(SQL);
|
||
//-- Решение педагогического совета по формуле LMS-5637
|
||
SQL := ' SET @current_group = '+ inttostr(gid) + ';'+
|
||
' DROP TABLE IF EXISTS tmp_journal_council_decision; '+
|
||
' CREATE TEMPORARY TABLE tmp_journal_council_decision AS '+
|
||
' SELECT '+
|
||
' mid, stats.toYear, '+
|
||
' stats.group_to_text, '+
|
||
' IF((stats.fromYear <> 0 AND stats.toYear <> 0) or (stats.xp_status = 1),1,NULL) transfer_to_next_or_other_group, '+
|
||
' IF(stats.fromYear <> 0 AND stats.toYear <> 0 AND isConditionally <> 0, 2,NULL) AS transfer_conditionally, '+
|
||
' IF(group_from <> @current_group AND group_to = @current_group AND fromYear = toYear, 3, NULL) to_current_group_frome_one_year, '+
|
||
' IF(group_from = @current_group AND group_to <> @current_group AND fromYear = toYear, 4, NULL) retraining, '+
|
||
' IF(fromYear = 9 AND toYear = 10, 5, NULL) from_9_to_10, '+
|
||
' IF(fromYear = 11 AND toYear = 0, 6, NULL) from_11_to_end, '+
|
||
' IF(xp_status = 11,7,NULL) AS certificated_end, '+
|
||
' IF((stats.fromYear <> 0 AND stats.toYear = 0 AND stats.xp_status in(5,6,8)),8,NULL) transfer_deduction, '+
|
||
' protocol_number, '+
|
||
' protocol_date, '+
|
||
' prikaz_number, '+
|
||
' prikaz_date '+
|
||
' FROM '+
|
||
' ( '+
|
||
' SELECT ggt.mid, '+
|
||
' COALESCE(xp_fget_group_year(ggt.group_from,sy.xp_key),0) fromYear, '+
|
||
' COALESCE(xp_fget_group_year(ggt.group_to,sy.xp_key),0) toYear, '+
|
||
' ggt.group_from, '+
|
||
' ggt.group_to, '+
|
||
' ggt.group_to_text, '+
|
||
' ggt.xp_status, '+
|
||
' ggt.isConditionally, '+
|
||
' ggt.protocol_number, '+
|
||
' ggt.protocol_date, '+
|
||
' ggt.Prikaz prikaz_number, '+
|
||
' ggt.xp_date prikaz_date '+
|
||
' FROM groupuser_transfer ggt '+
|
||
' JOIN '+
|
||
' ( '+
|
||
' SELECT '+
|
||
' MAX(gt.xp_key) xp_key, gt.mid '+
|
||
'FROM school_year sy '+
|
||
' JOIN groupuser_transfer gt ON (gt.group_from = @current_group OR gt.group_to = @current_group OR gt.xp_status = 1) '+
|
||
// переводы от началп первого уч. периода года до первого уч. периода следующего года
|
||
' and gt.xp_date > coalesce((select min(to_date(term_begin,''dd.mm.yyyy'')) from terms t where t.year=sy.xp_key), sy.begdate) '+
|
||
' and gt.xp_date < coalesce( (select min(to_date(term_begin,''dd.mm.yyyy'')) from terms t join school_year y on y.xp_key=t.year where y.begdate>sy.enddate), sy.enddate) '+
|
||
'WHERE sy.xp_key= '+ inttostr(year) +
|
||
' GROUP BY gt.mid '+
|
||
' ) addGt ON addGt.xp_key = ggt.xp_key '+
|
||
' JOIN school_year sy ON ggt.xp_date BETWEEN sy.BegDate AND sy.EndDate '+
|
||
' ) stats; ';
|
||
fScript.Add(SQL);
|
||
SQL :=
|
||
'UPDATE tmp_report_journal_perfomance_main m '+
|
||
' JOIN tmp_journal_council_decision t ON m.mid = t.mid '+
|
||
' SET m.councilDecisionMode = COALESCE(t.transfer_deduction, '+
|
||
' t.transfer_to_next_or_other_group, '+
|
||
' t.transfer_conditionally, '+
|
||
' t.to_current_group_frome_one_year, '+
|
||
' t.retraining, '+
|
||
' t.from_9_to_10, '+
|
||
' t.from_11_to_end, '+
|
||
' t.certificated_end, 0), '+
|
||
' m.toYear = t.toYear, '+
|
||
' m.toText = t.group_to_text, '+
|
||
' m.protocolNumber = t.protocol_number, '+
|
||
' m.protocolDate = t.protocol_date, '+
|
||
' m.prikazNumber = t.prikaz_number, '+
|
||
' m.prikazDate = t.prikaz_date; ';
|
||
fScript.Add(SQL);
|
||
SQL := {' DROP TABLE IF EXISTS tmp_report_journal_perfomance_main_t; '+
|
||
' CREATE TEMPORARY TABLE tmp_report_journal_perfomance_main_t '+
|
||
' SELECT COUNT(mid) cnt, mid FROM tmp_report_journal_perfomance_main '+
|
||
' GROUP BY mid; '+ }
|
||
|
||
' UPDATE tmp_report_journal_perfomance_main m '+
|
||
//' JOIN tmp_report_journal_perfomance_main_t t ON m.mid = t.mid '+
|
||
' SET m.midCount = (SELECT COUNT(*) FROM tmp_report_journal_perfomance_templates); ';
|
||
fScript.Add(SQL);
|
||
RunScript('Сводная таблица');
|
||
//SQL := ' SELECT COUNT(DISTINCT page) FROM tmp_report_journal_perfomance_peoples; ';
|
||
SQL := ' SELECT COUNT(DISTINCT page) * (SELECT MAX(page) FROM tmp_report_journal_perfomance_main) FROM tmp_report_journal_perfomance_peoples; ';
|
||
PerfomancePageCount := Data.QueryIntValue(SQL);
|
||
end;
|
||
|
||
procedure TSQLScripts48.CreateTemplGrades;
|
||
var
|
||
SQL: string;
|
||
i: integer;
|
||
begin
|
||
//Соединяем учеников и добавляем оценки
|
||
SQL := ' CREATE INDEX index_cid_pages ON tmp_report_journal_peoples_pages(cid); ';
|
||
fScript.Add(SQL);
|
||
SQL :=
|
||
' DROP TABLE IF EXISTS tmp_report_journal_main_templ_with_peoples; '+
|
||
' CREATE TEMPORARY TABLE tmp_report_journal_main_templ_with_peoples AS '+
|
||
' SELECT t.*, p.mid, p.fio, CAST('''' AS CHAR(20)) grade, p.subGid, CAST('''' AS char(100)) as deduction '+
|
||
' FROM tmp_report_journal_main_templ t '+
|
||
' LEFT JOIN tmp_report_journal_peoples_pages p ON p.cid = t.cid AND p.PageNum = t.PageNum AND p.OrderNum = t.p_num; ';
|
||
// ' LEFT JOIN nnz_sh_grades nsg ON nsg.student_mid = p.mid AND nsg.week_id = t.week_id AND FIND_IN_SET(nsg.SHEID ,t.multySHEID) <> 0 ';// AND t.multySHEID LIKE CONCAT(''%'',nsg.SHEID,''%''); ';
|
||
{' LEFT JOIN nnz_weeks w ON w.week_id=t.week_id '+
|
||
' LEFT JOIN nnz_schedule sh ON sh.sh_var_id=w.sh_var_id AND sh.cid=t.cid AND sh.sheid between t.sheid and t.sheid_max AND t.multySHEID LIKE CONCAT(''%'',sh.SHEID,''%'') '+
|
||
' LEFT JOIN nnz_sh_grades nsg ON nsg.week_id = w.week_id AND nsg.sheid=sh.sheid AND nsg.student_mid=p.mid; ';}
|
||
fScript.Add(SQL);
|
||
SQL := ' CREATE INDEX index_main_tmpl_week_id ON tmp_report_journal_main_templ_with_peoples(mid,week_id); ';
|
||
fScript.Add(SQL);
|
||
SQL := ' UPDATE tmp_report_journal_main_templ_with_peoples p '+
|
||
' JOIN nnz_sh_grades nsg ON nsg.student_mid = p.mid AND nsg.week_id = p.week_id AND FIND_IN_SET(nsg.SHEID ,p.multySHEID) <> 0 '+
|
||
' SET p.grade = nsg.grade ; ';
|
||
|
||
fScript.Add(SQL);
|
||
SQL := ' UPDATE tmp_report_journal_main_templ_with_peoples p '+
|
||
' JOIN term_grades tg ON (tg.trmid + 10000000) = p.SHEID '+
|
||
' AND tg.mid = p.mid AND tg.trmtid = 7 '+
|
||
' AND tg.cid = p.cid '+
|
||
' SET p.grade = tg.grade; ';
|
||
fScript.Add(SQL);
|
||
|
||
SQL := '';
|
||
for I := 1 to 3 do
|
||
SQL := SQL + ' UPDATE tmp_report_journal_main_templ_with_peoples p '+
|
||
' JOIN nnz_year_grades yg ON (/*yg.s_year_id +*/ 2000000'+IntToStr(i)+') = p.SHEID '+
|
||
' AND yg.mid = p.mid AND yg.y_grtype_id = ' +IntToStr(i)+
|
||
' AND yg.cid = p.cid '+
|
||
' AND yg.s_year_id = '+inttostr(year) +
|
||
' SET p.grade = yg.grade; ';
|
||
fScript.Add(SQL);
|
||
|
||
//Отчисление
|
||
SQL := ' DROP TABLE IF EXISTS tmp_dedutions;' +
|
||
' CREATE TEMPORARY TABLE tmp_dedutions AS ' +
|
||
' SELECT gt.Prikaz, gt.xp_date, p.mid, p.cid, p.PageNum' +
|
||
' FROM groupuser_transfer gt' +
|
||
' JOIN (' +
|
||
' SELECT MIN(t2.date) stDate, MAX(t2.date) endDate, t2.mid, t2.cid, t2.PageNum' +
|
||
' FROM tmp_report_journal_main_templ_with_peoples t2' +
|
||
' GROUP BY cid, PageNum, mid' +
|
||
' ) p ON p.mid = gt.mid ' +
|
||
' WHERE gt.xp_status = 6 ' +
|
||
' AND gt.cid = -1' +
|
||
' AND gt.xp_date BETWEEN p.stDate AND p.endDate;';
|
||
//Data.ExecuteSQL(SQL);
|
||
fScript.Add(SQL);
|
||
SQL :=
|
||
' UPDATE tmp_report_journal_main_templ_with_peoples p' +
|
||
' JOIN tmp_dedutions d ON d.MID = p.MID AND p.cid = d.cid AND p.PageNum = d.PageNum' +
|
||
' SET deduction = LEFT(CONCAT(''(отчислен '', to_char(d.xp_date, ''dd.mm.yyyy''), '' приказ '', COALESCE(d.Prikaz, ''''), '')''),50) '+
|
||
' WHERE not d.mid is null ;';
|
||
fScript.Add(SQL);
|
||
|
||
//Перевод
|
||
SQL := ' DROP TABLE IF EXISTS tmp_dedutions;' +
|
||
' CREATE TEMPORARY TABLE tmp_dedutions AS ' +
|
||
' SELECT gt.Prikaz, gt.xp_date, p.mid, p.cid, p.PageNum, ' +
|
||
' gt.group_from_text, gt.group_to_text ' +
|
||
' FROM groupuser_transfer gt' +
|
||
' JOIN (' +
|
||
' SELECT MIN(t2.date) stDate, MAX(t2.date) endDate, t2.mid, t2.cid, t2.PageNum' +
|
||
' FROM tmp_report_journal_main_templ_with_peoples t2' +
|
||
' GROUP BY cid, PageNum, mid' +
|
||
' ) p ON p.mid = gt.mid ' +
|
||
' WHERE gt.xp_status = 2 ' +
|
||
' AND gt.cid = -1' +
|
||
' AND gt.xp_date BETWEEN p.stDate AND p.endDate;';
|
||
//Data.ExecuteSQL(SQL);
|
||
fScript.Add(SQL);
|
||
SQL :=
|
||
' UPDATE tmp_report_journal_main_templ_with_peoples p' +
|
||
' JOIN tmp_dedutions d ON d.MID = p.MID AND p.cid = d.cid AND p.PageNum = d.PageNum' +
|
||
' SET deduction = LEFT(CONCAT(to_char(d.xp_date, ''dd.mm.yyyy''), '' Приказ № '', COALESCE(d.Prikaz, ''''), '' перевод из '', d.group_from_text, '' в '', d.group_to_text),50) '+
|
||
' WHERE not d.mid is null and (p.deduction = '''' or p.deduction is NULL);';
|
||
fScript.Add(SQL);
|
||
RunScript('Оценки');
|
||
end;
|
||
|
||
procedure TSQLScripts48.CreateTerms;
|
||
var
|
||
SQL: string;
|
||
begin
|
||
//Создать выборку по периодам для текущей группы
|
||
//Рассчитано по умолчанию на четверти.
|
||
SQL := ' DROP TABLE IF EXISTS tmp_report_journal_terms; '+
|
||
' CREATE TEMPORARY TABLE tmp_report_journal_terms AS '+
|
||
' SELECT to_date(t.term_begin, ''dd.mm.yyyy'') BegDate, '+
|
||
' to_date(t.term_end, ''dd.mm.yyyy'') EndDate, '+
|
||
' t.title, t.trmid '+
|
||
' FROM terms t '+
|
||
' JOIN group_history gh ON gh.term_type_id = t.term_type_id AND gh.school_year = '+inttostr(year)+' '+
|
||
' WHERE t.year = '+inttostr(year)+' AND gh.gid = '+ inttostr(gid) +
|
||
' ORDER BY CONCAT(SUBSTR(t.term_begin, 7, 4), SUBSTR(t.term_begin, 4, 2), SUBSTR(t.term_begin, 1, 2)); ';
|
||
fScript.Add(SQL);
|
||
//Текущие типы оценок за учебный период
|
||
SQL := ' DROP TABLE IF EXISTS tmp_renamed_periods; ' +
|
||
' CREATE TEMPORARY TABLE tmp_renamed_periods ' +
|
||
' ( trmtid int, title varchar(255) ); ' +
|
||
'' +
|
||
' INSERT INTO tmp_renamed_periods VALUES' +
|
||
' (7, ''''), (9, '': Зачет/экзамен''), (8, '': Итог''), (6, '': Срез'');' +
|
||
'' +
|
||
' DROP TABLE IF EXISTS tmp_report_journal_terms_periods; ' +
|
||
' CREATE TEMPORARY TABLE tmp_report_journal_terms_periods AS ' +
|
||
' SELECT tt.BegDate, tt.EndDate, tt.trmid, ' +
|
||
' CONCAT(tt.title, r.title) title, gt.trmtid' +
|
||
' FROM tmp_report_journal_terms tt' +
|
||
' JOIN terms t ON t.trmid = tt.trmid' +
|
||
' JOIN term_grade_types gt ON FIND_IN_SET(gt.trmtid, t.term_grade_types)' +
|
||
' JOIN tmp_renamed_periods r ON r.trmtid = gt.trmtid' +
|
||
' ORDER BY tt.BegDate, gt.trmtid; ';
|
||
fScript.Add(SQL);
|
||
RunScript('Учебные периоды');
|
||
end;
|
||
|
||
procedure TSQLScripts48.CreateTmpAllCourses;
|
||
var
|
||
SQL: string;
|
||
I: Integer;
|
||
begin
|
||
//Получить список всех занятий по датам с предметами за период
|
||
SQL := Format(
|
||
' DROP TABLE IF EXISTS tmp_report_stat_courses;'+
|
||
' CREATE TEMPORARY TABLE tmp_report_stat_courses AS '+
|
||
' SELECT sh.SHEID, xp_Subject_Without_Year(c.title) as title, sh.CID, IF(sh.st_state_id = 1 AND sh.subst_teacher > 0 AND sh.cid = sh.sh_subst_cid, sh.subst_teacher, sh.teacher_mid) teacher_mid, w.week_id, '+
|
||
' if(sh.st_state_id <> 1 OR sh.st_state_id is NULL OR sh.subst_teacher <= 0 OR sh.cid <> sh.sh_subst_cid, 0, sh.teacher_mid) subTeacher, '+
|
||
' w.wstart_date + (sh.day_of_week - 1 -WeekDay(w.wstart_date)) * interval ''1 day'' AS date, sh.gid as mainGid, sh.period as xp_part, '+
|
||
' 0 as plan, '+
|
||
' 0 as fact '+
|
||
' FROM nnz_weeks w '+
|
||
' JOIN nnz_schedule sh ON (sh.sh_var_id = w.sh_var_id AND sh.CID <> 0) '+
|
||
' JOIN groupname g ON g.gid=sh.gid '+
|
||
' JOIN courses c ON c.cid = sh.cid '+
|
||
' LEFT JOIN groupname g2 ON g2.gid=g.owner_gid '+
|
||
' WHERE COALESCE(g2.gid,g.gid) = %2:s '+
|
||
' AND sh.day_of_week - 1 BETWEEN WEEKDAY(w.wstart_date) AND WEEKDAY(w.wend_date) '+
|
||
' AND w.wstart_date + (sh.day_of_week - 1 -WeekDay(w.wstart_date)) * interval ''1 day'' BETWEEN %0:s AND %1:s '+
|
||
' AND NOT w.wstart_date + (sh.day_of_week - 1 -WeekDay(w.wstart_date)) * interval ''1 day'' in (SELECT date FROM holidays) '+
|
||
' AND (sh.cid = %3:s or %3:s = 0) ' +
|
||
' AND (sh.st_state_id <> 2 OR sh.st_state_id is NULL) '+
|
||
' ORDER BY date;',
|
||
[StartDate, EndDate, gid, cid]);
|
||
fScript.Add(SQL);
|
||
|
||
SQL := ' DROP TABLE IF EXISTS tmp_report_stat_courses_t; '+
|
||
' CREATE TEMPORARY TABLE tmp_report_stat_courses_t AS '+
|
||
' SELECT * FROM tmp_report_stat_courses; '+
|
||
|
||
' UPDATE tmp_report_stat_courses as b '+
|
||
' JOIN (SELECT COUNT(*) a, cid, xp_part, mainGid FROM tmp_report_stat_courses_t GROUP BY CID, xp_part, mainGid) t '+
|
||
' ON b.cid = t.cid and b.xp_part = t.xp_part and t.mainGid = b.mainGid '+
|
||
' SET plan = t.a; '+
|
||
|
||
' UPDATE tmp_report_stat_courses as b '+
|
||
' JOIN (SELECT COUNT(*) a, tmp.cid, tmp.xp_part, tmp.mainGid FROM tmp_report_stat_courses_t tmp '+
|
||
' JOIN nnz_sh_module_fact f ON f.SHEID = tmp.SHEID AND f.week_id = tmp.week_id '+
|
||
' GROUP BY CID, xp_part, mainGid) t ON b.cid = t.cid and b.xp_part = t.xp_part and t.mainGid = b.mainGid '+
|
||
' SET fact = t.a; ';
|
||
|
||
fScript.Add(SQL);
|
||
|
||
SQL := format(
|
||
' DROP TABLE IF EXISTS tmp_report_stat_courses_t; '+
|
||
' CREATE TEMPORARY TABLE tmp_report_stat_courses_t AS '+
|
||
' SELECT * FROM tmp_report_stat_courses; '+
|
||
|
||
' INSERT INTO tmp_report_stat_courses '+
|
||
' SELECT DISTINCT t.trmid + 10000000 AS SHEID, '+
|
||
' t.title, '+
|
||
' cs.CID, '+
|
||
' 0 AS teachermid, '+
|
||
' 9999998 AS week_id, '+
|
||
' 0 AS sybteacher, '+
|
||
' to_date(t.term_end, ''dd.mm.yyyy'') + INTERVAL ''1 DAY'' a, '+
|
||
' cs.maingid, 0 as xp_part, cs.plan, cs.fact '+
|
||
' FROM tmp_report_stat_courses_t cs '+
|
||
'JOIN (SELECT cid,trmid FROM term_grades WHERE trmtid=7 GROUP BY cid,trmid) tg ON tg.cid=cs.cid '+
|
||
' JOIN terms t on t.trmid=tg.trmid and t.year=%0:s'+
|
||
' JOIN group_history gh ON gh.term_type_id = t.term_type_id AND gh.school_year = %0:s AND gh.gid = %1:s; ',
|
||
[year,gid]);
|
||
//годовые
|
||
for I := 1 to 3 do
|
||
begin
|
||
SQL := SQL + format(
|
||
' INSERT INTO tmp_report_stat_courses '+
|
||
' SELECT DISTINCT /*t.xp_key +*/ 2000000'+IntToStr(i)+' AS SHEID, '+
|
||
' t.Name, '+
|
||
' cs.CID, '+
|
||
' 0 AS teachermid, '+
|
||
' 9999999 AS week_id, '+
|
||
' 0 AS sybteacher, '+
|
||
' t.EndDate + ' +inttostr(i) + ' * interval ''1 DAY'' a, '+
|
||
' cs.maingid, 0 as xp_part, cs.plan, cs.fact '+
|
||
' FROM tmp_report_stat_courses_t cs '+
|
||
' JOIN (SELECT s_year_id,cid FROM nnz_year_grades WHERE y_grtype_id =%0:d GROUP BY cid,s_year_id) yg ON yg.cid=cs.cid '+
|
||
' JOIN school_year t ON t.xp_key= yg.s_year_id AND t.xp_key=%1:s; ',
|
||
[i,year]);
|
||
end;
|
||
|
||
fScript.Add(SQL);
|
||
|
||
{SQL := ' SELECT '+
|
||
CONCAT(
|
||
(
|
||
CASE (IF(t.term_type_id = @c, @i := @i + 1, @i := 1))
|
||
WHEN 1 THEN 'I'
|
||
WHEN 2 THEN 'II'
|
||
WHEN 3 THEN 'III'
|
||
WHEN 4 THEN 'IV'
|
||
END), ' ',
|
||
(CASE t.term_type_id
|
||
WHEN 1 THEN 'с'
|
||
WHEN 2 THEN 'т'
|
||
WHEN 3 THEN 'ч'
|
||
WHEN 4 THEN 'п'
|
||
END)) AS title,
|
||
t.trmid
|
||
|
||
FROM terms t
|
||
|
||
WHERE year = 25
|
||
ORDER BY t.term_type_id, str_to_date(t.term_begin, '%d.%m.%Y') }
|
||
RunScript('Анализ расписания');
|
||
end;
|
||
|
||
destructor TSQLScripts48.Destroy;
|
||
begin
|
||
fScript.Free;
|
||
inherited;
|
||
end;
|
||
|
||
function TSQLScripts48.GetSQL(ScriptNum: integer): string;
|
||
var
|
||
SQL: string;
|
||
begin
|
||
case ScriptNum of
|
||
1: SQL := '';
|
||
|
||
end;
|
||
end;
|
||
|
||
|
||
procedure TSQLScripts48.RunScript(State: string);
|
||
var
|
||
i: integer;
|
||
iTimeOut: integer;
|
||
|
||
//time: TTimer;
|
||
outfile: TextFile;
|
||
begin
|
||
|
||
Inc(step);
|
||
|
||
iTimeOut := Data.Connection.TimeOut;
|
||
Data.Connection.TimeOut := 500;
|
||
|
||
{$IFDEF DEBUG}
|
||
AddToLogFile('/* ' + State + ' */');
|
||
{$ENDIF}
|
||
|
||
//time := TTimer.Create(IndicatorForm);
|
||
//time.interval := 1;
|
||
//time.OnTimer := AddSeconds;
|
||
//time.Enabled := True;
|
||
|
||
|
||
for i := 0 to fScript.Count-1 do
|
||
try
|
||
begin
|
||
sqlTimeSeconds := 0;
|
||
|
||
{$IFDEF DEBUG}
|
||
AddToLogFile(fScript[i]);
|
||
{$ENDIF}
|
||
|
||
Data.ExecuteSQL(fScript[i]);
|
||
|
||
|
||
//writeln(outfile, ' /* Script time: '+ IntToStr(sqlTimeSeconds) + ' ms. */ ');
|
||
end;
|
||
except on e: Exception do
|
||
begin
|
||
raise;
|
||
end;
|
||
|
||
end;
|
||
|
||
|
||
Data.Connection.TimeOut := iTimeOut;
|
||
fScript.Clear;
|
||
//time.Free;
|
||
end;
|
||
|
||
procedure TSQLScripts48.AddToLogFile(Str: string);
|
||
var
|
||
outfile: TextFile;
|
||
logfile: string;
|
||
begin
|
||
Data.log(mtExtra,self,Str);
|
||
end;
|
||
|
||
end.
|