Копирование элемента справочника "Номенклатура" с данными вкладок "Единицы" и "Свойства"

10.07.13

Разработка - Универсальные функции

Как при помощи подписки на событие копировать элемент справочника "Номенклатура" с данными вкладок "Единицы" и "Свойства".
Сначала нужно создать подписку на событие При копировании Элемента спр. "Номенклатура", а затем в обработчике написать следующий код:
Процедура ПриКопированииЭлементаНоменклатурыПриКопировании(Источник, ОбъектКопирования) Экспорт
	
	
	Источник.Записать();//Запись созданного объекта для получения ссылки 
	 
	
	 //////////////Вкладка "Единицы" элемента справочника "Номенклатура"///////////
	 ЗапросЕдИзм = Новый Запрос;
	 ЗапросЕдИзм.Текст = "ВЫБРАТЬ
	                     |	ЕдиницыИзмерения.Владелец,
	                     |	Номенклатура.Ссылка КАК Номенклатура,
	                     |	ЕдиницыИзмерения.Код,
	                     |	ЕдиницыИзмерения.ЕдиницаПоКлассификатору КАК ПоКлассификатору,
	                     |	ЕдиницыИзмерения.Наименование,
	                     |	ЕдиницыИзмерения.Коэффициент,
	                     |	ЕдиницыИзмерения.Вес,
	                     |	ЕдиницыИзмерения.Объем,
	                     |	ЕдиницыИзмерения.ПорогОкругления,
	                     |	ЕдиницыИзмерения.ПредупреждатьОНецелыхМестах
	                     |ИЗ
	                     |	Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения
	                     |		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура
	                     |		ПО ЕдиницыИзмерения.Владелец = Номенклатура.Ссылка
	                     |ГДЕ
	                     |	Номенклатура.Ссылка = &Номенклатура";
	
	 ЗапросЕдИзм.УстановитьПараметр("Номенклатура",ОбъектКопирования.Ссылка);
	 РезультатЕдИзм=ЗапросЕдИзм.Выполнить().Выбрать();
		

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

	 
	 
	//////////////Вкладка "Свойства" элемента справочника "Номенклатура"///////////	
		ЗапросСвойства = Новый Запрос;
		ЗапросСвойства.Текст = "ВЫБРАТЬ
		                       |	Номенклатура.Ссылка КАК Номенклатура,
							   |	ЗначенияСвойствОбъектов.Объект,
		                       |	ЗначенияСвойствОбъектов.Свойство,
		                       |	ЗначенияСвойствОбъектов.Значение
		                       |ИЗ
		                       |	Справочник.Номенклатура КАК Номенклатура
		                       |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
		                       |		ПО Номенклатура.Ссылка = ЗначенияСвойствОбъектов.Объект
		                       |		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения
		                       |		ПО Номенклатура.ЕдиницаДляОтчетов = ЕдиницыИзмерения.Ссылка
		                       |			И Номенклатура.ЕдиницаХраненияОстатков = ЕдиницыИзмерения.Ссылка
		                       |			И Номенклатура.ЕдиницаИзмеренияМест = ЕдиницыИзмерения.Ссылка
		                       |ГДЕ
		                       |	Номенклатура.Ссылка = &Номенклатура";
		
		ЗапросСвойства.УстановитьПараметр("Номенклатура",ОбъектКопирования.Ссылка);
		Результат=ЗапросСвойства.Выполнить().Выбрать();
		 
		
		Если НЕ Результат.Количество() = 0 ТОГДА 
			
		Движения = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьНаборЗаписей();	
		//Движения.Записывать = Истина;
		
		Движения.Прочитать();//Добавление в созданный набор записей тех данных, которые уже были в рег. свед.
		
		Пока Результат.Следующий() Цикл
		Движение = Движения.Добавить();	
		Движение.Объект	  = Источник.Ссылка;
		Движение.Свойство = Результат.Свойство;
		Движение.Значение = Результат.Значение;
		
	    КонецЦикла;
		Движения.Записать(Истина); 
		КонецЕсли; 
 
	
КонецПроцедуры

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Универсальные функции Работа с интерфейсом Программист 1С v8.3 Бесплатно (free)

