camel Augusts 30, 2018 Author Share Augusts 30, 2018 Varbūt kādam tomēr ir kāda paštaisīta noliktavas programma ķešā, ar ko papildināt manu bezmaksas grāmatvedības programmu komplektu. Riktīgam alfa programmētājam uztaisīt kautko tādu mazu būtu nieks, vai ne. Man pašdarbniekam reizēm rokas par īsu un pietrūkst atspēriena, it īpaši, kad publikas interese ir tuvu nullei (lejuplādes, atsauču daudzums). Projekta koncepts - uztaisīt pieticīgu, bezmaksas atvērta koda grmāmatvedības komplektu - manuprāt nav slikts. Iespējams programma nebūs tik kruta kā horizon, bet kautkas labāks par draņķa jumi varbūt. Link to comment Share on other sites More sharing options...
abi Augusts 30, 2018 Share Augusts 30, 2018 (labots) Viss ir jauki līdz brīdim kad ir jāpieņem lēmums vai uzticēt TEV VID pretenzijas pret savu uzņēmumu. Kas TU ir, kas TU būsi pēc 5 gad, un ko TU garantē šai periodā. Te ir fiasko. Nu kaut 3 gadu garantija, ticama garantija! Labots Augusts 30, 2018 - abi Link to comment Share on other sites More sharing options...
camel Augusts 31, 2018 Author Share Augusts 31, 2018 pirms 12 stundām , abi teica: Kas TU ir, kas TU būsi pēc 5 gad, un ko TU garantē šai periodā. Te ir fiasko. Tev taisnība, kas to lai zin kas es tāds, varbūt kautkāds slims dīvainis, vai zaļš rūķītis, vai ... Pieņemu, ka respektablāk izskatītos, ja programmas izstrādātājs būtu kautkāds SIA FakJū. pirms 12 stundām , abi teica: Nu kaut 3 gadu garantija, ticama garantija! Vai tu esi lasijis savu programmu licences. Rekur citāts no Jmis licences: Citēt Lietotājs saņem Programmproduktu bez jebkāda tieša vai netieša pamatojuma, ieskaitot nepieciešamību un derīgumu konkrētiem mērķiem. Programmprodukta lietošana un tā piemērotība ir Lietotāja kompetencē. Izstrādātājs negarantē, ka Programmprodukts atbilst Lietotāja prasībām, ka tas ir bez kļūdām un pasargāts no darbības pārtraukumiem. Izstrādātājs neatbild par defektiem, kas radušies nepareizas ekspluatācijas dēļ, kā arī neuzņemas atbildību par zaudējumiem un jebkādu nodarīto kaitējumu, kas radies Programmprodukta ekspluatācijas dēļ. Es tak nesaku, ka tev jālieto mana programma. Tu ir brīvs izvēlēties pēc saviem ieskatiem un preferencēm. Varbūt kādam netraucēs programmas izstrādātāja šaubīgā būtība un nākotnes perspektīvas un šīs programmas liksies noderīgas, lai lietotu grāmatveībā vai piedalītos to uzlabošanā ar ieteikumiem un komēntāriem. Programmu sākotnēji taisiju savām vajadzībām un kapēc gan man to neizlikt internetā, lai ņem, kas grib. Tā kā programma ir bezmaksas, man īpaši neuztrauc vai to kāds lieto vai nē. Mani vairāk iepriecina, ka kāds atraksta par atrastām kļūdām vai iesaka kautko uzlabot. 1 Link to comment Share on other sites More sharing options...
marrtins Augusts 31, 2018 Share Augusts 31, 2018 Ir kāds tehnisks iemesls kāpēc ir trīs nodalītas programmas? Parasti jau tās jomas iet roku rokā... Link to comment Share on other sites More sharing options...
marrtins Augusts 31, 2018 Share Augusts 31, 2018 pirms 2 stundām , Watdg Aabrar teica: Tikai vāji progrogramētāji izmanto smadzense, stipri programētāji nokopē no citiem. Mūsu VIDē ej nokopē kaut ko derīgu. Pie mums lietas tiek darītas pa savam. Link to comment Share on other sites More sharing options...
camel Augusts 31, 2018 Author Share Augusts 31, 2018 Nesaprotu, ko tu tur raksti. Speciāli reģistrējies, lai šeit ķēmotos? Link to comment Share on other sites More sharing options...
rubb Augusts 31, 2018 Share Augusts 31, 2018 @camel, visu cieņu, par ņemšanos Cik saprotu, arī progas kodu dod pa brīvu, tā teikt publiski pieejams kods... Iemet kodu piemēram Githubā(kurā pats pēc tam arī liec izmaiņas) un iedod arī attiecīgo URLi, no kura var kodu paņemt. Tas būtu tiešām labs un interesants variants... Link to comment Share on other sites More sharing options...
camel Augusts 31, 2018 Author Share Augusts 31, 2018 (labots) ☹️ ☹️ ☹️ Labots Augusts 31, 2018 - camel Link to comment Share on other sites More sharing options...
rubb Augusts 31, 2018 Share Augusts 31, 2018 @camel, atvainojos, jau esi iekš git ielicis... Tomēr nebūtu slikti to attiecīgo urli norādīt arī savā pirmajā postā ... Link to comment Share on other sites More sharing options...
camel Janvāris 21, 2023 Author Share Janvāris 21, 2023 Paturpināšu šo veco tēmu. Sāku taisīt programmu noliktavas uzskaitei. Lai gan līdz pabeigšanai vēl tālu, izdomāju padalīties ar WIP rezultātu. Kas zin, varbūt kāds pieteiksies palīdzēt, kaut vismaz ar padomu. Pieņemu ka tur kautkur ir daudz tādu programmētāju, kas šādas programmas taisa piecas dienā un zin kā tas pareizi darāms. Šoreiz netaisiju kā atsevišķu programmu, bet kā papildinājumu finanšu grāmatvedības programmai. Plāns ir kautkad visu sabāzt vienā programmā. Un jāpāriet uz .net 7 un EF7 - šaubos, ka tas būs viegli. Cik esmu skatijies pārejot uz .net 7 un EF7, nāksies atteikties no kautkādas funkcionalitēs, jo tur vienkārši tām nav atbalsta. Ua doto brīdi programma kautcik darbojas, nekas īpaši sarežģīts tur nav. Vairāki jautājumi vēl jāizdomā līdz galam. Pašlaik process ir apstājies pie tā, ka ir jāpārtaisa pilna pārrēķina SP (SP_M_RECALCITEM_01A), jo nedarbojas kā vajag pircēja atgriezto preču pārrēķins. Sākotnēji pilno pārrēķinu taisiju, palaižot atsevišķu SP katram dokumentam - ļoti lēna padarīšana. Tad pārrakstiju visu ar kursoriem, kur viss dokumentu saraksts tiek uzstaigāts vienā SP - daudz ātrāks risinājums. Bet problēma ir ar pircēja atgriezto preci, jo tiek mainīti dati saistīti ar dokumentiem, kurus kursors ir jau izstaigājis. Githubā projekts ir KlonsFM mapē: https://github.com/Camel-RD/Klons/tree/master/KlonsFM Testa programmu var paņemt te: https://failiem.lv/u/jndtm3cfg Link to comment Share on other sites More sharing options...
camel Janvāris 22, 2023 Author Share Janvāris 22, 2023 Yay, izštukoju kā tas SP pārrakstāms. Pāris stundas bakstijos šurpu turpu - trial and error koda rakstīšanas process. Jāizdomā kā to kārtīgi notestēt, ja darbosies, būs kā vinnests loterijā (vai kas tamlīdzīgs). It kā nekas sarežģīts, bet super svarīgs - ja šitais nedarbojas tad viss pasākums apstājas. Te tas SP sql kods, ja nu kādam interesē par ko ir runa: ALTER PROCEDURE SP_M_RECALCITEM_01A ( PSTARTDATE DATE, PPROGRESSTEP INTEGER) RETURNS ( RET INTEGER) AS declare vret damount; declare vcuriditem integer; declare vidrow1 integer; declare viditem1 integer; declare vtam1 damount; declare vdt1 date; declare vprice1 dpricex; declare vtp1 integer; declare vidrow2 integer; declare viditem2 integer; declare vtam2 damount; declare vdt2 date; declare vprice2 dpricex; declare vidrow3 integer; declare vtam3 damount; declare avidrow1 integer; declare avidrow2 integer; declare vdoctp integer; declare vamused damount; declare vamleft1 damount; declare vamleft2 damount; declare vtotalprice dpricex; declare vprogress integer; declare veventmessage varchar(20); declare CUR1 cursor for ( select R1.id, R1.iditem, R1.amount as amountotal, D1.dt, R1.buyprice, D1.tp from m_rows as R1 join m_docs as D1 on D1.id = R1.iddoc and D1.state in (2, 3) join m_doctypes on D1.tp = m_doctypes.id and (m_doctypes.optype = 1 or D1.tp in (5, 7)) join m_items on m_items.id = R1.iditem and m_items.isservice = 0 order by R1.iditem, D1.dt, R1.idseq, R1.id ); declare CUR2 cursor for ( select R1.id, R1.iditem, D1.dt, D1.tp, R1.amount as amountotal from m_rows as R1 join m_docs as D1 on D1.id = R1.iddoc and D1.state in (2, 3) and ((:pstartdate is null) or (D1.dt >= :pstartdate)) join m_doctypes on D1.tp = m_doctypes.id and (m_doctypes.optype = 2 or D1.tp in (5, 7)) join m_items on m_items.id = R1.iditem and m_items.isservice = 0 order by R1.iditem, dt, R1.idseq, R1.id ); declare CUR3 cursor for ( select R1.id, R1.iditem, R1.amount as amountotal, -L1.amount as amountreturned, D1.dt, R1.buyprice, D1.tp from m_links as L1 join m_rows as R1 on L1.id2 = :vidrow3 and --L1.amount < 0 and -- we have links with amount > 0 to original sale doc -- or rely on optype = 1 R1.id = L1.id1 join m_docs as D1 on D1.id = R1.iddoc and D1.state in (2, 3) join m_doctypes on D1.tp = m_doctypes.id and m_doctypes.optype = 1 join m_items on m_items.id = R1.iditem and m_items.isservice = 0 order by R1.iditem, D1.dt, R1.idseq, R1.id ); begin veventmessage = 'Progress_' || current_connection; vprogress = 0; execute procedure sp_m_recalcamounts_1 returning_values ret; if (pprogresstep > 0) then IN AUTONOMOUS TRANSACTION DO post_event veventmessage; if (pstartdate is null) then begin delete from m_links; end else begin for select m_links.id1, m_links.id2 from m_links join m_rows as R2 on R2.id = m_links.id2 join m_docs as D2 on D2.id = R2.iddoc and D2.dt >= :pstartdate into :vidrow1, :vidrow2 do begin delete from m_links where id1 = :vidrow1 and id2 = :vidrow2; end end if (pprogresstep > 0) then IN AUTONOMOUS TRANSACTION DO post_event veventmessage; merge into m_rows using ( select m_docs.id from m_docs join m_doctypes on m_doctypes.id = m_docs.tp and m_doctypes.optype = 1 ) as T1 on T1.id = m_rows.iddoc and (buyprice <> price or tbuyprice <> tprice) when matched then update set buyprice = price, tbuyprice = tprice; vamleft1 = 0; vamleft2 = 0; vtotalprice = 0; vcuriditem = null; open cur1; open cur2; vidrow1 = null; vidrow3 = null; while(1=1) do begin if (vamleft2 = 0) then begin while(1=1) do begin vprogress = vprogress + 1; if ((pprogresstep > 0) and (vprogress >= pprogresstep)) then begin IN AUTONOMOUS TRANSACTION DO post_event veventmessage; vprogress = 0; end fetch cur2 into :vidrow2, :viditem2, :vdt2, :vdoctp, :vtam2; if (row_count = 0) then leave; if ((vcuriditem is null) or (vcuriditem < viditem2)) then begin vcuriditem = viditem2; vamleft1 = 0; end vtotalprice = 0; vamleft2 = 0; vret = 0; if (vdoctp in (3, 10)) then begin vamleft2 = vtam2; leave; end else if (vdoctp = 4) then execute procedure sp_m_recalcitem_04 (:vidrow2, :vidrow1) returning_values :vret; else if (vdoctp = 5) then execute procedure sp_m_recalcitem_05 (:vidrow2, :vidrow1) returning_values :vret; else if (vdoctp = 6) then execute procedure sp_m_recalcitem_06 (:vidrow2, :vidrow1) returning_values :vret; else if (vdoctp = 7) then execute procedure sp_m_recalcitem_07 (:vidrow2, :vidrow1) returning_values :vret; if (vidrow1 is not null) then vamleft1 = vamleft1 - vret; end if (row_count = 0) then leave; end if (vamleft1 = 0) then begin while(1=1) do begin vprogress = vprogress + 1; if ((pprogresstep > 0) and (vprogress >= pprogresstep)) then begin IN AUTONOMOUS TRANSACTION DO post_event veventmessage; vprogress = 0; end if (vidrow3 is null) then begin fetch cur1 into :vidrow1, :viditem1, :vtam1, :vdt1, :vprice1, :vtp1; if ((row_count = 0) or (viditem1 > vcuriditem)) then leave; if (vtp1 in (5,7)) then begin vidrow3 = vidrow1; open cur3; end else begin if (viditem1 = vcuriditem) then begin select sum(m_links.amount) as amountused from m_links where m_links.id1 = :vidrow1 --and m_links.amount > 0 into :vamused; vamused = coalesce(vamused, 0); vamleft1 = vtam1 - vamused; if (vamleft1 > 0) then leave; end end end else begin fetch cur3 into :vidrow1, :viditem1, :vtam1, :vtam3, :vdt1, :vprice1, :vtp1; if (row_count = 0) then begin vidrow3 = null; close cur3; end else begin select sum(m_links.amount) as amountused from m_links where m_links.id1 = :vidrow1 into :vamused; vamused = coalesce(vamused, 0); if (vamused < vtam1) then begin vamleft1 = vtam1 - vamused; -- maybe cant give more then vtam3, or we loose some row1 -- a bit incorrect, but we cant do it right anyway -- vamleft1 = minvalue(vtam1 - vamused, vtam3); leave; end end end end if ((row_count = 0) or (vdt1 > vdt2) or (viditem1 > vcuriditem)) then begin close cur1; close cur2; if (vidrow3 is not null) then close cur3; exception ex_failure 'Not enough amount in stock ' || 'item:[' || :vcuriditem || ']'; end end if (vamleft1 < 0) then exception ex_failure 'Bad code: vamleft1 < 0'; vamused = minvalue(vamleft1, vamleft2); if (vamused > 0) then begin vamleft1 = vamleft1 - vamused; vamleft2 = vamleft2 - vamused; vtotalprice = vtotalprice + vamused * vprice1; if ((avidrow1 = vidrow1) and (avidrow2 = vidrow2)) then begin close cur1; close cur2; exception ex_failure 'Bad code'; end insert into m_links (id1, id2, iditem, amount) values (:vidrow1, :vidrow2, :vcuriditem, :vamused); if (vidrow3 is not null) then begin update m_links as L1 set L1.amount = L1.amount + :vamused where L1.id1 = :vidrow3 and L1.id2 = :vidrow2; if (row_count = 0) then insert into m_links (id1, id2, iditem, amount) values (:vidrow3, :vidrow2, :vcuriditem, :vamused); end avidrow1 = vidrow1; avidrow2 = vidrow2; if (vamleft2 = 0) then begin vtotalprice = round(vtotalprice, 2); vprice2 = round(vtotalprice / vtam2, 4); update m_rows set buyprice = :vprice2, tbuyprice = :vtotalprice --idseq = gen_id(gen_m_docseq, 1) where id = :vidrow2 and (buyprice <> :vprice2 or tbuyprice <> :vtotalprice); end end end close cur1; close cur2; execute procedure SP_M_RECALC_ROWSISGONE_1 returning_values ret; ret = 1; suspend; end 1 Link to comment Share on other sites More sharing options...
camel Maijs 29, 2023 Author Share Maijs 29, 2023 Programmai jauna versija. Šajā versijā visi moduļi (finanses, algas, panatlīdzekļi, noliktava) apvienoti vienā programmā, vienā DB. Pie reizes ir pāriets uz Firebird4. https://github.com/Camel-RD/Klons2 Nav gluži gala versija, un kas to lai zin vai tāda kādreiz būs. Šitā vismaz, ja izliek publiskai paņemšanai, kaut vai nepabeigtu, varbūt kāds paņems, notestēs un dos ziņu, ja kas nedarbojas vai ir jāpapildina. Savā nodabā čubināties dažreiz paliek garlaicīgi. 2 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!