Работа c объектами

Объекты коллекций 1С могут редактироваться из клиентского приложения. Функциональность клиента предусматривает:

  • создание новых объектов;
  • редактирование существующих объектов;
  • удаление существующих объектов.

Создание новых объектов

Для создания нового объекта необходимо:

  1. Создать контекст нового объекта вызвав соответствующий метод модуля менеджера данного объекта ("СоздатьЭлемент()", "СоздатьГруппу()", "СоздатьДокумент()" и тд..);
  2. Заполнить свойства объекта;
  3. Записать состояние объекта, вызвав метод "Записать()".
// Создаем контекст нового документа
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С создастся новый объект. Объекту присвоится указанная заранее ссылка.
В контексте установлена определенная ссылка, указывающая на уже существующий объект. Новый объект не создастся, вместо этого перезапишется объект, на который указывает ссылка.

Редактирование существующих объектов

Для редактирования объекта необходимо:

  1. Получить ссылку на объект любым способом;
  2. Получить контекст объекта, вызвав метод ссылки "ПолучитьОбъект()";
  3. Заполнить свойства объекта;
  4. Записать состояние объекта, вызвав метод "Записать()".
// Получаем ссылку на объект
dynamic товарСсылка = клиент.Справочники.Номенклатура.НайтиПоНаименованию("Демо товар");

// Получаем контекст обекта
dynamic товарОбъект = товарСсылка.ПолучитьОбъект();

// Изменяем значения свойств объекта
товарОбъект.Артикул = "T-000321321";

// Записываем объект справочника
товарОбъект.Записать();
// Получаем ссылку на обект
dynamic докСсылка = клиент.Документы.ЗаказКлиента.ПолучитьСсылку("3237eeac-489f-11e9-912a-38d547755ef7");

// Получаем контекст обекта
dynamic докОбъект = докСсылка.ПолучитьОбъект();

// Добавляем строку в табличную часть "Товары"
dynamic стр			= докОбъект.Товары.Добавить();
стр.Номенклатура	= клиент.Справочники.Номенклатура.НайтиПоНаименованию("Кресло");
стр.Количество		= 1;

// Записываем объект в неоперативном режиме проведения
докОбъект.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный);
// Создаем пустой контекст обекта
dynamic докОбъект = клиент.Документы.ЗаказКлиента.СоздатьДокумент();

// Устанавливаем известную ссылку вместо пустой
докОбъект.УстановитьСсылку(
	клиент.Документы.ЗаказКлиента.ПолучитьСсылку("3237eeac-489f-11e9-912a-38d547755ef7")
);

// Добавляем строку в табличную часть "Товары"
dynamic стр = докОбъект.Товары.Добавить();
стр.Номенклатура = клиент.Справочники.Номенклатура.НайтиПоНаименованию("Кресло");
стр.Количество = 1;

// Записываем объект в неоперативном режиме проведения
докОбъект.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный);

Удаление объектов

Для удаления объекта необходимо:

  1. Получить ссылку на объект любым способом;
  2. Получить контекст объекта, вызвав метод ссылки "ПолучитьОбъект()";
  3. Вызвать метод контекста "Удалить()".
// Получаем ссылку на объект
dynamic докСсылка = клиент.Документы.ЗаказКлиента.ПолучитьСсылку("3237eeab-489f-11e9-912a-38d547755ef7");

// Получаем контекст объекта
dynamic докОбъект = докСсылка.ПолучитьОбъект();

// Удаляем объект
докОбъект.Удалить();
// Получаем ссылку на объект
dynamic текСсылка = клиент.Справочники.Номенклатура.НайтиПоНаименованию("Лишний товар");

// Удаляем объект, если ссылка не пустая
if (!текСсылка.Пустая()) {
	текОбъект = текСсылка.ПолучитьОбъект();
	текОбъект.Удалить();
}