Problem | Neu ab | Behoben ab | |
---|---|---|---|
- | Beim PDF-Export werden Effekte z.B. auf Balken aktuell nicht unterstützt. | ||
- | Aufgrund eines MS-Excel-Problems kann es beim Export nach Excel z.B. auf Währungsfeldern in der Excel-Datei zu Formatsänderungen kommen, wenn die exportierte Datei zuvor gespeichert wurde. | ||
- | In Modulen mit IronPython-Charts kommt es im Bereich dieser beim Scrollen und Zoomen zu einem schwarzen Flackern.
|
||
- | Der Befehl Bearbeiten fehlt im Kontextmenü auf den Input-Feldern. | C 39.5.16 | C 39.5.17 |
- | Beim Drag&Drop-Kopieren/Verschieben wird manchmal der "Verboten"-Cursor angezeigt, obwohl das Kopieren bzw. Verschieben dennoch möglich ist. | C 39.5.13 | |
- | In Modulen mit aktiviertem Parameter Neben Oberbereich und bestehenden Relationen zwischen den Datenbereichen kann es zu Darstellungsproblemen kommen. | C 39.5.0 | |
- | Die Symbolparameter Inhaltmuster, Inhaltdicke und Inhaltdichte haben keine Wirkung (sind nicht funktionsfähig). | C 39.5.10 | |
- | Automatische Tooltips werden auf abgeschnittenen Datenfeld-Überschriften in Masken und auf Schaltflächen nicht angezeigt. | C 39.5.0 |
Problem | Neu ab | Behoben ab | |
---|---|---|---|
- | Neu angelegte OLEs werden nicht sofort im Modul OLEs angezeigt, sondern erst nach Neustart des Systems. | ||
- | Die Wertebereich-Funktion EXPAND() wird nur einmal berechnet. | ||
- | In Gruppierungsbereichen, deren DDI ein Inkarnations-DI ist, kann es zu Problemen beim Einfügen neuer Gruppen kommen. Daher sollte stattdessen das Unter-DI des Inkarnations-DI mit der Funktion = KO verwendet werden. | ||
- | Der Oracle-Fehler im Logfile OCIError: ORA-24432: Die zurückgegebene Anweisung ist keine Tagged-Anweisung. ist keine wirkliche Fehlermeldung, sondern eine Warnung und kann ignoriert werden. | ||
- | Während des anonymisierten Terminrechnungsdaten-Export erscheint folgende Fehlermeldung: FileNotFoundError: [Errno 2] No such file or directory: 'test_data_430.csv'. Hinweis: Trotz dieser Fehlermeldung hat der Export funktioniert, die Dateien konnten nur nicht gezippt werden und liegen daher einzeln im angegebenen Verzeichnis |
S 39.5.17 | S 39.5.18 |
- | Der Menüpunkt Python-Module neu laden funktioniert nicht und soll nicht verwendet werden. Wird er trotzdem verwendet, werden Python-Fehlermeldungen ausgegeben. | S 39.5.5 | S 39.5.18 |
- | Die Earned Value-Analyse (EVA) kann nicht verwendet werden. Die Berechnung der Kostenabweichung (CV) sowie evtl. einiger weiterer Werte stimmt unter bestimmten Voraussetzungen nicht. | S 39.5.14 | |
- | Beim Verwenden der Python-Methode get_children() kommt es zum Absturz, wenn eine nicht existierende Datentabelle angesprochen wird. |
S 39.5.0 |
Problem | Neu ab | Behoben ab | |
---|---|---|---|
- | Ordnet man einem Projekt ein Prozessmodell zu, welches in der ersten Phase keine Prozessschritte enthält, wird am unteren Rand des Moduls Prozessstatus folgende Fehlermeldung ausgegeben: Local Variable akt_pos referenced before assignment . Fehlen die Prozessschritte in den weiteren Phasen des Prozessmodels, wird die Fehlermeldung nicht ausgegeben. |
||
- | Wurde eine Prozessphase, die in einem Projekt aktiv ist, im Modul Prozessmodell-Templates gelöscht, wird beim Aufruf dieses Projekts oder der Projektübersicht eine Python-Fehlermeldung ausgegeben. | ||
- | Beim Ändern einer fachlichen ID eines Hauptprojekts kommt es im Modul Teilprojekte gelegentlich zum Vertauschen der Reihenfolge von Unterprojekten, die sich auf der gleichen Strukturebene befinden. | ||
- | Die Rückmeldung auf Request-Prozessschritte ist zurzeit nicht möglich. | ||
- | Beim PDF-Export wird die Fehlermeldung ValueError: invalid literal for int() with base 10: ausgegeben. Nach dem Bestätigen dieser Fehlermeldung wird der PDF-Export trotzdem durchgeführt. | DB 39.5.10 | DB 39.5.11 |
- | Passwort zurücksetzen im Modul Benutzer ist nicht möglich. | DB 39.5.6 | DB 39.5.7 |
- | Beim Versuch Skills im Modul Skills zu löschen erscheint die Meldung Löschen in diesem Bereich nicht erlaubt. Die Skills werden dennoch wie gewünscht gelöscht. | DB 39.5.6 | DB 39.5.7 |
- | Es ist auch mit CU-Rechten nicht möglich, aus den Modulen Dataitems und Modulinformation durch Klick auf den Link auf der Tabellen-ID die entsprechende Datentabelle aufzurufen. | DB 39.5.6 | |
- | Die Schaltfläche VN im Modul Vorgangskette hat derzeit keine Funktion. | DB 39.5.0 | |
- | In manchen Fällen wird bei Verwendung von Drag&Drop-Verschieben Datensätze die Meldung Verschieben nicht möglich:? ausgegeben (mit Fragezeichen anstatt Grund). | DB 39.5.0 | |
- | Im Modul Meine Tätigkeiten werden Chancenmaßnahmen, die den Termin in der Zukunft haben oder keinen Termin haben, nicht angezeigt, wenn es keine weiteren Faktoren (Vorgänge, Aufgaben etc) gibt, die ebenfalls in die Gruppen Zukünftig oder Ohne Termin gehören. | DB 39.5.0 |
Problem | Neu ab | Behoben ab | |
---|---|---|---|
- | Der versteckte Parameter planta.migration_scripts_to_ignore funktioniert derzeit nicht bei Paketen im Migrationsverzeichnis after_db_import | S 39.5.21 |
Umgehungslösung: Zur Behebung des Problems müssen zwei sql-Skripte auf Ihrer Datenbank ausgeführt werden. Diese finden Sie in dem hier beigefügten zip-Archiv Zeiterfassung.zipin dem jeweils Ihrer Datenbank entsprechenden Ordner (Oracle oder MSSQL). Bitte stellen Sie sicher, dass dieser Vorgang von einem Administrator durchgeführt wird oder wenden Sie sich bitte an Ihren zuständigen PLANTA-Consultant.
Lösung: Update auf DB 39.5.17
- Ursache:
- Das Problem besteht in Versionen DB 39.5.10 - DB 39.5.16 mit Client 39.5.28 Stable 1 aufgrund der fehlenden Benutzerrechte. Portfoliobilder werden im Client-Verzeichnis gespeichert, für das Benutzer keine Schreibrechte haben. Mit den nächsten Versionen (DB 39. 5.17 und C 39.5.28 Stable 2) werden Portfoliobilder im Tempverzeichnis des Benutzers gespeichert.
- Lösung für Versionen DB 39.5.10 - DB 39.5.16 mit Client 39.5.28 Stable 1:
- Um das Problem zu beheben, bitte die in diesem zip-Ordner
aufgeführten Client- und Server-Pythondateien an die entsprechenden Stellen in Ihren Client- und Server-Verzeichnissen kopieren (die gleichen Dateien in Ihren Verzeichnissen mit den neuen überschreiben).
- Ursache:
- Das Problem entsteht, wenn eine Berechnung eines Projekts durchgeführt wird, das eine oder mehrere Ressource enthält, deren Periodendatensätze im Zeitraum, für den die Ressource(n) eingeplant ist/sind, nicht vollständig sind oder die Ressource gar keine Perioden aufweist, obwohl die Felder Startperiode und Endperiode gefüllt sind. Beide Fälle stellen Dateninkonsistenzen dar.
- Lösung:
- Für die betroffenen Ressourcen für den gewünschten Zeitraum Periodendatensätze aktualisieren.
- Ursache:
- Das Problem entsteht, da hier auf eine alte interne Client-Funktion zugegriffen wird, die unter diesem Namen nicht mehr zur Verfügung steht.
- Lösung:
- Um das Problem zu umgehen, muss stattdessen "PanelsList" aus der Public API benutzt werden.
- Ursache:
- Zur Installationszeit dürfen für den Datenbank-User keine Synonyme (public oder private) existieren. Siehe auch Installer-Parameter.
- Lösung:
- Synonyme abschalten oder löschen.
- Zur Laufzeit ist dies erlaubt. Wenn zu einem späteren Zeitpunkt Daten importiert werden sollen (z. B. bei einem DB-Update), müssen die Synonyme wiederum deaktiviert werden.
- Ursache:
- Der Konflikt zwischen den Parametern Fixierung = 1 und Aktive Heutelinie =
. Anders formuliert: Der Vorgang soll heute anfangen, obwohl er in der Vergangenheit fixiert ist.
- Lösung:
- Den Parameter Splitting =
setzen.
Beispiel: CLOB-Felder können unter MSSQL 2012 so nicht ausgelesen werden
sql = """ select di051831 as python_id, di051828 as alpha120, di051867 as description, di058129 as template_code from dt333 where len(di058129) > 2 """ result = ppms.db_select(sql) ppms.ui_message_box(result)
Beispiel: CLOB-Felder unter MSSQL 2012 auslesen
sql = """ select di051831 as python_id, di051828 as alpha120, cast(di051867 as varchar(8000)) as description, cast(di058129 as varchar(8000)) as template_code from dt333 where len(di058129) > 2 """ result = ppms.db_select(sql) ppms.ui_message_box(result)
SetObsoletePacketToSucceed
nach dem Update gelb, also "wartend" markiert ist.
- In diesem Fall bitte die Pakete
FixLoadAutoNumber
undSetObsoletePacketToSucceed
in dieser Reihenfolge manuell ausführen.
- Umgehungslösung: Nach der Eingabe von Belastung-Rest und der Berechnung des Terminplans den Aufwand-Rest auf den Aufwand-Soll kopieren.
mod_obj.menu(91)
/ Aktions-ID 91 mod_obj.menu(91)
verwendet wird, um einen untergeordneten Datenbereich einzufügen, muss man nun explizit angeben, in welchem Datenbereich ein Datensatz eingefügt werden soll. Dies geschieht über die DA-Python-ID.
- Lösung:
Old: mod_obj=ppms.get_target_module() mod_obj.menu(91) New: inv_rec=ppms.get_context_df().get_record() inv_rec.insert_child(str(DA-Python-ID))
- Lösung:
- Die HIBERNATE_SEQUENCE muss manuell auf den höchsten Stand der in den History-Tabellen vorhanden Daten gesetzt werden.
- Lösung:
- Datei
config/hibernate.cfg.xml
öffnen.- Parameter
hibernate.synonyms
deaktivieren.- Speichern.
- Import der Datenbank wiederholen.
Hinweis:
- Lösung:
- Im Modul Datenbereiche den Datenbereich 050314 öffnen.
- Für DI001364 den Eintrag in Filtern von löschen.
- Speichern.
Ist in einem Modul eine Modulvariante als Favorit für alle Benutzer definiert und legt ein Benutzer eine individuelle Modulvariante als seinen Favorit fest, wird die vorherige Favorit-Variante für alle Benutzer als Favorit deaktiviert.
- Lösung: Die Modulvariante, die für alle Benutzer standardmäßig ausgewählt werden soll, nicht als Favorit deklarieren. Stattdessen beim Modulaufruf prüfen, ob der Benutzer einen individuellen Favorit hat, und je nach dem den Favoriten oder die gewünschte Modulvariante wählen. Hierfür im Makro des Moduls in der
on_initial_focus()
-Methode folgenden Code aufnehmen:standard_favorite= '2000000002' # <- Replace with the standard (not user specific) favorite MV-ID module_rec405 = ppms.search_record(405, [mod_obj.get_id()], ['id']) mv_recs500 = module_rec405.get_children(500, di_list=['user', 'favorite', 'variant_id']) user_has_favorite = False for rec in mv_recs500: if rec.user.get_value() == ppms.uvar_get('@1') and rec.favorite.get_value(): mod_obj.apply_mv_by_id(rec.variant_id.get_value()) user_has_favorite = True break if not user_has_favorite: mod_obj.apply_mv_by_id(standard_favorite)
- Als
standard_favorite
muss die Modulvarianten-ID angegeben werden, die für alle Benutzer als Favorit gelten soll.
- Ursache:
- Je nach Betriebssystem weichen die angegebenen Pfade in der Standardkonfiguration des Service Wrappers (yajsw) ab und müssen angepasst werden.
- Lösung: Anpassen des Pfades in der Datei [ServerVerzeichnis]/yajsw/conf/linux.conf:
- Default:
wrapper.daemon.run_level_dir = /rcX.d
Siehe auch: YAJSW Dokumentation![]() |
- Ursache:
- In bestimmten Planungskonstellationen kann es vorkommen, dass die Dauer-Soll leer ist. Die Terminrechnung setzt in diesen Fällen die Dauer-Rest auf 1. Wird danach ein Ist-Anfangstermin eingetragen oder ist er bereits vorhanden, kann die Dauer-Rest nicht mehr manuell geändert werden. Versucht man das, wird sie von der Terminrechnung wieder auf die 1 zurückgesetzt.
- Lösung:
- Im Modul Terminplan das Feld Dauer-Soll einblenden.
- Eine 1 eintragen.
- Die gewünschte Dauer-Rest vergeben.
- Terminrechnung durchführen.
Details
_apply_project_parameter_heredity
wird von create_project_by_type
in create_project.py
aufgerufen.
insert_project_child_records
auf, um die Stakeholder bei einem Teilprojekt vom Hauptprojekt zu kopieren.
insert_project_child_records
durch die Import-Wrapper überschrieben, hat das keine Auswirkung auf dieses Verhalten.
_apply_project_parameter_heredity
die Funktion insert_project_child_records
aufrufen, wird nach dieser Funktion erst im lokalen Namespace gesucht, bevor die Suche ausgeweitet wird.
customer
Verzeichnis Überschrieben, kommt der Code nie soweit, dass er dort nachschauen müsste, weil die Funktion bereits im lokalen Namespace gefunden wird.
- Lösung: Um die Aktualisierung auf allen Strukturebenen zu gewährleisten, muss im Modul Neuplanung (Berechnung aller Planungsobjekte) eine Entlastung und anschließend eine Neuplanung aller Projekte durchgeführt werden.
- Lösung: In das Makro des Untermoduls, in dem der Druckkopf oder die Fußzeile nicht angezeigt wird, in die
on_load()
-Methode die folgende Zeile aufnehmen:mod_obj.get_das()
com.google.protobuf.InvalidProtocolBufferException: Protocol message was too large
ausgegeben.
- Lösung: Ein Update auf eine Server-Version S 39.5.22 wird empfohlen.
- Lösung: Im Client-Verzeichnis in der Datei
\Resources\defaultSkingSettings
in der ZeileGlobalFontName:Roboto
die Schriftart Roboto durch eine gängige Schriftart, z.B. Arial, ersetzen.
- Ursache:
- Das in DB 39.5.15 neu implementierte "PosRefreshApplicator" zum Auffinden von Positionskonflikten kann die älteren Positionskonflikte aufgrund von falsch definierter Constraints nicht löschen und verursacht somit Datenkorruptionen.
- Als Umgehungslösung bitte folgende Statements in genau hier angegebener Reihenfolge ausführen:
- Wichtig: Die Statements müssen vor dem Update ausgeführt werden!
alter table CONFLICT_MAPPING drop constraint FKCONFLICT_MAPPINGID123; alter table CONFLICT_MAPPING drop constraint FKCONFLICT_MAPPINGID124; alter table CONFLICT_MAPPING add constraint FKCONFLICT_MAPPINGID123 foreign key (MODIFICATION) references MODIFICATION on delete cascade; alter table CONFLICT_MAPPING add constraint FKCONFLICT_MAPPINGID124 foreign key (CONFLICT) references CONFLICT on delete cascade; delete from CONFLICT where UUID in (select CONFLICT from CONFLICT_MAPPING where MODIFICATION in (select UUID from MODIFICATION where DATAITEM = '001992' and TYPE <> 1)); delete from MODIFICATION where DATAITEM = '001992' and TYPE <> 1;
- Lösung: Nachdem der Server vollständig entpackt wurde, bitte den Inhalt der folgenden Dateien austauschen
- py/api/ppms/customizing/venus/ppms/db_update/modules.py
- py/api/ppms/customizing/venus/ppms/db_update/update.py
- migration/after_migration/ZZZ_Icou.py
- durch
Bitte beachten Sie
- Der Austausch der Dateien soll unbedingt während der Installation im Zeitfenster zwischen dem Zeitpunkt wenn der Server vollständig entpackt wurde und dem Beginn der Migration stattfinden.
- Die Information darüber, wann der Server vollständig entpackt ist, entnehmen Sie bitte dem Server-Log.
- Wenn Sie weitere Fragen haben, wenden Sie sich bitte an Ihren PLANTA-Consultant.
- Ursache:
- Das Problem entsteht, weil die für das Verhindern des Löschens der synchronisierten Objekte verantwortlichen Event-Tabellen bzw. deren Inhalt nicht upgedated werden.
- Als Umgehungslösung bitte folgende Statements ausführen:
persistent_db_session
) nicht funktional.
- Lösung: Den folgenden Parameter zur Datei
hibernate.cfg.xml
hinzufügen:<property name="hibernate.connection.release_mode"> on_close </property>
- Ursache:
- Der Client < C 39.5.27 Stable 1 visualisierte in folgenden Customizing-Konstellationen die Datenfeld-Überschriften fälschlicherweise nicht: Wenn in einem Datenbereich der Parameter Überschrift aktiviert war und in dem diesem Bereich untergeordneten Bereich der Parameter Neben Oberbereich aktiviert war. Dies führte dazu, dass auch fälschlicherweise aktivierte Überschriften nicht sichtbar waren.
- Wird nun der Client C 39.5.27 Stable 1 und höher verwendet, sind alle aktivierten Überschriften sichtbar, auch die falsch gesetzten.
- Lösung:
- Für die Datenbereiche, in denen die Datenfeld-Überschriften nicht sichtbar sein sollen, die Checkbox Überschrift deaktivieren.
- Im PLANTA-Standard ab Version DB 39.5.15 sind die Stellen mit fehlerhaftem Customizing korrigiert.
- Ursache:
- Das eigentliche Skill-Listbox-Datenfeld, aus dem Skills ausgewählt werden, ist in der Anwendersicht ausgeblendet, ohne die Option, es einblenden zu können.
- Lösung:
- Den Datenbereich 040732 im Modul Datenbereiche im Customizer öffnen.
- Für das DI002799 den Eintrag im Feld Fenster von 9 auf 1 ändern und und das DI selbst im Datenbereich nach ganz oben schieben.
Dei nachfolgend beschriebene CU-Umgehungslösung gilt, bis das Update auf das C 39.5.27 durchgeführt wurde. Sie ist standardmäßig in den DB-Versionen 39.5.7 - 39.13 enthalten. Haben Sie die Umgehungslösung in Ihrem System (manuell implementiert oder standardmäßig enthalten) und updaten Sie Ihr System auf C 39.5.27, empfehlen wir, die CU-Lösung zu entfernen.
- Umgehungslösung: Im Benutzermenü den Menüpunkt 19 Schließen/Zurücksetzen Überschreiben.
- Vorgehensweise
- Ein neues Makro-Modul mit Klasse 6 anlegen.
- Soll bei F7 etwas ausgeführt werden, hierfür ein Makro schreiben, ansonsten kann das Feld Makro leer bleiben
- Im Benutzermenü-Modul 0099QC einen neuen Datenbereich anlegen
- DDI = 004336 Button/IronPython
- DI 004336 Button/IronPython als Datenfeld anlegen, DF-Verhalten = d4, @L-Variable = 19, Aktions-ID = ID des neu angelegten Makro-Moduls
- Datenbereichsposition vergeben und Nie anzeigen = @Y
Wenn man mit der Belastungskurve PM-MONTH arbeitet und nach dem Planen des Aufwands und dem initialen Kalkulieren des Projekts neue manuelle Belastungen in zukünftigen Monaten anlegen möchte, bekommt man je nach DB-Stand entweder die Meldung: Erfassung nach der aktuellen Woche ist nur für Gemeinkostenprojekte möglich oder Die Buchung von Ist-Aufwänden ist in der Zukunft nicht möglich. Das Problem tritt in den DB-Versionen 39.5.11, 39.5.12 und 39.5.13 auf.
- Lösung:
- Im Server-Verzeichnis unter /py/api/ppms/customizing/venus/ppms/exits in der Datei project_exits.py den Eintrag in der Zeile 43
if not self.load_rec.get_di(di_to_check).get_value():
- durch den folgenden ersetzen:
if not self.load_rec.get_di("load_act").get_value():
- Ursache:
- Die freie Kapazität einer Ressource kann bei der Einzelrechnung nicht immer korrekt ermittelt wurden
- Bei der Einzelrechnung eines Projekts wird nur das aktive Projekt in den Speicher geladen. Andere Projekte, die dieselben Ressourcen verwenden, sind nicht bekannt. Um zu ermitteln, ob einer Ressource an einem bestimmten Tag noch freie Kapazität zur Verfügung steht, kann die Einzelrechnung nur auf die Perioden (DT468) zurückgreifen. In dieser Tabelle steht für jeden Tag, an dem eine Ressource belastet wird, die Auslastung (entspricht der Summe des Restaufwands aller Projekte, die diese Ressource an diesem Tag belasten), aber es fehlt die Information, ob diese Belastung von der Kapazität der Ressource gedeckt wird oder Überlast erzeugt.
- Umgehungslösung:
- Die Berechnung aller Projekte (Neuplanung) durchführen.
Eine ausführliche Beschreibung des alten (bis S 39.5.28) und des neuen korrigierten Verhaltens (ab S 39.5.28) finden Sie hier.
- Ursache:
- Das Kontextmenü befindet sich im Fenster 9
- Lösung:
- Um das Kontextmenü defaultmäßig im Modul Terminplan anzeigen zu lassen
Lösung
- Vor der Durchführung des Updates die Datei
alternative_migration_directory.zip
herunterladen und auf dem Applikations-Server entpacken.- Beim Anpassen der
properties
-Datei den Update-Parameterplanta.alternative_migration_directory
(zur Parameterbeschreibung) wie folgt einfügen:planta.alternative_migration_directory=<Pfad zum alternative_migration_directory-Verzeichnis (z.B. /tmp/migration)>- Das Update auf DB 39.5.11 durchführen.
- Bitte achten Sie darauf, dass das Migrationspaket
A_CreateConstraints
erfolgreich gelaufen ist.- Die Datei
Migrationspakete.zip
herunterladen und entpacken.- Die Datei
WI10938_cost_and_budget_migration.py
in das Verzeichnis/<PLANTA-Server-Verzeichnis>/migration/after_db_import/DB_39_5_2
einfügen.- Die Datei
zz_WI17217_unload_and_replan.py
in das Verzeichnis/<PLANTA-Server-Verzeichnis>/migration/after_db_import/DB_39_5_7
einfügen.- Auf der Datenbank folgendes Statement absetzen:
alter trigger "PLANTA_ON_UPDATE_DT461" disable- PLANTA project starten und einloggen Customizer Migration Migrationspakete Klick auf den Button Pakete von Dateisystem lesen
- Die Migrationspakete
MigrateCostsAndBudget
undUnloadAndReplan
ausführen.- Auf der Datenbank folgendes Statement absetzen:
alter trigger "PLANTA_ON_UPDATE_DT461" enable
- Lösung
- Die Datei
load_creation
im Verzeichnisppms.module_subclasses.load_creation.CostRevenueBookingModule
durch die folgendeersetzen.
- Lösung:
- Um den Fehler im System zu korrigieren
- bitte die beigefügte Python-Datei period.py.txt
in Ihrem Serververzeichnis unter py/api/ppms/customizing/venus/ppms/period.py abspeichern.
- Bitte die Datei als .py-Datei (period.py) speichern.
- Um die bereits fehlerhaften Daten zu korrigieren
- Im Customizer ein Makromodul erstellen und das beigefügte Makro work_flag_fix.py.txt
einkopieren.
- Das Makro ausführen.
- Lösung:
- Modul Quality Gates MOD009CU6 im Customizer öffnen.
- Im Datenbereich 057527 das Feld 001114 Wunsch-Ende auf input setzen.
- Speichern.
archive_dir
(behoben mit S 39.5.25) archive_dir
tritt ein SQL-Fehler auf.
- Lösung:
- Das Listboxmodul 009COL, in dem der Fehler auftritt, im Customizer öffnen.
- In den Datenbereichen 056658 und 056659 die Werte in den Datenfeldern Pos. und Oberbereich entfernen.
FixPeriodAggregationQuery
schlägt beim Venus-Update unter MSSQL fehl (behoben mit S 39.5.25) FixPeriodAggregationQuery
besteht beim Update von Venus-Systemen auf Server 39.5.24 unter MSSQL ggf. das Problem, dass das Paket fehlschlägt. Das Problem besteht nicht beim Update von Venus on Earth auf Server 39.5.24.
Ursache:Lösung:
- In der Datenbank wird eine falsche Version des Statements erwartet.
- Statement 000682 (für MSSQL) durch das Statement aus dem PLANTA Server-Verzeichnis migration/server/S_39_5_24/aggregation_mssql_old.sql ersetzen.
- Anschließend das Migrationspaket
FixPeriodAggregationQuery
erneut ausführen.
- Ursache:
- Das Migrationspaket
MoveDeviationOutOfScheduling
setzt die DIs DI001296 und DI001177 auf virtuell, löscht die Spalten aus der Datenbank und fügt stattdessen für die virtuellen DIs Wertebereiche ein, die die Berechnung übernehmen. Die entsprechenden DIs in Statusberichtstabellen wurden jedoch nicht auf virtuell gesetzt.- Lösung:
- Modul Data Dictionary öffnen.
- Für DI008708 in DT823 und DI008766 in DT824
- das Feld Dataitem für Abgleichsquelle leeren,
- beide DIs auf Virtuell =
und WB-Art = PY setzen
- in beide DIs den folgenden Wertebereich einkopieren:
def computeOutput(di): rec = di.get_dtp_record() calc_end = rec.calc_end.get_value() requested_end = rec.req_end.get_value() if not calc_end or not requested_end: return 0 return calc_end - requested_end computeOutput.deps = ("calc_end","req_end")
- Speichern.
- Server neustarten
- Lösung:
- Entweder Serverpatch für S 39.5.22 einspielen
- Zur Behebung des Problems steht ab sofort ein Serverpatch zur Verfügung. Zum Einspielen des Patches wenden Sie sich bitte an Ihren PLANTA-Consultant.
- Oder Update auf S 39.5.23 durchführen
- Lösung: Die oben genannte Spalte nicht verwenden. In der Version DB 39.5.10 wurde sie aus dem Modul Ressourcenstruktur entfernt.
Bei der Durchführung eines CU-Deployments unter MSSQL kann es zu folgendem Fehler kommen:
ERROR session=global o.d.o.AbstractBatchOperation - execute: table.column=DT397.DI024561 value is empty but must contain a value de.planta.server.database.DataTransferException: ERROR inserting intotable DT397 at de.planta.server.database.DataImporter$ImportHandle.performTransferNonAtomic(DataImporter.java:218)
- Lösung ab S 39.5.19
Bevor das CU-Deployment durchgeführt wird, muss über das Modul Datenbank-Konsistenz überprüfen / Konsistenzcheck eine I-Text-Überprüfung im Quellsystem erfolgen.
- Lösung bis einschließlich S 39.5.18
Bevor das CU-Deployment durchgeführt wird, müssen NULL-Werte von DI024561 aus der Datenbank des Quellsystems entfernt werden. Hierfür folgendes SQL-Statement ausführen.DELETE FROM DT397 WHERE DI024561 IS NULL
Hinweis
- Lösung:
- Im Modul Module MOD 009A52 öffnen.
- Datenbereich 045418 öffnen.
- IronPyhton-Skript für DF714068 und DF719852 wie folgt anpassen:
- Zeile 54 in beiden Datenfeldern ändern zu:
dict_list = sort_dict_list_by_date(dict_list)
- Lösung:
- Im Modul Dataitems DI 041422 öffnen.
- Den vorhandenen Python-Wertebereich durch den folgenden ersetzen:
def set_absence(rec,type): vacation=rec.vacation absence=rec.absence work=rec.work """reset vacation or absence""" vacation.set_string_value(0) absence.set_string_value(0) rec.save(('absence','vacation')) if type == "vacation": vacation.set_string_value(1) work.set_value(0) elif type == "half_vacation": vacation.set_string_value(0.5) elif type == "absence": absence.set_value(1) work.set_value(0) elif type == "half_absence": absence.set_string_value(0.5) def remove_absence(rec): rec.vacation.set_string_value(0) rec.absence.set_string_value(0) rec.work.set_value(1) def processInput(di, oldvalue): rec = di.get_dtp_record() new_val = di.get_value() vacation=rec.vacation absence=rec.absence old_absence=absence.get_value() old_vacation=vacation.get_value() absence_type=di.get_value() work=rec.work.get_value() type="" type_dict={} type_dict["half_vacation"]=[11] type_dict["vacation"]=[10] type_dict["half_absence"]=[21] type_dict["absence"]=[20, 30] type_master = ppms.search_record(447, [absence_type], [41279], True) if hasattr(type_master,'number_i2'): type_master_data=type_master.number_i2.get_value() else: type_master_data="" for key,value in type_dict.items(): if type_master_data in value: type=key if (work == 1 or old_absence == 1 or old_vacation == 1) and type != "": set_absence(rec,type) return new_val elif work ==0: ppms.ui_message_id("0711") remove_absence(rec) return 0 else: remove_absence(rec) return 0 processInput.deps = ("DI001364",)
Bei einem Update auf Server 39.5.20 wird der Client nicht installiert.
- Lösung:
- Update durchführen mit
client install = no
- Der Client muss für die Releases Server 39.5.20 und DB 39.5.8 separat installiert werden. Folgende Wege sind möglich:
- Aktuellen Client herunterladen und die Client-Installation ohne PLANTA-Installer durchführen.
- Aufruf des Client-Installers im Verzeichnis des PLANTA-Installers:
<Installer-Verzeichnis>\client\Installer\PlantaClientInstaller.exe
.
Bei der Durchführung eines CU-Deployments kann es zu folgendem Fehler kommen:
de.planta.server.database.DataTransferException: ERROR inserting into DT 447 / SQL table 'DT447' Caused by: java.sql.BatchUpdateException: ORA-01400: Einfügen von NULL in ("DB_USER"."DT447"."DI041270") nicht möglich
- Lösung:
Bevor das CU-Deployment durchgeführt wird, müssen im Quellsystem Daten in der DT447 bereinigt werden. Dazu sind folgende SQL-Statements erforderlich:
UPDATE DT447 SET DI041270 = '011' WHERE DI041270 IS NULL OR DI041270 = (''); UPDATE DT447 SET DI041269 = 'P20' WHERE DI041269 LIKE '%8'; UPDATE DT447 SET DI041268 = 'P20' WHERE DI041268 LIKE '%8';
- Lösung:
- Modul Textkonstanten öffnen.
- Spalte Konstante EN für die Sprache "Englisch" einblenden.
- Den Text der Konstante 001789
- Holiday import for calendar "{calendar}" - state: {} - Year {start_year} till {end_year}
- durch den folgenden ersetzen:
- Holiday import for calendar "{calendar}" - state: {state} - Year {start_year} till {end_year}
- Lösung: In der Datei
base_class.py
im Verzeichnispy\api\ppms\customizing\venus\ppms\module_subclasses\
die Funktionsafe_mv_switch
durch folgende Zeilen ersetzen :def safe_mv_switch(fn): @wraps(fn) def wrapped_mv(*args, **kwargs): mod_obj = args[0] right_setting = getattr(mod_obj, 'right_setting', None) if not right_setting: right_setting = getattr(mod_obj, 'right_settings', None) if right_setting: # Avoid customizing dependency until runtime from ppms import project_rights project_rights.exec_project_rights(mod_obj, right_setting) return fn(*args, **kwargs) return wrapped_mv
- Lösung:
- Im Modul Datenbereiche den Datenbereich 052067 öffnen.
- Auf dem DI008413 die Variable @L30 einfügen.
- Speichern.
- Lösung: In diesem Fall muss der Dienst (Server) neugestartet werden.
- Lösung:
- Die Prozedur
p_calc_periods
auf der Datenbank löschen (drop).- Das folgende Skript
P_CALC_PERIODS.sql
auf der Datenbank ausführen.- Ein Makromodul anlegen, die folgende
Perioden_korrigieren.py
einkopieren und das Makro ausführen.
- Lösung:
- Modul 0099IJ im Modul Module öffnen.
- Für Datenbereich 045322 Ressource die Chechbox des Parameters Verschieben deaktivieren.
- Speichern.
- Lösung:
- Sind in Bereichen mit dem aktivierten Parameter Gruppe Ampel-DIs (z.B. Balken) vorhanden, müssen die Unter-DIs dieser DIs ebenfalls in den Datenbereich aufgenommen werden. Das Beispiel siehe anhand des Modules Ressourcenauslastung nach Code
- Lösung:
- Customizer Datenbanken Lizenz, Systemparameter und DB-Instanzen öffnen.
- Lizenz 000 löschen.
- Lösung:
- Im Modul Module Modul 0099FA öffnen.
- Datenbereich 050091 öffnen.
- Im Datenbereich ein neues Datenfeld für DI057615 anlegen. Den Parameter Fenster mit dem Wert "9" und den Parameter DF-Verhalten mit dem Wert "o" belegen.
- Speichern.
- Lösung:
- Die vorhandene Python-Datei
start_tcalc.py
unter/py/api/ppms/customizing/venus/ppms
durch die folgende start_tcalc.pyersetzen.
Im Modul Ressourcenauslastung nach Code werden die Balken für die kalkulierten Termine unterhalb der Ressourcen in der selben Farbe dargestellt statt derjenigen, die dem Projektcode zugeordnet ist.
- Lösung:
- Modul 0099G0 im Modul-Customizer öffnen.
- Datenbereich 044340 öffnen.
- Im Datenbereich ein neues Datenfeld für DI007633 anlegen. Den Parameter Fenster mit dem Wert "9" und den Parameter DF-Verhalten mit dem Wert "o" belegen.
- Speichern.
- Lösung:
- Im Modul Prozessmodell-Templates im Prozessmodell als Platzhalter einen Wert angeben, der entweder eine gültige Ressourcen-ID ist oder eine gültige Python-ID, die eine Ressourcen-ID beinhaltet.
- Lösung:
- Modul Symbole öffnen.
- Ein neues Symbol erstellen mit:
- Bezeichnung = Vorgang mit Zyklus
- Hintergrundfarb-ID = 0002663
- Randfarb-ID = 0002663
- Inhaltsfarb-ID = 000001
- Symbolart = 0
- Höhe = 38
- Schrifthöhe = 21
- Min. Breite = 18
- Randdicke = 1
- Randform = 16
- DI007003 im Modul Dataitems öffnen
- Für SUBDI 001148 in SUBDI-Symbol-ID die ID des neu erstellten Symbols eintragen.
- Speichern.
- System-Customizing neu laden.
- Lösung für das Erfassen der Ressourcen direkt im Modul Ressourcendatenblatt:
- Die Werte in den Feldern Startperiode und Endperiode jeweils um einen Tag verlängern oder verkürzen.
- Speichern.
- Die Werte, wenn notwendig, zurückändern und nochmal speichern.
- Lösung für den Import:
- Die Mitarbeiterdaten zweimal importieren:
- Der erste Importlauf ohne übergeordnete Ressource (bzw. mit Feld Name Übergeordnete Ressource bei allen Personen = leer). Dabei werden die Ressourcen mit Ihren Perioden angelegt.
- Der zweite Importlauf mit den übergeordneten Ressourcen. Dabei wird die Struktur erzeugt.
Wird im Modul Abwesenheit der bereits gespeicherte Abwesenheitstyp (Abwesenheitsgrund) auf einen anderen geändert (z.B. Abwesenheit auf Krankheit), wird die entsprechende Ressource an dem Tag auf "verfügbar" zurückgesetzt und kann eingeplant werden.
- Lösung:
- Im Modul Dataitems DI041422 öffnen.
- Den Wertebereich folgendermaßen anpassen.
- Vorher:
Nachher:def set_value(rec,type): vacation=rec.vacation absence=rec.absence # """reset vacation and absence""" vacation.set_string_value(0) absence.set_string_value(0) ...def set_value(rec,type): vacation=rec.vacation absence=rec.absence # """reset vacation and absence""" vacation.set_string_value(0) absence.set_string_value(0) rec.save(('absence','vacation')) ...- Speichern.
Beim Importieren von Microsoft Project-Dateien tritt die Fehlermeldung UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8f in position 50: invalid start byte nach jedem Server-Update ab Version S 39.5.17 auf.
- Lösung:
- Die Verzeichnisse /user_interface/ und /msp_interface/ müssen nachträglich ausgetauscht werden.
- Hinweis: Verzeichnisse zunächst sichern
- die erforderlichen Dateien befinden sich in der Datei py.zip
![]()
- PLANTA-Dienst neustarten
IE: java.lang.NullPointerException
- Lösung:
- In den Clientparametern: mutual = on hinterlegen
- Lösung:
- Zurück zum Modul mit der aktiven Suchleiste wechseln.
- Die Suchleiste schließen.
- Lösung:
- Modul 0099CA im Modul Module öffnen.
- Datenbereich 040563 im Modul Datenbereiche öffnen.
- Für DI001193 Sprachcode im Parameter Standardwert den Wert @19 eintragen.
- Speichern.
- Lösung:
- Im Modul Dataitems DI 041422 öffnen.
- Den vorhandenen Python-Wertebereich durch den den folgenden ersetzen:
def set_absence(rec,type): vacation=rec.vacation absence=rec.absence work=rec.work """reset vacation or absence""" vacation.set_string_value(0) absence.set_string_value(0) rec.save(('absence','vacation')) if type == "vacation": vacation.set_string_value(1) work.set_value(0) elif type == "half_vacation": vacation.set_string_value(0.5) elif type == "absence": absence.set_value(1) work.set_value(0) elif type == "half_absence": absence.set_string_value(0.5) def remove_absence(rec): rec.vacation.set_string_value(0) rec.absence.set_string_value(0) rec.work.set_value(1) def processInput(di, oldvalue): rec = di.get_dtp_record() new_val = di.get_value() vacation=rec.vacation absence=rec.absence old_absence=absence.get_value() old_vacation=vacation.get_value() absence_type=di.get_value() work=rec.work.get_value() type="" type_dict={} type_dict["half_vacation"]=[11] type_dict["vacation"]=[10] type_dict["half_absence"]=[21] type_dict["absence"]=[20, 30] type_master = ppms.search_record(447, [absence_type], [41279], True) if hasattr(type_master,'number_i2'): type_master_data=type_master.number_i2.get_value() else: type_master_data="" for key,value in type_dict.items(): if type_master_data in value: type=key if (work == 1 or old_absence == 1 or old_vacation == 1) and type != "": set_absence(rec,type) return new_val elif work ==0: ppms.ui_message_id("0711") remove_absence(rec) return 0 else: remove_absence(rec) return 0 processInput.deps = ("DI001364",)
- Lösung:
- Das Modul Data Dictionary öffnen.
- Den Entity-Namen der DT875 zu RiskCategory ändern und speichern.
- Danach muss das Data Dictionary neu geladen werden: Tools -> PLANTA-Dienst neu starten (Bis S 39.5.20: Tools -> System-Customizing neu laden)
- Lösung:
- Im Modul Dataitems DI023284 öffnen.
- Den Parameter WB-Art = PY setzen.
- Den vorhandenen Eintrag im Feld Wertebereich durch den folgenden ersetzen:
def computeOutput(di): rec = di.get_dtp_record() name = '' rec875 = ppms.search_record(875, [str(rec.category_id.get_value())], ['name'], True) if rec875: name = rec875.name.get_value() return name computeOutput.deps = ("DI023022",)
- Speichern.
Hinweis
- Lösung: Den Standard-Druckfuß wie folgt anpassen:
- Das Modul 009AFA im Modul Module Öffnen.
- Den Datenbereich 045645 Öffnen.
- Hier das DI 000022 mit DI 025544 ersetzen und mit der folgenden Datenfeld-Konfiguration speichern:
Hinweise
DI Drucktext Fenster DF-Verhalten DF-Höhe DF-Breite X-Pos. F Y-Pos. F Symbol-ID 025544 @date_time(dd.MM.yy HH:mm:ss) 1 o 35 600 600 10 002008
- Die Änderungen werden nach dem Neustarten der Session wirksam.
- Ein individuleller Druckbereich muss unter Verwenden der neuen Variable @date_time(dd.MM.yy HH:mm:ss) im Feld Drucktext angepasst werden.
- Lösung: Den Standard-Druckfuß wie folgt anpassen:
- Das Modul 009AFA im Modul Module Öffnen.
- Den Datenbereich 045645 Öffnen.
- Hier das DI 025544 und DI 056959 einfügen mit folgender Datenfeld-Konfiguration:
DI ![]()
DF-Überschrift Drucktext Fenster DF-Verhalten DF-Höhe DF-Breite X-Pos. Ü Y-Pos. Ü X-Pos. F Y-Pos. F Symbol-ID 025544 @date_time(dd.MM.yy HH:mm:ss) 1 o 35 600 600 10 002008 056959 Gedruckt von: 1 o 1000 10 10 300 10 002008 Hinweise
- Das DI 000022 auf Fenster 9 setzten und speichern.
- Die Änderungen werden nach dem Neustarten der Session wirksam.
- Ein individuleller Druckbereich muss unter Verwenden der neuen Variable @date_time(dd.MM.yy HH:mm:ss) im Feld Drucktext angepasst werden.
- Lösung:
- Um dies zu beheben, muss der die Python-Datei
start_tcalc.py
unter/py/planta_de/ppms
durch die nachfolgende ersetzt werden.
Information
def computeOutput(di): rec = di.get_dtp_record() if rec: # using dtp for projections (has no mts) avail_cap = rec.summ_avail_cap.get_value() summ_planned = rec.summ_planned.get_value() else: # using mts for groupings (has no dtp) rec = di.get_dfs()[0].get_record() avail_cap = rec.summ_avail_cap.get_raw_value() summ_planned = rec.summ_planned.get_raw_value() if not avail_cap: return 0 perc = (summ_planned / avail_cap) * 100 return perc computeOutput.deps = ("DI002454", "DI002483")
Beispiel
Hinweis
Beim Installieren einer DB 39.5.6 (DB-Import) mit bestimmten Java-Umgebungen (z.B. bei einer Java-Version 1.7.0_71) tritt der folgende Fehler auf:
Performing DB import: Disabling database objects that might get in the way, such as triggers and foreign key constraints... done, disabled 633 objects. de.planta.server.database.DataTransferException: ERROR refreshing DT 411 / SQL table 'DT411' at de.planta.server.database.DataImporter$ImportHandle.performTransfer(DataImporter.java:268) at de.planta.server.database.DataImporter$ImportHandle.performTransfer(DataImporter.java:123) at de.planta.server.database.DataTransfer$TransferHandle.call(DataTransfer.java:101) at java.util.concurrent.FutureTask.run(FutureTask.java:262) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) at java.util.concurrent.FutureTask.run(FutureTask.java:262) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:745) Caused by: org.dbunit.dataset.datatype.TypeCastException: Unable to typecast value <g> of type <java.lang.String> to NUMERIC
- Lösung: Neueste Java-Version verwenden
- Lösung: Das Makro von Modul Meine Tätigkeiten muss ausgetauscht werden.
- Vorgehensweise
- Im Modul Module Modul 009BJ3 öffnen.
- Den Button Makro bearbeiten anklicken.
- Im vorhandenen Makro nach der Funktion
display_todays_tasks
suchen und diese durch Folgendes ersetzen:def display_todays_tasks(): todays_tasks_area_id = '000918' possible_children = [] [possible_children.append(dac.get_name()) for dac in mod_obj.constants.get_customizing().get_children()] for constants_rec in mod_obj.constants.get_records(): if constants_rec.no_id.get_raw_value() == todays_tasks_area_id: for da_name in possible_children: child_recs = constants_rec.get_children(da_name) if len(child_recs) > 0: child_recs[0].expand()
- Lösung:
- Modul 0099V3 im Modul-Customizer Öffnen.
- Datenbereich 043806 Öffnen.
- für DI063594 im Parameter DF-Überschrift den folgenden Text eintragen: Platzhalter gesetzt
- Speichern.
- Lösung:
- Modul 009A52 öffnen.
- Datenbereich 044745 öffnen.
- DI029191 durch DI029197 ersetzen.
- Speichern.
Beim Öffnen einer Listbox, bei der keine Daten gefunden werden und für die im Customizer die Checkbox Feste Überschrift deaktiviert ist, erscheint das aufgeklappte Listbox-Fenster in grau. Klickt man in das graue Fenster, führt dies zu einem Systemabsturz.
Beispiel
![]()
- Lösung: Im entsprechenden Listbox-Modul die Checkbox Feste Überschrift aktivieren (und falls gewünscht, die Checkbox Überschrift deaktivieren).
- Lösung:
- Im Modul Module das Modul 009A6K öffnen.
- Das Makro für das Modul ändern auf:
from ppms import ppms #Macro module module_macro = ppms.get_macro_module() #Invoker module invoker_module = ppms.get_target_module() #Get module if hasattr(module_macro.get_invoker_rec(), 'startup_mod'): sub_mod_nr = module_macro.get_invoker_rec().startup_mod.get_text_value() else: sub_mod_nr = module_macro.get_invoker_rec().startup_module.get_text_value() values = [] values.append(sub_mod_nr) #Set @L value invoker_module.set_new_L_var(4, values) #Open new mainmodule for submodule value mod_obj = invoker_module.open_module('000855')
- Lösung (ab C 39.5.13): Im Standard-Fußzeilen-Druckbereich DA045645 oder im individuell verwendeten Druckbereich das DI000022 Heutedatum durch das DI025581 Background ersetzen und im Parameter Drucktext (im Standard ausgeblendet, muss eingeblendet werden) folgende Variable eintragen:
@date_time(dd.MM.yy HH:mm:ss
on_load
bei der Statusberichtserstellung in S 39.5.14 (Oracle) (behoben mit S 39.5.15) Beim Erstellen von Statusberichten unter Oracle kommt die folgende Fehlermeldung planta_de.ppms.ppms_.DatabaseError: 'java.sql.SQLException: ORA-01747: Ungültige Angabe für benutzer.tabelle.spalte, tabelle.spalte oder spalte\n
- Ursache: Fehlerhafte SQL-Statements 000336 und 000312
- Lösung: Bitte den Inhalt der oben genannten SQL-Statements durch den jeweils Folgenden ersetzen:
000336SELECT DI000215,DI040837 FROM DT412 WHERE di000275=0 and di001700 <> 20 AND di000239='{0}' AND DI040837 is not NULL000312SELECT DISTINCT DI000215, (SELECT DI000215 FROM DT412 source_name WHERE DI000238=DT412.DI040837), (SELECT DI000239 FROM DT412 source_table WHERE DI000238=DT412.DI040837) FROM DT412 WHERE DT412.DI000239='{0}' AND DT412.DI040837 IS NOT NULL AND DI040837!='AUTO' AND DI040837!='DATE' AND DI040837!='USER' ORDER BY DT412.DI000215 asc
on_load
bei der Statusberichtsfreigabe S 39.5.14 (behoben mit S 39.5.15)
- Ursache: Fehlerhafte Python-Dateien
create_report.py
undproject_rights.py
- Lösung: Bitte den Inhalt der Dateien durch den jeweils folgenden ersetzen:
- Ursache: die überarbeitete Version dieses Moduls wurde fälschlicherweise bereits in die Datenbank Version 39.5.3 integriert
- Lösung:
- Das Modul Migrationspakete 009BWQ kann in dieser Version nicht verwendet werden, stattdessen ist Modul 009CEP zu nutzen
- hierzu muss der Python-Stand der Ordner py und migration im Server-Verzeichnis auf Changeset 47818 angehoben werden
- ausserdem ist es notwendig "${WORKDIR}" in den Dateien planta_server.sh und yajsw/conf/common.conf in die Variable "PYTHONPATH" aufzunehmen
- Lösung:
- Im Modul Module Modul 009BK0 öffnen.
- Den Button Makro bearbeiten klicken.
- DIe folgenden Zeilen ersetzen:
- Vorher:
Nachher:pr_id = ppms.get_target_module().get_current_L_var()[74][0] mod.set_new_L_var(74, [pr_id])pr_id = ppms.get_target_module().get_current_L_var()[30][0] mod.set_new_L_var(30, [pr_id])- Speichern.
- Ursache: Die Laufzeit eines Projekts ist länger als die des Basiskalenders.
- Lösung: Im Modul Kalender die Laufzeit des Basiskalenders an die Laufzeit des Projekts anpassen.
Werden auf einem Vorgang bei einer Kosten-Ressource Kosten-Rest geplant und gerechnet, dann die Kosten-Rest manuell geändert, der Ist-Anfangstermin gesetzt und nochmal gerechnet, ist die Änderung der Kosten-Rest im gleichnamigen Feld auf dem Vorgang (DT463) nicht sichtbar, bei den Kosten-Gesamt jedoch schon.
- Lösung:
- Um ab sofort alle Skins korrekt anzulegen
- Im Modul Module Modul 006556 öffnen.
- Im Modul Datenbereiche den Datenbereich 026290 öffnen.
- Im Datenbereich ein neues Datenfeld für DI025687 anlegen. Den Parameter Fenster mit dem Wert 9 und Parameter DF-Verhalten mit dem Wert i2 belegen. Zusätzlich im Parameter Standardwert den Wert @Y eintragen.
- Speichern.
- Um bereits bestehende Skin zusätzlich zu korrigieren
- Das Modul Skins öffnen.
- Das gewünschte Skin öffnen.
- Den Customizing-Modus aktivieren.
- Das Feld Kleinbuchstaben aus Fenster 9 einblenden.
- Die Checkbox Kleinbuchstaben aktivieren.
- Speichern.
- Ursache: Die Prozedur
p_upd_kost_aufw_erl_akt
ist fehlerhaft.- Umgehungslösung: Die Abfrage in der Prozedur wie folgt anpassen:
SELECT di001001 AS pr, di023062 AS jahr, di001003 AS ueb_pr, dt470.di029478 AS koagrp, ROUND(SUM(di001413)) AS soll, ROUND(SUM(di001419)) AS ist, ROUND(SUM(di001426)) AS rest, ROUND(SUM(di001432)) AS gesamt, ROUND(SUM(case when DI003414 in ('1I','1E','5','2') then di001509 else 0 end)) AS soll_aufw, ROUND(SUM(case when DI003414 in ('1I','1E','5','2') then di001510 else 0 end)) AS ist_aufw, ROUND(SUM(case when DI003414 in ('1I','1E','5','2') then di001511 else 0 end)) AS rest_aufw FROM dt472 INNER JOIN dt461 ON (di001395 = di001001) INNER JOIN DT467 ON (DI001517=DI001218) INNER JOIN DT470 ON (di001366 = di001518) INNER JOIN dt861 ON (di001395 = di023119 and di023062 = extract(YEAR FROM di001519)) -- Positive buchungen WHERE dt472.di001510 + dt472.di001511 <> 0 AND dt461.di001052 = '002190' GROUP BY di001001, di023062, di001003, di029478
- Lösung:
- Dataitem 001042 im Modul Dataitems öffnen und dort den Wertebereich durch folgenden ersetzen:
def checkInput(di, oldvalue): rec = di.get_dtp_record() #check pr is main pr if rec.pr_id.get_value() != rec.main_pr_id.get_value(): ppms.ui_message_id("0835") return False return di.get_value() in [0, 1, 2, 9] checkInput.deps = ("DI001052",) def processInput(di, oldvalue): rec = di.get_dtp_record() pr_id = rec.pr_id.get_value() project_state = di.get_value() main_pr_id = rec.main_pr_id.get_value() # check if project is loaded pr_loaded = rec.loaded.get_value() loaded_rec = ppms.search_record(461, [main_pr_id], [1044], True) if loaded_rec: main_pr_loaded = loaded_rec.loaded.get_value() else: main_pr_loaded = 0 if project_state in [0, 2, 9] and pr_loaded == 1 and main_pr_loaded == 1: module = ppms.get_active_module() if not module: # If we don't have a module context just forget about this # Since we don't have a direct python API for calling tcalc and # friends and we need to have a module context to open new modules ppms.ui_message_id("0376") return oldvalue else: ppms.ui_message_id('0923') msg = ppms.msg_pop() if msg.get_reply() == 1: # Temporarily restore the old value so the tcalc filter will not ignore this project di.set_value(oldvalue) module.set_new_L_var(4, [pr_id]) with ppms.echo_disabled(): tmod = module.open_module('009BU8') tmod.menu(12) tmod.menu(35) tmod.menu(37) tmod.menu(49) else: return oldvalue if pr_id == main_pr_id: query = ppms.get_query("000271").format(main_pr_id) entire_project_structure = ppms.db_select(query) for sql_pr_id in entire_project_structure: if sql_pr_id[0] != pr_id: current_pr_rec = ppms.search_record(461, [sql_pr_id[0]], [1042], True) current_pr_rec.project_state.set_value(project_state) current_pr_rec.save(("project_state",)) return project_state processInput.deps = ("DI001052", "DI001044")
- Lösung:
- Dataitem 001042 im Modul Dataitems öffnen und dort den Wertebereich durch folgenden ersetzen:
def checkInput(di, oldvalue): rec = di.get_dtp_record() #check pr is main pr if rec.pr_id.get_value() != rec.main_pr_id.get_value(): ppms.ui_message_id("0835") return False return di.get_value() in [0, 1, 2, 9] checkInput.deps = ("DI001052",) def processInput(di, oldvalue): rec = di.get_dtp_record() pr_id = rec.pr_id.get_value() project_state = di.get_value() main_pr_id = rec.main_pr_id.get_value() # check if project is loaded pr_loaded = rec.loaded.get_value() loaded_rec = ppms.search_record(461, [main_pr_id], [1044], True) if loaded_rec: main_pr_loaded = loaded_rec.loaded.get_value() else: main_pr_loaded = 0 if project_state in [0, 2, 9] and pr_loaded == 1 and main_pr_loaded == 1: module = ppms.get_active_module() if not module: # If we don't have a module context just forget about this # Since we don't have a direct python API for calling tcalc and # friends and we need to have a module context to open new modules ppms.ui_message_id("0376") return oldvalue else: ppms.ui_message_id('0923') msg = ppms.msg_pop() if msg.get_reply() == 1: # Temporarily restore the old value so the tcalc filter will not ignore this project di.set_value(oldvalue) module.set_new_L_var(4, [pr_id]) ppms.echo_off() tmod = module.open_module('009BU8') tmod.menu(12) tmod.menu(35) tmod.menu(37) tmod.menu(49) ppms.echo_on() else: return oldvalue if pr_id == main_pr_id: query = ppms.get_query("000271").format(main_pr_id) entire_project_structure = ppms.db_select(query) for sql_pr_id in entire_project_structure: if sql_pr_id[0] != pr_id: current_pr_rec = ppms.search_record(461, [sql_pr_id[0]], [1042], True) current_pr_rec.project_state.set_value(project_state) current_pr_rec.save(("project_state",)) return project_state processInput.deps = ("DI001052", "DI001044")
Python error in value range DI059707 "current_report_ole_def_effort":computeOutput <class 'TypeError'>: argument must be string, not None Python error in value range DI059708 "current_report_ole_def_costs":computeOutput <class 'TypeError'>: argument must be string, not None
Vorher:
- Ursache: falsch konstruierter Wertebereich
- Lösung: Im Wertebereich der DIs 059707 und 059708 die folgende Zeile ersetzen:
Nachher:elif current_value < float(compare_value_2):elif current_value <= float(compare_value_2):
Unhandled Python Exception in macro 009AVG [....] AttributeError: 'Module' has no attribute 'portfolio_id'
- Lösung:
- Im Modul Module Modul 0099FV öffnen.
- DA 040996 öffnen und folgende Dataitems in den Datenbereich übernehmen: 023178, 023179, 023278 und 023119.
- Für alle Datenfelder Fenster = 9 und DF-Optionen =
setzen und speichern.
- Ursache: Fehler im Python-Makro
- Lösung: Im Modul Module 0099CN eingeben und Klick auf die Schaltfläche Makrobearbeitung aufrufen und wie folgt vorgehen:
mod_id = module_macro.get_invoker_rec().get_dtp_record().id.get_value()durchif hasattr(module_macro.get_invoker_rec().get_dtp_record(),'id'): mod_id = module_macro.get_invoker_rec().get_dtp_record().id.get_value() else: mod_id = module_macro.get_invoker_rec().get_dtp_record().module_id.get_value()austauschen
- Unrsache
- Es ist kein Format auf dem entsprechenden Feld hinterlegt.
- Lösung:
- DA050306 im Modul-Customizer öffnen.
- Für DI001423 das Format 000065 in Spalte Format-ID hinterlegen.
- Speichern.
- Anmerkung:
- Sollen in der Skala die Belastungswerte ebenfalls mit Nachkommastelle und nicht gerundet angezeigt werden, müssen die Formate der entsprechenden Projektionen ausgetauscht werden.
- Ursache:
- Es fehlen die Übersetzungen zu folgenden Modulbezeichnungen:
- 0099RW Define Incarnation/Fetch Exit
- 0099ZS Select Data Area
- 0099ZV Include Data Items in Data Area
- 0099ZR Include Data Items in Data Area
- Zudem fehlt die folgende DF-Überschrift:
- Im Datenbereich 031148 für DF 85626 Edit exit
- Lösung:
- Die fehlenden Überschriften- und Modulübersetzungen müssen manuell ergänzt werden.
- Ursache: Customizing: Die Reihenfolge im Feld Sortierreihenfolge ist falsch eingestellt.
- Lösung: Im Datenbereich 041023 Dynamische Gruppierung im Feld Sortierreihenfolge folgende Werte eintragen:
- Für das Datenfeld 461: OLAP 1 - txt (DI029160) eine 3
- Für das Datenfeld 461: OLAP 1 - Numerisch für Sortierung (DI057587) eine 1
- Für das Datenfeld 461: OLAP 1 - 029129 (DI029133) eine 2
- Lösung:
- Im Modul Dialogmeldungen eine neue Dialogmeldung anlegen:
- Ausgabeart auf "1" stellen.
- Dialogmeldung mit folgendem Text befüllen: "Es existieren bereits Bewertungskriterien für das aktuelle Projekt. Sollen diese gelöscht werden?"
- Button-Art auf "3" stellen.
- Dataitem 041680 im Modul Dataitems öffnen und dort den folgenden Wertebereich einfügen:
from ppms.module_subclasses import portfolio_module from ppms import project_rights def processInput(di, oldvalue): rec = di.get_dtp_record() pr_id=rec.pr_id.get_value() vh_851=rec.get_children(851) vh_863=rec.get_children(863) if len(vh_851)+len(vh_863) > 0: ppms.ui_message_id("DIALOGMEDUNGS-ID") # Dieser Text muss durch die oben angelegte Dialogmeldungs-ID ausgetauscht werden. msg = ppms.msg_pop() if msg.get_reply() == 1: for rec851 in vh_851: rec851.delete() for rec863 in vh_863: rec863.delete() rec.object_contrib_in.set_value(0) rec.risk_value_in.set_value(0) return di.get_value() else: return oldvalue else: return di.get_value() processInput.deps = ("DI001001","DI022774","DI022781")
- Im oberen Code die Dialogmeldungs-ID an der markierten Stelle mit der oben angelegten Dialogmeldung austauschen.
- Die WB-Art zu "PY" ändern und speichern.
Python error in macro XYZ ... ORA-00942: Tabelle oder View nicht vorhanden .... Python error in macro XYZ... ORA-06550 ... PLS00103: Fand das Symbol '"' als eines der folgenden erwartet wurde ....
- Ursache sind fehlende Rechte auf die zugrunde liegenden Materialized Views, die den falschen Owner (ungleich dem Schema Owner) haben. Dies entsteht hauptsächlich durch das Einspielen der Datenbank mit dem Oracle Legacy Import Tool
imp
.- Lösung:
- Zur Datenbank verbinden als SYSDBA (zwingend), mit sqlplus oder Developer
- Verifizieren, dass der View Owner ein anderer als der Schema Owner ist (im folgenden <your_database_user> mit dem Namen des betreffenden DB-Users ersetzen):
SELECT * FROM SNAP_REFTIME$ WHERE SOWNER = '<your_database_user>'; -- or more generic: (SOWNER <> MOWNER) SELECT * FROM SNAP$ WHERE SOWNER = '<your_database_user>'; -- or more generic: (SOWNER <> MOWNER)* Zur Korrektur die folgenden drei Zeilen ausführen:UPDATE SNAP_REFTIME$ SET MOWNER=SOWNER WHERE SOWNER = '<your_database_user>'; UPDATE SNAP$ SET MOWNER=SOWNER WHERE SOWNER = '<your_database_user>'; COMMIT;
- Ursache: Die Kapazitätsrechnung wurde noch nicht durchgeführt oder konnte z.B. aufgrund eines Zyklus im Terminplan nicht komplett fertiggestellt werden.
- Lösung: Die Kapazitätsrechnung (erneut) durchführen.
- Ursache: In DA050823 ist zwar das DI Farbintensität F3 gefüllt, das dazugehörige DI Altern. Farbe F3 jedoch nicht.
- Lösung: Im Modul Datenbereiche in die Modulvariante Layout wechseln und in das DI Altern. Farbe F3 den Wert aus dem DI Altern. Farbe F1 kopieren.
Siehe auch: Customizing-FAQs |
- Ursache: In der DT817 Filterklasse fehlen die Werte "1" (Multiprojektinfoboard) und "2" (PPPM-Infoboard)
- Lösung: Im Modul Customizer Stammdaten Filterklassen die Werte "1" und "2" anlegen.
- Ursache: Fehlerhafte Parameter-Einstellungen
- Lösung: Den Parameter Kalender ist aktiv auf J setzen (die Checkbox aktivieren).
- Ursache: Hierbei handelt es sich um einen Update-Befehl, der eine Besonderheit bei I-Texten ist.
- Lösung: Der Wert von (ALT+0160) muss auf das Überschrifts-DI gesetzt werden, wenn das DI gleich dem Background-DI ist und die Überschrift nicht gefüllt ist.
I | Attachment | History | Size | Date | Comment |
---|---|---|---|---|---|
![]() |
Listbox.jpg | r1 | 7.4 K | 2015-01-14 - 17:54 | Systemabsturz beim Klicken in eine leeren Listbox |
![]() |
Migrationspakete.zip | r1 | 15.9 K | 2018-08-10 - 11:38 | |
![]() |
P_CALC_PERIODS.sql | r1 | 11.6 K | 2016-04-13 - 00:21 | |
![]() |
Perioden_korrigieren.py.txt | r1 | 2.5 K | 2016-04-13 - 00:18 | |
![]() |
Projektzuordnungloeschen.JPG | r1 | 52.5 K | 2015-01-15 - 14:41 | Zuordnung in Portfolio löschen |
![]() |
StatementForEventTablesMSSQL.sql | r1 | 2.1 K | 2020-05-20 - 10:35 | |
![]() |
StatementForEventTablesORACLE.sql | r1 | 1.9 K | 2020-05-20 - 10:46 | |
![]() |
WI25300_PortfolioImages.zip | r1 | 5.5 K | 2020-11-26 - 08:16 | |
![]() |
ZZZ_Icou.py.txt | r1 | 1.8 K | 2020-06-30 - 13:52 | |
![]() |
Zeiterfassung.zip | r1 | 5.9 K | 2022-02-02 - 10:49 | |
![]() |
alternative_migration_directory.zip | r1 | 2698.2 K | 2018-08-10 - 11:38 | |
![]() |
create_report.py.txt | r1 | 28.6 K | 2015-01-13 - 16:09 | Fehlermeldungen bei der Statusberichtsfreigabe S 39.5.14 |
![]() |
load_creation.py.txt | r1 | 14.6 K | 2018-09-13 - 10:15 | |
![]() |
modules.py.txt | r1 | 7.6 K | 2020-06-30 - 13:47 | |
![]() |
period.py.txt | r1 | 10.1 K | 2018-05-11 - 06:40 | |
![]() |
project_rights.py.txt | r1 | 30.6 K | 2015-01-13 - 16:10 | Fehlermeldungen bei der Statusberichtsfreigabe S 39.5.14 |
![]() |
py.zip | r1 | 224.5 K | 2015-10-13 - 17:49 | Fehlermeldung bei Import von MSP-Dateien nach Server-Update ab S 39.5.17 (behoben ab DB 39.5.7) |
![]() |
start_tcalc.py.txt | r1 | 6.2 K | 2016-04-11 - 22:37 | |
![]() |
update.py.txt | r1 | 13.4 K | 2020-06-30 - 13:52 | |
![]() |
work_flag_fix.py.txt | r1 | 8.7 K | 2018-05-11 - 06:41 |