codemen Ierakstīts Novembris 4, 2022 Share Ierakstīts Novembris 4, 2022 Sveiciens, Pašmācības ceļā apgūstu SQL datu bāzes, šobrīd esmu iesprūdis pie tabulu apvienošanas. Ceru, ka kāds varēs iedot padomu, kā šo risināt. Esošie dati - piemēru ņemu no uzņēmuma grāmatvedības sistēmas. Tabula1 - rēķina "galvene", kurā ir basic info par rēķina saņēmēju. Tabula2 - rēķina rindu detalizēts izklāsts; Tabula3 - noliktavas nosūtīšanas "galvene" Tabula4 - nosūtīšanas detalizēts izklāsts Ar sql pieprasījumu vēlos iegūt visas rēķina rindas, kurām blakus būtu pašizmaksa. Vēlamais rezultāts: Ar šī brīža kodu iegūstu, jo noliktavas nosūtīšanas galvenē ir divi ieraksti, kas atbilst rēķina numuram. Select tabula1.rēķinanr, tabula2.artikuls, tabula4.pašizmaksa from tabula1 left join tabula2 on tabula1.r.id = tabula2.r.id left join tabula3 on tabula1.rēķinanr = tabula3.rēķinanr left join tabula4 on tabula3.n.id = tabula4.n.id and tabula2.artikuls = tabula4.artikuls Kā korektāk veidot tabulu apvienošanu, lai netiktu ģenerētas papildu rindas? Link to comment Share on other sites More sharing options...
basic Novembris 4, 2022 Share Novembris 4, 2022 (labots) ... Labots Novembris 6, 2022 - basic bad request Link to comment Share on other sites More sharing options...
camel Novembris 5, 2022 Share Novembris 5, 2022 (labots) @basicpadoms tur neko nemainīs, jāraksta aptuveni šādi: Select tabula1.rēķinanr, tabula2.artikuls, t1.pašizmaksa from tabula1 left join tabula2 on tabula1.r.id = tabula2.r.id left join ( select tabula3.rēķinanr, tabula4.artikuls, abula4.pašizmaksa tabula3 left join tabula4 on tabula3.n.id = tabula4.n.id ) as t1 on tabula1.rēķinanr = t1.rēķinanr and tabula2.artikuls = t1.artikuls Skatoties uz tabulu izklājumu, pareizi būtu pieņemt, ka viens artikuls var parādīties vairākos nosūtīšanas dokumentos. Tad daudzums būtu jāsummē: Select tabula1.rēķinanr, tabula2.artikuls, t1.pašizmaksa from tabula1 left join tabula2 on tabula1.r.id = tabula2.r.id left join ( select min(tabula3.rēķinanr) as rēķinanr, min(tabula4.artikuls) as artikuls, sum(abula4.pašizmaksa) as pašizmaksa tabula3 left join tabula4 on tabula3.n.id = tabula4.n.id group by tabula3.rēķinanr, tabula4.artikuls ) as t1 on tabula1.rēķinanr = t1.rēķinanr and tabula2.artikuls = t1.artikuls Vai šādi: select min(rēķinanr) as rēķinanr, min(artikuls) as artikuls, sum(pašizmaksa) as pašizmaksa from ( Select tabula1.rēķinanr, tabula2.artikuls, 0 as pašizmaksa from tabula1 left join tabula2 on tabula1.r.id = tabula2.r.id union all select tabula3.rēķinanr, tabula4.artikuls, abula4.pašizmaksa from tabula3 left join tabula4 on tabula3.n.id = tabula4.n.id ) group by rēķinanr, artikuls Labots Novembris 5, 2022 - camel 3 Link to comment Share on other sites More sharing options...
Jurkins Novembris 5, 2022 Share Novembris 5, 2022 (labots) Amatiera jautājumi: Ja Tev ir rēķina Id, kāpēc citās tabulās, konkrēti, "Nosūtīšanas galvenē" izmanto numuru nevis Id? Kāpēc vajadzīgs "Rēķins detalizēti", ja, cik noprotu, katrai rēķina galvenei atbilst tikai viena detalizācija? sorry, ja offtopiks, bet, amatieraprāt 😁, tas nav īsti pareizi. Labots Novembris 5, 2022 - Jurkins 2 Link to comment Share on other sites More sharing options...
raivix95 Novembris 5, 2022 Share Novembris 5, 2022 Kādus resursus izmanto apguves procesā? Link to comment Share on other sites More sharing options...
Jurkins Novembris 5, 2022 Share Novembris 5, 2022 Man šķiet, ka vispirms vispār būtu jēga apgūt relāciju(neesmu pārliecināts par termina pareizību) datubāzu pamatus. Un tad jau tabulu apvienošanu. Link to comment Share on other sites More sharing options...
TOoMoOT Novembris 5, 2022 Share Novembris 5, 2022 Domāju, ka var arī iztikt bez subselekta: Ja ņem vērā @camel minēto summēšanu, tad sanāk šādi: ja grupē pēc rēķina num. un artikula, tad viņām virsū likt min() ir bezjēdzīgi. 1 Link to comment Share on other sites More sharing options...
camel Novembris 6, 2022 Share Novembris 6, 2022 (labots) pirms 12 stundām , TOoMoOT teica: ja grupē pēc rēķina num. un artikula, tad viņām virsū likt min() ir bezjēdzīgi. yep, ar laiku tās iemaņas zūd, un ja nepiedomā sanāk sarakstīt muļķības tavam sql viena lieka rinda: select r2.num_rekins, rd.artikuls, nd.pasizmaksa from nosutisana n join nosutisana_det nd on nd.id = n.id right join rekins_detail rd on rd.num_rekins = n.num_rekins and rd.artikuls = nd.artikuls join rekins r2 on r2.id = rd.id order by r2.num_rekins, rd.artikuls Labots Novembris 6, 2022 - camel 1 Link to comment Share on other sites More sharing options...
spameris Novembris 6, 2022 Share Novembris 6, 2022 (labots) 5.11.2022. , 12:15, Jurkins teica: Amatiera jautājumi: Ja Tev ir rēķina Id, kāpēc citās tabulās, konkrēti, "Nosūtīšanas galvenē" izmanto numuru nevis Id? Kāpēc vajadzīgs "Rēķins detalizēti", ja, cik noprotu, katrai rēķina galvenei atbilst tikai viena detalizācija? sorry, ja offtopiks, bet, amatieraprāt 😁, tas nav īsti pareizi. Nu jā, normāli jau katrai tabulai būtu jātaisa savs PK(primary key). Un tad ja vajag relāciju, tad tās PK vērtības ieliek citā tabulā, kā atsevišķu kolonnu. Kautko citu izmantot relācijām varētu teikt ir izņēmuma gadījums. Labots Novembris 6, 2022 - spameris Link to comment Share on other sites More sharing options...
Jurkins Novembris 6, 2022 Share Novembris 6, 2022 (labots) Pirms 26 minūtēm , spameris teica: katrai tabulai būtu jātaisa savs PK(primary key) Ja rēķina numurs ir unikāls, kas ir diezgan loģiski, tad nav nekādas vajadzības pēc rēķina Id. Un tas arī būs PK. edit: iespējams, ir nianses, ja rēķina numurs ir, piemēram, BZK002334-45JQQ stilā, katrs unikāls, tomēr ir jēga taisīt Id, nezinu, varbūt apstrāde paātrinās. Labots Novembris 6, 2022 - Jurkins Link to comment Share on other sites More sharing options...
AndrisBB Novembris 6, 2022 Share Novembris 6, 2022 Pirms 8 minūtēm , Jurkins teica: Ja rēķina numurs ir unikāls, kas ir diezgan loģiski, tad nav nekādas vajadzības pēc rēķina Id. Un tas arī būs PK. Tā saucās optimizēšana optimizēšanas pēc, jeb vienkārši nevajadzīga gudrošanās. Kura iekodīs dibenā visnegaidītākajā brīdī, aka pēkšņi vajadzēs rēķina nr, formatu pamainīt, apvienot divas dažādas datubāzes utt. 1 1 Link to comment Share on other sites More sharing options...
Jurkins Novembris 6, 2022 Share Novembris 6, 2022 Piekrītu. Link to comment Share on other sites More sharing options...
e = d Novembris 6, 2022 Share Novembris 6, 2022 Līdz šitādām gurdībām parasti aizdomājas, ja nav procesā efektīvo manageru, kuri gudriniekus laicīgi aptur un ievirza produktīvākā gultnē. Link to comment Share on other sites More sharing options...
Jurkins Novembris 6, 2022 Share Novembris 6, 2022 off: Man prieks 🤣, ka mans posts deva iespēju @e=d kaut ko gudru pateikt. Link to comment Share on other sites More sharing options...
codemen Novembris 7, 2022 Author Share Novembris 7, 2022 Paldies par atsaucību un komentāriem. Kā pamata resursu sql apguvei izmantoju : https://www.w3schools.com/sql/sql_intro.asp Konkrētais jautājums atrisināts un saprasta tēma, kas vēl jāapgūst. Link to comment Share on other sites More sharing options...
nrs Novembris 9, 2022 Share Novembris 9, 2022 Paskatījos kā ms accesā šo atrisiināt. Man vēlamais rezultāts sanāca šādā sql variantā: SELECT rekina_galvene.rekina_numurs, rekins_detalizeti.Artikuls, nosutisana_detalizeti.pasizmaksa FROM (rekina_galvene INNER JOIN rekins_detalizeti ON rekina_galvene.rek_ID = rekins_detalizeti.rek_ID) LEFT JOIN nosutisana_detalizeti ON rekins_detalizeti.Artikuls = nosutisana_detalizeti.artikuls; Lai iegūtu rezultātu ar query, vienu tabulu var vispār neņemt vērā. Link to comment Share on other sites More sharing options...
codemen Novembris 9, 2022 Author Share Novembris 9, 2022 Papildus grāmatvedības nianse ko iepriekš nepieminēju- vienādiem artikuliem ir iespējamas dažādas pašizmaksas (konkrētā lieta iegādāta atsevišķos laikos par atšķirīgām cenām). @nrsTev ir taisnība gadījumā, ja sistēma ir tikai viens rēķins, vai artikulam vienmēr ir fiksēta pašizmaksa. Link to comment Share on other sites More sharing options...
AndrisBB Novembris 9, 2022 Share Novembris 9, 2022 Pirms 28 minūtēm , codemen teica: vienādiem artikuliem ir iespējamas dažādas pašizmaksas Tas jau tev tāpat būs atsevišķā tabulā, kur tu uzskaiti krājumus. Link to comment Share on other sites More sharing options...
AndrisBB Novembris 9, 2022 Share Novembris 9, 2022 Kā arī priekškam artikuls ir divās tabulās? Ja tev ir rēķins, kurš sastāv no pozīcijām (artikuli), uz nosūtījumu tabula, kura sastāv no rēķiniem. Kāpēc nosūtījumam jāsatur atkal artikuli? Ja saliktu tavas 4 tabulas vienā 'flat failā', tad tev divas kolonas būtu identiskas? Link to comment Share on other sites More sharing options...
AndrisBB Novembris 9, 2022 Share Novembris 9, 2022 (labots) Ja es pareizi saprotu problemu, tad man loģiskak izskatas šādi Labots Novembris 9, 2022 - AndrisBB Link to comment Share on other sites More sharing options...
AndrisBB Novembris 9, 2022 Share Novembris 9, 2022 (labots) Karjumi ir vienkarši tas kas ir noliktava. Katru reizi kad izraksta reķinu ar kautkadu konkretu daudzumu, tad krajumi samazinas par to daudzumu. Nu un preteji, ja kautkas tiek atsutits, tad palielinas. Rekins var tikt izrakstits bez nosutijuma, bet parasti jau kautkads nosutijums tiks piesaistits. Tapat ari nosutījumā var būt vairāki rēķini. Tāpat arī katrs ieraksts var saturēt vairakus krajumus ar to pašu artikulu, tik pašizmaksa cita, piemeram vajadzeja izsutig 10 gabalus, bet noliktava bij 6 ar X pašizmaksu un 4 ar Y pašizmaksu. Labots Novembris 9, 2022 - AndrisBB Link to comment Share on other sites More sharing options...
spameris Novembris 9, 2022 Share Novembris 9, 2022 Pirms 22 minūtēm , AndrisBB teica: Tāpat arī katrs ieraksts var saturēt vairakus krajumus ar to pašu artikulu, tik pašizmaksa cita, piemeram vajadzeja izsutig 10 gabalus, bet noliktava bij 6 ar X pašizmaksu un 4 ar Y pašizmaksu. Es gan "ierakstos" turētu vairāk, vai mazāk to ko drukā uz rēķina, tb vidēju cenu no salasītajiem produktiem no krājumiem. Un krājumos ieliktu kolonnu rēķina ID, vai nu sadalītu "debet","credit" kolonnas, vai arī vienkārši liktu salasīto daudzumu ar mīnusa zīmi. Tad sasummējot, sagrupējot Krājumus dabūtu atlikumu. Link to comment Share on other sites More sharing options...
AndrisBB Novembris 9, 2022 Share Novembris 9, 2022 Nu var jau katram artikulam pielikt pasreizejo cenu. Nezinu gan kapec rekina vajadzetu rakstit pasizmaksu. 1 Link to comment Share on other sites More sharing options...
spameris Novembris 9, 2022 Share Novembris 9, 2022 Pirms 2 minūtēm , AndrisBB teica: Nu var jau katram artikulam pielikt pasreizejo cenu. Nezinu gan kapec rekina vajadzetu rakstit pasizmaksu. Nu jā pašizmaksu var nelikt, to var sarēķināt. Vienīgi tad tā uzskatāmi un vienkārši redzams cik nopelnīja rēķinā. Bet krājumiem gan manuprāt jāstrādā kā tādai transakciju tabulai kuru sasumējot sagrupējot dabū sava stock atlikumus, naudā, skaitā pa artikuliem utt... Tur pēc FIFO, FILO vai kāviņus tur sauca salasa preci. 1 Link to comment Share on other sites More sharing options...
AndrisBB Novembris 9, 2022 Share Novembris 9, 2022 Tas jau but kautkadas tranzakcijas, krajumi manuprat ir tas kas tev ir noliktava. X daudzums tas un Y kas cits. 1 Link to comment Share on other sites More sharing options...
versatile Novembris 10, 2022 Share Novembris 10, 2022 Kāpēc izgudrot Amuriku? Krājums - id, artikuls, nosaukums, statuss (aktīvs/nē) Klients - id, nosaukums, juridiskā info, adreses. Iespējami dažādi scenāriji. Rēķina headeris - id, numurs, datums, klienta id, klienta adrese, piegādes adrese, summa, var apmaksas statusu likt, utt. Līgumi - id, klients, numurs, spēkā no, spēkā līdz, + kaut kāda specifika Līguma noteikumi - id, līguma id, krājuma id, cena Rēķina rindas - id, krājuma id, daudzums, cena (pielasās no līguma noteikumiem, bet saglabājas rēķina rindās!) Krājumu transakcijas - id, krājuma id, transakcijas tips (pārdošana/ražošana/kustība), atsauce (rēķina id/ražošanas id/kustības žurnāla id), daudzums. Lai rēķinātu pašizmaksu, vajag izdevumu sadaļu. Ja to rēķina citur, tad var izveidot pašizmaksas tabulu, kur norādīt krājumu, pašizmaksu, datumus no kura līdz kuram spēkā. Pēc tam ņem krājumu transakcijas, un rēķina izmaksas. Tur dažādi scenāriji, parasti jau FIFO, kā arī biznesam jāsaprot, kā vērtē rīcībā krājumus uz pašizmaksas maiņas datumu. Kaut kā, stipri aptuveni, šādi. un tas ir tikai debitoru/krājumu modulis, vēl vajag kreditorus, ražošanu un savilkt to visu kopā GLā. Link to comment Share on other sites More sharing options...
AndrisBB Novembris 10, 2022 Share Novembris 10, 2022 Te jau laikam mācību nolūkos darbojas. Uzdizainēt reālu DB ar pārdomātiem visiem sīkumiem visdrīzāk aizņemtu vismaz 2 nedēļas. Un vēl tad tas būtu tikai sākuma punkts. Link to comment Share on other sites More sharing options...
Jurkins Novembris 10, 2022 Share Novembris 10, 2022 SQLite ir ļoti labs tutoriālis - https://www.sqlitetutorial.net Tur var novilkt parauga datubāzi ar visiem datiem un tad darboties ar komandu/pieprasījumu piemēriem. Link to comment Share on other sites More sharing options...
versatile Novembris 10, 2022 Share Novembris 10, 2022 (labots) pirms 2 stundām , AndrisBB teica: Uzdizainēt reālu DB ar pārdomātiem visiem sīkumiem visdrīzāk aizņemtu vismaz 2 nedēļas. Un vēl tad tas būtu tikai sākuma punkts. Protams, tas ir S-liknes augšgals un prasa zināmu izpratni par lietām. Bet, ar tādu darbiņu aiz muguras jau var reāli iet iekārtoties kaut kur uz juniora posteni amatā, kur ne tikai brutāli pēc specenes jākodē, bet kur to speceni var palīdzēt domāt, pie kam, visai plašā kantoru lokā. Un jebkuru darbiņu vislabāk mācītie ar reālu vajadzību un use-case prātā. Atceros, kā vidusskolas laikā programmēju blogu, kas saturu un komentārus glabāja teksta failos. Tak visu varēja i rediģēt, i izdzēst, i vēl sazin ko - par visu padomāts. Labots Novembris 10, 2022 - versatile Link to comment Share on other sites More sharing options...
raivix95 Novembris 10, 2022 Share Novembris 10, 2022 Pastāstiet, cik lielu pienesumu dod ģenerēts UUID autonumber vietā? Kāpēc un kādos gadījumos tas būtu vajadzīgs? Link to comment Share on other sites More sharing options...
AndrisBB Novembris 10, 2022 Share Novembris 10, 2022 Lai dabūtu relatīvu unikālu UUID? Nezinu kur citi toizmanto, bet vienā produktā pie kura strādāju, katrs ieraksts tiek izveidots uz devaisa. Kautkad tas viss tiek sasinhronizēts ar db uz PC/Servera. Vienam lietotājam var būt dažādi devaisi. 2 Link to comment Share on other sites More sharing options...
nrs Novembris 10, 2022 Share Novembris 10, 2022 Pirms 20 minūtēm , raivix95 teica: Pastāstiet, cik lielu pienesumu dod ģenerēts UUID autonumber vietā? Kāpēc un kādos gadījumos tas būtu vajadzīgs? Tieši tikko youtuberis Computer Learning Zone par šo postēja video. Link to comment Share on other sites More sharing options...
codemen Novembris 10, 2022 Author Share Novembris 10, 2022 Paldies par diskusiju un ieteikumiem! Kā jau @AndrisBBminēja - tīri mācību nolūkā mēģinu savilkt datus no reālās uzņēmuma grāmatvedības sitēmas. Reāli rēķinu detalizētajā tabulā ir kādas 50 kolonnas ar dažādiem datiem (fifo, SN, datumi, rēķina rakstītājs, grāmatotājs, utt.) bet konkrētajā gadījumā - pašizmaksas šajā tabulā tiek rādītas nepareizi (nezinu kāpēc tā). Tas ir arī iemesls, kāpēc mēģināju cīnīties ar pašizmaksu iegūšanu no nosūtīšanu tabulas, jo tur dati ir korekti. Gala rezultātā - preciza infa par konkrētā rēķina bruto peļņu. Link to comment Share on other sites More sharing options...
camel Novembris 11, 2022 Share Novembris 11, 2022 (labots) Sarakstīt pareizi tabulas un visus SQL priekā krājumu uzskaite nav triviāla padarīšana. Esmu mēģinājis to darīt bet tā līdz galam visu izdomāt nav izdevies. Realizētai precei ir jārēķina pašizmaksa (iepurkuma cena), atrodot linkus starp realizācijas dokumenta un iepirkumu dokumentu rindām, parasti pēc FIFO metodes. Linkus vēlams turēt atsevišķā tabulā, lai var ātri sataisīt atskaites, piemēram, par krājumu kustību pa piegādātājiem. Tad vēl jādomā kā pareizi rēķināt iepirkuma cenu atgirieztai precei, pēc principa pēdējais ārā pirmais iekšā vai kā savādāk. Vēl jāparedz iespēja labot vecākas pavadzīmes, rakstīt kredītrēķinus, kā rezultātā varbūt jāpārrēķina viss pašizmaksas aprēķins. Nedomāju ka te kāds varētu to visu tā līdz galam izdomāt un nodemonstrēt kā tas darāms. Labots Novembris 11, 2022 - camel 2 Link to comment Share on other sites More sharing options...
_dunduks_ Novembris 11, 2022 Share Novembris 11, 2022 Un tad vēl papildus inventarizācijas (gan kopējās visu krājumu, gan atsevišķu preču). Citādi tas ir easy tikai teorijā un 2 nedēļu grāmatvedības kursos. Link to comment Share on other sites More sharing options...
spameris Novembris 17, 2022 Share Novembris 17, 2022 10.11.2022. , 11:25, versatile teica: Kāpēc izgudrot Amuriku? Nu nav jau gan tāda pilnīgi vienāda gadījuma, kas der visam. Jā kā te biedrs minēja skatīts tiek tāds kā "hello world" risinājums. Bet maz ticams ka kautkas no šī te strādās, ja jāapstrādā 100..1000.. vai vairāk sekundē šādu rēķinu, tad iespējams parādītos visādi eksotiskāki risinājumi. Link to comment Share on other sites More sharing options...
Recommended Posts
Izveido kontu, vai pieraksties esošajā, lai komentētu
Jums ir jābūt šī foruma biedram, lai varētu komentēt tēmas
Izveidot jaunu kontu
Piereģistrējies un izveido jaunu kontu, tas būs viegli!
Reģistrēt jaunu kontuPierakstīties
Jums jau ir konts? Pierakstieties tajā šeit!
Pierakstīties tagad!