Bei der Erfassung von Rechnungspositionen wird die Rechnungsadresse des Auftrags geprüft.
Beim Aufruf des Erfassen-Buttons in den Rechnungspositionen gibt es jetzt eine weitere Option "Positionen zu anderer Rechnungsadresse des Kunden", bei der die Rechnungsadresse des Auftrags bei der Erfassung ignoriert wird, es zählt lediglich der Kunde:
Code: Alles auswählen
Begin
// Rechnungsrückstand erfassen
// Letzter Stand: 09.12.2008 AK
// keine Erfassung von Rückständen mit BAUFPO_RG_LS_ERZ = 'L'
//DebugOn := true;
// Anzeigemodus prüfen
if ((q_1.state = dssInsert) or (q_1.state = dssEdit)) then
begin
Messagebox('Nur im Anzeigemodus möglich !','Erfassung Rechnungspositionen',0);
bPascalScriptOK := false;
Goto 1;
end;
// Erfassungsbutton bietet je nach Rechnungs- oder Gutschriftsart
// entsprechende Positionen zur Auswahl an
// Linkkey übernehmen
iBRRC_ID := nLinkkeyID;
// Rechnungskopf prüfen
if (iBRRC_ID = 0) then
begin
Messagebox('Gültige Rechnungsnummer (Rechnungskopf) fehlt !','Erfassung Rechnungspositionen',0);
bPascalScriptOK := false;
Goto 1;
end;
// Erfassungsfenster prüfen
O_AUFLIST := 0;
O_Auflist := Application.FindComponent('frmauflist2');
if O_Auflist = 0 then
begin
bPascalScriptOK := false;
MessageBox('Konnte Erfassungsfenster nicht finden','ACHTUNG',0);
Goto 1;
end;
// Mandant berücksichtigen
iBMAND_ID := 0;
frmData.Universal.Close();
frmData.Universal.SQL.Text := 'SELECT BMAND_ID FROM BRRC WHERE ID= :iBRRC_ID';
frmData.Universal.ParamByName('iBRRC_ID', iBRRC_ID);
frmData.Universal.Open();
Fld := frmData.Universal.FieldByName('BMAND_ID');
iBMAND_ID := Fld.AsInteger;
frmData.Universal.Close();
// zusätzliche Suchbedingungen ermitteln
// Auftragsnr wird immer berücksichtigt
sWhereBAUF := '';
sTemp := Trim(E_BAUF_MASKENKEY.TEXT);
if sTemp <> '' then
Begin
sTemp := StringReplace(sTemp,'*','%');
sTemp := StringReplace(sTemp,'?','_');
sWhereBAUF := ' AND (A.BAUF_MASKENKEY LIKE ' + QuotedStr(sTemp + '%')+')';
end;
// Artikelnr wird nur berücksichtigt, wenn "Einzelpositionen" in Auswahl erlaubt sind
sWhereBSA := '';
sTemp := Trim(E_BSA_MASKENKEY.TEXT);
if sTemp <> '' then
Begin
sTemp := StringReplace(sTemp,'*','%');
sTemp := StringReplace(sTemp,'?','_');
sWhereBSA := ' AND (A.BSA_MASKENKEY LIKE ' + QuotedStr(sTemp + '%')+')';
end;
// Umschalten von Such- in Anzeigemodus
if ((iBRRC_ID > 0) and (q_1.state = dssSearch)) then
q_1.post;
// Kundennummer und Adressnr. holen
iBKUNDE_ID := 0;
iBADR_ID := 0;
MyQuery := FrmData.Universal;
MyQuery.Close;
MyQuery.Sql.Text := 'SELECT * FROM BRRC WHERE ID = ' + IntToStr(iBRRC_ID);
MyQuery.Open;
iBKUNDE_ID := AsInteger(MyQuery.FieldByName('BKUNDE_ID_LINKKEY'));
iBADR_ID := AsInteger(MyQuery.FieldByName('BADR_ID_RADRCODE'));
iBADR_ID_POST := AsInteger(MyQuery.FieldByName('BADR_ID_POST'));
nABSCHLAGPROZENT := AsFloat(MyQuery.FieldByName('ABSCHLAGPROZENT'));
MyQuery.Close;
if iBKUNDE_ID <= 0 then
begin
bPascalScriptOK := false;
MessageBox('Konnte Kundennummer nicht finden','ACHTUNG',0);
Goto 1;
end;
if iBADR_ID <= 0 then
begin
bPascalScriptOK := false;
MessageBox('Konnte Rechnungsadresse nicht finden','ACHTUNG',0);
Goto 1;
end;
// manuell erfasste Gutschriften
// -----------------------------
if length(lblGUTSCHRART.Caption)>0 then
begin
sAuswahl := '"Einzelpositionen", "Lieferscheinweise", "Auftragsweise"';
nAuswahl := SipMessage('Gutschrifterfassungsart', sAuswahl, '0,1');
if nAuswahl < 0 then
begin
bPascalScriptOK := false;
GOTO 1;
end;
// Gutschrifterfassung (Einzelpositionen)
if nAuswahl = 0 then
begin
sSelect := 'ID';
sWhere := '';
sOrder := 'A.BAUFPO_ID_LINKKEY, A.BAUFPO_MASKENKEY';
O_Auflist.Caption := 'Gutschrifterfassung (Einzelpositionen)';
end
// Gutschrifterfassung (Lieferscheinweise)
else if nAuswahl = 1 then
begin
sSelect := 'BRLS_ID_LSNR';
sWhere := ' AND (A.BRLS_ID_LSNR > 0) ';
sOrder := 'A.BRLS_ID_LSNR, A.BAUFPO_ID_LINKKEY, A.BAUFPO_MASKENKEY';
O_Auflist.Caption := 'Gutschrifterfassung ( Nach Lieferschein )';
end
// Gutschrifterfassung (Auftragsweise)
else if nAuswahl = 2 then
begin
sSelect := 'BAUFPO_ID_LINKKEY';
sWhere := '';
sOrder := 'A.BAUFPO_ID_LINKKEY, A.BAUFPO_MASKENKEY';
O_Auflist.Caption := 'Gutschrifterfassung ( Auftragsweise )';
end;
// Bei Gutschriftarten, die sich auf einen Liefermenge beziehen, muss es auch vorher einen LS gegeben haben
if Pos(lblGUTSCHRART.Caption,'W/R/B/S') > 0 then
sWhere := sWhere + ' AND A.BRLS_ID_LSNR IS NOT NULL AND A.LS_BUCHUNGSART IS NULL';
// Positionen manueller Gutschriften beziehen sich auf in Rechnung gestellte Positionen,
// eine Lieferung kann, muß aber noch nicht erfolgt sein (P_BRRCP_IN_BRRCP)
O_Auflist.MultiselectIDFeld := sSelect;
O_Auflist.ProcInputNameID := 'QUELLE_ID';
O_Auflist.StP_Uebername.StoredProcName := 'P_BRRCP_IN_BRRCP';
O_Auflist.StP_Uebername.ParamByName('ZIEL_ID_LINKKEY', nLinkkeyID);
O_Auflist.Q_Erfassung.SQL.Text := 'SELECT A.ID, ' +
' A.MENGE, ' +
' A.MENGE - F_ZAHLRUNDEN((SELECT SUM(B.MENGE) ' +
' FROM BRRCP B ' +
' WHERE B.BRRCP_ID_BRRCP = A.ID),4) AS "OFFENE_MENGE", ' +
' A.BAUFPO_ID_LINKKEY, ' +
' A.BAUFPO_MASKENKEY, ' +
' A.BRLS_ID_LSNR AS "BRLS_ID", ' +
' A.* ' +
'FROM V_BRRCP A ' +
'WHERE A.BKUNDE_ID = :BKUNDE_ID AND ' +
' A.BAUF_BMAND_ID = :iBMAND_ID AND ' +
' A.GPREIS > 0 ' +
sWhere + sWhereBAUF + sWhereBSA +
' ORDER BY ' + sOrder;
O_Auflist.Q_Erfassung.ParamByName('BKUNDE_ID', iBKUNDE_ID);
O_Auflist.Q_Erfassung.ParamByName('iBMAND_ID', iBMAND_ID);
// Parameter für die Erfassung von Gutschriften wurden geändert, da sonst keine Abschlagsrechnungen
// gutgeschrieben werden können
//O_Auflist.Q_Erfassung.SQL.Text := 'SELECT A.* FROM V_BRRCP A' +
// ' WHERE A.BKUNDE_ID = :BKUNDE_ID AND' +
// ' A.BAUF_BMAND_ID = :iBMAND_ID AND' +
// ' (A.LS_BUCHUNGSART IS NULL) AND (A.GPREIS > 0) ' +
// sWhere + sWhereBAUF + sWhereBSA + ' ORDER BY ' + sOrder;
end
// Pauschale Abschlagsrechnung ( Abschlagszahlungsauftrag mit Auftragsstatus ? BTOUR.ABSCHLAG = 'J' )
// --------------------------------------------------------------------------------------------------
else if (lblRECHNUNGSART.Caption = 'P') then
begin
sAuswahl := '"Abrufauftrag Einzelpositionen", "Abrufauftrag Auftragsweise"';
nAuswahl := SipMessage('Pauschale Abschlagsrechnung Erfassungsart', sAuswahl, '0,1');
if nAuswahl < 0 then
begin
bPascalScriptOK := false;
GOTO 1 ;
end;
// Abrufauftrag Einzelpositionen
if nAuswahl = 0 then
begin
sSelect := 'ID';
sWhere := '';
sOrder := 'BAUFPO_ID_LINKKEY,BAUFPO_MASKENKEY';
O_Auflist.Caption := 'Abrufauftrag Einzelpositionen';
end
// Abrufauftrag Auftragsweise
else if nAuswahl = 1 then
begin
sSelect := 'BAUFPO_ID_LINKKEY';
sWhere := '';
sOrder := 'BAUFPO_ID_LINKKEY,BAUFPO_MASKENKEY';
O_Auflist.Caption := 'Abrufauftrag Auftragsweise';
end;
// Positionen pauschaler Abschlagsrechnungen beziehen sich auf in Rechnungs-Rückstand gestellte Positionen
// mit LS_BUCHUNGSART 20 und positivem Preis, Lieferungen gibt es hierzu nicht (P_BRRCR_IN_BRRCP)
O_Auflist.MultiselectIDFeld := sSelect;
O_Auflist.ProcInputNameID := 'QUELLE_ID';
O_Auflist.StP_Uebername.StoredProcName := 'P_BRRCR_IN_BRRCP';
O_Auflist.StP_Uebername.ParamByName('ZIEL_ID_LINKKEY', nLinkkeyID);
O_Auflist.Q_Erfassung.SQL.Text := 'SELECT A.* FROM V_BRRCR A' +
' WHERE A.BKUNDE_ID = :BKUNDE_ID' +
' AND A.BAUF_BMAND_ID = :iBMAND_ID' +
' AND A.BAUF_BADR_ID_READRNR = :BADR_ID' +
' AND (A.BAUF_BADR_ID_POST = :BADR_ID_POST OR A.BAUF_BADR_ID_POST IS NULL)'+
' AND (A.LS_BUCHUNGSART IS NOT NULL) AND (A.LS_BUCHUNGSART = 20) AND (A.GPREIS > 0)' +
' AND A.BAUFPO_RG_LS_ERZ <> ' + QuotedStr('L') + // es dürfen keine rückstände mit KZ L erfasst werden
sWhere + sWhereBAUF + sWhereBSA + ' ORDER BY ' + sOrder;
O_Auflist.Q_Erfassung.ParamByName('BKUNDE_ID', iBKUNDE_ID);
O_Auflist.Q_Erfassung.ParamByName('BADR_ID', iBADR_ID);
O_Auflist.Q_Erfassung.ParamByName('BADR_ID_POST', iBADR_ID_POST);
O_Auflist.Q_Erfassung.ParamByName('iBMAND_ID', iBMAND_ID);
end
// Schlussrechnung von Auftrag
// ---------------------------
else if (lblRECHNUNGSART.Caption = 'S') then
begin
// sAuswahl := '"Schlussrechnung von Auftrag"';
// keine Auswahl, da nur Auftragsweise sinnvoll
sSelect := 'BAUFPO_ID_LINKKEY';
sWhere := '';
sOrder := 'BAUFPO_ID_LINKKEY,BAUFPO_MASKENKEY,LS_BUCHUNGSART';
O_Auflist.Caption := 'Schlussrechnung von Auftrag';
// Positionen von Schlussrechnungen beziehen sich auf in Rechnungs-Rückstand gestellte Positionen
// mit LS_BUCHUNGSART = Null und positivem Preis, Lieferungen kann, muss es aber nicht geben
// zusätzlich werden alle Gutschrifts-DS der Abschlagszahlungen (negative Beträge) mit übernommen
// Änderungen nicht erlaubt ,nur löschen, solange nicht gedruckt (==>ist das so richtig?)
O_Auflist.MultiselectIDFeld := sSelect;
O_Auflist.ProcInputNameID := 'QUELLE_ID';
O_Auflist.StP_Uebername.StoredProcName := 'P_BRRCR_IN_BRRCP';
O_Auflist.StP_Uebername.ParamByName('ZIEL_ID_LINKKEY', nLinkkeyID);
O_Auflist.Q_Erfassung.SQL.Text := 'SELECT A.* FROM V_BRRCR A' +
' WHERE A.BKUNDE_ID = :BKUNDE_ID' +
' AND A.BAUF_BMAND_ID = :iBMAND_ID' +
' AND A.BAUF_BADR_ID_READRNR = :BADR_ID' +
' AND (A.BAUF_BADR_ID_POST = :BADR_ID_POST OR A.BAUF_BADR_ID_POST IS NULL)'+
' AND (((A.LS_BUCHUNGSART IS NULL) AND (A.GPREIS > 0))' +
' AND A.BAUFPO_RG_LS_ERZ <> ' + QuotedStr('L') + // es dürfen keine rückstände mit KZ L erfasst werden
' OR ((A.LS_BUCHUNGSART IS NOT NULL) AND (A.LS_BUCHUNGSART = 21) AND (A.GPREIS <= 0 )))' +
sWhere + sWhereBAUF + ' ORDER BY ' + sOrder;
O_Auflist.Q_Erfassung.ParamByName('BKUNDE_ID', iBKUNDE_ID);
O_Auflist.Q_Erfassung.ParamByName('BADR_ID', iBADR_ID);
O_Auflist.Q_Erfassung.ParamByName('BADR_ID_POST', iBADR_ID_POST);
O_Auflist.Q_Erfassung.ParamByName('iBMAND_ID', iBMAND_ID);
end
// Prozentuale Abschlagsrechnung von normalem Auftrag
// --------------------------------------------------
else if (lblRECHNUNGSART.Caption = 'A') then
begin
// Wenn bereits Positionen eines Auftrags vorhanden, keine weiteren zulassen
if (lblPosiVorhanden.Caption = 'J') and (nABSCHLAGPROZENT > 0.0) then
begin
Messagebox('prozentuale Abschlagsrechnung nur für einen Auftrag möglich !','Hinweis',0);
bPascalScriptOK := false;
Goto 1;
end;
// keine Auswahl, da nur Auftragsweise sinnvoll
sSelect := 'BAUFPO_ID_LINKKEY';
sWhere := '';
sOrder := 'BAUFPO_ID_LINKKEY,BAUFPO_MASKENKEY';
O_Auflist.Caption := 'Prozentuale Abschlagsrechnung von Auftrag';
// Positionen prozentualer Abschlagsrechnungen beziehen sich auf in Rechnungs-Rückstand gestellte Positionen
// mit LS_BUCHUNGSART = Null und positivem Preis, Lieferungen kann, muss es aber nicht geben
// die DS werden durch kopieren der Original-DS erstellt,
// Änderungen nicht erlaubt,nur löschen, solange nicht gedruckt, Mit Druck wird Gutschrifts-DS erstellt
O_Auflist.MultiselectIDFeld := sSelect;
O_Auflist.ProcInputNameID := 'QUELLE_ID';
O_Auflist.StP_Uebername.StoredProcName := 'P_BRRCR_IN_BRRCP_ABSCHLAG';
O_Auflist.StP_Uebername.ParamByName('ZIEL_ID_LINKKEY', nLinkkeyID);
O_Auflist.Q_Erfassung.SQL.Text := 'SELECT A.* FROM V_BRRCR A' +
' WHERE A.BKUNDE_ID = :BKUNDE_ID' +
' AND A.BAUF_BMAND_ID = :iBMAND_ID' +
' AND A.BAUF_BADR_ID_READRNR = :BADR_ID' +
' AND (A.BAUF_BADR_ID_POST = :BADR_ID_POST OR A.BAUF_BADR_ID_POST IS NULL)' +
' AND A.BAUFPO_RG_LS_ERZ <> ' + QuotedStr('L') + // es dürfen keine rückstände mit KZ L erfasst werden
' AND (A.LS_BUCHUNGSART IS NULL) AND (A.GPREIS > 0) ' +
sWhere + sWhereBAUF + ' ORDER BY ' + sOrder;
O_Auflist.Q_Erfassung.ParamByName('BKUNDE_ID', iBKUNDE_ID);
O_Auflist.Q_Erfassung.ParamByName('BADR_ID', iBADR_ID);
O_Auflist.Q_Erfassung.ParamByName('BADR_ID_POST', iBADR_ID_POST);
O_Auflist.Q_Erfassung.ParamByName('iBMAND_ID', iBMAND_ID);
end
// Standard-Rechnung
// -----------------
else if (lblRECHNUNGSART.Caption = 'R') then
begin
// Rechnungspositionen
// SipMessagbox Abfrage der Erfassungart
sAuswahl := '"Lieferscheinweise","Auftragsweise","Einzelpositionen (ohne Aufträge mit GesamtabwicklungsKZ=J)","Positionen zu anderer Rechnungsadresse des Kunden"';
nAuswahl := SipMessage('Rechnungserfassungsart', sAuswahl, '0,1');
if (nAuswahl < 0) then
begin
bPascalScriptOK := false;
GOTO 1 ;
end
// Rechnungserfassung nach Lieferschein
else if (nAuswahl = 0) then
begin
sSelect := 'BRLS_ID_LSNR';
sWhere := ' AND BRLS_ID_LSNR > 0 ';
sWhereBADR := ' AND A.BAUF_BADR_ID_READRNR = '+IntToStr(iBADR_ID);
sOrder := 'BRLS_ID_LSNR,BAUFPO_ID_LINKKEY,BAUFPO_MASKENKEY';
O_Auflist.Caption := 'Rechnungserfassung ( Nach Lieferschein )';
end
// Rechnungserfassung Auftragsweise
else if (nAuswahl = 1) then
begin
sSelect := 'BAUFPO_ID_LINKKEY';
sWhere := '';
sWhereBADR := ' AND A.BAUF_BADR_ID_READRNR = '+IntToStr(iBADR_ID);
sOrder := 'BAUFPO_ID_LINKKEY,BAUFPO_MASKENKEY';
O_Auflist.Caption := 'Rechnungserfassung ( Auftragsweise )';
end
// Rechnungserfassung Einzelpositionen (ohne Gesamtabwicklungsaufträge)
else if (nAuswahl = 2) then
begin
sSelect := 'ID';
sWhere := ' AND ((BAUF_CGESLR <> ''' + AsString(frmData.q_v_bfirma.FieldByName('JA')) + ''') or (BAUF_CGESLR is NULL))';
sWhereBADR := ' AND A.BAUF_BADR_ID_READRNR = '+IntToStr(iBADR_ID);
sOrder := 'BAUFPO_ID_LINKKEY,BAUFPO_MASKENKEY';
O_Auflist.Caption := 'Rechnungserfassung ( Einzelpositionen )';
end
// Zu anderer Rechnungsadresse
else if (nAuswahl = 3) then
begin
sSelect := 'ID';
sWhere := '';
sWhereBADR := '';
sOrder := 'BAUFPO_ID_LINKKEY,BAUFPO_MASKENKEY';
O_Auflist.Caption := 'Rechnungserfassung ( Auch adressfremde Positionen erfassen )';
end;
// Positionen einer Standardrechnung beziehen sich auf in Rechnungs-Rückstand gestellte Positionen
// (Betrag pos. oder neg.), aber ohne Abschlagszahlungen aufgrund Abrufauftrag (LS_BUCHUNGSART = 20 und Betrag pos.)
// Lieferungen kann, muss es aber nicht geben
O_Auflist.MultiselectIDFeld := sSelect;
O_Auflist.ProcInputNameID := 'QUELLE_ID';
O_Auflist.StP_Uebername.StoredProcName := 'P_BRRCR_IN_BRRCP';
O_Auflist.StP_Uebername.ParamByName('ZIEL_ID_LINKKEY', nLinkkeyID);
O_Auflist.Q_Erfassung.SQL.Text := 'SELECT A.* FROM V_BRRCR A' +
' WHERE A.BKUNDE_ID = :BKUNDE_ID' +
' AND (A.BAUF_BADR_ID_POST = :BADR_ID_POST OR A.BAUF_BADR_ID_POST IS NULL)' +
' AND A.BAUF_BMAND_ID = :iBMAND_ID' +
' AND A.BAUFPO_RG_LS_ERZ <> ' + QuotedStr('L') + // es dürfen keine rückstände mit KZ L erfasst werden
' AND NOT ((A.LS_BUCHUNGSART IS NOT NULL) AND (A.LS_BUCHUNGSART = 20) AND (A.GPREIS >= 0)) ' +
sWhere + sWhereBAUF + sWhereBSA + sWhereBADR + ' ORDER BY ' + sOrder;
O_Auflist.Q_Erfassung.ParamByName('BKUNDE_ID', iBKUNDE_ID);
O_Auflist.Q_Erfassung.ParamByName('BADR_ID_POST', iBADR_ID_POST);
O_Auflist.Q_Erfassung.ParamByName('iBMAND_ID', iBMAND_ID);
end;
1:
End;