gifts2017

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

Опубликовал Иван Лазаренко (GH0STexe) в раздел Программирование - Практика программирования

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

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

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

См. также

Подписаться Добавить вознаграждение

Комментарии

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

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


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


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


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


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


                        

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