Помогите переделать обработку по замене номенклатуры по регистрам ОФ

1. erus88 50 09.05.19 12:08 Сейчас в теме +0.5 $m
Всем привет. Встала задача перейти на учет товара по характеристике. нашел обработку https://infostart.ru/public/58109/. но у меня Далион. в ней нету серийноменклатуры, по этому функцию с ней связана я закомментировал. добавил в форме колонку Характеристики. связал её с строкой НаЧтоЗаменять.
и все в тупике. как заставить обработку перенаправить учет по всем регистрам на номенклатуру с характеристикой. что бы потом старую можно было без жерт удалить. и остаток и все документы были на нужном товаре с характеристикой.
код обработки:
////////////////////////////////////////////////////////////////////////////////
// ПЕРЕМЕННЫЕ МОДУЛЯ

Перем мМенеджеры;        // Соответствие типов объектов их свойствам


////////////////////////////////////////////////////////////­////////////////////
// ПРОЦЕДУРЫ И ФУНКЦИИ ОБЩЕГО НАЗНАЧЕНИЯ

// Возвращает объект ОписаниеТипов, содержащий указанный тип.
//
// Параметры:
//  ЗначениеТипа - строка с именем типа или значение типа Тип.
//  
// Возвращаемое значение:
//  ОписаниеТипов
//
Функция вОписаниеТипа(ЗначениеТипа)

	МассивТипов = Новый Массив;
	Если ТипЗнч(ЗначениеТипа) = Тип("Строка") Тогда
		МассивТипов.Добавить(Тип(ЗначениеТипа));
	Иначе
		МассивТипов.Добавить(ЗначениеТипа);
	КонецЕсли; 
	ОписаниеТипов	= Новый ОписаниеТипов(МассивТипов);

	Возврат ОписаниеТипов;

КонецФункции // вОписаниеТипа()

// Инициализирует переменную мМенеджеры, содержащую соответствия типов объектов их свойствам
//
// Параметры:
//  Нет.
// 
Процедура вИнициализацияМенеджеров()

	мМенеджеры = Новый Соответствие;

	ИмяТипа = "Справочник";
	Для каждого ОбъектМД Из Метаданные.Справочники Цикл
		Имя              = ОбъектМД.Имя;
		Менеджер         = Справочники[Имя];
		ТипСсылкиСтрокой = "СправочникСсылка." + Имя;
		ТипСсылки        = Тип(ТипСсылкиСтрокой);
		Структура = Новый Структура("Имя,ИмяТипа,ТипСсылкиСтрокой,Менеджер,ОбъектМД", Имя, ИмяТипа, ТипСсылкиСтрокой, Менеджер, ОбъектМД);
		мМенеджеры.Вставить(ОбъектМД, Структура);
	КонецЦикла;

	ИмяТипа = "Документ";
	Для каждого ОбъектМД Из Метаданные.Документы Цикл
		Имя              = ОбъектМД.Имя;
		Менеджер         = Документы[Имя];
		ТипСсылкиСтрокой = "ДокументСсылка." + Имя;
		ТипСсылки        = Тип(ТипСсылкиСтрокой);
		Структура = Новый Структура("Имя,ИмяТипа,ТипСсылкиСтрокой,Менеджер,ОбъектМД", Имя, ИмяТипа, ТипСсылкиСтрокой, Менеджер, ОбъектМД);
		мМенеджеры.Вставить(ОбъектМД, Структура);
	КонецЦикла;

	ИмяТипа = "Перечисление";
	Для каждого ОбъектМД Из Метаданные.Перечисления Цикл
		Имя              = ОбъектМД.Имя;
		Менеджер         = Перечисления[Имя];
		ТипСсылкиСтрокой = "ПеречислениеСсылка." + Имя;
		ТипСсылки        = Тип(ТипСсылкиСтрокой);
		Структура = Новый Структура("Имя,ИмяТипа,ТипСсылкиСтрокой,Менеджер,ОбъектМД", Имя, ИмяТипа, ТипСсылкиСтрокой, Менеджер, ОбъектМД);
		мМенеджеры.Вставить(ОбъектМД, Структура);
	КонецЦикла;
	
	ИмяТипа = "ПланВидовХарактеристик";
	Для каждого ОбъектМД Из Метаданные.ПланыВидовХарактеристик Цикл
		Имя               = ОбъектМД.Имя;
		Менеджер          = ПланыВидовХарактеристик[Имя];
		ТипСсылкиСтрокой  = "ПланВидовХарактеристикСсылка." + Имя;
		ТипСсылки         = Тип(ТипСсылкиСтрокой);
		Структура = Новый Структура("Имя,ИмяТипа,ТипСсылкиСтрокой,Менеджер,ОбъектМД", Имя, ИмяТипа, ТипСсылкиСтрокой, Менеджер, ОбъектМД);
		мМенеджеры.Вставить(ОбъектМД, Структура);
	КонецЦикла;
	
	ИмяТипа = "ПланСчетов";
	Для каждого ОбъектМД Из Метаданные.ПланыСчетов Цикл
		Имя              = ОбъектМД.Имя;
		Менеджер         = ПланыСчетов[Имя];
		ТипСсылкиСтрокой = "ПланСчетовСсылка." + Имя;
		ТипСсылки        = Тип(ТипСсылкиСтрокой);
		Структура = Новый Структура("Имя,ИмяТипа,ТипСсылкиСтрокой,Менеджер,ОбъектМД", Имя, ИмяТипа, ТипСсылкиСтрокой, Менеджер, ОбъектМД);
		мМенеджеры.Вставить(ОбъектМД, Структура);
	КонецЦикла;
	
	ИмяТипа = "ПланВидовРасчета";
	Для каждого ОбъектМД Из Метаданные.ПланыВидовРасчета Цикл
		Имя              = ОбъектМД.Имя;
		Менеджер         = ПланыВидовРасчета[Имя];
		ТипСсылкиСтрокой = "ПланВидовРасчетаСсылка." + Имя;
		ТипСсылки        = Тип(ТипСсылкиСтрокой);
		Структура = Новый Структура("Имя,ИмяТипа,ТипСсылкиСтрокой,Менеджер,ОбъектМД", Имя, ИмяТипа, ТипСсылкиСтрокой, Менеджер, ОбъектМД);
		мМенеджеры.Вставить(ОбъектМД, Структура);
	КонецЦикла;

	ИмяТипа = "РегистрСведений";
	Для каждого ОбъектМД Из Метаданные.РегистрыСведений Цикл
		Имя					= ОбъектМД.Имя;
		Менеджер			= РегистрыСведений[Имя];
		ТипСсылкиСтрокой	= "РегистрСведенийКлючЗаписи." + Имя;
		ТипСсылки			= Тип(ТипСсылкиСтрокой);
		Структура = Новый Структура("Имя,ИмяТипа,ТипСсылкиСтрокой,Менеджер,ОбъектМД", Имя, ИмяТипа, ТипСсылкиСтрокой, Менеджер, ОбъектМД);
		мМенеджеры.Вставить(ОбъектМД, Структура);
	КонецЦикла;

	ИмяТипа = "Константа";
	Для каждого ОбъектМД Из Метаданные.Константы Цикл
		Имя              = ОбъектМД.Имя;
		Менеджер         = Константы[Имя];
		ТипСсылкиСтрокой = "Константа." + Имя;
		Структура = Новый Структура("Имя,ИмяТипа,ТипСсылкиСтрокой,Менеджер,ОбъектМД", Имя, ИмяТипа, ТипСсылкиСтрокой, Менеджер, ОбъектМД);
		мМенеджеры.Вставить(ОбъектМД, Структура);
	КонецЦикла;
	
