При копировании номенклатуры не копируются имеющиеся спецификации

1. YA_1215107711 02.09.24 23:34 Сейчас в теме
Здравствуйте! Помогите пожалуйста в одном очень важном вопросе. При копировании номенклатуры не копируются имеющиеся в ней спецификации, испробовал разные варианты исправления кода, не помогает.

Процедура Расш_ПередЗаписью(Отказ, ПараметрыЗаписи)

Если ПараметрыЗаписи.РежимЗаписи = РежимЗаписи.Добавление Тогда
// Получаем объект текущего элемента номенклатуры
ТекущийЭлемент = ЭтотОбъект.ТекущийЭлемент();

// Вызываем процедуру копирования
Расш_КопироватьСпецификации(ТекущийЭлемент);
КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура Расш_ПослеЗаписи(Отказ, ПараметрыЗаписи)
Если ПараметрыЗаписи.РежимЗаписи = РежимЗаписи.Добавление Тогда
// Получаем объект текущего элемента номенклатуры
ТекущийЭлемент = ЭтотОбъект.ТекущийЭлемент();

// Вызываем процедуру копирования
Расш_КопироватьСпецификации(ТекущийЭлемент);
КонецЕсли;
КонецПроцедуры

Процедура Расш_КопироватьСпецификации(НоваяНоменклатура)
// Проверяем, есть ли у исходной номенклатуры спецификации
Если НоваяНоменклатура.Спефикации.Количество() > 0 Тогда
// Цикл по спецификациям исходной номенклатуры
Для Каждого Спецификация Из НоваяНоменклатура.Спефикации Цикл
// Создаем новую спецификацию в новой номенклатуре
НоваяСпецификация = НоваяНоменклатура.Спефикации.Создать("Новый элемент");
// Копируем данные из исходной спецификации
НоваяСпецификация.Номенклатура = Спецификация.Номенклатура;
НоваяСпецификация.Количество = Спецификация.Количество;
НоваяСпецификация.Цена = Спецификация.Цена;
// Дополнительно: скопировать другие свойства спецификации, если нужно
// Например: НоваяСпецификация.ЕдиницаИзмерения = Спецификация.ЕдиницаИзмерения;

// Записываем новую спецификацию
НоваяСпецификация.Записать();
КонецЦикла;
КонецЕсли;
КонецПроцедуры

Синтаксических ошибок нет. Версия 1С Бухгалтерия 3.0
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. user2033930 03.09.24 06:24 Сейчас в теме
(1) Это было бы очень смешно, если не было бы ... еще смешнее. Копировать связанные объекты?

не копируются имеющиеся в ней спецификации
А должны? С чего вдруг?
испробовал разные варианты исправления кода
А код требовал исправления? Он был с ошибками? Или его не было, и ты решил сбоку наговнокодить в своем расширении?
Если НоваяНоменклатура.Спефикации.Количество()
И ведь не смущает, что у Номенклатуры нет табличной части Спецификации!
НоваяНоменклатура.Спефикации.Создать("Новый элемент")
Тут я долго могу придумывать комментарий, но ничего не смогу придумать. Ибо рыдаю, слезы глаза застят...
Про использование "ПередЗаписью" уже даже как-то неудобно вспоминать...

Вот откуда? Откуда такие уникумы появляются???
6. YA_1215107711 03.09.24 09:56 Сейчас в теме
(2) Да я уже настолько устал что не заметил явных ошибок. Спефикации ляяяяяяя я уникум рил))))))))
7. YA_1215107711 03.09.24 09:58 Сейчас в теме
(1) Так вот именно что программа тупо игнорит эти ошибки и при отладке просто пропускает эти процедуры
3. user2033930 03.09.24 06:39 Сейчас в теме
По моему это точно какой-то ИИ пытается воспроизвести "вопрос новичка Инфостарта". И у него неплохо получается! У меня только один вопрос - где он картинки генерит?
4. lone_mayson 49 03.09.24 07:38 Сейчас в теме
(2) Ага. Куча-мала та ещё.
По маршруту "О программе — Информация для технической поддержки" есть ошибки?
5. lone_mayson 49 03.09.24 08:28 Сейчас в теме
Вот тут пример навскидку написал для основной спецификации (отвлекаясь от постановки задачи вообще — решить её можно по-разному, в том числе и с помощью отдельной команды / внешней обработки, которая бы могла, например, выполнять некую массовую и регулярную рутину). То, что у топикстартера это, конечно, нечто непонятное.
На форме элемента надо создать реквизит ЗначениеКопирования типа Справочник Номенклатура.

