Posty bez odpowiedzi |oraz Aktywne tematy Dzisiaj jest 2024-11-22, 12:25x



Odpowiedz w temacie  [ Posty: 8 ] 
Kaucja do paragonu 
Autor Wiadomość

Rejestracja: 2008-05-06, 21:16
Posty: 23
Post Kaucja do paragonu
Witam,

Mam taki mały problem, otóż firma w której pracuje chce wprowadzić kaucje za pobrane opakowania zwrotne od klientów incydentalnych(Paragony). Założyłem nowy towar nie podlegający vat (NP) i drukarka fiskalna bez problemów nalicza mi dodatkową opłatę. Problem pojawia się w przypadku gdy klient zwraca mi opakowanie i muszę zwrócić mu pieniądzem nie mam zielonego pojęcia jak powiązać to z konkretnym dokumentem i jaki wystawić. Jednocześnie zaznaczam, iż nie interesuje mnie od kogo i dla kogo została naliczona kaucja oraz nie zamierzam robić pełnej obsługi jak to było proponowane w wątkach "Opakowania zwrotne".

Proszę o pomoc, jakieś pomysły cokolwiek ( najlepiej gdyby było to bez ingerencji w raporty )
Pozdrawiam


2012-01-13, 10:10
Wyświetl profil
Autor Wiadomość
 


Ekspert
Ekspert

Rejestracja: 2007-11-16, 15:08
Posty: 4000
Pomógł: 448
Post Re: Kaucja do paragonu
A dlaczego wzbraniasz się tak przed raportem?

Bez raportu to powinieneś odnaleść jakiś paragon na którym wydałeś opakowanie i go skorygować.

_________________
Skontaktuj się z Ekspertem | Zamów dodatek

tel. 22 7 538 538
ekspert@mojaSymfonia.pl
http://www.mojaSymfonia.pl


2012-01-13, 12:38
Wyświetl profil

Rejestracja: 2008-05-06, 21:16
Posty: 23
Post Re: Kaucja do paragonu
Witam,

Z raportami to mam już:
1. Przerobione wszystkie wydruki - w tym szczególnie FVS, FVZ, FRR
2. Dodatkową bazę do obsługi skupu zwierząt rzeźnych (Oryginalnie Symfonia czegoś takiego nie obsługuje)
3. Dodatkowe raporty pieniężne
4. Dodane w bazie zewnętrznej - zapis modyfikacji dokumentów przez użytkowników
5. Obsługa pobierania zaliczek oraz rozliczanie paragonów wystawianych przez pracowników(tak o sobie szef wymyślił)

I jak mam jeszcze dorobić obsługę opakowań zwrotnych a nie daj Bóg będę musiał zainstalować uaktualnienie to ...

Jednak jeżeli nie da rady to trudno.
Odnośnie wyszukiwania konkretnych paragonów to w zasadzie nie ma większego problemu tylko jak?
-Korekta paragonu?
-Zafiskalizuje mi takie cudo?

Pozdrawiam


2012-01-14, 12:07
Wyświetl profil
Ekspert
Ekspert

Rejestracja: 2007-11-16, 15:08
Posty: 4000
Pomógł: 448
Post Re: Kaucja do paragonu
Raport o tyle by ułatwił, że mógłby wyszukać pierwszy nieskorygowany jeszcze paragon i automatycznie wystawić korektę.

Przy korekcie paragonu nic nie wychodzi z drukarki.

_________________
Skontaktuj się z Ekspertem | Zamów dodatek

tel. 22 7 538 538
ekspert@mojaSymfonia.pl
http://www.mojaSymfonia.pl


2012-01-16, 15:19
Wyświetl profil

Rejestracja: 2008-05-06, 21:16
Posty: 23
Post Re: Kaucja do paragonu
OK dzięki wielkie, pewnie trzeba się zabrać za pisanie raportu.
Pozdrawiam


2012-01-18, 12:51
Wyświetl profil
Ekspert
Ekspert

Rejestracja: 2007-11-16, 15:08
Posty: 4000
Pomógł: 448
Post Re: Kaucja do paragonu
Daj znać jak Ci się uda coś napisać.

_________________
Skontaktuj się z Ekspertem | Zamów dodatek

tel. 22 7 538 538
ekspert@mojaSymfonia.pl
http://www.mojaSymfonia.pl