КонецПроцедуры // вИнициализацияМенеджеров()


Функция вВыполнитьЗаменуЭлементов(Заменяемые, ТаблицаСсылок, ВыполнятьВТранзакции = Истина, ОтключатьКонтрольЗаписи = Ложь)
	
	БылиИсключения = Ложь;
	Если ВыполнятьВТранзакции Тогда
		НачатьТранзакцию();
	КонецЕсли;
	ОбрабатываемаяСсылка = Неопределено;
		
	Параметры = Новый Структура;
	
	Для Каждого РегистрБухгалтерии ИЗ Метаданные.РегистрыБухгалтерии Цикл
		Параметры.Вставить(РегистрБухгалтерии.Имя+"Субконто", РегистрБухгалтерии.ПланСчетов.МаксКоличествоСубконто);
		Параметры.Вставить(РегистрБухгалтерии.Имя+"Корреспонденция", РегистрБухгалтерии.Корреспонденция);		
	КонецЦикла;
	
	Параметры.Вставить("Объект", Неопределено);	
	
	мФормаПрогрессора = ПолучитьФорму("ФормаПрогрессора");
	мФормаПрогрессора.СтрокаПрогрессора = "Выполняется обработка выбранных объектов...";
	мФормаПрогрессора.ЭлементыФормы.ЗначениеИндикатора.МинимальноеЗначение  = 0;
	мФормаПрогрессора.ЭлементыФормы.ЗначениеИндикатора.МаксимальноеЗначение = НайденныеСсылки.Количество();
	мФормаПрогрессора.ЗначениеИндикатора = 0;
	мФормаПрогрессора.Открыть();
	
	Для Каждого СтрокаТаблицы Из ТаблицаСсылок Цикл
		Если Не СтрокаТаблицы.Включено Тогда
			Продолжить;
		КонецЕсли;
		ПравильныйЭлемент = Заменяемые[СтрокаТаблицы.Ссылка];
		
		мФормаПрогрессора.ЗначениеИндикатора = мФормаПрогрессора.ЗначениеИндикатора + 1;
		Ссылка = СтрокаТаблицы.Ссылка;
		
		Если ОбрабатываемаяСсылка <> СтрокаТаблицы.Данные Тогда
			Если ОбрабатываемаяСсылка <> Неопределено и Параметры.Объект <> Неопределено Тогда
				
				Если ОтключатьКонтрольЗаписи Тогда
					Параметры.Объект.ОбменДанными.Загрузка = Истина;
				КонецЕсли;
				
				Попытка
					Параметры.Объект.Записать();
				Исключение
					БылиИсключения = Истина;
					Если ВыполнятьВТранзакции Тогда
						Перейти ~ОТКАТ;
					КонецЕсли;
				КонецПопытки;
				Параметры.Объект = Неопределено;
			КонецЕсли;
			ОбрабатываемаяСсылка = СтрокаТаблицы.Данные;
			
		КонецЕсли;
		
			
		Если Метаданные.Документы.Содержит(СтрокаТаблицы.Метаданные) Тогда
			
			Если Параметры.Объект = Неопределено Тогда
				Параметры.Объект = СтрокаТаблицы.Данные.ПолучитьОбъект();
			КонецЕсли;
			
			Для Каждого Реквизит Из СтрокаТаблицы.Метаданные.Реквизиты Цикл
				Если Реквизит.Тип.СодержитТип(ТипЗнч(Ссылка)) И Параметры.Объект[Реквизит.Имя] = Ссылка Тогда
					Параметры.Объект[Реквизит.Имя] = ПравильныйЭлемент;
				КонецЕсли;
			КонецЦикла;
				
			Для Каждого ТЧ ИЗ СтрокаТаблицы.Метаданные.ТабличныеЧасти Цикл
				Для Каждого Реквизит Из ТЧ.Реквизиты Цикл
					Если Реквизит.Тип.СодержитТип(ТипЗнч(Ссылка)) Тогда
						СтрокаТабЧасти = Параметры.Объект[ТЧ.Имя].Найти(Ссылка, Реквизит.Имя);
						Пока СтрокаТабЧасти <> Неопределено Цикл
							СтрокаТабЧасти[Реквизит.Имя] = ПравильныйЭлемент;
							СтрокаТабЧасти = Параметры.Объект[ТЧ.Имя].Найти(Ссылка, Реквизит.Имя);
						КонецЦикла;
					КонецЕсли;
				КонецЦикла;
			КонецЦикла;
			
			Для Каждого Движение ИЗ СтрокаТаблицы.Метаданные.Движения Цикл
				
				ЭтоДвижениеРегистраБухгалтерии = Метаданные.РегистрыБухгалтерии.Содержит(Движение);
				ЕстьКорреспонденция = ЭтоДвижениеРегистраБухгалтерии и Параметры[Движение.Имя + "Корреспонденция"];
				
				НаборЗаписей  = Параметры.Объект.Движения[Движение.Имя];
				НаборЗаписей.Прочитать();
				НадоЗаписывать = Ложь;
				ТаблицаНабора = НаборЗаписей.Выгрузить();
				Для Каждого Измерение ИЗ Движение.Измерения Цикл
					Если Измерение.Тип.СодержитТип(ТипЗнч(Ссылка)) Тогда
						СтрокаТабЧасти = ТаблицаНабора.Найти(Ссылка, Измерение.Имя);
						Пока СтрокаТабЧасти <> Неопределено Цикл
							СтрокаТабЧасти[Измерение.Имя] = ПравильныйЭлемент;
							НадоЗаписывать = Истина;
							СтрокаТабЧасти = ТаблицаНабора.Найти(Ссылка, Измерение.Имя);
						КонецЦикла;
					КонецЕсли; 
				КонецЦикла;
				
				ЕСли Метаданные.РегистрыСведений.Содержит(Движение) Тогда
					Для Каждого Ресурс ИЗ Движение.Ресурсы Цикл
						Если Ресурс.Тип.СодержитТип(ТипЗнч(Ссылка)) Тогда
							СтрокаТабЧасти = ТаблицаНабора.Найти(Ссылка, Ресурс.Имя);
							Пока СтрокаТабЧасти <> Неопределено Цикл
								СтрокаТабЧасти[Ресурс.Имя] = ПравильныйЭлемент;
								НадоЗаписывать = Истина;
								СтрокаТабЧасти = ТаблицаНабора.Найти(Ссылка, Ресурс.Имя);
							КонецЦикла;
						КонецЕсли;
					КонецЦикла;
				КонецЕсли;
				
				Для Каждого Реквизит ИЗ Движение.Реквизиты Цикл
					Если Реквизит.Тип.СодержитТип(ТипЗнч(Ссылка)) Тогда
						СтрокаТабЧасти = ТаблицаНабора.Найти(Ссылка, Реквизит.Имя);
						Пока СтрокаТабЧасти <> Неопределено Цикл
							СтрокаТабЧасти[Реквизит.Имя] = ПравильныйЭлемент;
							НадоЗаписывать = Истина;
							СтрокаТабЧасти = ТаблицаНабора.Найти(Ссылка, Реквизит.Имя);
						КонецЦикла;
					КонецЕсли;
				КонецЦикла;
				
				Если Метаданные.РегистрыБухгалтерии.Содержит(Движение) Тогда
					
					Для ИндексСубконто = 1 по Параметры[Движение.Имя + "Субконто"] Цикл
						Если ЕстьКорреспонденция Тогда
							СтрокаТабЧасти = ТаблицаНабора.Найти(Ссылка, "СубконтоДт"+ИндексСубконто);
							Пока СтрокаТабЧасти <> Неопределено Цикл
								СтрокаТабЧасти["СубконтоДт"+ИндексСубконто] = ПравильныйЭлемент;
								НадоЗаписывать = Истина;
								СтрокаТабЧасти = ТаблицаНабора.Найти(Ссылка, "СубконтоДт"+ИндексСубконто);
							КонецЦикла;
							СтрокаТабЧасти = ТаблицаНабора.Найти(Ссылка, "СубконтоКт"+ИндексСубконто);
							Пока СтрокаТабЧасти <> Неопределено Цикл
								СтрокаТабЧасти["СубконтоКт"+ИндексСубконто] = ПравильныйЭлемент;
								НадоЗаписывать = Истина;
								СтрокаТабЧасти = ТаблицаНабора.Найти(Ссылка, "СубконтоКт"+ИндексСубконто);
							КонецЦикла;								
						Иначе							
							СтрокаТабЧасти = ТаблицаНабора.Найти(Ссылка, "Субконто"+ИндексСубконто);
							Пока СтрокаТабЧасти <> Неопределено Цикл
								СтрокаТабЧасти["Субконто"+ИндексСубконто] = ПравильныйЭлемент;
								НадоЗаписывать = Истина;
								СтрокаТабЧасти = ТаблицаНабора.Найти(Ссылка, "Субконто"+ИндексСубконто);
							КонецЦикла;							
						КонецЕсли;						
					КонецЦикла;					
				КонецЕсли;
								
				
				Если НадоЗаписывать Тогда
					НаборЗаписей.Загрузить(ТаблицаНабора);
					Если ОтключатьКонтрольЗаписи Тогда
						НаборЗаписей.ОбменДанными.Загрузка = Истина;
					КонецЕсли;
					Попытка
						НаборЗаписей.Записать();
					Исключение
						БылиИсключения = Истина;
						Если ВыполнятьВТранзакции Тогда
							Перейти ~ОТКАТ;
						КонецЕсли;
					КонецПопытки;
				КонецЕсли;
			КонецЦикла;
			
			
			Для Каждого Последовательность ИЗ Метаданные.Последовательности Цикл
				Если Последовательность.Документы.Содержит(СтрокаТаблицы.Метаданные) Тогда
					НадоЗаписывать = Ложь;
					НаборЗаписи = Последовательности[Последовательность.Имя].СоздатьНаборЗаписей();
					НаборЗаписи.Отбор.Регистратор.Установить(СтрокаТаблицы.Данные);
					НаборЗаписи.Прочитать();
					
					Для Каждого Измерение ИЗ Последовательность.Измерения Цикл
						Если Измерение.Тип.СодержитТип(ТипЗнч(Ссылка)) И НаборЗаписи[0][Измерение.Имя]=Ссылка Тогда
							НаборЗаписи[0][Измерение.Имя] = ПравильныйЭлемент;
							НадоЗаписывать = Истина;
						КонецЕсли;
					КонецЦикла;					
					Если НадоЗаписывать Тогда
						Если ОтключатьКонтрольЗаписи Тогда
							НаборЗаписи.ОбменДанными.Загрузка = Истина;
						КонецЕсли;
						Попытка
							НаборЗаписи.Записать();
						Исключение
							БылиИсключения = Истина;
							Если ВыполнятьВТранзакции Тогда
								Перейти ~ОТКАТ;
							КонецЕсли;
						КонецПопытки;
					КонецЕсли;
				КонецЕсли;
			КонецЦикла;
			
			
			
		ИначеЕсли Метаданные.Справочники.Содержит(СтрокаТаблицы.Метаданные) Тогда
			
			Если Параметры.Объект = Неопределено Тогда
				Параметры.Объект = СтрокаТаблицы.Данные.ПолучитьОбъект();
			КонецЕсли;
			
			Если СтрокаТаблицы.Метаданные.Владельцы.Содержит(Ссылка.Метаданные()) И Параметры.Объект.Владелец = Ссылка Тогда
				Параметры.Объект.Владелец = ПравильныйЭлемент;
			КонецЕсли;
			
			Если СтрокаТаблицы.Метаданные.Иерархический И Параметры.Объект.Родитель = Ссылка Тогда
				Параметры.Объект.Родитель = ПравильныйЭлемент;
			КонецЕсли;
			
			Для Каждого Реквизит Из СтрокаТаблицы.Метаданные.Реквизиты Цикл
				Если Реквизит.Тип.СодержитТип(ТипЗнч(Ссылка)) И Параметры.Объект[Реквизит.Имя] = Ссылка Тогда
					Параметры.Объект[Реквизит.Имя] = ПравильныйЭлемент;
				КонецЕсли;
			КонецЦикла;
			
			Для Каждого ТЧ ИЗ СтрокаТаблицы.Метаданные.ТабличныеЧасти Цикл
				Для Каждого Реквизит Из ТЧ.Реквизиты Цикл
					Если Реквизит.Тип.СодержитТип(ТипЗнч(Ссылка)) Тогда
						СтрокаТабЧасти = Параметры.Объект[ТЧ.Имя].Найти(Ссылка, Реквизит.Имя);
						Пока СтрокаТабЧасти <> Неопределено Цикл
							СтрокаТабЧасти[Реквизит.Имя] = ПравильныйЭлемент;
							СтрокаТабЧасти = Параметры.Объект[ТЧ.Имя].Найти(Ссылка, Реквизит.Имя);
						КонецЦикла;
					КонецЕсли;
				КонецЦикла;
			КонецЦикла;
			
		ИначеЕсли Метаданные.ПланыВидовХарактеристик.Содержит(СтрокаТаблицы.Метаданные)
				  ИЛИ Метаданные.ПланыСчетов.Содержит(СтрокаТаблицы.Метаданные)
				  ИЛИ Метаданные.ПланыВидовРасчета.Содержит(СтрокаТаблицы.Метаданные)
				  ИЛИ Метаданные.Задачи.Содержит(СтрокаТаблицы.Метаданные)
				  ИЛИ Метаданные.БизнесПроцессы.Содержит(СтрокаТаблицы.Метаданные) Тогда
			
			Если Параметры.Объект = Неопределено Тогда
				Параметры.Объект = СтрокаТаблицы.Данные.ПолучитьОбъект();
			КонецЕсли;
						
			Для Каждого Реквизит Из СтрокаТаблицы.Метаданные.Реквизиты Цикл
				Если Реквизит.Тип.СодержитТип(ТипЗнч(Ссылка)) И Параметры.Объект[Реквизит.Имя] = Ссылка Тогда
					Параметры.Объект[Реквизит.Имя] = ПравильныйЭлемент;
				КонецЕсли;
			КонецЦикла;
			
			Для Каждого ТЧ ИЗ СтрокаТаблицы.Метаданные.ТабличныеЧасти Цикл
				Для Каждого Реквизит Из ТЧ.Реквизиты Цикл
					Если Реквизит.Тип.СодержитТип(ТипЗнч(Ссылка)) Тогда
						СтрокаТабЧасти = Параметры.Объект[ТЧ.Имя].Найти(Ссылка, Реквизит.Имя);
						Пока СтрокаТабЧасти <> Неопределено Цикл
							СтрокаТабЧасти[Реквизит.Имя] = ПравильныйЭлемент;
							СтрокаТабЧасти = Параметры.Объект[ТЧ.Имя].Найти(Ссылка, Реквизит.Имя);
						КонецЦикла;							
					КонецЕсли;
				КонецЦикла;
			КонецЦикла;	
			
		ИначеЕсли Метаданные.Константы.Содержит(СтрокаТаблицы.Метаданные) Тогда
			
			Константы[СтрокаТаблицы.Метаданные.Имя].Установить(ПравильныйЭлемент);
			
			
		ИначеЕсли Метаданные.РегистрыСведений.Содержит(СтрокаТаблицы.Метаданные) Тогда	
			
			СтруктураИзмерений = Новый Структура;
			НаборЗаписей = РегистрыСведений[СтрокаТаблицы.Метаданные.Имя].СоздатьНаборЗаписей();
			Для Каждого Измерение ИЗ СтрокаТаблицы.Метаданные.Измерения Цикл
				НаборЗаписей.Отбор[Измерение.Имя].Установить(СтрокаТаблицы.Данные[Измерение.Имя]);
				СтруктураИзмерений.Вставить(Измерение.Имя);
			КонецЦикла;
			Если СтрокаТаблицы.Метаданные.ПериодичностьРегистраСведений <> Метаданные.СвойстваОбъектов.ПериодичностьРегистраСведений.Непериодический Тогда
				НаборЗаписей.Отбор["Период"].Установить(СтрокаТаблицы.Данные.Период);
			КонецЕсли;
			НаборЗаписей.Прочитать();
			ТаблицаНабора = НаборЗаписей.Выгрузить();
			НаборЗаписей.Очистить();
			
			Если ОтключатьКонтрольЗаписи Тогда
				НаборЗаписей.ОбменДанными.Загрузка = Истина;
			КонецЕсли;
			
			
			Если Не ВыполнятьВТранзакции Тогда
				НачатьТранзакцию();
			КонецЕсли;
			
			Попытка
				
				НаборЗаписей.Записать();
				
				Для Каждого Колонка ИЗ ТаблицаНабора.Колонки Цикл
					Если ТаблицаНабора[0][Колонка.Имя] = Ссылка Тогда
						ТаблицаНабора[0][Колонка.Имя] = ПравильныйЭлемент;
						Если СтруктураИзмерений.Свойство(Колонка.Имя) Тогда
							НаборЗаписей.Отбор[Колонка.Имя].Установить(ПравильныйЭлемент);
						КонецЕсли;
						
					КонецЕсли;
				КонецЦикла;
				
				НаборЗаписей.Загрузить(ТаблицаНабора);
				
				НаборЗаписей.Записать();
				
				Если Не ВыполнятьВТранзакции Тогда
					ЗафиксироватьТранзакцию();
				КонецЕсли; 
				
			Исключение
				
				Если ВыполнятьВТранзакции Тогда
					БылиИсключения = Истина;
					Перейти ~ОТКАТ;
				Иначе
					ОтменитьТранзакцию();
				КонецЕсли;
				
			КонецПопытки;
			
		Иначе
			Сообщить("Ссылки типа "+СтрокаТаблицы.Метаданные+" не заменяются!!");
		КонецЕсли;
		ОбработкаПрерыванияПользователя();
	КонецЦикла;
	
	Если Параметры.Объект <> Неопределено Тогда
		Если ОтключатьКонтрольЗаписи Тогда
			Параметры.Объект.ОбменДанными.Загрузка = Истина;
		КонецЕсли;
		Попытка
			Параметры.Объект.Записать();
		Исключение
			БылиИсключения = Истина;
			Если ВыполнятьВТранзакции Тогда
				Перейти ~ОТКАТ;
			КонецЕсли;
		КонецПопытки;
	КонецЕсли;
	
