22 KiB
Optiune de firma pentru contul de debit (SCD) pe ramura fara politica de pret (#13, decizia 36)
Cercetare read-only, terminata. Continua canal_cont_venit_fara_politica.md (proiectarea
parametrului de cont, sectiunea "Proiectarea parametrului de cont contabil", :27-241) si
verificarea ei, parametru_cont_contabilizeaza_articol.md. Acolo, randul SCD din tabelul de
sectiunea 3 propunea SCD hardcodat '4111', marcat explicit "de confirmat cu Marius"
(canal_cont_venit_fara_politica.md:146). Decizia 36 (Marius, 10.08.2026): SCD vine dintr-o
optiune de firma, cu 4111 ca implicit — motivul fiind ca se poate schimba la client fara
recompilare. Aici e proiectarea acelei optiuni. Decizia 31 se aplica: datele din baza de dev arata
ce exista, nu ce e configurat la client — nu se generalizeaza pe numere, doar pe tipar/structura.
Oracle interogat doar SELECT, schema MARIUSM_AUTO/ROA_CENTRAL. Niciun fisier de cod atins.
0. Rezumat, in cinci randuri
Mecanismul de optiuni de firma exista deja de 15+ ani (PACK_SESIUNE.getoptiunefirma, tabelul
OPTIUNI, 458 randuri azi) si are exact tiparul cerut deja in productie, in acelasi pachet:
pack_facturare.scrie_incasare2 seteaza V_SCD dintr-o optiune (RF_CONT_INCASARE_BONFISCAL etc.,
cate una per tip de incasare), cu fallback pe un cont hardcodat daca optiunea lipseste — acelasi
camp (SCD), acelasi pachet, aceeasi sursa Oracle (ff_2026_08_09_01_COMUN_PACK_FACTURARE.sql,
liniile 13191-13233, tratate integral in sectiunea 2). Ecranul de editare (frm_optiuni/
frm_optiuni_nou, COMUN\clase\oOptiuni.vc2) e complet generic peste tabelul OPTIUNI —
adaugarea cheii noi nu cere niciun cod VFP nou in ecranul de optiuni, doar randul in tabel.
Propunerea (sectiunea 3): cheia noua FACT_SCD_ARTFPRET (sau numele ales de Marius), instalata cu
valoare implicita '4111' chiar in randul din OPTIUNI (tiparul deja folosit de toate exemplele
gasite), plus fallback hardcodat '4111' in cod langa getoptiunefirma, in oglinda exacta a
tiparului scrie_incasare2 — dubla plasa de siguranta (instalare veche fara randul din OPTIUNI
si rand editat gresit/gol raman amandoua acoperite).
1. Cum functioneaza mecanismul de optiuni de firma, azi
1.1 Stocare — tabelul OPTIUNI
Interogat direct (ALL_TAB_COLUMNS, schema curenta), 458 randuri azi:
| Coloana | Tip | Null | Rol |
|---|---|---|---|
ID_OPTIUNI |
NUMBER |
N | cheie surogat, PK implicita |
VARNAME |
VARCHAR2(30) |
Y | cheia optiunii — cautata UPPER(TRIM(...)), deci case-insensitive in practica |
VARTYPE |
VARCHAR2(10) |
Y | eticheta de tip pentru randare/parsare in VFP: CHARACTER/NUMERIC/CURRENCY/DATE/DATETIME/LOGICAL — descriptiva, nu impusa de Oracle; distinct azi: CHARACTER 156, NUMERIC 288, LOGICAL 11, DATE 3 |
VARVALUE |
VARCHAR2(1000) |
Y | valoarea, mereu text, indiferent de VARTYPE |
VARVALUE2 |
CLOB |
Y | valoare alternativa, folosita de un mecanism separat (citeste_optiune(tcOptiune, tlValue2), oinit_optiuni.prg:802-823) — irelevant aici |
VARDESC |
VARCHAR2(100) |
Y | descriere afisata in ecran |
PROGRAM |
VARCHAR2(30) |
Y | produsul care a creat optiunea (metadata) |
PROGRAME |
VARCHAR2(1000) |
Y | lista CSV de produse pentru care optiunea e vizibila/relevanta (folosita la filtrare in incarcarea globala VFP, sectiunea 1.4) |
ID_PRG_OWNER |
NUMBER |
Y | neexaminat mai departe, neрелevant aici |
Fara ID_FIRMA. Motivul: fiecare firma are schema Oracle proprie — tabelul OPTIUNI din
schema curenta de conexiune este deja "optiunile firmei curente"; nu exista randare
multi-firma in acelasi tabel. Confirmat si de codul VFP: frm_optiuni.cschema e setat la
constanta de compilare CONTAFIN_ORACLE (oOptiuni.vc2:1089, acelasi simbol folosit peste tot in
COMUN pentru "schema firmei curente"), iar getoptiunefirma(tcS, tcOptiune) primeste un
parametru de schema (tcS, azi mereu USER) dar nu il foloseste in interogare — select varvalue from optiuni fara calificare de schema (cod exact la sectiunea 1.2) — pentru ca sesiunea
Oracle e deja conectata direct in schema firmei. tcS ramane doar din compatibilitate istorica cu
supraincarcarea getOptiuneFirma(tcOptiune) (fara schema), care apeleaza pe cea cu doi parametri
cu user (sectiunea 1.2).
1.2 Semnatura si contract — PACK_SESIUNE.getoptiunefirma
Sursa curenta confirmata prin ALL_SOURCE pe pachetul live (PACK_SESIUNE, tip PACKAGE BODY) —
identica, verificat, cu ultima versiune gasita in SCRIPTURI_CLAR
(2014/04/ff_2014_04_24_01_COMUN_PACK_SESIUNE.sql:328-350; nicio modificare de atunci, cautare
FUNCTION getoptiunefirma in SCRIPTURI_CLAR/2024, /2025, /2026 — zero rezultate):
FUNCTION getoptiunefirma(tcS IN VARCHAR2, tcOptiune IN VARCHAR2)
RETURN VARCHAR2 IS
lcValue Optiuni.Varvalue%Type := '';
BEGIN
BEGIN
select varvalue
INTO lcValue
from optiuni
where UPPER(TRIM(VARNAME)) = UPPER(TRIM(tcOptiune));
EXCEPTION
WHEN OTHERS THEN
lcValue := '';
END;
RETURN lcValue;
END;
FUNCTION getOptiuneFirma(tcOptiune IN VARCHAR2) RETURN VARCHAR2 IS
lcValue Optiuni.Varvalue%Type := '';
BEGIN
lcValue := getOptiuneFirma(user, tcOptiune);
return lcValue;
END;
Contract, verificat pe RETURN, nu dedus din nume:
- Parametru: numele optiunii (
tcOptiune), cautatUPPER(TRIM(...))— insensibil la caz si la spatii; a doua forma (getOptiuneFirma(tcOptiune), un singur parametru) e cea folosita azi peste tot inpack_facturare(vezi sectiunea 2) — deleaga la forma cu doi parametri cuuser. - Cand optiunea NU exista (
NO_DATA_FOUND, prins deWHEN OTHERSgeneric):RETURN ''(string gol), niciodataNULLexplicit si niciodata exceptie propagata. Insa in Oracle unVARCHAR2egal cu''esteNULLla nivel de reprezentare (Oracle nu distinge stringul gol deNULL) — deci orice apelant care testeazaIF V_X IS NULL THENdupa un apel lagetoptiunefirmaprinde si cazul "optiune inexistenta", fara cod suplimentar. Acesta e exact tiparul folosit de toti apelantii gasiti (sectiunea 2). WHEN OTHERS THEN lcValue := ''inghite orice eroare, nu doarNO_DATA_FOUND(de ex. siTOO_MANY_ROWSdaca ar exista vreodata doua randuri cu acelasiVARNAME— nu exista constrangereUNIQUEpeVARNAME, doar convenția aplicatiei). Nu e un risc nou introdus de propunerea de fata — e comportamentul mecanismului de 15+ ani, pastrat ca atare.- Variante: o singura functie, intotdeauna
VARCHAR2. Nu existagetoptiunefirmanumerica/booleana separata in Oracle — conversia se face la apelant, in PL/SQL cuTO_NUMBER(NVL(...))(exemplu confirmat, acelasi fisier,scrie_incasare2,ff_...:13177:TO_NUMBER(NVL(pack_sesiune.getoptiunefirma('D406'), '0'))) sau in VFP cuVAL()/CTOD()/etc., pe baza coloaneiVARTYPE(vezioinit_optiuni.prg:179-211, functiaactualizeaza_optiuni_program, care materializeaza fiecare optiune intr-o variabila globala VFP cu prefix dupa tip:gc<nume>pentruCHARACTER,gn<nume>pentruNUMERIC,gl<nume>pentruLOGICALetc.). Pentru un cont contabil (VARCHAR2(4)), varianta corecta e cea de baza,VARTYPE='CHARACTER'— exact tipul folosit de toate exemplele cu cont din sectiunea 2, fara nicio conversie necesara la citire in PL/SQL (V_SCDe dejaVARCHAR2).
1.3 Ecranul de editare — complet generic peste tabel
COMUN\clase\oOptiuni.vc2, doua clase relevante:
frm_optiuni(:1064-1314) — grid pe view-ul VFP localv_optiuni(populat dintr-unSELECT * FROM <schema>.optiuni, vezioinit_optiuni.prg:337inviz_optiuni), 4 coloane (varname,vartype,varvalue,vardesc), cu cautare doar dupavarname LIKE(do_cauta,:1261-1278) si butoane Adauga/Modifica/Sterge care deschidfrm_optiuni_nou.frm_optiuni_nou(:1316-1462) — formular Adauga/Modifica cu 4 campuri:varname(text,Format="!K"= uppercase),vartype(combobox cu lista fixaCHARACTER,CURRENCY,NUMERIC, DATETIME,DATE,LOGICAL),varvalue(text),vardesc(text). Validare la salvare (inainte_de_do_termin,:1417-1450): doar "nu e gol" pevarname,vartype,varvalue— nicio validare de format sau de continut (nu verifica lungime, nu verifica dacavarvaluee un cont existent in planul de conturi, nimic specific per optiune).cus_odata_optiuni(:139-206) — clasa de persistenta:INSERT/UPDATE/DELETEgeneric peoptiuni (varname, vartype, varvalue, vardesc)— confirma ca orice cheie noua functioneaza fara nicio schimbare la acest cod; scrie exact cele 4 coloane editabile din ecran.
Concluzie la intrebarea "adaugarea unei optiuni noi cere cod nou in ecran": NU. Ecranul e
generic peste tabel dupa cele 4 coloane editabile. Randul nou (FACT_SCD_ARTFPRET, sectiunea 3)
apare automat in grid dupa ce e inserat, si e editabil din prima fara nicio modificare VFP.
Nota conexa, nu necesara pentru mecanismul Oracle: la fiecare pornire de sesiune, VFP
materializeaza toate randurile din OPTIUNI in variabile globale (optiuni_firma,
oinit_optiuni.prg:234-310), filtrate Isnull(programe) Or gcNumeProgram $ programe — deci coloana
PROGRAME conteaza doar pentru vizibilitatea in acest mecanism global VFP, nu pentru
getoptiunefirma (care nu se uita deloc la PROGRAME). Optiunea noua nu are nevoie de acest canal
VFP (Oracle o citeste direct), dar completarea corecta a PROGRAME evita zgomot/confuzie daca
cineva se uita in frm_optiuni din ROAFACTURARE si se asteapta sa vada optiunea listata acolo cu
gcNumeProgram = 'ROAFACTURARE' in PROGRAME.
2. Exemple reale de optiuni existente, cu lantul complet
2a. RF_CONT_INCASARE_* — exact tiparul cerut, in acelasi pachet, pe acelasi camp SCD
Cel mai relevant exemplu posibil: patru optiuni care alimenteaza direct SCD pe o nota
contabila, in pack_facturare.scrie_incasare2 — aceeasi functie Oracle pe care propunerea de la
canal_cont_venit_fara_politica.md o modifica (acelasi fisier,
ff_2026_08_09_01_COMUN_PACK_FACTURARE.sql).
Randul din tabel (interogat direct, 4 randuri, VARTYPE CHARACTER la toate):
| VARNAME | VARVALUE azi | VARDESC | PROGRAM | PROGRAME |
|---|---|---|---|---|
RF_CONT_INCASARE_BONFISCAL |
5311 |
CONTUL DEBITOR PENTRU NOTA DE INCASARE 5311 = 4111 |
ROAFACTURARE |
ROAFACTURARE,ROAACNPRO,ROACOMENZI,ROACONTRACTE,ROAGEST,ROARESTAURANT |
RF_CONT_INCASARE_CARDBANCAR |
5125 |
CONTUL DEBITOR PENTRU NOTA DE INCASARE 5113 = 4111 |
idem | idem |
RF_CONT_INCASARE_TICHETE |
5323 |
CONTUL DEBITOR PENTRU NOTA DE INCASARE 5323 = 4111 |
idem | idem |
RF_CONT_INCASARE_CHITANTA |
5311 |
CONTUL DEBITOR PENTRU NOTA DE INCASARE 5311 = 4111 |
idem | idem |
(VARDESC mentioneaza si = 4111 — nu e o eroare de copy-paste: e nota ca partea de credit a
notei de incasare e contul de clienti 4111, deci descrierea documenteaza ambele parti ale notei,
nu doar valoarea implicita a optiunii.)
Insertia originala (SCRIPTURI_CLAR/2010/08/ff_2010_08_11_01_OPTIUNI.sql:9-19), tiparul de
migrare de urmat:
insert into optiuni (VARNAME, VARTYPE, PROGRAM, VARVALUE, VARDESC, ID_PRG_OWNER, PROGRAME)
values ('RF_CONT_INCASARE_BONFISCAL', 'CHARACTER', 'ROAFACTURARE', '5311',
'CONTUL DEBITOR PENTRU NOTA DE INCASARE 5311 = 4111', null, 'ROAFACTURARE');
Apelul din PL/SQL (ff_2026_08_09_01_COMUN_PACK_FACTURARE.sql:13161-13234,
PROCEDURE scrie_incasare2), citit integral — exact tiparul "optiune cu fallback hardcodat" cerut
de decizia 36:
V_SCD := V_PSCD; -- parametru explicit, daca a fost dat de apelant (ff_...:13185)
CASE
WHEN V_TIP = nTipIncasareBonFiscal THEN
...
IF V_SCD IS NULL THEN
V_SCD := PACK_SESIUNE.getoptiunefirma('RF_CONT_INCASARE_BONFISCAL');
END IF;
IF V_SCD IS NULL THEN
V_SCD := '5311'; -- fallback hardcodat, instalare veche
END IF;
...
END CASE;
Trei niveluri, in ordine: (1) parametru explicit daca a fost dat, (2) optiunea de firma, (3)
constanta hardcodata — folosita si daca randul din OPTIUNI lipseste complet (instalare veche,
migrare neaplicata) si daca a fost sters/golit manual din ecran. Acest cont ajunge apoi direct in
INSERT INTO ACT_TEMP (..., SCD, ...) (ff_...:13241-13249 in continuare), fara nicio validare
suplimentara de format sau de existenta in planul de conturi — nici in Oracle, nici in ecranul de
optiuni (sectiunea 1.3), nici la INSERT.
Ecranul de editare: acelasi frm_optiuni/frm_optiuni_nou generic (sectiunea 1.3) — niciun
ecran dedicat pentru aceste 4 optiuni, se editeaza ca text simplu in grid.
2b. D406 — optiune numerica/booleana folosita ca flag, cu conversie explicita la citire
VARNAME='D406', VARTYPE='NUMERIC', VARVALUE='1', PROGRAM='ROACONT',
PROGRAME='ROACONT,ROAAUTO,ROACONTRACTE,ROADEVIZE,ROAFACTURARE,...'. Citita in acelasi
scrie_incasare2 (ff_...:13177): lnD406 := TO_NUMBER(NVL(pack_sesiune.getoptiunefirma('D406'), '0')) — tipar de citire pentru optiune numerica: getoptiunefirma intoarce mereu text,
apelantul face NVL(...,'0') inainte de TO_NUMBER (aici fallback-ul '0' e in acelasi loc cu
apelul, nu separat ca la RF_CONT_INCASARE_* — variatie minora de stil intre autori, nu o regula
diferita).
2c. CONT411 si DEVCONTALTELE — optiuni "cont" mai vechi, azi orfane in cod
CONT411 (VARTYPE='CHARACTER', VARVALUE='4111', VARDESC='411 SAU 4111', fara PROGRAM) si
DEVCONTALTELE (VARTYPE='CHARACTER', VARVALUE='704', VARDESC='CONT ALTE SERVICII FACTURA',
PROGRAM='ROAAUTO') — cautare grep pentru ambele in tot SCRIPTURI_CLAR: niciun apelant activ
gasit (doar insertiile originale din 2011). Probabil cod dezafectat sau folosit doar din alt
produs/raport neexaminat aici. Mentionate pentru completitudine si pentru ca CONT411 confirma
exact valoarea implicita ceruta de Marius (4111) ca precedent de configurare tot pe un cont
de clienti — dar nu au un lant activ de apel, deci nu sunt un exemplu de "tipar in uz" la fel de
tare ca RF_CONT_INCASARE_*.
2d. EFACTURA_CONT_ART_E/EFACTURA_CONT_ART_P — optiune "cont implicit pe articol", azi goala
VARTYPE='CHARACTER', VARVALUE goala azi (nesetata pe baza curenta), VARDESC='CONT ARTICOLE IMPLICIT FACTURI EMISE'/'...PRIMITE', PROGRAM='ROACONT'. Confirma ca tiparul "cont implicit
configurabil, gol pana e setat manual" exista deja ca optiune (nu s-a putut verifica in aceasta
runda cine o citeste — cautare in afara scopului, modulul ROACONT/eFactura nu a fost deschis).
Relevanta doar ca a patra confirmare a conventiei de nume (EFACTURA_CONT_ART_<sufix>), nu ca lant
complet verificat.
3. Propunerea concreta
3.1 Cheia optiunii
FACT_SCD_ARTFPRET — respecta conventia dominanta observata in tabel: prefix de modul
(FACT pentru optiunile specifice pack_facturare/ROAFACTURARE, ca FACTSETURI,
FACTALGREPCOM, FACTURACUCHITANTA, FACTURAEMAIL, FACTURASOLD — toate PROGRAM='ROAFACTURARE')
plus sufix descriptiv scurt fara diacritice si fara spatii (SCD = campul contabil vizat,
ARTFPRET = "articol fara politica de pret" — in oglinda cu numele deja folosit in proiectarea
anterioara, "ramura fara politica"). Nicio cheie SCD/SCC existenta azi in tabel (cautare directa,
zero rezultate) — nu exista risc de coliziune de nume. Alternativa mai scurta, daca Marius
prefera: SCD_FARA_POLITICA (fara prefix de modul) — tiparul din tabel nu e strict, exista si chei
fara prefix (D406, CONT411); prefixul FACT_ e recomandat, nu obligatoriu.
3.2 Valoarea implicita si unde traieste
Tiparul deja stabilit si folosit de RF_CONT_INCASARE_* (sectiunea 2a) se copiaza identic:
implicitul traieste in doua locuri, nu unul:
- In randul din
OPTIUNI, la instalare — valoareaVARVALUE='4111'scrisa direct de scriptul de migrare (sectiunea 3.4). Asta e valoarea pe care o vede si o poate schimba Marius/clientul dinfrm_optiuni, fara recompilare — exact cerinta deciziei 36. - Hardcodat in PL/SQL, langa apelul
getoptiunefirma, ca a doua plasa de siguranta pentru instalari vechi unde migrarea nu a rulat inca sau randul a fost sters/golit manual din ecran:
V_SCD := PACK_SESIUNE.getoptiunefirma('FACT_SCD_ARTFPRET');
IF V_SCD IS NULL THEN -- acopera si randul lipsa, si VARVALUE gol/sters din ecran (sectiunea 1.2)
V_SCD := '4111';
END IF;
Plasata in ramura noua din contabilizeaza_articol (canal_cont_venit_fara_politica.md:146,
randul SCD din tabelul design-ului), in locul liniei SCD := '4111' hardcodat propuse acolo —
inlocuire punctuala, restul ramurii (ASCD calculat din GetAnaliticByGrupUtilizatori(..., V_SCD), deja dependent de V_SCD) ramane neschimbat, primeste automat valoarea corecta indiferent
de sursa (optiune sau fallback).
3.3 Comportamentul cand optiunea lipseste sau e invalida
- Lipseste randul din
OPTIUNI(instalare veche, migrare neaplicata):getoptiunefirmaintoarce''-> tratatIS NULLin Oracle -> fallback la'4111'hardcodat (sectiunea 3.2, pasul 2). Acoperit prin constructie, acelasi tipar caRF_CONT_INCASARE_*. - Randul exista dar
VARVALUEe gol (sters manual din ecran, fara sa fi fost stearsa cheia): identic cazului anterior —''totIS NULLin Oracle. Acoperit prin constructie. VARVALUEcontine un cont care nu exista in planul de conturi, sau un string cu lungime/ format invalid: nu exista nicio validare azi, nici ingetoptiunefirma, nici in ecranul de optiuni (sectiunea 1.3, "nicio validare de format sau de continut"), nici laINSERT INTO ACT_TEMP(coloanaSCDeVARCHAR2(4) NULLfaraCHECK, faraFK, confirmat in DDL-ul deja citat incanal_cont_venit_fara_politica.md, sectiunea DDL). Un cont inexistent ar ajunge pe nota neschimbat — exact acelasi risc pe care il are dejaRF_CONT_INCASARE_*de 15 ani, nu unul nou introdus de aceasta propunere. Daca se doreste o garda, ar trebui adaugata la citire (in ramura noua dincontabilizeaza_articol, dupa cele doua atribuiri de mai sus, cu unSELECT COUNT(*) FROM PLCONT WHERE COD_CONT = V_SCDsau echivalent) — nu exista azi un precedent de validare pe niciuna dintre optiunile de tip cont examinate, deci adaugarea uneia ar fi o imbunatatire noua, nu o continuare a unui tipar existent; de decis explicit (sectiunea 4).- Lungime > 4 caractere in
VARVALUE(campul din tabel eVARCHAR2(1000), mult mai lat decatACT_TEMP.SCD VARCHAR2(4)): ar daORA-12899(value too large) laINSERT INTO ACT_TEMPdaca cineva scrie din greseala un text lung in ecran — eroare Oracle standard, nu unNULL/gol tacut; comportament acceptabil ca gardă minimala "gratuita", fara cod suplimentar.
3.4 Scriptul de migrare — schita, neaplicata
Tiparul exact al insertiei RF_CONT_INCASARE_BONFISCAL (sectiunea 2a), idempotent prin verificarea
existentei prealabile (tipar comun in scripturile de migrare vazute in SCRIPTURI_CLAR, desi
insertia originala din 2010 nu avea garda — cea de mai jos o adauga, mai sigura pentru un script
care ar putea rula de doua ori):
-- ff_<data>_NN_COMUN_OPTIUNI.sql (schita, neaplicata)
DECLARE
V_CNT NUMBER;
BEGIN
SELECT COUNT(*) INTO V_CNT FROM OPTIUNI WHERE UPPER(TRIM(VARNAME)) = 'FACT_SCD_ARTFPRET';
IF V_CNT = 0 THEN
INSERT INTO OPTIUNI (VARNAME, VARTYPE, PROGRAM, VARVALUE, VARDESC, PROGRAME)
VALUES ('FACT_SCD_ARTFPRET', 'CHARACTER', 'ROAFACTURARE', '4111',
'CONTUL DEBITOR (SCD) PENTRU ARTICOL FACTURAT FARA POLITICA DE PRET',
'ROAFACTURARE');
END IF;
END;
/
exec pack_migrare.UpdateVersiune('ff_<data>_NN_COMUN_OPTIUNI');
commit;
ID_PRG_OWNER omis (rand NULL in toate exemplele citate, coloana pare neutilizata activ pentru
optiuni de firma simple). PROGRAME='ROAFACTURARE' — restrans, spre deosebire de
RF_CONT_INCASARE_* care listeaza 6 produse; de largit doar daca se confirma (in afara scopului
acestei cercetari, sectiunea "Ce ramane de decis") ca alte produse din suita ajung sa apeleze aceeasi
ramura din contabilizeaza_articol prin adauga_articol_factura simplu.
3.5 Validare la salvare in ecran
Nu — confirmat la sectiunea 1.3: frm_optiuni_nou valideaza doar "camp nevid" pe cele 3 campuri
principale, nicio validare specifica per-cheie. Optiunea noua se comporta identic cu restul tabelei:
utilizatorul poate scrie orice text de pana la 1000 caractere in VARVALUE, cu riscurile descrise
la sectiunea 3.3.
4. Ce ramane de decis
- Numele exact al cheii —
FACT_SCD_ARTFPRETpropus (sectiunea 3.1); Marius poate prefera alt nume sau formatul mai scurtSCD_FARA_POLITICA. - Se adauga o validare a contului la citire (cont trebuie sa existe in planul de conturi) sau
se pastreaza tiparul actual, fara validare, ca la
RF_CONT_INCASARE_*? Niciun exemplu existent nu valideaza — a introduce validare ar fi prima data cand se face asta pe o optiune de tip cont. PROGRAMErestrans laROAFACTURAREsau extins ca laRF_CONT_INCASARE_*(6 produse)? Tine de raspunsul, inca deschis inparametru_cont_contabilizeaza_articol.mdsectiunea 2d, la intrebarea daca alte produse din suita apeleazaadauga_articol_facturasimplu.- Textul exact din
VARDESC— schita de mai sus e o propunere, nu o cerinta.
Ce nu s-a putut stabili
- Cine citeste azi
EFACTURA_CONT_ART_E/EFACTURA_CONT_ART_P(sectiunea 2d) — cautarea s-a oprit la insertia originala; modululROACONT/eFactura nu a fost deschis, in afara scopului cerut (exemplul a servit doar ca a patra confirmare de conventie de nume, nu ca lant complet). - Definitia view-ului VFP local
v_optiuni(folosit caRecordSourceinfrm_optiuni) — e un cursor/view generat dinamic pringencursor()/goExecutor.oExecute()dinoinit_optiuni.prg, nu un obiect Oracle persistent (interogareDBMS_METADATApeV_OPTIUNIa esuat cu "object not found", asteptat) — nu schimba nimic din propunere, doar noteaza ca numele nu desemneaza o vedere Oracle. - Daca
CONT411/DEVCONTALTELE(sectiunea 2c) mai au vreun apelant in alt produs din suita (ROACONT, ROAGEST etc.) — cautarea s-a limitat laSCRIPTURI_CLAR(tot codul PL/SQL istoric); nu s-a cautat in.vc2/.prgdin alte COMUN-uri de produs.