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

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

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

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

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

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

# Заполняем реквизиты
докОбъект.Дата			= datetime.today()
докОбъект.Контрагент	= клиент.Справочники.Контрагенты.НайтиПоКоду("000000001")

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

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

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

# Получаем ссылку на созданный документ
докСсылка = докОбъект.Ссылка
# Создаем контекст нового документа
докОбъект = клиент.Документы.ЗаказКлиента.СоздатьДокумент()

# Заполняем реквизиты
докОбъект.Дата			= datetime.today()
докОбъект.Контрагент	= клиент.Справочники.Контрагенты.НайтиПоКоду("000000001")

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

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

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

# Получаем ссылку на созданный документ
докСсылка = докОбъект.Ссылка


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

# Записываем объект группы
группаОбъект.Записать()

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

# Записываем объект справочника
товарОбъект.Записать()

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

текОбъект.Наименование = "Странность"
текОбъект.ТипЗначения = ОписаниеТипов([
		Тип.Строка(),
		Тип.Число(),
		Тип.Дата(),
		Тип.СправочникСсылка("Контрагенты")
	],
	КвалификаторыЧисла(15, 2),
	КвалификаторыСтроки(100)
)

# Записываем объект
текОбъект.Записать()

# Получаем ссылку на созданный объект
текСсылка = текОбъект.Ссылка

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

# Удаляем объект, если ссылка не пустая
if not текСсылка.Пустая():
	текОбъект = текСсылка.ПолучитьОбъект()
	текОбъект.Удалить()