~ОТКАТ:
	Если ВыполнятьВТранзакции Тогда
		Если БылиИсключения Тогда
			ОтменитьТранзакцию();
		Иначе
			ЗафиксироватьТранзакцию();
		КонецЕсли;	
	КонецЕсли;
	
	Если мФормаПрогрессора.Открыта() Тогда
		мФормаПрогрессора.Закрыть();
	КонецЕсли;

	Возврат Не БылиИсключения;
	
КонецФункции

////////////////////////////////////////////////////////////­////////////////////
// ПРОЦЕДУРЫ - ДЕЙСТВИЯ КОМАНДНЫХ ПАНЕЛЕЙ ФОРМЫ



// Процедура вызывается при нажатии кнопки "ВыполнитьЗамену" командной панели
// табличного поля "НайденныеСсылки". 
// Выполняет замену ссылок в найденных объектах.
//
Процедура КнопкаВыполнитьНажатие(Элемент)
	
	Заменяемые = Новый Соответствие;
	Для каждого Стр Из ЗаменяемыеЗначения Цикл
		Если Стр.Пометка Тогда
			Заменяемые.Вставить(Стр.ЧтоЗаменять, Стр.НаЧтоЗаменять);
		КонецЕсли;
	КонецЦикла;
	
	вВыполнитьЗаменуЭлементов(Заменяемые, НайденныеСсылки);
	Сигнал();
	Сигнал();
	Сигнал();
	

	Предупреждение("Обработка завершена!");