2012-01-18, 12:52
Wyświetl profil

Rejestracja: 2008-05-06, 21:16
Posty: 23
Post Re: Kaucja do paragonu
Witam,

Trochę pogrzebałem i:
Drukarka fiskalna ma opcję obsługi kaucji więc:
1. Na paragonie nie musi być kaucja można coś takiego dodać jako zewnętrzny raport dodający Opakowanie zwrotne
2. Tak samo przy zwrocie kaucji wysyłamy do drukarki fiskalnej info o zwrocie kaucji
Poniżej to co udało mi się ustalić na drukarce Wiking - Optimus - IC (Później będę testował na pozostałych)

Kod:
dispatch Fp //od Fiscal Printer czy jakoś tak :)
Fp.Create("OICFiscalPrinterLib.OICFiscalPrinter")  //Dorwałem kontrolkę na stronie Novitus
//Inicjacja Drukarki
fp.PrinterDriver = "Wiking PL 3.0" //Sterownik drukarki - z dokumentacji
Fp.PortName = "COMx" // gdzie x to numer com'a
Fp.PortConfigString = "Speed=9600;DataBits=8;StopBits=1;Parity=N;FlowControl=X;Timeout=10000" //Ustawienie parametrów COM
Fp.Open //Otwarcie portu

Fp.Beep //Bzyczek Drukarki - tak dla potwierdzenia komunikacji
Fp.Close //Kończymy prace


W dokumentacji jest pełno funkcji napisanych w Object Pascale...można zaadoptować. Gdy zrobię coś więcej to napiszę

Prośba do Admina o podwieszenie tematu na Programowaniu AMHM


2012-01-23, 14:12
Wyświetl profil

Rejestracja: 2008-05-06, 21:16
Posty: 23
Post Re: Kaucja do paragonu
A więc...w procedurach wywoływanych z okien na początku
Kod:
Float IDHANDLOWY
float IDMAGAZYNOWY
#include "DrukarkaFisk"
#include "Automatyczne wystawianie KP i KW"

......

int Sub OnDokumentSprzedazyAlt8(long lIdDk, int bBufor, long lIdPoz)
if bBufor == 0 then
IDHANDLOWY = lIddk
dk.GetRecById(IDHANDLOWY)
FormularzOpakowan(dk.GetField("kod"))

if Blad != 0 then
   OknoKasy(lIddk, bBufor, KWOTAPOJEMNIKOW)
   mg.getrecbyid(IDMAGAZYNOWY)
   dk.GetRecById(IDHANDLOWY)
   dk.SetField("znaczniki",65963)
   dk.PutRec()
endif
endif
endsub


Raport DrukarkaFisk

Kod:

#include "Automatyczne wystawianie WZ jako opakowania"

dispatch Fp
dispatch ReceiptS
Dispatch Depozyt
String sCOM
String sterowanie
float KWOTAPOJEMNIKOW


int sub DrukarkaFisk()
Int PlikKonf = Open KatalogWin () + "fiscprn.ini" For Input

string pozycja

int i

input #plikKonf, sterowanie
input #plikKonf, sterowanie
input #plikKonf, sterowanie

while i < len(sterowanie)

pozycja = mid(sterowanie,i,1)
if pozycja == "," then   
sterowanie = mid(sterowanie, 11, i-11)
exit
endif
i += 1
wend
//Tutaj według opisów na stanowiskach kasowych dla drukarek fiskalnych - lokalnych
select case sterowanie
   case "Wiking"
   sterowanie = "WIKING PL 1.0"
   Case "Optimus ViVo"
   sterowanie = "VIVO PL 2.0"
   case "Novitus DELIOprime"
   sterowanie = "DELIO E PL 1.0"
endselect

i = 0
for i = 0 to i > 12
input #plikKonf, sCom
next i
sCOM = mid(scom, 6,4)
endsub


int sub Opakowania(Long kaucja, int ilosc, int rodzaj, string Dokument)
Fp.Create("OICFiscalPrinterLib.OICFiscalPrinter")
ReceiptS.Create("OICFiscalPrinterLib.OICFPReceiptSummary")

DrukarkaFisk()

