/*
для добавления/изменения/удаления объекту дополнительных материалов необходимо
обратиться к объекту
обратиться к свойству 'Param' объекта
внутри 'Param' обратиться к записи 'MaterialAttendance'
(проверить наличие, при необходимости создать запись 'MaterialAttendance')
внутри 'MaterialAttendance' обратиться к записи 'List'
(проверить наличие, при необходимости создать запись 'List')
далее 'List' должен содержать именованые или неименованые записи, что то типа "строк" с данными. каждая "строка" отвечает за конкретный материал.
каждая "строка" может иметь уникальное название, если оно задавалось при создании, а может и не иметь уникальности.
если имя "строки" используется, то не должно содержать только цифры, иначе будет расцениваться как число и к ней будет сложно обратиться.
(использование полного наименования материала (с артикулом) в качестве названия "строки" облегчает ее поиск в дальнейшем).
внутри каждой "строки" должны быть записи (поля) с именами 'Art', 'Name', 'Count' - соответственно артикул, наименование и количество материала.
удалить все дополнительные материалы можно удалив или очистив запись 'MaterialAttendance' или 'List'
удалить конкретный материал из списка дополнителных можно удалив нужную "строку".
если известно имя "строки" то можно удалить непосредственно ее
если не знаем имя "строки" то перебираем все "строки", сравниваем значения свойств 'Art', 'Name', 'Count', и найдя нужную удаляем
*/
//обращение к объекту
var obj_select = Model.Selected;
//обращение к свойству Params выбранного объекта
var obj_params = obj_select.Params;
//***********************************************************************
//обращение к 'MaterialAttendance'
//создание записи с нуля. не использовать если уже существует
var obj_mat_attend = obj_params.NodeNew('MaterialAttendance');
//проверка наличия записи и создание при отсутствии. подходит для создания с нуля и чтения/редактирования/удаления
var obj_mat_attend = obj_params.FindOrCreate('MaterialAttendance');
//проверка наличия записи БЕЗ создания. подходит для чтения/редактирования/удаления. не использовать для создания с нуля
var obj_mat_attend = obj_params.FindNode('MaterialAttendance');
//***********************************************************************
//обращение к 'List'
//создание записи с нуля. не использовать если уже существует
var obj_mat_attend_list = obj_mat_attend.NodeNew('List');
//проверка наличия записи и создание при отсутствии. подходит для создания с нуля и чтения/редактирования/удаления
var obj_mat_attend_list = obj_mat_attend.FindOrCreate('List');
//проверка наличия записи БЕЗ создания. подходит для чтения/редактирования/удаления. не использовать для создания с нуля
var obj_mat_attend_list = obj_mat_attend.FindNode('List');
//***********************************************************************
//обращение к "строке" и ее данным если используется имя "строки"
//имя "строки" не должно содержать только цифры, иначе будет расцениваться как число и к ней будет сложно обратиться
//создание "строки" с нуля. не использовать если "строка" с таким именем уже существует
var obj_mat_attend_item = obj_mat_attend_list.NodeNew('имя строки');
//проверка наличия "строки" и создание при отсутствии. подходит для создания с нуля и чтения/редактирования/удаления
var obj_mat_attend_item = obj_mat_attend_list.FindOrCreate('имя строки');
//проверка наличия "строки" БЕЗ создания. подходит для чтения/редактирования/удаления. не использовать для создания с нуля
var obj_mat_attend_item = obj_mat_attend_list.FindNode('имя строки');
//создание "полей" с нуля. не использовать если "поля" уже существуют
var obj_mat_attend_art = obj_mat_attend_item.NodeNew('Art');
var obj_mat_attend_name = obj_mat_attend_item.NodeNew('Name');
var obj_mat_attend_count = obj_mat_attend_item.NodeNew('Count');
//проверка наличия "полей" и создание при отсутствии. подходит для создания с нуля и чтения/редактирования/удаления
var obj_mat_attend_art = obj_mat_attend_item.FindOrCreate('Art');
var obj_mat_attend_name = obj_mat_attend_item.FindOrCreate('Name');
var obj_mat_attend_count = obj_mat_attend_item.FindOrCreate('Count');
//проверка наличия "полей" БЕЗ создания. подходит для чтения/редактирования/удаления. не использовать для создания с нуля
var obj_mat_attend_art = obj_mat_attend_item.FindNode('Art');
var obj_mat_attend_name = obj_mat_attend_item.FindNode('Name');
var obj_mat_attend_count = obj_mat_attend_item.FindNode('Count');
//обращение к данным "полей". запись
obj_mat_attend_art.Value = 'артикул'; //строковое значение с артикулом материала
obj_mat_attend_name.Value = 'наименование'; //строковое значение с наименованием материала
obj_mat_attend_count.Value = 50;//числовое значение с кол-вом материала
//обращение к данным "полей". чтение))
alert(obj_mat_attend_art.Value); //получаем строку с артикулом материала
alert(obj_mat_attend_name.Value); //получаем строку с наименованием материала
alert(obj_mat_attend_count.Value); //получаем строку с кол-вом материала
//***********************************************************************
//***********************************************************************
//***********************************************************************
//***********************************************************************
//обращение к "строке" и ее данным если имя "строки" не задано или неизвестно
//создание "строки" с нуля. при каждом использовании будет добавляться "строка"
var obj_mat_attend_item = obj_mat_attend_list.NodeNew('');
//или
var obj_mat_attend_item = obj_mat_attend_list.NodeNew();
//поиск и обращение к "строке" без имени или при незнании имени
for (var i=0; i<obj_mat_attend_list.Count; ++i){
var obj_mat_attend_item = obj_mat_attend_list[i];
//тут уже что то делаем, например производим сравнение
//на основании наличия и значений полей 'Art', 'Name', 'Count'
}
//***********************************************************************
//***********************************************************************
//***********************************************************************
//***********************************************************************
//очистка 'MaterialAttendance' от данных. сама запись 'MaterialAttendance' при этом остается
obj_mat_attend.Clear();
//удаление 'MaterialAttendance' со всеми данными
obj_mat_attend.Delete();
//очистка 'List' от данных. сама запись 'List' при этом остается
obj_mat_attend_list.Clear();
//удаление 'List' со всеми данными
obj_mat_attend_list.Delete();
//очистка "строки" от "полей" и их значений. сама "строка" при этом остается
obj_mat_attend_item.Clear();
//удаление "строки" со всеми данными
obj_mat_attend_item.Delete();
[свернуть]