Skocz do zawartości

Mamut Maniek

Użytkownik
  • Liczba zawartości

    1 053
  • Rejestracja

  • Ostatnia wizyta

  • Wygrane w rankingu

    7

Ostatnia wygrana Mamut Maniek w dniu 7 Stycznia 2021

Użytkownicy przyznają Mamut Maniek punkty reputacji!

1 obserwujący

Ostatnie wizyty

Blok z ostatnimi odwiedzającymi dany profil jest wyłączony i nie jest wyświetlany użytkownikom.

Mamut Maniek's Achievements

121

Reputacja

3

Community Answers

  1. W sumie jeszcze przydało by się odczytać adres dostawy (id) z kontrahenta i przypisać go do dokumentu ale nie wiem jak to odczytać. Próbowałem tak: $oKontrahent.AdrDostId $oKontrahent.AdresDostawyId ale nie działa to działa ale zwraca True a nie ID $oKontrahent.AdresDostawy
  2. Rozszyfrowałem plik GTA64.dll i tam znalazłem właściwości (property) dla obiektu SuDokument o nazwie AdresDostawyId, czyli wystarczy znać Id adresu i przypisać do tej właściwości, np: $oDokument.AdresDostawyId = 9479 $oDokument.Zapisz Szkoda, że takich danych nie ma w pliku pomocy
  3. Jak ustawić/wybrać konkretny adres dostawy za pośrednictwem rozszerzenia Sfera dla dokumentu faktura sprzedaży FS w Subiekt GT? Niestety nie znalazłem na forum ani pliku pomocy.
  4. macie zrobione jakieś dodatkowe indeksy? U mnie poniższe zapytanie: SELECT COUNT(dok_Id) FROM dok__dokument WHERE dok_MagId = 1 and dbo.fnMAKE_DOKPARAM(dok_Typ, dok_Podtyp) in (65536,65538,65537,131072,131073,131074,131075,131076,131077,1900544,393216,393217,393218,327680,327681,589824,1376256,1376258,1376257,1376259,655360,655362,655361,786432,851968,262144,196608,2228224,720896,720898,720897,983040,1048576,1048577,2293760,2359296,917504,917505,3997696,3997697) AND dok_typ = 2 AND dok_DataWyst BETWEEN '2025-07-01' AND '2025-07-31' wykonywało się ponad 6-minut, wynik to 37637 W tabeli dok__Dokument jest ponad 9-milionów wpisów Skąd takie różnice? Na tej tabeli Indeksy zostały odbudowane, statystyki reorganizowane z opcją full scan. Co jeszcze mogę tutaj zrobić? Jakiś pomysł? Możesz mi przesłać swój execution plan w XML dla tego zapytania? Chciałem porównać ze swoim Trzeba uruchomić osobno polecenia (w tym samym oknie) SET SHOWPLAN_XML ON SELECT COUNT(dok_Id) FROM dok__dokument WHERE dok_MagId = 1 and dbo.fnMAKE_DOKPARAM(dok_Typ, dok_Podtyp) in (65536,65538,65537,131072,131073,131074,131075,131076,131077,1900544,393216,393217,393218,327680,327681,589824,1376256,1376258,1376257,1376259,655360,655362,655361,786432,851968,262144,196608,2228224,720896,720898,720897,983040,1048576,1048577,2293760,2359296,917504,917505,3997696,3997697) AND dok_typ = 2 AND dok_DataWyst BETWEEN '2025-07-01' AND '2025-07-31' SET SHOWPLAN_XML OFF
  5. u mnie nie zrobiło to znaczenia, tak samo długo się wczytuje zapytanie, dopiero usunięcie warunku z dbo.fnMAKE_DOKPARAM drastycznie przyspiesza wykonanie zapytania SELECT dok_Id AS [#id], dok_NrPelny FROM dok__dokument WHERE dok_MagId = 1 and dbo.fnMAKE_DOKPARAM(dok_Typ, dok_Podtyp) in (65536) AND ((dok_typ = 2) and dok_KatId = 29 and CAST(dok_DataWyst AS DATE) BETWEEN '2025-07-01' AND '2025-07-31' and dok_MagId = 1) -- 11s SELECT dok_Id AS [#id], dok_NrPelny FROM dok__dokument WHERE dok_MagId = 1 and dbo.fnMAKE_DOKPARAM(2, dok_Podtyp) in (65536) AND ((dok_typ = 2) and dok_KatId = 29 and CAST(dok_DataWyst AS DATE) BETWEEN '2025-07-01' AND '2025-07-31' and dok_MagId = 1) -- 11s SELECT dok_Id AS [#id], dok_NrPelny FROM dok__dokument WHERE dok_MagId = 1 and ((dok_typ = 2) and dok_KatId = 29 and CAST(dok_DataWyst AS DATE) BETWEEN '2025-07-01' AND '2025-07-31' and dok_MagId = 1) -- <1s
  6. Używam rozszerzania Sfera dla Subiekt GT do eksportu dokumentów do pliku. Mam problem wydajnościowy z takim kodem Local $filtrKolekcji = "(dok_typ = 2) and dok_KatId = 29 and CAST(dok_DataWyst AS DATE) BETWEEN '2025-07-01' AND '2025-07-31' and dok_MagId = 1" Local $oDokumentKolekcja = $g_oSubiekt.SuDokumentyManager.OtworzKolekcje($filtrKolekcji) Log(Local $oDokumentKolekcja.Liczba) // ta linijka kodu wczytuje się bardzo długo Local $sciezkaPlikuDoZapisu = "D:\eksport.epp" $oDokumentKolekcja.ZapiszDoPliku($sciezkaPlikuDoZapisu, False, "") // ta linijka kodu wczytuje się bardzo długo Obiekt kolekcji (.OtworzKolekcje) wczytuje się bardzo szybko ale potem wykonywanie metod na tym obiekcie (np. Liczba, ZapiszDoPliku) trwa bardzo długo. Dla kolekcji gdzie są 2-dokumenty operacja (.Liczba) trwa 6-sekund. Dla dużych zbiorów trwa to bardzo długo i wywala błąd 0x80020009 (Wystąpił wyjątek) który zakładam, że dotyczy timeout-u. Skąd tak duże czasy? Gdy wczytam te dokumenty zapytaniem SQL to setki dokumentów z pełnymi informacjami wczytują się poniżej sekundy. Jest to bardzo uciążliwe bo dla wielu typów dokumentów trwa to bardzo długo (kilka godzin). Szukam sposobu na przyspieszenie tej operacji lub zrozumienie dlaczego to tak wolno trwa. Próbowałem podejrzeć w profilerze jak te zapytania są budowane i dla mojego kodu znalazłem bardzo ciężkie zapytanie: SELECT dok_Id AS [#id], dok_NrPelny FROM dok__dokument WHERE dok_MagId = 1 and dbo.fnMAKE_DOKPARAM(dok_Typ, dok_Podtyp) in (65536,65538,65537,131072,131073,131074,131075,131076,131077,1900544,393216,393217,393218,327680,327681,589824,1376256,1376258,1376257,1376259,655360,655362,655361,786432,851968,262144,196608,2228224,720896,720898,720897,983040,1048576,1048577,2293760,2359296,917504,917505,3997696,3997697) AND ((dok_typ = 2) and dok_KatId = 29 and CAST(dok_DataWyst AS DATE) BETWEEN '2025-07-01' AND '2025-07-31' and dok_MagId = 1) Nie wiem dlaczego tam jest podanych tak dużo typów dokumentów i skąd Sfera takie podała, to zapytanie faktycznie bardzo długo się wykonuje i nie wiem jak je zoptymalizować. Poniżej znajduje się zrzut ekranu z EXECUTION PLAN dla tego zapytania (mocno uproszczonego – pozostawiłem tylko jeden element w tablicy przekazywanej do funkcji fnMAKE_DOKPARAM, która swoją drogą, prawdopodobnie jest winowajcą w tej sytuacji):
  7. no właśnie przed chwilą na to wpadłem, nie wiem co mnie przyćmiło, chyba za długo przed komputerem 😅
  8. Udało mi się rozliczyć należność (którą wygenerowała faktura sprzedaży) ale nie mogę sobie poradzić z zobowiązaniem które wygenerowała korekta. Rozumiem, że schemat będzie podobny i trzeba będzie dodać operacje bankową ale nie BP (bank przyjął) tak jak to było w przypadku należności tylko BW (bank wydał) ale jak po wczytaniu dokumentu określić na obiekcie sferycznym FinDokument czy to jest należność czy zobowiązanie? Przepatrzyłem wszystkie metody obiektu FinManager ale nie mogłem znaleźć. Mógłbym sobie wcześniej sprawdzić czy dokument to korekta ale korekta może wygenerować i należność i zobowiązanie zależy co robi. W moim wcześniejszym poście opisałem schemat rozliczania należności i teraz potrzebuje między punktem 2 i 3 sprawdzić jakiego typu jest wczytany rozrachunek.
  9. Mam taki problem, że jak utworzę nowego kontrahenta w Subiekt GT z danym numerem NIP to potem jak stworzy się dokument dla zamówienia w Sello z kontrahentem, który ma ten sam numer NIP to w zależności od ustawień w Sello albo zaktualizuje tego kontrahenta w Subiekt GT wg danych z transakcji Sello albo wstawi do dokumentu dane, które były pierwotnie. Chciałbym, żeby żaden ze scenariuszy się nie wydarzył i żeby Sello utworzyło nowego kontrahenta i nie aktualizowało istniejącego. Czy da się tak ustawić? Niech Sello nie szuka kontrahenta o takim samym numerze NIP @Bartosz Rosa
  10. Dzisiaj trafiliśmy na taki problem, że po wgraniu zdjęcia do towaru, nie da się przeglądać zakładki ZDJĘCIA w oknie towaru - okno z towarem znika a w niektórych przypadkach całe Sello się zamyka. Zerknąłem do bazy i wygląda na to, że miniaturka się nie wgrała do bazy. SELECT * FROM im__Image WHERE im_Id IN (SELECT pc_PictureId FROM it_ItemPictures WHERE pc_ItemId = (SELECT it_Id FROM it__Item WHERE it_Symbol = 'xxxxx')) Zdjęcie, które tam wgrywałem miało szerokość 1168px a wysokość to 5px (taka graficzna kreska oddzielająca działy) i zakładam, że właśnie ta mała wysokość jest problemem i Sello nie radzi sobie z wygenerowaniem miniaturki. (W programie przydałby się być warunek, że jak nie ma danych w im_Preview to żeby się "nie wysypywał") Póki co poradziłem sobie z problemem wykonując takie zapytanie, które wstawia w puste miniaturki jakiś taki kwadracik mały graficzny, żeby cokolwiek tam było i żeby dało się otworzyć zakładkę ZDJĘCIA: UPDATE im__Image SET im_Preview = 0x89504E470D0A1A0A0000000D494844520000001E0000001E0802000000B45239F5000000017352474200AECE1CE90000000467414D410000B18F0BFC6105000000097048597300000EC300000EC301C76FA8640000004A49444154484BEDD6B10A0020088461AFF77F6713723A5B821C84FB20B0E51F72C9FA208EBB9FCB4700568E0D94269735C606727A51237A6BA234519A284D942633D3FA2C9099E936661BA5130C36F6BFFFDA0000000049454E44AE426082 WHERE im_Preview is NULL
  11. Trochę rozgryzłem problem. Jeśli chodzi o listę argumentów dla setup.exe to wygląda to tak: Okazuje się, że instalacja Subiekt GT w trybie silent odbywa się tak samo jak dla Sello. Nie udało mi się tylko rozgryźć jak instalować konkretne pakiety (np. wykluczyć Kasiarza itp) Poniżej przedstawiam kod skryptu w PowerShell dla automatycznej instalacji Sello oraz SubiektGT (silent mode): <# W celu uruchomienia skryptu w Windows, klikamy START, wpisujemy ISE i na znalezionym programie o nazwie "Windows PowerShell ISE" klikamy prawym przyciskiem myszy i wybieramy "Uruchom jako administrator". Uwaga! Domyślnie wykonywanie skryptów PowerShell jest zablokowane. W celu tymczasowego odblokowania wykonywania skryptów należy w osobnej zakładce wykonać poniższy kod: Set-ExecutionPolicy Bypass -Scope Process Potem możemy już wkleić cały ten kod i uruchomić. Pobierze i zainstaluje się Sello i Subiekt GT (linki w zmiennej DownloadUrl można zmienić na inne wersje) #> #Definiowanie folderu tymczasowego (tam zostanie pobrany plik instalacyjny z internetu i zostanie tam rozpakowany) $TempInstallFolder = "C:\_TempInstallFolder" # Definiowanie programów do instalacji (nazwa i link, w celu pobrania innej wersji wystarczy z linku skasować nazwę pliku i wyświetli się cała lista dostępnych instalatorów różnych wersji) $Programs = @( @{ Name = "Sello" DownloadUrl = "http://ftp.insert.com.pl/pub/aktualizacje/Sello/Sello_1_44_0.exe" }, @{ Name = "SubiektGT" DownloadUrl = "https://ftp.insert.com.pl/pub/aktualizacje/InsERT_GT/InsERT_GT_1_75_SP1.exe" } ) # Sprawdzanie, czy PowerShell jest uruchomiony z uprawnieniami administratora $isAdmin = ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator) if ($isAdmin) { Write-Host "PowerShell uruchomiony z uprawnieniami administratora." } else { Write-Host "PowerShell nie uruchomiony z uprawnieniami administratora. Uruchom skrypt ponownie jako administrator." Exit 1 } # Funkcja pobierająca i instalująca program function Install-Program { param ( [string]$ProgramName, [string]$DownloadUrl ) # Wyciąganie nazwy pliku z linku $DownloadFileName = [System.IO.Path]::GetFileName($DownloadUrl) #$DownloadFileName = Split-Path $DownloadUrl -Leaf $TempProgramFolderPath = "$TempInstallFolder\$ProgramName" $DownloadFilePath = "$TempProgramFolderPath\$DownloadFileName" # Tworzenie folderu tymczasowego, jeśli nie istnieje New-Item -Path $TempProgramFolderPath -ItemType directory -Force # Sprawdzanie, czy plik został już pobrany if (-not (Test-Path $DownloadFilePath)) { Write-Host "Pobieranie pliku instalacyjnego..." try { Invoke-WebRequest -Uri $DownloadUrl -OutFile $DownloadFilePath Write-Host "Pobieranie zakończone pomyślnie." } catch { Write-Host "Błąd podczas pobierania pliku: $_" Exit 1 } } else { Write-Host "Plik już istnieje, pomijam pobieranie. $DownloadFilePath" } # Sprawdzanie, czy plik instalatora istnieje przed uruchomieniem if (Test-Path $DownloadFilePath) { Write-Host "Wypakowywanie instalatora..." try { Start-Process -FilePath $DownloadFilePath -ArgumentList "/extract_all:$TempProgramFolderPath" -Wait #& $DownloadFilePath "/extract_all:$TempProgramFolderPath" -Wait Write-Host "Wypakowano pliki." } catch { Write-Host "Błąd podczas wypakowywania instalatora: $_" Exit 1 } } else { Write-Host "Plik instalatora nie istnieje. $DownloadFilePath" Exit 1 } # Wyszukiwanie setup.exe w wypakowanych plikach $setupFile = Get-ChildItem -Path $TempProgramFolderPath -Filter "setup.exe" -Recurse | Select-Object -First 1 if ($setupFile) { # Uruchomienie setup.exe i czekanie na zakończenie instalacji Write-Host "Instalowanie programu $ProgramName..." Start-Process -FilePath $setupFile.FullName -ArgumentList '/s', '/v"/qn"' -Wait Write-Host "$($setupFile.FullName) installation complete." } else { Write-Host "setup.exe nie znaleziono w $TempProgramFolderPath" } # Czyszczenie plików tymczasowych Write-Host "Czyszczenie plików tymczasowych..." try { Remove-Item -Path $TempProgramFolderPath -Recurse -Force Write-Host "Pliki tymczasowe zostały usunięte." } catch { Write-Host "Błąd podczas usuwania plików tymczasowych: $_" } } # Instalacja każdego z programów po kolei foreach ($program in $Programs) { Write-Host "Rozpoczęto przetwarzanie programu $($program.Name)..." Install-Program ` -ProgramName $program.Name ` -DownloadUrl $program.DownloadUrl Write-Host "Zakończono przetwarzanie programu $($program.Name)." Remove-Item -Path $TempInstallFolder -Recurse -Force }
  12. W jakiej aplikacji nadajesz paczki? Na załączonym zrzucie pisze że w paczce jest błędny adres e-mail
  13. W rozszerzeniu Sfera Dla Subiekt GT nie ma opcji dodania nowej kategorii. Można to zrobić zapytaniem do bazy danych: DECLARE @NewKatId INT EXEC spIdentyfikator 'sl_Kategoria',1,@NewKatId OUTPUT INSERT INTO sl_Kategoria ("kat_Id","kat_Nazwa","kat_Typ","kat_Podtytul") VALUES (@NewKatId,'nazwa_dodawanej_kategorii',2,'podtytul_dodawanej_kategorii')
  14. Jeśli pytasz czy da się coś takiego zrobić to jak najbardziej. Trzeba napisać aplikację która odczyta zamówienia z bazy danych Sello i wyśle je przez API do Baselinker.
×
×
  • Dodaj nową pozycję...