Работа c объектами
Объекты коллекций 1С могут редактироваться из клиентского приложения. Функциональность клиента предусматривает:
- создание новых объектов;
- редактирование существующих объектов;
- удаление существующих объектов.
Создание новых объектов
Для создания нового объекта необходимо:
- Создать контекст нового объекта вызвав соответствующий метод модуля менеджера данного объекта ("СоздатьЭлемент()", "СоздатьГруппу()", "СоздатьДокумент()" и тд..);
- Заполнить свойства объекта;
- Записать состояние объекта, вызвав метод "Записать()".
// Создаем контекст нового документа
dynamic докОбъект = клиент.Документы.ЗаказКлиента.СоздатьДокумент();
// Заполняем реквизиты
докОбъект.Дата = DateTime.Today;
докОбъект.Контрагент = клиент.Справочники.Контрагенты.НайтиПоКоду("000000001");
// Заполняем табличную часть "Товары"
dynamic стр = докОбъект.Товары.Добавить();
стр.Номенклатура = клиент.Справочники.Номенклатура.НайтиПоНаименованию("Телевизор");
стр.Количество = 2;
стр = докОбъект.Товары.Добавить();
стр.Номенклатура = клиент.Справочники.Номенклатура.НайтиПоНаименованию("Пылесос");
стр.Количество = 3;
// Записываем состояние объекта в режиме проведения
докОбъект.Записать(РежимЗаписиДокумента.Проведение);
// Получаем ссылку на созданный документ
dynamic докСсылка = докОбъект.Ссылка;
// Создаем контекст группы справочника
dynamic группаОбъект = клиент.Справочники.Номенклатура.СоздатьГруппу();
группаОбъект.Родитель = клиент.Справочники.Номенклатура.НайтиПоКоду("000000001");
группаОбъект.Наименование = "Тестовая группа";
// Записываем объект группы
группаОбъект.Записать();
// Создаем контекст элемента справочника
dynamic товарОбъект = клиент.Справочники.Номенклатура.СоздатьЭлемент();
товарОбъект.Родитель = группаОбъект.Ссылка;
товарОбъект.Наименование = "Тестовый товар";
товарОбъект.ВидНоменклатуры = клиент.Справочники.ВидыНоменклатуры.Товары;
товарОбъект.Артикул = "T-00012321";
// Записываем объект справочника
товарОбъект.Записать();
// Получаем ссылку на созданный объект
dynamic товарСсылка = товарОбъект.Ссылка;
// Создаем контекст нового элемента ПВХ
dynamic текОбъект = клиент.ПланыВидовХарактеристик.СвойстваОбъектов.СоздатьЭлемент();
текОбъект.Наименование = "Странность";
текОбъект.ТипЗначения = new ОписаниеТипов(new Тип[] {
Тип.Строка,
Тип.Число,
Тип.Дата,
Тип.СправочникСсылка("Контрагенты")
},
new КвалификаторыЧисла(15, 2),
new КвалификаторыСтроки(100)
);
// Записываем объект
текОбъект.Записать();
// Получаем ссылку на созданный объект
dynamic текСсылка = текОбъект.Ссылка;
При записи контекста объекта может происходить следующее:
ЕСЛИ | ТОГДА |
---|---|
В контексте установлена пустая ссылка (создан новый контекст). | В 1С создастся новый объект. Объекту присвоится новая сгенерированная ссылка. |
В контексте установлена определенная ссылка, но объекта, на который указывает ссылка, не существует. | В 1С создастся новый объект. Объекту присвоится указанная заранее ссылка. |
В контексте установлена определенная ссылка, указывающая на уже существующий объект. | Новый объект не создастся, вместо этого перезапишется объект, на который указывает ссылка. |
Редактирование существующих объектов
Для редактирования объекта необходимо:
- Получить ссылку на объект любым способом;
- Получить контекст объекта, вызвав метод ссылки "ПолучитьОбъект()";
- Заполнить свойства объекта;
- Записать состояние объекта, вызвав метод "Записать()".
// Получаем ссылку на объект
dynamic товарСсылка = клиент.Справочники.Номенклатура.НайтиПоНаименованию("Демо товар");
// Получаем контекст обекта
dynamic товарОбъект = товарСсылка.ПолучитьОбъект();
// Изменяем значения свойств объекта
товарОбъект.Артикул = "T-000321321";
// Записываем объект справочника
товарОбъект.Записать();
// Получаем ссылку на обект
dynamic докСсылка = клиент.Документы.ЗаказКлиента.ПолучитьСсылку("3237eeac-489f-11e9-912a-38d547755ef7");
// Получаем контекст обекта
dynamic докОбъект = докСсылка.ПолучитьОбъект();
// Добавляем строку в табличную часть "Товары"
dynamic стр = докОбъект.Товары.Добавить();
стр.Номенклатура = клиент.Справочники.Номенклатура.НайтиПоНаименованию("Кресло");
стр.Количество = 1;
// Записываем объект в неоперативном режиме проведения
докОбъект.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный);
// Создаем пустой контекст обекта
dynamic докОбъект = клиент.Документы.ЗаказКлиента.СоздатьДокумент();
// Устанавливаем известную ссылку вместо пустой
докОбъект.УстановитьСсылку(
клиент.Документы.ЗаказКлиента.ПолучитьСсылку("3237eeac-489f-11e9-912a-38d547755ef7")
);
// Добавляем строку в табличную часть "Товары"
dynamic стр = докОбъект.Товары.Добавить();
стр.Номенклатура = клиент.Справочники.Номенклатура.НайтиПоНаименованию("Кресло");
стр.Количество = 1;
// Записываем объект в неоперативном режиме проведения
докОбъект.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный);
Удаление объектов
Для удаления объекта необходимо:
- Получить ссылку на объект любым способом;
- Получить контекст объекта, вызвав метод ссылки "ПолучитьОбъект()";
- Вызвать метод контекста "Удалить()".
// Получаем ссылку на объект
dynamic докСсылка = клиент.Документы.ЗаказКлиента.ПолучитьСсылку("3237eeab-489f-11e9-912a-38d547755ef7");
// Получаем контекст объекта
dynamic докОбъект = докСсылка.ПолучитьОбъект();
// Удаляем объект
докОбъект.Удалить();
// Получаем ссылку на объект
dynamic текСсылка = клиент.Справочники.Номенклатура.НайтиПоНаименованию("Лишний товар");
// Удаляем объект, если ссылка не пустая
if (!текСсылка.Пустая()) {
текОбъект = текСсылка.ПолучитьОбъект();
текОбъект.Удалить();
}