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