//Rodzaj 1 - zwrot 0 - pobranie
PopUp(1, "Fiskalizowanie Opakowań Zwrotnych")
PopUP(2, "Proszę czekać...")
FP.PrinterDriver = sterowanie
FP.PortName = scom
FP.PortConfigString = "Speed=9600;DataBits=8;StopBits=1;Parity=N;FlowControl=X;Timeout=10000"
Fp.Open

Blad = Fp.OpenReceipt

//okazało się że drukarki inaczej liczą kaucji wg poniższej instrukcji
Select case Sterowanie
   case "DELIO E PL 1.0"
      KWOTAPOJEMNIKOW = kaucja
   case "VIVO PL 2.0"
      KWOTAPOJEMNIKOW = kaucja*ilosc
   case else
      KWOTAPOJEMNIKOW = kaucja*ilosc
endselect

if rodzaj == 0 then   WystawOpakowanie("",ilosc,dokument)

if rodzaj == 1 then WystawOpakowanie("",-ilosc,dokument)

if blad == 0 then
   message "Fiskalizacja niepowiodła się"
   fp.CloseReceipt(0, 0, 0, 0)
   exit
endif

if rodzaj == 0 then FP.DepositItem(0, "1", kaucja, ilosc, "", KWOTAPOJEMNIKOW)
if rodzaj == 1 then FP.DepositItem(1, "1", kaucja, ilosc, "", KWOTAPOJEMNIKOW)

ReceiptS = fp.createReceiptSummary
ReceiptS.SystemNumber = "Do: " + Dokument
FP.CloseReceiptEx2(ReceiptS)
FP.close
if rodzaj == 0 then
KWOTAPOJEMNIKOW = ilosc*kaucja
else
KWOTAPOJEMNIKOW = ilosc*kaucja*-1
endif

endsub

int sub FormularzOpakowan(string sDokNR)
Long PLNszt
int Szt
int Rodz
String sDok
Int odp
String tablica_pozycji_pk (2) = "Wydanie","Zwrot"
String pozycja_pk

form "Opakowania zwrotne", 235,130
edit "Opakowań", szt, 100,0,100,20
Edit "Kwota za szt.", PLNszt, 100,21,100,20
CmbBox "Rodzaj operacji", tablica_pozycji_pk, pozycja_pk, 100,42, 100, 90

button "&OK", 5,80,100,25,2
button "&Anuluj", 130,80,100,25,-1
odp = execform


if odp == 2 then
   if pozycja_pk == "Wydanie" then rodz = 0

   if pozycja_pk == "Zwrot" then rodz = 1

   Opakowania(plnszt,szt,rodz,sDokNR)

endif

endsub



Raport "Automatyczne wystawianie WZ jako opakowania"
Utworzony magazyn w systemie specjalnie dla opakowań

Kod:

int Blad
basedk dk
int errormg

INT SUB WystawOpakowanie(string kodKH, int ilosc, string Opis)
//Procedura wystawiajacego dokument w magazynie Opakowań WZ oraz WZK danego WZ

float i
//jeżeli ilość jest ujemna wtedy korekta
string sIlosc = using "%L", ilosc
IoRec Mag
date DataRozl
string IDDK
float IleWParagonie
String sIleWParagonie

//Ustawienie rekordu w bazie DK, zczytanie pola id i zapisanie jako STRING
dk.GetRecByID(IDHANDLOWY)
iddk = using "%0.0f", dk.GetField("id")   

//Termin ważności WZ to 90 dni
DataRozl.FromStr(data())
DataRozl.AddDays(90)

//Czyszczenie IOREC
Mag.Clear()


//W bazie dk odebrane znajduje się licznik pobranch pojemników na paragon
if dk.GetField("odebrane") == "" then
   IleWParagonie = 0
else   
   IleWParagonie = val(dk.GetField("odebrane"))
endif


if ilosc < 0 then
   //Usunięcie łącznika między dokumentami magazynowymi a Handlowymi nie wystawi korekty jeżeli będzie skojarzony!!
   //Dopuszcza się tylko jeden dokument Wydania Opakowań, stąd zapis jeżeli znajdzie idhandl i seria będzie "sOP" to kasuj
   mg.setkey("idhandl")
   mg.SetKeySeg("idhandl",IDHANDLOWY)
   errormg = mg.GetRec(GE)
   while !errormg
      if mg.GetField("seria") == "sOP" then
         mg.SetField("idhandl",0)
         mg.putrec()
         exit
         endif
   errormg = mg.GetRec(NX)
   wend

   //Jeżeli chcemy przyjąć więcej jak wydano!
   if  ilewparagonie < ilosc*(-1) then
      message "Pojemników do wydania " + dk.GetFIeld("odebrane")
      blad = 0
      exit
      
      else
      ilewparagonie = ilewparagonie +ilosc
      silewparagonie = using "%d", ilewparagonie
      dk.setfield("odebrane",silewparagonie)
      dk.putrec()
   endif