КонецПроцедуры // КнопкаВыполнитьНажатие()

// Процедура вызывается при нажатии кнопки "НайтиСсылки" командной панели
// табличного поля "ЗаменяемыеЗначения". 
// Выполняет поиск объектов, содержащих указанные ссылки.
//
Процедура КоманднаяПанельЗаменяемыеЗначенияНайтиСсылки(Кнопка)

	МассивЗаменяемых = Новый Массив;
	Для каждого Стр Из ЗаменяемыеЗначения Цикл
		Если Стр.Пометка Тогда
			МассивЗаменяемых.Добавить(Стр.ЧтоЗаменять);
		КонецЕсли;
	КонецЦикла;

	Если МассивЗаменяемых.Количество() = 0 Тогда
		Предупреждение("Не выбрано ни одного значения для поиска!");
		Возврат;
	КонецЕсли;
	
	НайденныеСсылки = НайтиПоСсылкам(МассивЗаменяемых);
	
	НайденныеСсылки.Колонки[0].Имя = "Ссылка";
	НайденныеСсылки.Колонки[1].Имя = "Данные";
	НайденныеСсылки.Колонки[2].Имя = "Метаданные";
	
	НайденныеСсылки.Колонки.Добавить("Включено", вОписаниеТипа("Булево"));
	НайденныеСсылки.Колонки.Добавить("Доступно", вОписаниеТипа("Булево"));

	КоманднаяПанельНайденныеСсылкиВключитьВсе("");
    //Выключаем ссылки, которые не нужно заменять
	
	Для каждого стр из НайденныеСсылки цикл
		Отключено=ложь;
		МетаданныеТипа = Метаданные.НайтиПоТипу(ТипЗНЧ(Стр.Данные));
		Если Метаданные.РегистрыСведений.Содержит(МетаданныеТипа) Тогда
			Отключено=истина;
		конецесли;
		стр.Включено=не Отключено;
		Стр.Доступно=не Отключено;
	конеццикла;
	
	Сигнал();
	Сигнал();
	Сигнал();