// Форма элемента
&НаСервере
Процедура Расш1_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
	
	ЭтотОбъект.ЗначениеКопирования = Параметры.ЗначениеКопирования;
	
КонецПроцедуры

&НаСервере
Процедура Расш1_ПередЗаписьюНаСервереПосле(Отказ, ТекущийОбъект, ПараметрыЗаписи)
	
	Если Объект.Ссылка.Пустая() И Не ЭтотОбъект.ЗначениеКопирования.Пустая() Тогда
		ТекущийОбъект.ДополнительныеСвойства.Вставить("ЗначениеКопирования", ЗначениеКопирования);
		СпецификацииНоменклатурыНоваяСсылка = Справочники.СпецификацииНоменклатуры.ПолучитьСсылку(Новый УникальныйИдентификатор());
		ТекущийОбъект.ДополнительныеСвойства.Вставить("СпецификацииНоменклатурыНоваяСсылка", СпецификацииНоменклатурыНоваяСсылка);
		ТекущийОбъект.ОсновнаяСпецификацияНоменклатуры = СпецификацииНоменклатурыНоваяСсылка;
	КонецЕсли;
	
КонецПроцедуры

// Модуль объекта

&После("ПриЗаписи")
Процедура Расш1_ПриЗаписи(Отказ)
	
	Если ЭтотОбъект.ДополнительныеСвойства.Свойство("ЗначениеКопирования") Тогда
		ИскомаяСпецификация = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЭтотОбъект.ДополнительныеСвойства.ЗначениеКопирования, "ОсновнаяСпецификацияНоменклатуры");
		Если ЗначениеЗаполнено(ИскомаяСпецификация) Тогда
			Расш1_СкопироватьСпецификацию(ИскомаяСпецификация);
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура Расш1_СкопироватьСпецификацию(ИскомаяСпецификация)
	
	НовОбт = ИскомаяСпецификация.Скопировать();
	НовОбт.УстановитьСсылкуНового(ЭтотОбъект.ДополнительныеСвойства.СпецификацииНоменклатурыНоваяСсылка);
	НовОбт.Владелец = ЭтотОбъект.Ссылка;
	НовОбт.Записать();
	
КонецПроцедуры
Показать
8. YA_1215107711 03.09.24 09:59 Сейчас в теме
(5) Спасибо, сейчас попробую
9. YA_1215107711 03.09.24 10:24 Сейчас в теме
(5) Создал реквизит ЗначениеКопирования, данный код в ставил в модуль объекта СпецификацииНоменклатуры. Код не сработал
10. lone_mayson 49 03.09.24 10:40 Сейчас в теме
Пжжи. Вот, во-первых, новый код. Тут копируются все спеки.
Во-вторых, один код вставляется в форму элемента, другой - в модуль объекта. Ну а так — у меня типовая свежая БП 3. Не знаю, что у тебя.

Это в форму элемента:

&НаСервере
Процедура Расш1_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
	
	ЭтотОбъект.ЗначениеКопирования = Параметры.ЗначениеКопирования;
	
КонецПроцедуры

