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