else
   //Jeżeli chcemy po raz drugi wydać pojemniki na ten sam paragon
   if ilewparagonie != 0 then
   message "Na ten paragon wydano już pojemniki"
   blad = 0
   exit
   else
   ilewparagonie = ilosc + ilewparagonie
   sIleWParagonie = using "%d", ilewparagonie
   dk.SetField("odebrane", sIleWParagonie)
   dk.putrec()
endif

endif

//Ustawianie pól IOREC w zależności czy zwrot czy nie
if ilosc < 0 then
mag.SetField("typ_dokumentu","WZK")
mag.SetField("seria","sOPK")
else
mag.SetField("typ_dokumentu","WZ")
mag.SetField("seria","sOP")
endif

mag.SetField("data_wystawienia",Data())
mag.SetField("data_operacji",data())

if ilosc < 0 then
   mag.SetField("KodDokKoryg",mg.GetFIeld("kod"))
else
mag.SetField("rezerwacja","0")
mag.SetField("termin",DataRozl.tostr())
iddk = using "%0.0f", IDHANDLOWY
mag.SetField("idhandl",iddk)
endif

mag.SetField("kodmag","MZwrotne")
mag.SetField("khkod",kodKH)
mag.SetField("rejestr_vat","RWM")
mag.SetField("nazwarodzaju","POJEMNIKI")
mag.SetField("schematKs","WZ")


mag.SetField("Opis",opis)
//mag.endsection()
mag.beginSection("Pozycja dokumentu")

if ilosc < 0 then
    mag.SetField("Lp","1")
   mag.SetField("schematks","Wzk")
   mag.SetField("czyPoKorekcie","0")
else
   mag.SetField("schematks","Wz")
endif

mag.SetField("kod","pojemnik")

mag.SetField("Ilosc",silosc)
mag.SetField("cena","20")

mag.endsection()

i = mag.ImportMG()

IDMAGAZYNOWY = WystawDokumentMagazynowy(i,1)

if ilosc > 0 then
   //Jeżeli wydajemy pojemniki to automatycznie utwórz dowiązanie w WZ z dok sprzedaży
   mg.SetKey("id")
   mg.SetKeySeg("id",IDMAGAZYNOWY)
   mg.GetRec(EQ)
   mg.SetField("idhandl",IDHANDLOWY)//TODO: id dokumentu handlowego
   mg.putrec()
endif

if ilosc < 0 && ilewparagonie > 0 then

   //Jezeli zwrócono mniej niż wydano to dowiąz ponownie idhandl
   mg.GETRECBYID(IDMAGAZYNOWY)
   //Tutaj dokument magazynowy to korekta - przypisano przy wystawianiu
   //ustaw na korekcie i sprawdź id dokumentu korygowanego
   mg.getrecbyid(mg.getfield("iddokkoryg"))
   mg.setfield("idhandl",IDHANDLOWY)
   mg.PUTREC()
      
endif

if IDMAGAZYNOWY == 0 then
   message "Nie wystawiono dokumentu Wz/WZK"
   blad == 0
endif

endsub



Automatyczne wystawianie KP i KW

Kod:
int ok=0
float brutto,lIdDk
string data_plat = data()
string wyb_kasa
String kodktr
string khnazwa
string kodDok
int rejestr
int BuforBaza
basedp dp
basebd bd
basepn pn

int sub WystawPlatnosc(float IdRekord, string sKasa, String typ, int Baza, float KwotaK)

   //IdRekord rekord dokumentu handlowego - w procedurach iIddk
   //kasa - rodzaj kasy
   //typ - "Wpłata", "Wypłata"
   //kasa - "Kasa1", "Kasa2"

if Baza == 0 then
   dk.getrecbyid(idRekord)
   kodktr = dk.GetField("khkod")
   khnazwa = dk.GetField("khnazwa")
   brutto = dk.GetField("netto") + dk.GetField("vat")
   Koddok = dk.GetField("kod")
else
   bd.getrecbyid(idRekord)
   kodktr = bd.GetField("khkod")
   khnazwa = bd.GetField("khnazwa")
   brutto = bd.GetField("netto") + bd.GetField("vat")
   Koddok = dk.GetField("kod")
endif

if KwotaK != 0 then brutto = kwotak
   IoRec Dok
   dok.clear()
   
   dok.SetField("Rejestr",skasa)

   if brutto > 0 then
      dok.SetField("Typ_dk", "KP")
      dok.SetField("Seria","sKP")
      dok.setfield("schematKs", "WPL")
      dok.SetField("Rodzaj_platnosci","wpłata")
      
   endif

   if brutto < 0 then
      dok.Setfield("Typ_dk","KW")
      dok.SetField("Seria","sKW")
      dok.setfield("schematKs", "WYPL")
      dok.SetField("Rodzaj_platnosci","wypłata")
   endif
   if brutto < 0 then brutto = brutto * -1
   dok.SetField("numerWSerii","0")
   dok.SetField("khkod",kodktr)
   dok.SetField("kwota",using "%f", brutto)
   dok.SetField("Data_platnosci", data_plat)
   dok.SetField("Khtyp","Kontrahent")
   dok.setfield("Termin_platnosci", "0")
   Dok.SetField("opis", "Kaucja za pojemnik do: " + kodDok + " " + khnazwa)
   ok = 0
   ok=   WystawDokumentPlatnosci(Dok,1)
endsub

int sub OknoKasy(long idDokumentu, int BazaBufor, Float PLN)
   
string kasa(2) = "KASA 1" , "KASA 2"   
string wyb_kasa, ktr, kod
string data_plat = data()

if bazabufor == 0 then
   dk.getrecbyid(idDokumentu)
   kod = dk.GetFIeld("kod")
   ktr = dk.GetField("khnazwa")
else
   bd.getrecbyid(iddokumentu)   
   kod = bd.GetFIeld("kod")
   ktr = bd.GetField("khnazwa")
endif

form "Wybierz Rejestr Kasowy dla:", 235,160
text "Kontrahent: "+ktr +"\nNumer Dokumentu: "+ kod, 0,5,280,50
cmbbox "Rejestr ", kasa, wyb_kasa ,100,40,100,100
datedit "Data Płatności", Data_plat, 100, 60, 100,20


button "&OK", 5,110,100,25,2
button "&Anuluj", 140,110,100,25,-1

ok = execform

if ok == -1 then exit
if ok == 2 then
WystawPlatnosc(idDokumentu, wyb_kasa, "Wpłata", BazaBufor, PLN)
endif
endsub


To mniej więcej tak....u mnie działa kod jeszcze nie został zoptymalizowany pod względem zmiennych. Uwagi mile widziane, pozdrawiam


2012-02-03, 11:25
Wyświetl profil
Wyświetl posty nie starsze niż:  Sortuj wg  
Odpowiedz w temacie   [ Posty: 8 ] 
   Podobne tematy   Autor   Odpowiedzi   Odsłony   Ostatni post 
Na tym forum nie ma nowych nieprzeczytanych postów. faktura do paragonu

w Programy Księgowe

przemoc84

1

1926

2021-02-26, 20:03

Maciek Wyświetl najnowszy post

Na tym forum nie ma nowych nieprzeczytanych postów. brak WZ do PARAGONU ?!

w Programy Handlowe

cieniucieniu

3

2421

2011-08-20, 17:30

smbsone Wyświetl najnowszy post

Na tym forum nie ma nowych nieprzeczytanych postów. Faktura do paragonu

[ Przejdź na stronę: 1, 2 ]

w Programy Handlowe

Enterprise

15

9446

2011-02-03, 18:02

wrob Wyświetl najnowszy post

Na tym forum nie ma nowych nieprzeczytanych postów. Fiskalizacja paragonu

w Programy Handlowe

artur17

3

5037

2015-02-04, 17:13

rafal Wyświetl najnowszy post



Kto jest online

Użytkownicy przeglądający to forum: Nie ma żadnego zarejestrowanego użytkownika i 26 gości


Nie możesz tworzyć nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Przejdź do:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Support forum phpbb by phpBB Assistant