Порой необходимо временно отключить расширение 1С, не удаляя его, чтобы не потерять данные. Но в этом случае при каждом запуске всем будет лезть уведомление о неактивном расширении, хотя очевидно, это техническая информация, которой не стоит лишний раз пугать пользователей.

14.05.2025    3535    DeerCven    8    

48

Универсальные функции Программист 1С v8.3 1C:Бухгалтерия Бесплатно (free)

Благодаря этим пяти строчкам можно больше не заморачиваться с загрузкой из внешних файлов. Пользуюсь везде, всегда и постоянно.

21.05.2024    41312    dimanich70    83    

157

Универсальные функции Программист 1С v8.3 1C:Бухгалтерия Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    6055    6    John_d    11    

58

Универсальные функции Программист Стажер 1С v8.3 1C:Бухгалтерия Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    49676    atdonya    30    

66

Универсальные функции Программист 1С v8.3 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    7826    ke.92@mail.ru    17    

66

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист 1С v8.3 1C:Бухгалтерия Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    21112    YA_418728146    8    

174
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. xbic 16 10.07.13 09:39 Сейчас в теме
Значение поля "КОД" не уникально... Может конечно я что-то не так сделал
2. GH0STexe 12 10.07.13 10:12 Сейчас в теме
(1) xbic, Код должен сам добавляться. Его не нужно присваивать наряду с весом, наименованием и прочим.
3. xbic 16 10.07.13 10:33 Сейчас в теме
(2)

Вроде разобрался, у меня 2 единицы измерения, ругался на код ед.изм...
4. GH0STexe 12 10.07.13 11:25 Сейчас в теме
5. koladen 17 11.07.13 11:24 Сейчас в теме
6. Sanario 27 16.07.13 23:46 Сейчас в теме
Спасибо, мысль интересная!
7. biker1052 16.12.13 05:55 Сейчас в теме
А бывает оказывается клиенту нужно всю папку номенклатуры скопировать!Так что берем на вооружение.
8. prophet85 26.01.15 09:52 Сейчас в теме
Зачем эта часть в запросе??
                        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения
                               |        ПО Номенклатура.ЕдиницаДляОтчетов = ЕдиницыИзмерения.Ссылка
                               |            И Номенклатура.ЕдиницаХраненияОстатков = ЕдиницыИзмерения.Ссылка
                               |            И Номенклатура.ЕдиницаИзмеренияМест = ЕдиницыИзмерения.Ссылка


А вот разве не работает:


                                 ВЫБРАТЬ
                                 |      ЕдиницыИзмерения.Ссылка,
	                         |	ЕдиницыИзмерения.Владелец,
	                         |	ЕдиницыИзмерения.Код,
	                         |	ЕдиницыИзмерения.ЕдиницаПоКлассификатору КАК ПоКлассификатору,
	                         |	ЕдиницыИзмерения.Наименование,
	                         |	ЕдиницыИзмерения.Коэффициент,
	                         |	ЕдиницыИзмерения.Вес,
	                         |	ЕдиницыИзмерения.Объем
	                         |ИЗ
	                         |	Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения
	                         |ГДЕ
	                         |	ЕдиницыИзмерения.Владелец = &Номенклатура


Пока РезультатЕдИзм.Следующий() Цикл    
   НоваяСтрока = РезультатЕдИзм.Ссылка.Скопировать();	        
   НоваяСтрока.Владелец                     = Источник.Ссылка;
   НоваяСтрока.Записать();
КонецЦикла;


                                       ВЫБРАТЬ
	                               |	ЗначенияСвойствОбъектов.Объект,
	                               |	ЗначенияСвойствОбъектов.Свойство,
	                               |	ЗначенияСвойствОбъектов.Значение
	                               |ИЗ
	                               |	РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
	                               |ГДЕ
	                               |	ЗначенияСвойствОбъектов.Объект = &Номенклатура


                        

Показать
9. GH0STexe 12 02.02.15 11:46 Сейчас в теме
(8) prophet85, по идее должно работать. Не помню почему написал так как написал.
Для отправки сообщения требуется регистрация/авторизация