Probabil, mulți se confruntă cu o situație în care, la o parte din obiectul editat (document de referință, prelucrarea externă), altele decât forma principală de a face un cuplu mai mult pentru a completa detaliile din partea acestora, iar apoi returnați formularul completat la valorile principale în obiectul în sine. Și dacă ar fi vorba de forme obișnuite, atunci nu ar fi nici o problemă. Dar, în forme ale acestei probleme controlate, iar în cazul refuzului privind modalitatea, devine un pic mai mult.
Prima parte a problemei este că obiectul însuși (DocumentObject, DirectoryObject, ProcessingObject) trăiește pe server și numai copia sa cu structura reconstruită este transferată clientului. Prin urmare, trebuie să recurgeți periodic la metode precum "Propsize Forms". În cazul formei principale a obiectului, nu există aproape nici o problemă. Se completează rechizitele de formulare, rechizitele obiectului.
Dar cea de-a doua parte a problemei vine atunci când trebuie să scoatem o formă suplimentară și să completați o parte din cerințele din ea. Apoi se dovedește că rechizitele de pe formularul suplimentar nu sunt completate și înapoi, de asemenea, nu sunt transferate. Deși forma nu este arbitrară, ci face parte din prelucrare, iar obiectul cerut este cel principal, iar structura obiectului de pe el este recreat. Dar din anumite motive, nu există date. Pentru cei cu forme gestionate care nu funcționează foarte mult sau nu foarte strâns, devine o problemă, după cum am aflat, după ce am citit forumuri cu cereri similare. Și toată sarea este faptul că această formă suplimentară de recuzită obiect - propriile sale. Și nu are nimic de-a face cu Obiectul formei de bază. Numai structura obiectului este reconstruită, fără date. Aceasta este realitatea aspră a unui client subțire)))
Deci, recent am întâlnit această problemă și am petrecut câteva ore pe "fumatul" diverselor forumuri. A trebuit să fac procesarea externă, care are mai multe formulare suplimentare, în care sunt introduse date suplimentare, inclusiv date tabulare. În acest caz, toate rechizitele ar trebui să fie stocate în rechizitele și părțile de masă ale procesării și să fie afișate fragmentar sub diferite forme. Un fel de mini-sistem închis. Datele din procesare sunt apoi stocate într-o bază de date externă, dar aceasta este o poveste separată.
Practic, ceea ce am întâlnit în căutare, este o cerere de ajutor și o grămadă de banter fără sugestii practice.
Câteva soluții, este adevărat, au fost sugerate, dar toate păreau destul de greoaie. Practic, aceasta este fie metoda GetForm (), apoi completarea elementelor necesare formularului primit și deschiderea sa modală, apoi efectuarea operațiunilor după ce este închis. Dar, în caz de respingere a modului 1C, aceasta blestemă constant acest lucru. O altă opțiune este crearea unei structuri, introducerea în ea a tuturor rechizitelor necesare din formularul principal, apoi transferarea acestei structuri ca parametru de intrare atunci când deschideți un formular suplimentar. Și când închideți formularul suplimentar, trebuie să creați din nou structura și să o transferați înapoi la formularul principal. În același timp, în ambele forme este necesar să se prescrie citirea acestor parametri și umplerea rechizitelor în recipient. Într-unul dintre forumurile în care a fost propusă o astfel de metodă, cineva a înțeles în mod corect că, atunci când transferă sute de rechizite și zeci de mese, aceasta devine o problemă. În final, toată lumea consideră că decizia ar trebui să fie mai simplă, dar nimeni nu a exprimat-o. Un cod atât de inutil pentru mine de a înregistra foarte mult nu ar fi de dorit, prin urmare, am continuat să săpat în căutările deciziei ideale. Câteva gânduri exprimate mă făceau în ce direcție să săpat, și. Soluția a fost simplă, la fel de ingenioasă!
Deoarece structura obiectelor din ambele forme este identică, numai lista cu cerințele care sunt vizibile pe formular diferă, nimic nu ne împiedică să transferăm întregul obiect complet și să îl completăm și apoi să îl întoarcem. Principalul lucru este să faci asta corect.
Să spunem că trebuie să deschidem un formular suplimentar cu o pereche de detalii și o parte tabelară a procesării, să o umplem și apoi să o întoarcem înapoi, în timp ce tabelul de pe formularul principal nu este afișat.
Pe partea principală a formularului scriem:
Pe partea laterală a formularului suplimentar scriem:
După aceasta, formularul suplimentar va fi completat. Apoi facem fraudul necesar cu rechizite și mese și vrem să transferăm rezultatul înapoi. pentru aceasta atribuim un eveniment unui formular suplimentar:
Și, în consecință, din nou, din partea formei de bază, trebuie să acceptăm rezultatul:
Poate că, pentru unii, această decizie va părea evidentă și el a făcut acest lucru de multă vreme, dar nu trebuia să fac asta înainte, dar când citesc forumurile nu am găsit o soluție similară. Sper că cineva va găsi cercetarea mea utilă.
Apropo, cu numele complet al formularului, s-ar putea să existe unele inconveniente, deoarece numele complet este specificat ca "Procesare externă." Numele procesării. Și dacă procesarea este redenumită, atunci apelul este opțional. formularele trebuie, de asemenea, să fie corectate. Un lucru pe care nu îl schimbăm în acest caz este proprietatea NameForm. Astfel, dupa obtinerea numelui complet al celui principal si schimbarea ultimului fragment in numele add. forma, vom obține numele complet al add. formular. Și pentru aceasta puteți folosi această funcție mică: