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

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

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

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

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

  1. Создать контекст нового объекта вызвав соответствующий метод модуля менеджера данного объекта ("СоздатьЭлемент()", "СоздатьГруппу()", "СоздатьДокумент()" и тд..);
  2. Заполнить свойства объекта;
  3. Записать состояние объекта, вызвав метод "Записать()".
// Создаем контекст нового документа
$докОбъект = $клиент->Документы->ЗаказКлиента->СоздатьДокумент();

// Заполняем реквизиты
$докОбъект->Дата		= new Дата();
$докОбъект->Контрагент	= $клиент->Справочники->Контрагенты->НайтиПоКоду("000000001");

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

$стр = $докОбъект->Товары->Добавить();
$стр->Номенклатура	= $клиент->Справочники->Номенклатура->НайтиПоНаименованию("Пылесос");
$стр->Количество	= 3;

// Записываем состояние объекта в режиме проведения
$докОбъект->Записать(РежимЗаписиДокумента::Проведение());

// Получаем ссылку на созданный документ
$докСсылка = $докОбъект->Ссылка;
// Создаем контекст группы справочника
$группаОбъект				= $клиент->Справочники->Номенклатура->СоздатьГруппу();
$группаОбъект->Родитель		= $клиент->Справочники->Номенклатура->НайтиПоКоду("000000001");
$группаОбъект->Наименование	= "Тестовая группа";

// Записываем объект группы
$группаОбъект->Записать();

// Создаем контекст элемента справочника
$товарОбъект					= $клиент->Справочники->Номенклатура->СоздатьЭлемент();
$товарОбъект->Родитель			= $группаОбъект->Ссылка;
$товарОбъект->Наименование		= "Тестовый товар";
$товарОбъект->ВидНоменклатуры	= $клиент->Справочники->ВидыНоменклатуры->Товары;
$товарОбъект->Артикул			= "T-00012321";

// Записываем объект справочника
$товарОбъект->Записать();

// Получаем ссылку на созданный объект
$товарСсылка = $товарОбъект->Ссылка;
// Создаем контекст нового элемента ПВХ
$текОбъект = $клиент->ПланыВидовХарактеристик->СвойстваОбъектов->СоздатьЭлемент();

$текОбъект->Наименование = "Странность";

//Тип значения указываем составной
$текОбъект->ТипЗначения = new ОписаниеТипов(
	array(
		Тип::Строка(),
		Тип::Число(),
		Тип::Дата(),
		Тип::СправочникСсылка("Контрагенты")
	),
	new КвалификаторыЧисла(15, 2),
	new КвалификаторыСтроки(100)
);

// Записываем объект
$текОбъект->Записать();

// Получаем ссылку на созданный объект
$текСсылка = $текОбъект->Ссылка;

При записи контекста объекта может происходить следующее:

ЕСЛИ ТОГДА
В контексте установлена пустая ссылка (создан новый контекст). В 1С создастся новый объект. Объекту присвоится новая сгенерированная ссылка.
В контексте установлена определенная ссылка, но объекта, на который указывает ссылка, не существует. В 1С создастся новый объект. Объекту присвоится указанная заранее ссылка.
В контексте установлена определенная ссылка, указывающая на уже существующий объект. Новый объект не создастся, вместо этого перезапишется объект, на который указывает ссылка.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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