&НаСервере
Процедура Расш1_ПередЗаписьюНаСервереПосле(Отказ, ТекущийОбъект, ПараметрыЗаписи)
	
	Если Объект.Ссылка.Пустая() И Не ЭтотОбъект.ЗначениеКопирования.Пустая() Тогда
		ТекущийОбъект.ДополнительныеСвойства.Вставить("ЗначениеКопирования", ЗначениеКопирования);
		ЗначениеКопированияОсновнаяСпецификация = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЗначениеКопирования, "ОсновнаяСпецификацияНоменклатуры");
		Если Не ЗначениеКопированияОсновнаяСпецификация.Пустая() Тогда
			СпецификацииНоменклатурыНоваяСсылка = Справочники.СпецификацииНоменклатуры.ПолучитьСсылку(Новый УникальныйИдентификатор());
			ТекущийОбъект.ДополнительныеСвойства.Вставить("СпецификацииНоменклатурыНоваяСсылка", СпецификацииНоменклатурыНоваяСсылка);
			ТекущийОбъект.ОсновнаяСпецификацияНоменклатуры = СпецификацииНоменклатурыНоваяСсылка;
			ТекущийОбъект.ДополнительныеСвойства.Вставить("ЗначениеКопированияОсновнаяСпецификация", ЗначениеКопированияОсновнаяСпецификация);
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры
Показать


Это в модуль объекта:

&После("ПриЗаписи")
Процедура Расш1_ПриЗаписи(Отказ)
	
	Если ЭтотОбъект.ДополнительныеСвойства.Свойство("ЗначениеКопирования") Тогда
		Расш1_СкопироватьСпецификации();
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура Расш1_СкопироватьСпецификации()
	
	Запрос = Новый Запрос();
	Запрос.УстановитьПараметр("Владелец", ЭтотОбъект.ДополнительныеСвойства.ЗначениеКопирования);
	Запрос.Текст =
	"ВЫБРАТЬ
	|	Таблица.Ссылка КАК Ссылка
	|ИЗ
	|	Справочник.СпецификацииНоменклатуры КАК Таблица
	|ГДЕ
	|	Таблица.Владелец = &Владелец";
	Выборка = Запрос.Выполнить().Выбрать();

	Пока Выборка.Следующий() Цикл
		НовОбт = Выборка.Ссылка.Скопировать();
		НовОбт.Владелец = ЭтотОбъект.Ссылка;
		Если ЭтотОбъект.ДополнительныеСвойства.Свойство("ЗначениеКопированияОсновнаяСпецификация") Тогда
			Если Выборка.Ссылка = ЭтотОбъект.ДополнительныеСвойства.ЗначениеКопированияОсновнаяСпецификация Тогда
				НовОбт.УстановитьСсылкуНового(ЭтотОбъект.ДополнительныеСвойства.СпецификацииНоменклатурыНоваяСсылка);
			КонецЕсли;
		КонецЕсли;
		НовОбт.Записать();
	КонецЦикла;
	
КонецПроцедуры
Показать


И проверь, чтобы обработчики событий в палитре свойств привязаны были.

P.S. Если у тебя локализация для другой страны или доработанная конфа, это уже другой вопрос. Собственно, информации уже достаточно.
11. YA_1215107711 03.09.24 11:24 Сейчас в теме
в форме элемента переменная не определена ЗначениеКопирование
(10)
12. lone_mayson 49 03.09.24 11:33 Сейчас в теме
(11) В расширении в форме элемента добавил?

P.S. Сфотографируй хотя бы метаданные конфигурации (табличную часть Спецификации Номенклатуры, если она есть).
Прикрепленные файлы:
13. YA_1215107711 03.09.24 11:51 Сейчас в теме
Да добавил
Прикрепленные файлы:
14. lone_mayson 49 03.09.24 11:54 Сейчас в теме
Вот так надо добавлять. Я думаю, смысла нет это уже мусолить. В ветке вся нужная инфа для решения задачи. В противном случае — как говорят, обратиться к специалисту.
Прикрепленные файлы:
15. YA_1215107711 03.09.24 11:59 Сейчас в теме
Спасибо, сейчас попробую
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот