За помощь спасибо, но...
Как на меня так ваши предложения больно усложнены, я этого не люблю (из многолетнего опыта разработки
с 1975г).
Я ночью придумад, как сделать проще. Я разнес эти действия в две процедуры:
ВводНового() - фиксирую факт наличия в "Состав прод" подчиенных эл-тов у копируемого эл-та
кТМЦ_.
А в процедуре ПриЗаписи() реализую перезапись "Состава прод".
И интерактив остается, и не ругается и все работает.
Дело в том что конструкция
Попытка
ТМЦ1.Записать();
Исключение
КонецПопытки;
не работает, Записать() очень непростая команда, если вы находитесь в интерактивном вводе.
Ниже полность две процедуры и мои вставки // Гр_
// ===============================
Перем кТМЦ_,ФлСостава;
// Гр_
.....
// ===============================
Процедура ВводНового(ПризнакКопирования,кТМЦ)
ФлСостава = 0;
Если ПризнакКопирования = 1 Тогда
// Гр___________________________________________________________________________
Если (кТМЦ.ВидТМЦ = Перечисление.ВидыТМЦ.Продукция) Или (кТМЦ.ВидТМЦ = Перечисление.ВидыТМЦ.Полуфабрикат) Тогда
СпрС = СоздатьОбъект("Справочник.СоставПродукции");
СпрС.ИспользоватьВладельца(кТМЦ);
Если СпрС.ВыбратьЭлементы() = 1 Тогда
ФлСостава =1;
кТМЦ_ = кТМЦ;
КонецЕсли;
КонецЕсли;
// Гр__________________________________________
Возврат;
КонецЕсли;
Валюта_Прод = глВосстановитьЗначение(,"ОсновнаяВалюта");
Валюта_Прих = глВосстановитьЗначение(,"ОсновнаяВалюта");
ВидТМЦ = Перечисление.ВидыТМЦ.Товар;
ИзмВид();
СтавкаНДС = глВосстановитьЗначение(,"БазНДС");
БазЕдиница = глВосстановитьЗначение(,"БазЕдиница");
ИспользоватьДату('01.01.1980');
ВидДеятельности = глВосстановитьЗначение(,"БазВидДеятельности");
КонецПроцедуры
// ===============================
Процедура ПриЗаписи()
Перем Партия;
глСохранитьЗначение(Контекст,"СчетЗатрат",СчетЗатрат);
Если глЗаписьПериодическихРеквизитов(Контекст) = 0 Тогда
СтатусВозврата(0);
Возврат;
КонецЕсли;
Если Выбран() = 0 Тогда
Записать(); // этот метод не возвращает 0 в случае неудачи и не "ловится" Попыткой
Попытка
глПолучитьПартиюПоУмолчанию(Партия, ТекущийЭлемент());
Исключение
// будем считать, что ошибка была еще в Записать()
// например, "код не уникален"
СтатусВозврата(0); // иначе получим сообщение об ошибке 2 раза
КонецПопытки;
// Гр___________________________________________________________________________
Если ФлСостава = 1 Тогда // при копировании элемента ТМЦ есть записи в подчиненном Спр."Состав продукции"
ТЭ =ТекущийЭлемент();
СпрТ = СоздатьОбъект("Справочник.СоставПродукции");
СпрТ.ИспользоватьВладельца(ТЭ);
СпрТ.ИспользоватьРодителя("");
СпрС = СоздатьОбъект("Справочник.СоставПродукции");
// переписываем все элементы "Состава продукции" из исходного ТМЦ в результирующий
СпрС.ИспользоватьВладельца(кТМЦ_);
СпрС.ВыбратьЭлементы();
Пока СпрС.ПолучитьЭлемент() = 1 Цикл
СпрТ.Новый();
СпрТ.Владелец = ТЭ;
СпрТ.Наименование = СпрС.Наименование;
СпрТ.Затрата = СпрС.Затрата;
СпрТ.Кво = СпрС.Кво;
СпрТ.Записать();
КонецЦикла;
КонецЕсли;
// Гр___________________________________________________________________________
КонецЕсли;
КонецПроцедуры