|
|
Strona 1 z 1
|
[ Posty: 8 ] |
|
Autor |
Wiadomość |
Khavert
Rejestracja: 2008-05-06, 21:16 Posty: 23
|
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 |
|
|
Autor |
Wiadomość |
Mix-soft.pl
|
|
|
rafal
Ekspert
Rejestracja: 2007-11-16, 15:08 Posty: 4000 Pomógł: 448
|
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ć.
|
2012-01-13, 12:38 |
|
|
Khavert
Rejestracja: 2008-05-06, 21:16 Posty: 23
|
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 |
|
|
rafal
Ekspert
Rejestracja: 2007-11-16, 15:08 Posty: 4000 Pomógł: 448
|
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.
|
2012-01-16, 15:19 |
|
|
Khavert
Rejestracja: 2008-05-06, 21:16 Posty: 23
|
Re: Kaucja do paragonu
OK dzięki wielkie, pewnie trzeba się zabrać za pisanie raportu. Pozdrawiam
|
2012-01-18, 12:51 |
|
|
rafal
Ekspert
Rejestracja: 2007-11-16, 15:08 Posty: 4000 Pomógł: 448
|
Re: Kaucja do paragonu
Daj znać jak Ci się uda coś napisać.
|
2012-01-18, 12:52 |
|
|
Khavert
Rejestracja: 2008-05-06, 21:16 Posty: 23
|
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 |
|
|
Khavert
Rejestracja: 2008-05-06, 21:16 Posty: 23
|
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 |
|
|
|
Strona 1 z 1
|
[ Posty: 8 ] |
|
Kto jest online |
Użytkownicy przeglądający to forum: Nie ma żadnego zarejestrowanego użytkownika i 21 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
|
|
|
|