КонецПроцедуры

// Процедура вызывается при нажатии кнопки "ВключитьВсе" командной панели
// табличного поля "НайденныеСсылки". 
// Включает пометки у всех строк.
//
Процедура КоманднаяПанельНайденныеСсылкиВключитьВсе(Кнопка)

    НайденныеСсылки.ЗаполнитьЗначения(Истина, "Включено");
	ЭтаФорма.Обновить();
	
КонецПроцедуры

// Процедура вызывается при нажатии кнопки "ВыключитьВсе" командной панели
// табличного поля "НайденныеСсылки". 
// Выключает пометки у всех строк.
//
Процедура КоманднаяПанельНайденныеСсылкиВыключитьВсе(Кнопка)

	НайденныеСсылки.ЗаполнитьЗначения(Ложь, "Включено");
	ЭтаФорма.Обновить();
	
КонецПроцедуры


////////////////////////////////////////////////////////////­////////////////////
// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ ТАБЛИЧНОГО ПОЛЯ ЗаменяемыеЗначения

// Процедура - обработчик события "ПриНачалеРедактирования"
//
Процедура ЗаменяемыеЗначенияПриНачалеРедактирования(Элемент, НоваяСтрока)

	Если НоваяСтрока Тогда
		Элемент.ТекущаяСтрока.Пометка = Истина;
		Элемент.ТекущаяСтрока.ЧтоЗаменять=Справочники.Номенклатура.ПустаяСсылка();
		Элемент.ТекущаяСтрока.НаЧтоЗаменять=Справочники.Номенклатура.ПустаяСсылка();
	КонецЕсли;
	
