S_ErrDoc := TStringList.Create; S_error := TStringList.Create; S_ErrDocTo := TStringList.Create; S_errorTo := TStringList.Create; frmMain.ProgressForm.Lines.Add('Открытие запросов: Суммы оплачено'); frmMain.ProgressForm.RefreshAll; Q_opl := TcsViewQuery.Create(nil); Q_opl.DatabaseName := MainShop.DatabaseName; Q_opl.SQL.Add('select M_Doc.Id as IdDoc, SUM(P.Summa) AS S '); Q_opl.SQL.Add(' from (Main M_Doc'); Q_opl.SQL.Add(' left outer join PlatByDoc P on P.IdDoc = M_Doc.Id)'); Q_opl.SQL.Add(' left outer join Main M_Plat on P.IdPlat = M_Plat.Id'); Q_opl.SQL.Add(' where M_Doc.DateDoc >= :Dat1 and M_Doc.DateDoc <= :Dat2 and M_Plat.Status > 0 AND '); Q_opl.SQL.Add(' P.IsInvoice = M_Doc.IsInvoice'); Q_opl.SQL.Add('group by M_Doc.Id'); Q_opl.SQL.Add('order by M_Doc.Id'); Q_opl.ParamByName('Dat1').AsDate := Dat1; Q_opl.ParamByName('Dat2').AsDate := Dat2; Q_opl.Open; frmMain.ProgressForm.Lines.Add('Открытие запросов: Суммы разнесенной оплаты'); frmMain.ProgressForm.RefreshAll; Q_ToOpl := TcsViewQuery.Create(nil); Q_ToOpl.DatabaseName := MainShop.DatabaseName; Q_ToOpl.SQL.Add('select M_Plat.Id as IdPlat, P.TypeKontragent, SUM(P.Summa) AS S '); Q_ToOpl.SQL.Add(' from (Main M_Plat'); Q_ToOpl.SQL.Add(' left outer join PlatByDoc P on P.IdPlat = M_Plat.Id)'); Q_ToOpl.SQL.Add(' left outer join Main M_Doc on P.IdDoc = M_Doc.Id'); Q_ToOpl.SQL.Add(' where M_Plat.DateDoc >= :Dat1 and M_Plat.DateDoc <= :Dat2 and M_Plat.Status > 0 AND '); Q_ToOpl.SQL.Add(' M_Doc.IsInvoice = 0 AND M_Doc.Status > 0 AND P.IsInvoice = 0 '); Q_ToOpl.SQL.Add('group by M_Plat.Id, P.TypeKontragent'); Q_ToOpl.SQL.Add('order by M_Plat.Id, P.TypeKontragent'); Q_ToOpl.ParamByName('Dat1').AsDate := Dat1; Q_ToOpl.ParamByName('Dat2').AsDate := Dat2; Q_ToOpl.Open; frmMain.ProgressForm.Lines.Add('Открытие запросов: Список документов'); frmMain.ProgressForm.RefreshAll; Q_main := TcsViewQuery.Create(nil); Q_main.DatabaseName := MainShop.DatabaseName; Q_main.SQL.Add('SELECT * FROM main WHERE Main.datedoc >= :Dat1 AND Main.datedoc <= :Dat2 ORDER BY Main.Id'); Q_main.ParamByName('Dat1').AsDate := Dat1; Q_main.ParamByName('Dat2').AsDate := Dat2; Q_main.Open; frmMain.ProgressForm.MaxValue := Q_main.RecordCount; Q_main.First; frmMain.ProgressForm.Lines.Add('Обработка документов'); frmMain.ProgressForm.RefreshAll; ii := 0; while not Q_main.EOF do begin frmMain.ProgressForm.Position := ii; ii := ii + 1; while not Q_Opl.Eof and (Q_opl.FieldByName('IdDoc').AsInteger < Q_main.FieldByName('Id').AsInteger) do Q_Opl.Next; SummaOpl := CurrRound(Q_main.FieldByName('SummaOpl').AsCurrency); SummaOplCalc := 0; if (Q_opl.FieldByName('IdDoc').AsInteger = Q_main.FieldByName('Id').AsInteger) then SummaOplCalc := CurrRound(Q_opl.FieldByName('S').AsCurrency); if (SummaOpl <> SummaOplCalc) then begin S_ErrDoc.Add(Q_main.FieldByName('Id').AsString); S_error.Add(PadR(Q_main.FieldByName('NDoc').AsString, 10, ' ') + Q_main.FieldByName('DateDoc').AsString + ' ' + PadR(Q_main.FieldByName('NameType1').AsString, 15, ' ') + ' ' + PadR(Q_main.FieldByName('NameSpr1').AsString, 15, ' ') + ' ' + PadR(Q_main.FieldByName('NameType2').AsString, 15, ' ') + ' ' + PadR(Q_main.FieldByName('NameSpr2').AsString, 15, ' ') + ' ' + PadL(FormatCurr2(Q_main.FieldByName('Summa').AsCurrency), 10, ' ') + ' ' + PadL(FormatCurr2(SummaOpl), 10, ' ') + ' ' + PadL(FormatCurr2(SummaOplCalc), 10, ' ')); end; // ---- if (SummaOpl <> SummaOplCalc) then begin SummaToOpl1 := 0; while not Q_ToOpl.Eof and (Q_ToOpl.FieldByName('IdPlat').AsInteger < Q_main.FieldByName('Id').AsInteger) do Q_ToOpl.Next; while not Q_ToOpl.Eof and (Q_ToOpl.FieldByName('IdPlat').AsInteger = Q_main.FieldByName('Id').AsInteger) and (Q_ToOpl.FieldByName('TypeKontragent').AsInteger < 1) do Q_ToOpl.Next; if (Q_ToOpl.FieldByName('IdPlat').AsInteger = Q_main.FieldByName('Id').AsInteger) and (Q_ToOpl.FieldByName('TypeKontragent').AsInteger = 1) then SummaToOpl1 := CurrRound(Q_ToOpl.FieldByName('S').AsCurrency); if (CurrRound(Q_Main.FieldByName('SummaToOpl1').AsCurrency) <> SummaToOpl1) then begin S_ErrDocTo.Add(Q_main.FieldByName('Id').AsString); S_errorTo.Add(PadR(Q_main.FieldByName('NDoc').AsString, 10, ' ') + Q_main.FieldByName('DateDoc').AsString + ' ' + PadR(Q_main.FieldByName('NameType1').AsString, 15, ' ') + ' ' + PadR(Q_main.FieldByName('NameSpr1').AsString, 15, ' ') + ' ' + PadR(Q_main.FieldByName('NameType2').AsString, 15, ' ') + ' ' + PadR(Q_main.FieldByName('NameSpr2').AsString, 15, ' ') + ' ' + PadL(FormatCurr2(Q_main.FieldByName('Summa').AsCurrency), 10, ' ') + ' ' + PadL(FormatCurr2(SummaToOpl1), 10, ' ')) end; // ---- if (SummaOpl <> SummaOplCalc) then begin SummaToOpl2 := 0; while not Q_ToOpl.Eof and (Q_ToOpl.FieldByName('IdPlat').AsInteger = Q_main.FieldByName('Id').AsInteger) and (Q_ToOpl.FieldByName('TypeKontragent').AsInteger < 2) do Q_ToOpl.Next; if (Q_ToOpl.FieldByName('IdPlat').AsInteger = Q_main.FieldByName('Id').AsInteger) and (Q_ToOpl.FieldByName('TypeKontragent').AsInteger = 2) then SummaToOpl2 := CurrRound(Q_ToOpl.FieldByName('S').AsCurrency); if (CurrRound(Q_Main.FieldByName('SummaToOpl2').AsCurrency) <> SummaToOpl2) then begin S_ErrDocTo.Add(Q_main.FieldByName('Id').AsString); S_errorTo.Add(PadR(Q_main.FieldByName('NDoc').AsString, 10, ' ') + Q_main.FieldByName('DateDoc').AsString + ' ' + PadR(Q_main.FieldByName('NameType1').AsString, 15, ' ') + ' ' + PadR(Q_main.FieldByName('NameSpr1').AsString, 15, ' ') + ' ' + PadR(Q_main.FieldByName('NameType2').AsString, 15, ' ') + ' ' + PadR(Q_main.FieldByName('NameSpr2').AsString, 15, ' ') + ' ' + PadL(FormatCurr2(Q_main.FieldByName('Summa').AsCurrency), 10, ' ') + ' ' + PadL(FormatCurr2(SummaToOpl2), 10, ' ')) end; // ---- if (SummaOpl <> SummaOplCalc) then begin Q_main.Next; end; // ---- while not Q_main.EOF do begin