РЕДАКТИРАНЕ НА ТАБЛИЦА СЪС СТОЙНОСТИ В ДИАЛОГ
Нека създадем диалогов прозорец, съдържащ таблица със стойности в обработката на Prob, давайки й иметоtValue(фиг. 3.8) и да асоциираме процедурата Edit с таблицата, като посочим нейното име в раздела Additional в полето Formula, в което името на процедурата е посочено със запазване на скобите Edit().
Фиг. 3.8. Диалогов прозорец за показване на списъка с подразделения в таблицата със стойности tValue
Нека напишем кода за процедурата Edit, която ви позволява да редактирате стойността на клетката на таблицатаtValue,след двойно щракване върху тази клетка с мишката или след като изберете клетката и натиснете клавиша Enter. ТаблицаtValueпопълнете с данни от таблицата. 3.4.
Алгоритъмпроцедура Редактиране:
1. Определете чрез извикване на методите CurrentRow и CurrentColumn номера на редаRownomи номера на колонатаColumnnom,в пресечната точка на които се намира редактираната клетка.
2. Използвайки метода GetColumnParameters, определете типа данни на колоната с числотоColumnnom.
3. Извикайте диалоговия прозорец за въвеждане на данни от типа, намерен в стъпка 2, като използвате функцията EnterValue и задайте нова стойност на клетка в него. Когато отваряте диалоговия прозорец, прехвърлете старата стойност на клетката в него.
4. Използвайки метода SetValue, запишете стойността, въведена в стъпка 3, в клетката, която се редактира.
Модулът за обработка ще включва и процедурата OnOpen, която създава таблицата, и процедурата Fill, която инициализира таблицата, която заимстваме от Sec. 3.4.1. В процедурата Execute ще се позоваваме на процедурата Fill, за да възстановим оригиналната форма на таблицата със стойности.
var nomRow, nomColumn;
var typeDan, флаг; // Тип на редактираните данни
променлива стойност; // Стойност на редактираната клетка noRow = tValue.CurrentRow();
tValueGetColumnParameters(колона nom, typeDan);val = tValue.GetValue(nomRow, nomColumn);
// Предаване на старата стойност на клетка в диалоговия прозорец
флаг = EnterValue(value, "Въведете нова стойност на клетка", typeData); ако флаг = 1 тогава
tValue.SetValue(Ном на ред, Ном на колона, стойност);
endIf; endProcedures // Промяна
procedure Fill() // Инициализира таблицата със стойности
// Взето от сек. 3.4.1
procedure OnOpen() // Генерира таблица със стойности
// Формиране на колоните на таблицата със стойности. Пропускайки имената на незадължителните параметри,
// запазете запетаите, които ги разделят
tValue.NewColumn("Код", "Низ". 10); //10 ширина на първата колона tValue.NewColumn("Име", "Низ". 20); tValue.NewColumn("Количество", "Число". 15);
procedure Execute() // Възстановява таблицата със стойности
// Преди всяко стартиране на процедурата Execute ще изчистим прозореца за съобщения ClearMessageWindow();
tValueDeleteRows(); // Изтриване на всички редове от таблицата със стойностиtValue
// Попълване на клетките на таблицата със стойности
// Примерен диалогов прозорец за обработка на формуляр след зареждането му е показан на фиг. 3.9 крайни процедури
Диалоговият прозорец за обработка на образец след зареждането му е показан на фиг. 3.9.
Фиг. 3.9. Таблица със стойности след зареждане на обработка на образец
Забележка.Ясно е, че бихме могли да използваме подобен механизъм за редактиране на елементите от списъка със стойности, обсъден в разд. 3.3.2.
3.4.2. ТЕКУЩ РЕД ОТ ТАБЛИЦАТА СЪС СТОЙНОСТИ
Когато работим с таблица със стойности, имаме достъп до идентификаторите на колони, за да редактираме или прочетем стойностите на клетките на текущия ред. Така че, ако работим с горната таблица със стойности, тогава изпълнението на оператора
ще промени стойността на колоната подиме Кодът втекущия редна таблицата.
Текущият номер на ред съдържа атрибутаНомер на ред.След като таблицата е създадена,Номер на ред= 0, в таблицата просто няма редове. АтрибутътRownumberобаче ще получи същата стойност, ако има стойности на редове в таблицата след изпълнение на метода SelectRows. В този случай ще кажем: таблицата със стойности е позиционирана преди първия ред. За да преминете към първия ред, е достатъчно да извикате метода GetRow, който, ако последният ред не бъде достигнат, увеличава номера на текущия ред с единица. Ако методът GetRow се прилага, когато последният ред е текущ, тогава таблицата се позиционира след него, атрибутътRownumberе зададен на 0. Така, ако този атрибут е равен на нула, е невъзможно да разберете къде се намираме преди първия ред на таблицата със стойности или след последния ред. Горната информация е илюстрирана от процедурата In displayLineNumber, която показва стойността на атрибутаlinenumber в прозореца на съобщението.В процедурата променливатаtValueе всяка таблица със стойности, например създадена и попълнена в раздел 3.4.2.
//tValueе модулна променлива, следователно е достъпна в процедурата Output LineNumber
// Позициониран преди първия ред на таблицата със стойностиtValue
// Отпечатва 0, тъй като таблицата е позиционирана преди първия ред Report(tValueRowNumber);
// Итерирането на редовете на таблицата със стойности започва от нейния първи ред
докато tValueGetRow() = 1 цикъл Отчет(tValueRowNumber);
// Отпечатва отново 0, въпреки че таблицата е позиционирана след последния ред Report(tValueRowNumber);
АтрибутътLineNumberне е надежден за определяне на текущия номер на ред и по-общо. Така,задание
ще промени стойността на атрибута, но няма да промени номера на текущия ред.
В допълнение към методите SelectRows и GetRow, текущият ред се модифицира от методите GetRowBy Number, NewRow и Sort. Методът ShiftRow променя текущия ред, ако текущият ред е изместен. В противен случай текущият ред се запазва. Също така, текущият ред се променя при преместване на курсора върху редовете в диалоговия елемент Таблица със стойности.
Текущият ред става недефиниран, когато:
• методите Number of Rows или Collapse намаляват броя на редовете до стойност, по-малка от стойността (преди прилагането на метода) на атрибута Rownumber;
• Методът DeleteRow изтрива ред, чийто номер е по-малък или равен на стойността (преди прилагането на метода) на атрибута Rownumber.
Текущият ред става нула след изпълнение на методите SelectRows и Clear.
Източник: Бартениев О.В. 1C:Enterprise: програмиране за всеки. Основни обекти и изчисления на една дискета. М.: Диалог-МИФИ, 2005. 464 с.