КонецПроцедуры

////////////////////////////////////////////////////////////­////////////////////
// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ ТАБЛИЧНОГО ПОЛЯ НайденныеСсылки

// Процедура - обработчик события "ПриВыводеСтроки"
//
Процедура НайденныеСсылкиПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)

	ОформлениеСтроки.Ячейки.Тип.УстановитьТекст(ТипЗнч(ДанныеСтроки.Данные));
	ОформлениеСтроки.Ячейки.Включено.ТолькоПросмотр=не ДанныеСтроки.Доступно;
	Если не ДанныеСтроки.Доступно тогда
		ОформлениеСтроки.ЦветТекста=WebЦвета.Серый;
	конецесли;
	
КонецПроцедуры

// Процедура - обработчик события "Выбор"
//
Процедура НайденныеСсылкиВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)
	ОткрытьЗначение(ВыбраннаяСтрока.Данные);
	СтандартнаяОбработка = Ложь;
КонецПроцедуры


Процедура КоманднаяПанельЗаменяемыеЗначенияРассчитать(Кнопка)
	сч=0;
	пока  сч<ЗаменяемыеЗначения.Количество() цикл
		стр=ЗаменяемыеЗначения[сч];
		Если ТипЗнч(стр.ЧтоЗаменять)<>Тип("СправочникСсылка.Номенклатура") или ТипЗнч(стр.НаЧтоЗаменять)<>тип("СправочникСсылка.Номенклатура") тогда 
	    	ЗаменяемыеЗначения.Удалить(стр);
		иначе
			сч=сч+1;
		конецесли;
	конеццикла;
	
	Для каждого Стр Из ЗаменяемыеЗначения Цикл
		Если не  ЗначениеЗаполнено(стр.ЧтоЗаменять) или не ЗначениеЗаполнено(стр.НаЧтоЗаменять) тогда
		конецесли;
		
		Если ТипЗнч(стр.ЧтоЗаменять)=Тип("СправочникСсылка.Номенклатура") и ТипЗнч(стр.НаЧтоЗаменять)=Тип("СправочникСсылка.Номенклатура") тогда 
			Если Стр.Пометка Тогда
				//Выборка=Справочники.УР_ДвижениеНоменклатуры.Выбрать(,Стр.ЧтоЗаменять);
				//пока выборка.Следующий() цикл
				//	Если ЗаменяемыеЗначения.Найти(Выборка.Ссылка,"ЧтоЗаменять")<>неопределено тогда
				//		продолжить;
				//	конецесли;
				//	
				//	
				//	Серия= Справочники.УР_ДвижениеНоменклатуры.НайтиПоНаименованию(Выборка.Наименование,ложь,,стр.НаЧтоЗаменять);	
				//	
				//	Если не ЗначениеЗаполнено(Серия) тогда
				//		нсерия=Справочники.УР_ДвижениеНоменклатуры.СоздатьЭлемент();
				//		нсерия.Наименование=Выборка.Наименование;
				//		нсерия.Владелец=Стр.НаЧтоЗаменять;
				//		нсерия.Комментарий=Выборка.Комментарий;
				//		нсерия.НомерГТД=Выборка.НомерГТД;
				//		нсерия.ОсновноеИзображение=Выборка.ОсновноеИзображение;
				//		нсерия.СерийныйНомер=Выборка.СерийныйНомер;
				//		нсерия.Сертификат=Выборка.Сертификат;
				//		нсерия.СрокГодности=Выборка.СрокГодности;
				//		нсерия.СтранаПроисхождения=Выборка.СтранаПроисхождения;
				//		нсерия.Записать();
				//		Сообщить("Для номенклатуры: "+Стр.НаЧтоЗаменять+ " была создана серия:"+нсерия);
				//		Серия=нсерия.Ссылка;
				//	конецесли;
				//	
				//	нстр=ЗаменяемыеЗначения.Добавить();
				//	нстр.ЧтоЗаменять=выборка.Ссылка;
				//	нстр.НаЧтоЗаменять=Серия;
				//	нстр.Пометка=Истина;
				//	Сообщить("В список замен добавлена серия: "+Выборка.Ссылка);
				//	
				//конеццикла;
				
				
				Выборка=Справочники.ЕдиницыИзмерения.Выбрать(,Стр.ЧтоЗаменять);
				пока выборка.Следующий() цикл
					Если ЗаменяемыеЗначения.Найти(Выборка.Ссылка,"ЧтоЗаменять")<>неопределено тогда
						продолжить;
					конецесли;
					
					Ед= Справочники.ЕдиницыИзмерения.НайтиПоНаименованию(Выборка.Наименование,ложь,,стр.НаЧтоЗаменять);	
					
					Если не ЗначениеЗаполнено(Ед) тогда
						Нед=Справочники.ЕдиницыИзмерения.СоздатьЭлемент();
						Нед.Наименование=Выборка.Наименование;
						Нед.Владелец=Стр.НаЧтоЗаменять;
						Нед.Вес=Выборка.Вес;
						нед.ЕдиницаПоКлассификатору=Выборка.ЕдиницаПоКлассификатору;
						нед.Коэффициент=выборка.Коэффициент;
						нед.Объем=выборка.Объем;
						Нед.Записать();
						Сообщить("Для номенклатуры: "+Стр.НаЧтоЗаменять+ " была создана единица измерения:"+Нед);
						ед=Нед.Ссылка;
					конецесли;
					
					нстр=ЗаменяемыеЗначения.Добавить();
					нстр.ЧтоЗаменять=выборка.Ссылка;
					нстр.НаЧтоЗаменять=Ед;
					нстр.Пометка=Истина;
					Сообщить("В список замен добавлена единица измерения: "+Выборка.Ссылка);
					
				конеццикла;
				
				
				//Выборка=Справочники.ОригинальныеНомераНоменклатуры.Выбрать(,Стр.ЧтоЗаменять);
				//пока выборка.Следующий() цикл
				//	Если ЗаменяемыеЗначения.Найти(Выборка.Ссылка,"ЧтоЗаменять")<>неопределено тогда
				//		продолжить;
				//	конецесли;
				//	
				//	ОН= Справочники.ОригинальныеНомераНоменклатуры.НайтиПоРеквизиту("ОригинальныйНомер",Выборка.ссылка,,стр.НаЧтоЗаменять);	
				//	
				//	Если не ЗначениеЗаполнено(ОН) тогда
				//		НОН=Справочники.ОригинальныеНомераНоменклатуры.СоздатьЭлемент();
				//		НОН.Владелец=Стр.НаЧтоЗаменять;
				//		НОН.ОригинальныйНомер=Выборка.ОригинальныйНомер;
				//		НОН.Записать();
				//		Сообщить("Для номенклатуры: "+Стр.НаЧтоЗаменять+ " был создан оригинальный номер:"+НОН.ОригинальныйНомер);
				//		ОН=НОН.Ссылка;
				//	конецесли;
				//	
				//	нстр=ЗаменяемыеЗначения.Добавить();
				//	нстр.ЧтоЗаменять=выборка.Ссылка;
				//	нстр.НаЧтоЗаменять=ОН;
				//	нстр.Пометка=Истина;
				//	Сообщить("В список замен добавлен оригинальный номер: "+Выборка.Ссылка);
				//	
				//конеццикла;



			КонецЕсли;
		конецесли;
	
	КонецЦикла;
 
КонецПроцедуры


Процедура ЗаменяемыеЗначенияНаЧтоЗаменятьНачалоВыбора(Элемент, СтандартнаяОбработка)
КонецПроцедуры
Показать



еще обнаружил баг далиона. он присваивает ЕИзмерения восьмизначный номер (00000001) и обработка отказывается менять пока не убираешь пару символов
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. SaschaL 09.05.19 13:57 Сейчас в теме
Обработку можно прицепить к посту, которую начали делать.
Просто недавно тут поднимал подобную тему, но в итоге под ЕРП написал сам обработку, по замене номенклатуры с характеристиками и номенклатуры на номенклатуру с характеристиками
3. SaschaL 09.05.19 13:58 Сейчас в теме
Может чем и смогу помочь. Диалона к сожалению нет у меня, а было бы не плохо проверить как работает, я писал обработку на Управляемом приложении. Судя по картинке обработка , которая у вас есть она на обычных формах
4. erus88 50 09.05.19 18:33 Сейчас в теме
(3)Было бы не плохо с вами списаться. да, далион на обычной Форме крутится, как с вами связаться, напишите в личку. могу поднять терменал с RDP что бы пощупали.
5. erus88 50 11.05.19 05:12 Сейчас в теме
Вопрос закрыт, коль ни кто не откликнулся.
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)