Skip to content

Плагин Данные / Переиспользует состояние, если есть вложенные вызовы #825

Description

@kuntashov

Есть такой код:

	Номенклатура1С = Данные.НачатьСоздание("Справочник.Номенклатура")
		.Реквизит("ВидНоменклатуры", НовыйВидНоменклатуры())
		.Создать(); 

Метод НовыйВидНоменклатуры() определен так:

Функция НовыйВидНоменклатуры()
   	ВидНоменклатуры = Данные.НачатьСоздание("Справочник.ВидыНоменклатуры")
		.Создать();	
	Возврат ВидНоменклатуры;
КонецФункции

В результате в переменной Номенклатура1С у нас объект СправочникСсылка.ВидНоменклатуры, а ожидал, что будет СправочникСсылка.Номенклатура.

Судя по всему, плагин использует единственный экземпляр обработки и все состояние хранит в нем, поэтому вложенные вызовы невозможны.

Это не удобно/не естественно и про такую особенность нужно помнить, а если забыть - сложно отлаживать.

В качестве обхода можно делать так:

    ВидНоменклатуры = НовыйВидНоменклатуры();

	Номенклатура1С = Данные.НачатьСоздание("Справочник.Номенклатура")
		.Реквизит("ВидНоменклатуры", ВидНоменклатуры)
		.Создать(); 

Но это тоже не всегда удобно (и опять же, про это нужно знать/помнить).

В качестве решения предлагаю рассмотреть возможность сделать так, чтобы метод НачатьСоздание() возвращал новый экземпляр плагина "Данные".

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions