Ok, acum să ajungem la punct. Săptămâna trecută trebuia să fac un raport simplu pentru departamentul nostru de conturi. A fost foarte puțin de lucru - a scris cererea, a ieșit datele și este gata. Dacă nu pentru un mic "dar". În raport a existat o coloană "Altele", datele pentru care nu pot fi obținute în timpul întocmirii raportului. Pentru un anumit rând, datele pot sau nu pot fi. Capul imediat a ajuns la decizia: "trebuie să implementați abilitatea de a edita celulele corespunzătoare din documentul tabelului și să organizați recalcularea câmpurilor rezultate." Se pare că nu este nimic complicat, dar până în acest moment nu am întâmpinat probleme similare și pentru prima dată trebuia să-mi rup puțin capul.
Luând pe o bucată de hârtie un plan de acțiune aproximativ, am continuat să pun în aplicare. Ca rezultat, am următorul algoritm de acțiuni:
1. Se determină structura celulei tabelul de documente, valorile care vor fi editate. În Object Inspector (încă nu știu cum acest lucru numit limba 1S'nikov, asa ca de obicei folosesc interpretarea Delph'yachyu) pentru astfel de celule expune proprietatea „include“ și selectați tipul de date corespunzător (în cazul meu „Numărul „). Pentru ușurința de editare și afișare a datelor introduse este, de asemenea, recomandat pentru a seta valoarea pentru „Format“ proprietate și „format de editare.“ Pentru raportul meu, am stabilit "CZ = 15; BHC = 2; CG = 3,0 ".
2. Pentru documentul tabelului, în care rezultatul datelor (am avut-o pe formular), vom crea un handler de evenimente "Când conținutul este schimbat". Acest eveniment apare întotdeauna când editați orice zonă a unui document de foaie de calcul. În corpul handlerului, scriem următorul cod:
Procedura TablichnyyDokumentPriIzmeneniiSoderzhimogoOblasti (Element Area) = TabDok ElementyFormy.TablichnyyDokument; // funcția „PoluchitNomeraOblasteyDannyh“ returnează o structură care conține // coloanele de date de poziție care ar trebui să fie editate. Codul complet este disponibil funcția // de mai jos. NomeraOblastey PoluchitNomeraOblasteyDannyh = (); NomeraOblastey.OblastDannyhNiz TabDok.VysotaTablitsy = - 3; // Dacă câmpul de coordonate curent intra în lista de editare, puteți începe să editați // Dacă Oblast.Levo> = NomeraOblastey.KolonkaNachisleno Și Oblast.Levo <= НомераОбластей.КолонкаСуммаКВыплате И Область.Верх>= Numerele zonei. Zona de date este Vertexul și aria Vertexului. <= НомераОбластей.ОбластьДанныхНиз Тогда //Получаем введенные пользователем значения СуммаНачислено = ТабДок.Область(Область.Верх, НомераОбластей.КолонкаНачислено).Значение; СуммаНалогНаДоходы = ТабДок.Область(Область.Верх, НомераОбластей.КолонкаНалогНаДоходы).Значение; СуммаПрочие = ТабДок.Область(Область.Верх, НомераОбластей.КолонкаПрочие).Значение; //Расчитываем итоги по строке СуммаУдержаноВсего = СуммаПрочие + СуммаНалогНаДоходы; СуммаКВыплате = СуммаНачислено - СуммаУдержаноВсего; //Выводим в область расчитанное значение ТабДок.Область(Область.Верх, НОмераОбластей.КолонкаВсего).Значение = СуммаУдержаноВсего; ТабДок.Область(Область.Верх, НомераОбластей.КолонкаСуммаКВыплате).Значение = СуммаКВыплате; //Приступаем к расчету итогов ИтоговоеЗначение = 0; //считаем итог по колонке Для сч = НомераОбластей.ОбластьДанныхВерх ПО НомераОбластей.ОбластьДанныхНиз-1 Цикл ИтоговоеЗначение = ИтоговоеЗначение + ТабДок.Область(сч, Область.Лево).Значение; КонецЦикла; ТабДок.Область(НомераОбластей.ОбластьДанныхНиз, Область.Лево).Значение = ИтоговоеЗначение; КонецЕсли; КонецПроцедуры
Sper că, în înțelegerea acestei proceduri, problemele nu ar trebui să apară și, dacă da, trebuie doar să te uiți la codul funcției Obținerea numărului de câmpuri de date ():
Funcția PoluchitNomeraOblasteyDannyh () Returneaza structură nouă ( "KolonkaNachisleno, KolonkaNalogNaDohody, KolonkaProchie, KolonkaVsego, KolonkaSummaKVyplate, OblastDannyhVerh, OblastDannyhNiz", 29, 38, 45, 52, 60, 22); Terminați funcția
Funcția constă dintr-o linie și tot ce are loc în ea este formarea unei structuri cu coordonatele locației coloanelor.
Pentru toate practicile mele, nevoia de a rezolva o astfel de problemă a apărut o singură dată și nu sunt sigur că va apărea ceva în viitorul apropiat, dar trebuie să fii pregătit pentru tot. Este posibil să întâlniți ceva similar. Dacă se întâmplă acest lucru, sper că postarea mea vă va permite să economisiți puțin timp.