Всем привет. Встала задача перейти на учет товара по характеристике. нашел обработку https://infostart.ru/public/58109/. но у меня Далион. в ней нету серийноменклатуры, по этому функцию с ней связана я закомментировал. добавил в форме колонку Характеристики. связал её с строкой НаЧтоЗаменять.
и все в тупике. как заставить обработку перенаправить учет по всем регистрам на номенклатуру с характеристикой. что бы потом старую можно было без жерт удалить. и остаток и все документы были на нужном товаре с характеристикой.
код обработки:
////////////////////////////////////////////////////////////////////////////////
// ПЕРЕМЕННЫЕ МОДУЛЯ
Перем мМенеджеры; // Соответствие типов объектов их свойствам
////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ И ФУНКЦИИ ОБЩЕГО НАЗНАЧЕНИЯ
// Возвращает объект ОписаниеТипов, содержащий указанный тип.
//
// Параметры:
// ЗначениеТипа - строка с именем типа или значение типа Тип.
//
// Возвращаемое значение:
// ОписаниеТипов
//
Функция вОписаниеТипа(ЗначениеТипа)
МассивТипов = Новый Массив;
Если ТипЗнч(ЗначениеТипа) = Тип("Строка") Тогда
МассивТипов.Добавить(Тип(ЗначениеТипа));
Иначе
МассивТипов.Добавить(ЗначениеТипа);
КонецЕсли;
ОписаниеТипов = Новый ОписаниеТипов(МассивТипов);
Возврат ОписаниеТипов;
КонецФункции // вОписаниеТипа()
// Инициализирует переменную мМенеджеры, содержащую соответствия типов объектов их свойствам
//
// Параметры:
// Нет.
//
Процедура вИнициализацияМенеджеров()
мМенеджеры = Новый Соответствие;
ИмяТипа = "Справочник";
Для каждого ОбъектМД Из Метаданные.Справочники Цикл
Имя = ОбъектМД.Имя;
Менеджер = Справочники[Имя];
ТипСсылкиСтрокой = "СправочникСсылка." + Имя;
ТипСсылки = Тип(ТипСсылкиСтрокой);
Структура = Новый Структура("Имя,ИмяТипа,ТипСсылкиСтрокой,Менеджер,ОбъектМД", Имя, ИмяТипа, ТипСсылкиСтрокой, Менеджер, ОбъектМД);
мМенеджеры.Вставить(ОбъектМД, Структура);
КонецЦикла;
ИмяТипа = "Документ";
Для каждого ОбъектМД Из Метаданные.Документы Цикл
Имя = ОбъектМД.Имя;
Менеджер = Документы[Имя];
ТипСсылкиСтрокой = "ДокументСсылка." + Имя;
ТипСсылки = Тип(ТипСсылкиСтрокой);
Структура = Новый Структура("Имя,ИмяТипа,ТипСсылкиСтрокой,Менеджер,ОбъектМД", Имя, ИмяТипа, ТипСсылкиСтрокой, Менеджер, ОбъектМД);
мМенеджеры.Вставить(ОбъектМД, Структура);
КонецЦикла;
ИмяТипа = "Перечисление";
Для каждого ОбъектМД Из Метаданные.Перечисления Цикл
Имя = ОбъектМД.Имя;
Менеджер = Перечисления[Имя];
ТипСсылкиСтрокой = "ПеречислениеСсылка." + Имя;
ТипСсылки = Тип(ТипСсылкиСтрокой);
Структура = Новый Структура("Имя,ИмяТипа,ТипСсылкиСтрокой,Менеджер,ОбъектМД", Имя, ИмяТипа, ТипСсылкиСтрокой, Менеджер, ОбъектМД);
мМенеджеры.Вставить(ОбъектМД, Структура);
КонецЦикла;
ИмяТипа = "ПланВидовХарактеристик";
Для каждого ОбъектМД Из Метаданные.ПланыВидовХарактеристик Цикл
Имя = ОбъектМД.Имя;
Менеджер = ПланыВидовХарактеристик[Имя];
ТипСсылкиСтрокой = "ПланВидовХарактеристикСсылка." + Имя;
ТипСсылки = Тип(ТипСсылкиСтрокой);
Структура = Новый Структура("Имя,ИмяТипа,ТипСсылкиСтрокой,Менеджер,ОбъектМД", Имя, ИмяТипа, ТипСсылкиСтрокой, Менеджер, ОбъектМД);
мМенеджеры.Вставить(ОбъектМД, Структура);
КонецЦикла;
ИмяТипа = "ПланСчетов";
Для каждого ОбъектМД Из Метаданные.ПланыСчетов Цикл
Имя = ОбъектМД.Имя;
Менеджер = ПланыСчетов[Имя];
ТипСсылкиСтрокой = "ПланСчетовСсылка." + Имя;
ТипСсылки = Тип(ТипСсылкиСтрокой);
Структура = Новый Структура("Имя,ИмяТипа,ТипСсылкиСтрокой,Менеджер,ОбъектМД", Имя, ИмяТипа, ТипСсылкиСтрокой, Менеджер, ОбъектМД);
мМенеджеры.Вставить(ОбъектМД, Структура);
КонецЦикла;
ИмяТипа = "ПланВидовРасчета";
Для каждого ОбъектМД Из Метаданные.ПланыВидовРасчета Цикл
Имя = ОбъектМД.Имя;
Менеджер = ПланыВидовРасчета[Имя];
ТипСсылкиСтрокой = "ПланВидовРасчетаСсылка." + Имя;
ТипСсылки = Тип(ТипСсылкиСтрокой);
Структура = Новый Структура("Имя,ИмяТипа,ТипСсылкиСтрокой,Менеджер,ОбъектМД", Имя, ИмяТипа, ТипСсылкиСтрокой, Менеджер, ОбъектМД);
мМенеджеры.Вставить(ОбъектМД, Структура);
КонецЦикла;
ИмяТипа = "РегистрСведений";
Для каждого ОбъектМД Из Метаданные.РегистрыСведений Цикл
Имя = ОбъектМД.Имя;
Менеджер = РегистрыСведений[Имя];
ТипСсылкиСтрокой = "РегистрСведенийКлючЗаписи." + Имя;
ТипСсылки = Тип(ТипСсылкиСтрокой);
Структура = Новый Структура("Имя,ИмяТипа,ТипСсылкиСтрокой,Менеджер,ОбъектМД", Имя, ИмяТипа, ТипСсылкиСтрокой, Менеджер, ОбъектМД);
мМенеджеры.Вставить(ОбъектМД, Структура);
КонецЦикла;
ИмяТипа = "Константа";
Для каждого ОбъектМД Из Метаданные.Константы Цикл
Имя = ОбъектМД.Имя;
Менеджер = Константы[Имя];
ТипСсылкиСтрокой = "Константа." + Имя;
Структура = Новый Структура("Имя,ИмяТипа,ТипСсылкиСтрокой,Менеджер,ОбъектМД", Имя, ИмяТипа, ТипСсылкиСтрокой, Менеджер, ОбъектМД);
мМенеджеры.Вставить(ОбъектМД, Структура);
КонецЦикла;
КонецПроцедуры // вИнициализацияМенеджеров()
Функция вВыполнитьЗаменуЭлементов(Заменяемые, ТаблицаСсылок, ВыполнятьВТранзакции = Истина, ОтключатьКонтрольЗаписи = Ложь)
БылиИсключения = Ложь;
Если ВыполнятьВТранзакции Тогда
НачатьТранзакцию();
КонецЕсли;
ОбрабатываемаяСсылка = Неопределено;
Параметры = Новый Структура;
Для Каждого РегистрБухгалтерии ИЗ Метаданные.РегистрыБухгалтерии Цикл
Параметры.Вставить(РегистрБухгалтерии.Имя+"Субконто", РегистрБухгалтерии.ПланСчетов.МаксКоличествоСубконто);
Параметры.Вставить(РегистрБухгалтерии.Имя+"Корреспонденция", РегистрБухгалтерии.Корреспонденция);
КонецЦикла;
Параметры.Вставить("Объект", Неопределено);
мФормаПрогрессора = ПолучитьФорму("ФормаПрогрессора");
мФормаПрогрессора.СтрокаПрогрессора = "Выполняется обработка выбранных объектов...";
мФормаПрогрессора.ЭлементыФормы.ЗначениеИндикатора.МинимальноеЗначение = 0;
мФормаПрогрессора.ЭлементыФормы.ЗначениеИндикатора.МаксимальноеЗначение = НайденныеСсылки.Количество();
мФормаПрогрессора.ЗначениеИндикатора = 0;
мФормаПрогрессора.Открыть();
Для Каждого СтрокаТаблицы Из ТаблицаСсылок Цикл
Если Не СтрокаТаблицы.Включено Тогда
Продолжить;
КонецЕсли;
ПравильныйЭлемент = Заменяемые[СтрокаТаблицы.Ссылка];
мФормаПрогрессора.ЗначениеИндикатора = мФормаПрогрессора.ЗначениеИндикатора + 1;
Ссылка = СтрокаТаблицы.Ссылка;
Если ОбрабатываемаяСсылка <> СтрокаТаблицы.Данные Тогда
Если ОбрабатываемаяСсылка <> Неопределено и Параметры.Объект <> Неопределено Тогда
Если ОтключатьКонтрольЗаписи Тогда
Параметры.Объект.ОбменДанными.Загрузка = Истина;
КонецЕсли;
Попытка
Параметры.Объект.Записать();
Исключение
БылиИсключения = Истина;
Если ВыполнятьВТранзакции Тогда
Перейти ~ОТКАТ;
КонецЕсли;
КонецПопытки;
Параметры.Объект = Неопределено;
КонецЕсли;
ОбрабатываемаяСсылка = СтрокаТаблицы.Данные;
КонецЕсли;
Если Метаданные.Документы.Содержит(СтрокаТаблицы.Метаданные) Тогда
Если Параметры.Объект = Неопределено Тогда
Параметры.Объект = СтрокаТаблицы.Данные.ПолучитьОбъект();
КонецЕсли;
Для Каждого Реквизит Из СтрокаТаблицы.Метаданные.Реквизиты Цикл
Если Реквизит.Тип.СодержитТип(ТипЗнч(Ссылка)) И Параметры.Объект[Реквизит.Имя] = Ссылка Тогда
Параметры.Объект[Реквизит.Имя] = ПравильныйЭлемент;
КонецЕсли;
КонецЦикла;
Для Каждого ТЧ ИЗ СтрокаТаблицы.Метаданные.ТабличныеЧасти Цикл
Для Каждого Реквизит Из ТЧ.Реквизиты Цикл
Если Реквизит.Тип.СодержитТип(ТипЗнч(Ссылка)) Тогда
СтрокаТабЧасти = Параметры.Объект[ТЧ.Имя].Найти(Ссылка, Реквизит.Имя);
Пока СтрокаТабЧасти <> Неопределено Цикл
СтрокаТабЧасти[Реквизит.Имя] = ПравильныйЭлемент;
СтрокаТабЧасти = Параметры.Объект[ТЧ.Имя].Найти(Ссылка, Реквизит.Имя);
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Для Каждого Движение ИЗ СтрокаТаблицы.Метаданные.Движения Цикл
ЭтоДвижениеРегистраБухгалтерии = Метаданные.РегистрыБухгалтерии.Содержит(Движение);
ЕстьКорреспонденция = ЭтоДвижениеРегистраБухгалтерии и Параметры[Движение.Имя + "Корреспонденция"];
НаборЗаписей = Параметры.Объект.Движения[Движение.Имя];
НаборЗаписей.Прочитать();
НадоЗаписывать = Ложь;
ТаблицаНабора = НаборЗаписей.Выгрузить();
Для Каждого Измерение ИЗ Движение.Измерения Цикл
Если Измерение.Тип.СодержитТип(ТипЗнч(Ссылка)) Тогда
СтрокаТабЧасти = ТаблицаНабора.Найти(Ссылка, Измерение.Имя);
Пока СтрокаТабЧасти <> Неопределено Цикл
СтрокаТабЧасти[Измерение.Имя] = ПравильныйЭлемент;
НадоЗаписывать = Истина;
СтрокаТабЧасти = ТаблицаНабора.Найти(Ссылка, Измерение.Имя);
КонецЦикла;
КонецЕсли;
КонецЦикла;
ЕСли Метаданные.РегистрыСведений.Содержит(Движение) Тогда
Для Каждого Ресурс ИЗ Движение.Ресурсы Цикл
Если Ресурс.Тип.СодержитТип(ТипЗнч(Ссылка)) Тогда
СтрокаТабЧасти = ТаблицаНабора.Найти(Ссылка, Ресурс.Имя);
Пока СтрокаТабЧасти <> Неопределено Цикл
СтрокаТабЧасти[Ресурс.Имя] = ПравильныйЭлемент;
НадоЗаписывать = Истина;
СтрокаТабЧасти = ТаблицаНабора.Найти(Ссылка, Ресурс.Имя);
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Для Каждого Реквизит ИЗ Движение.Реквизиты Цикл
Если Реквизит.Тип.СодержитТип(ТипЗнч(Ссылка)) Тогда
СтрокаТабЧасти = ТаблицаНабора.Найти(Ссылка, Реквизит.Имя);
Пока СтрокаТабЧасти <> Неопределено Цикл
СтрокаТабЧасти[Реквизит.Имя] = ПравильныйЭлемент;
НадоЗаписывать = Истина;
СтрокаТабЧасти = ТаблицаНабора.Найти(Ссылка, Реквизит.Имя);
КонецЦикла;
КонецЕсли;
КонецЦикла;
Если Метаданные.РегистрыБухгалтерии.Содержит(Движение) Тогда
Для ИндексСубконто = 1 по Параметры[Движение.Имя + "Субконто"] Цикл
Если ЕстьКорреспонденция Тогда
СтрокаТабЧасти = ТаблицаНабора.Найти(Ссылка, "СубконтоДт"+ИндексСубконто);
Пока СтрокаТабЧасти <> Неопределено Цикл
СтрокаТабЧасти["СубконтоДт"+ИндексСубконто] = ПравильныйЭлемент;
НадоЗаписывать = Истина;
СтрокаТабЧасти = ТаблицаНабора.Найти(Ссылка, "СубконтоДт"+ИндексСубконто);
КонецЦикла;
СтрокаТабЧасти = ТаблицаНабора.Найти(Ссылка, "СубконтоКт"+ИндексСубконто);
Пока СтрокаТабЧасти <> Неопределено Цикл
СтрокаТабЧасти["СубконтоКт"+ИндексСубконто] = ПравильныйЭлемент;
НадоЗаписывать = Истина;
СтрокаТабЧасти = ТаблицаНабора.Найти(Ссылка, "СубконтоКт"+ИндексСубконто);
КонецЦикла;
Иначе
СтрокаТабЧасти = ТаблицаНабора.Найти(Ссылка, "Субконто"+ИндексСубконто);
Пока СтрокаТабЧасти <> Неопределено Цикл
СтрокаТабЧасти["Субконто"+ИндексСубконто] = ПравильныйЭлемент;
НадоЗаписывать = Истина;
СтрокаТабЧасти = ТаблицаНабора.Найти(Ссылка, "Субконто"+ИндексСубконто);
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если НадоЗаписывать Тогда
НаборЗаписей.Загрузить(ТаблицаНабора);
Если ОтключатьКонтрольЗаписи Тогда
НаборЗаписей.ОбменДанными.Загрузка = Истина;
КонецЕсли;
Попытка
НаборЗаписей.Записать();
Исключение
БылиИсключения = Истина;
Если ВыполнятьВТранзакции Тогда
Перейти ~ОТКАТ;
КонецЕсли;
КонецПопытки;
КонецЕсли;
КонецЦикла;
Для Каждого Последовательность ИЗ Метаданные.Последовательности Цикл
Если Последовательность.Документы.Содержит(СтрокаТаблицы.Метаданные) Тогда
НадоЗаписывать = Ложь;
НаборЗаписи = Последовательности[Последовательность.Имя].СоздатьНаборЗаписей();
НаборЗаписи.Отбор.Регистратор.Установить(СтрокаТаблицы.Данные);
НаборЗаписи.Прочитать();
Для Каждого Измерение ИЗ Последовательность.Измерения Цикл
Если Измерение.Тип.СодержитТип(ТипЗнч(Ссылка)) И НаборЗаписи[0][Измерение.Имя]=Ссылка Тогда
НаборЗаписи[0][Измерение.Имя] = ПравильныйЭлемент;
НадоЗаписывать = Истина;
КонецЕсли;
КонецЦикла;
Если НадоЗаписывать Тогда
Если ОтключатьКонтрольЗаписи Тогда
НаборЗаписи.ОбменДанными.Загрузка = Истина;
КонецЕсли;
Попытка
НаборЗаписи.Записать();
Исключение
БылиИсключения = Истина;
Если ВыполнятьВТранзакции Тогда
Перейти ~ОТКАТ;
КонецЕсли;
КонецПопытки;
КонецЕсли;
КонецЕсли;
КонецЦикла;
ИначеЕсли Метаданные.Справочники.Содержит(СтрокаТаблицы.Метаданные) Тогда
Если Параметры.Объект = Неопределено Тогда
Параметры.Объект = СтрокаТаблицы.Данные.ПолучитьОбъект();
КонецЕсли;
Если СтрокаТаблицы.Метаданные.Владельцы.Содержит(Ссылка.Метаданные()) И Параметры.Объект.Владелец = Ссылка Тогда
Параметры.Объект.Владелец = ПравильныйЭлемент;
КонецЕсли;
Если СтрокаТаблицы.Метаданные.Иерархический И Параметры.Объект.Родитель = Ссылка Тогда
Параметры.Объект.Родитель = ПравильныйЭлемент;
КонецЕсли;
Для Каждого Реквизит Из СтрокаТаблицы.Метаданные.Реквизиты Цикл
Если Реквизит.Тип.СодержитТип(ТипЗнч(Ссылка)) И Параметры.Объект[Реквизит.Имя] = Ссылка Тогда
Параметры.Объект[Реквизит.Имя] = ПравильныйЭлемент;
КонецЕсли;
КонецЦикла;
Для Каждого ТЧ ИЗ СтрокаТаблицы.Метаданные.ТабличныеЧасти Цикл
Для Каждого Реквизит Из ТЧ.Реквизиты Цикл
Если Реквизит.Тип.СодержитТип(ТипЗнч(Ссылка)) Тогда
СтрокаТабЧасти = Параметры.Объект[ТЧ.Имя].Найти(Ссылка, Реквизит.Имя);
Пока СтрокаТабЧасти <> Неопределено Цикл
СтрокаТабЧасти[Реквизит.Имя] = ПравильныйЭлемент;
СтрокаТабЧасти = Параметры.Объект[ТЧ.Имя].Найти(Ссылка, Реквизит.Имя);
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЦикла;
ИначеЕсли Метаданные.ПланыВидовХарактеристик.Содержит(СтрокаТаблицы.Метаданные)
ИЛИ Метаданные.ПланыСчетов.Содержит(СтрокаТаблицы.Метаданные)
ИЛИ Метаданные.ПланыВидовРасчета.Содержит(СтрокаТаблицы.Метаданные)
ИЛИ Метаданные.Задачи.Содержит(СтрокаТаблицы.Метаданные)
ИЛИ Метаданные.БизнесПроцессы.Содержит(СтрокаТаблицы.Метаданные) Тогда
Если Параметры.Объект = Неопределено Тогда
Параметры.Объект = СтрокаТаблицы.Данные.ПолучитьОбъект();
КонецЕсли;
Для Каждого Реквизит Из СтрокаТаблицы.Метаданные.Реквизиты Цикл
Если Реквизит.Тип.СодержитТип(ТипЗнч(Ссылка)) И Параметры.Объект[Реквизит.Имя] = Ссылка Тогда
Параметры.Объект[Реквизит.Имя] = ПравильныйЭлемент;
КонецЕсли;
КонецЦикла;
Для Каждого ТЧ ИЗ СтрокаТаблицы.Метаданные.ТабличныеЧасти Цикл
Для Каждого Реквизит Из ТЧ.Реквизиты Цикл
Если Реквизит.Тип.СодержитТип(ТипЗнч(Ссылка)) Тогда
СтрокаТабЧасти = Параметры.Объект[ТЧ.Имя].Найти(Ссылка, Реквизит.Имя);
Пока СтрокаТабЧасти <> Неопределено Цикл
СтрокаТабЧасти[Реквизит.Имя] = ПравильныйЭлемент;
СтрокаТабЧасти = Параметры.Объект[ТЧ.Имя].Найти(Ссылка, Реквизит.Имя);
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЦикла;
ИначеЕсли Метаданные.Константы.Содержит(СтрокаТаблицы.Метаданные) Тогда
Константы[СтрокаТаблицы.Метаданные.Имя].Установить(ПравильныйЭлемент);
ИначеЕсли Метаданные.РегистрыСведений.Содержит(СтрокаТаблицы.Метаданные) Тогда
СтруктураИзмерений = Новый Структура;
НаборЗаписей = РегистрыСведений[СтрокаТаблицы.Метаданные.Имя].СоздатьНаборЗаписей();
Для Каждого Измерение ИЗ СтрокаТаблицы.Метаданные.Измерения Цикл
НаборЗаписей.Отбор[Измерение.Имя].Установить(СтрокаТаблицы.Данные[Измерение.Имя]);
СтруктураИзмерений.Вставить(Измерение.Имя);
КонецЦикла;
Если СтрокаТаблицы.Метаданные.ПериодичностьРегистраСведений <> Метаданные.СвойстваОбъектов.ПериодичностьРегистраСведений.Непериодический Тогда
НаборЗаписей.Отбор["Период"].Установить(СтрокаТаблицы.Данные.Период);
КонецЕсли;
НаборЗаписей.Прочитать();
ТаблицаНабора = НаборЗаписей.Выгрузить();
НаборЗаписей.Очистить();
Если ОтключатьКонтрольЗаписи Тогда
НаборЗаписей.ОбменДанными.Загрузка = Истина;
КонецЕсли;
Если Не ВыполнятьВТранзакции Тогда
НачатьТранзакцию();
КонецЕсли;
Попытка
НаборЗаписей.Записать();
Для Каждого Колонка ИЗ ТаблицаНабора.Колонки Цикл
Если ТаблицаНабора[0][Колонка.Имя] = Ссылка Тогда
ТаблицаНабора[0][Колонка.Имя] = ПравильныйЭлемент;
Если СтруктураИзмерений.Свойство(Колонка.Имя) Тогда
НаборЗаписей.Отбор[Колонка.Имя].Установить(ПравильныйЭлемент);
КонецЕсли;
КонецЕсли;
КонецЦикла;
НаборЗаписей.Загрузить(ТаблицаНабора);
НаборЗаписей.Записать();
Если Не ВыполнятьВТранзакции Тогда
ЗафиксироватьТранзакцию();
КонецЕсли;
Исключение
Если ВыполнятьВТранзакции Тогда
БылиИсключения = Истина;
Перейти ~ОТКАТ;
Иначе
ОтменитьТранзакцию();
КонецЕсли;
КонецПопытки;
Иначе
Сообщить("Ссылки типа "+СтрокаТаблицы.Метаданные+" не заменяются!!");
КонецЕсли;
ОбработкаПрерыванияПользователя();
КонецЦикла;
Если Параметры.Объект <> Неопределено Тогда
Если ОтключатьКонтрольЗаписи Тогда
Параметры.Объект.ОбменДанными.Загрузка = Истина;
КонецЕсли;
Попытка
Параметры.Объект.Записать();
Исключение
БылиИсключения = Истина;
Если ВыполнятьВТранзакции Тогда
Перейти ~ОТКАТ;
КонецЕсли;
КонецПопытки;
КонецЕсли;
~ОТКАТ:
Если ВыполнятьВТранзакции Тогда
Если БылиИсключения Тогда
ОтменитьТранзакцию();
Иначе
ЗафиксироватьТранзакцию();
КонецЕсли;
КонецЕсли;
Если мФормаПрогрессора.Открыта() Тогда
мФормаПрогрессора.Закрыть();
КонецЕсли;
Возврат Не БылиИсключения;
КонецФункции
////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ - ДЕЙСТВИЯ КОМАНДНЫХ ПАНЕЛЕЙ ФОРМЫ
// Процедура вызывается при нажатии кнопки "ВыполнитьЗамену" командной панели
// табличного поля "НайденныеСсылки".
// Выполняет замену ссылок в найденных объектах.
//
Процедура КнопкаВыполнитьНажатие(Элемент)
Заменяемые = Новый Соответствие;
Для каждого Стр Из ЗаменяемыеЗначения Цикл
Если Стр.Пометка Тогда
Заменяемые.Вставить(Стр.ЧтоЗаменять, Стр.НаЧтоЗаменять);
КонецЕсли;
КонецЦикла;
вВыполнитьЗаменуЭлементов(Заменяемые, НайденныеСсылки);
Сигнал();
Сигнал();
Сигнал();
Предупреждение("Обработка завершена!");
КонецПроцедуры // КнопкаВыполнитьНажатие()
// Процедура вызывается при нажатии кнопки "НайтиСсылки" командной панели
// табличного поля "ЗаменяемыеЗначения".
// Выполняет поиск объектов, содержащих указанные ссылки.
//
Процедура КоманднаяПанельЗаменяемыеЗначенияНайтиСсылки(Кнопка)
МассивЗаменяемых = Новый Массив;
Для каждого Стр Из ЗаменяемыеЗначения Цикл
Если Стр.Пометка Тогда
МассивЗаменяемых.Добавить(Стр.ЧтоЗаменять);
КонецЕсли;
КонецЦикла;
Если МассивЗаменяемых.Количество() = 0 Тогда
Предупреждение("Не выбрано ни одного значения для поиска!");
Возврат;
КонецЕсли;
НайденныеСсылки = НайтиПоСсылкам(МассивЗаменяемых);
НайденныеСсылки.Колонки[0].Имя = "Ссылка";
НайденныеСсылки.Колонки[1].Имя = "Данные";
НайденныеСсылки.Колонки[2].Имя = "Метаданные";
НайденныеСсылки.Колонки.Добавить("Включено", вОписаниеТипа("Булево"));
НайденныеСсылки.Колонки.Добавить("Доступно", вОписаниеТипа("Булево"));
КоманднаяПанельНайденныеСсылкиВключитьВсе("");
//Выключаем ссылки, которые не нужно заменять
Для каждого стр из НайденныеСсылки цикл
Отключено=ложь;
МетаданныеТипа = Метаданные.НайтиПоТипу(ТипЗНЧ(Стр.Данные));
Если Метаданные.РегистрыСведений.Содержит(МетаданныеТипа) Тогда
Отключено=истина;
конецесли;
стр.Включено=не Отключено;
Стр.Доступно=не Отключено;
конеццикла;
Сигнал();
Сигнал();
Сигнал();
КонецПроцедуры
// Процедура вызывается при нажатии кнопки "ВключитьВсе" командной панели
// табличного поля "НайденныеСсылки".
// Включает пометки у всех строк.
//
Процедура КоманднаяПанельНайденныеСсылкиВключитьВсе(Кнопка)
НайденныеСсылки.ЗаполнитьЗначения(Истина, "Включено");
ЭтаФорма.Обновить();
КонецПроцедуры
// Процедура вызывается при нажатии кнопки "ВыключитьВсе" командной панели
// табличного поля "НайденныеСсылки".
// Выключает пометки у всех строк.
//
Процедура КоманднаяПанельНайденныеСсылкиВыключитьВсе(Кнопка)
НайденныеСсылки.ЗаполнитьЗначения(Ложь, "Включено");
ЭтаФорма.Обновить();
КонецПроцедуры
////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ ТАБЛИЧНОГО ПОЛЯ ЗаменяемыеЗначения
// Процедура - обработчик события "ПриНачалеРедактирования"
//
Процедура ЗаменяемыеЗначенияПриНачалеРедактирования(Элемент, НоваяСтрока)
Если НоваяСтрока Тогда
Элемент.ТекущаяСтрока.Пометка = Истина;
Элемент.ТекущаяСтрока.ЧтоЗаменять=Справочники.Номенклатура.ПустаяСсылка();
Элемент.ТекущаяСтрока.НаЧтоЗаменять=Справочники.Номенклатура.ПустаяСсылка();
КонецЕсли;
КонецПроцедуры
////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ ТАБЛИЧНОГО ПОЛЯ НайденныеСсылки
// Процедура - обработчик события "ПриВыводеСтроки"
//
Процедура НайденныеСсылкиПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
ОформлениеСтроки.Ячейки.Тип.УстановитьТекст(ТипЗнч(ДанныеСтроки.Данные));
ОформлениеСтроки.Ячейки.Включено.ТолькоПросмотр=не ДанныеСтроки.Доступно;
Если не ДанныеСтроки.Доступно тогда
ОформлениеСтроки.ЦветТекста=WebЦвета.Серый;
конецесли;
КонецПроцедуры
// Процедура - обработчик события "Выбор"
//
Процедура НайденныеСсылкиВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)
ОткрытьЗначение(ВыбраннаяСтрока.Данные);
СтандартнаяОбработка = Ложь;
КонецПроцедуры
Процедура КоманднаяПанельЗаменяемыеЗначенияРассчитать(Кнопка)
сч=0;
пока сч<ЗаменяемыеЗначения.Количество() цикл
стр=ЗаменяемыеЗначения[сч];
Если ТипЗнч(стр.ЧтоЗаменять)<>Тип("СправочникСсылка.Номенклатура") или ТипЗнч(стр.НаЧтоЗаменять)<>тип("СправочникСсылка.Номенклатура") тогда
ЗаменяемыеЗначения.Удалить(стр);
иначе
сч=сч+1;
конецесли;
конеццикла;
Для каждого Стр Из ЗаменяемыеЗначения Цикл
Если не ЗначениеЗаполнено(стр.ЧтоЗаменять) или не ЗначениеЗаполнено(стр.НаЧтоЗаменять) тогда
конецесли;
Если ТипЗнч(стр.ЧтоЗаменять)=Тип("СправочникСсылка.Номенклатура") и ТипЗнч(стр.НаЧтоЗаменять)=Тип("СправочникСсылка.Номенклатура") тогда
Если Стр.Пометка Тогда
//Выборка=Справочники.УР_ДвижениеНоменклатуры.Выбрать(,Стр.ЧтоЗаменять);
//пока выборка.Следующий() цикл
// Если ЗаменяемыеЗначения.Найти(Выборка.Ссылка,"ЧтоЗаменять")<>неопределено тогда
// продолжить;
// конецесли;
//
//
// Серия= Справочники.УР_ДвижениеНоменклатуры.НайтиПоНаименованию(Выборка.Наименование,ложь,,стр.НаЧтоЗаменять);
//
// Если не ЗначениеЗаполнено(Серия) тогда
// нсерия=Справочники.УР_ДвижениеНоменклатуры.СоздатьЭлемент();
// нсерия.Наименование=Выборка.Наименование;
// нсерия.Владелец=Стр.НаЧтоЗаменять;
// нсерия.Комментарий=Выборка.Комментарий;
// нсерия.НомерГТД=Выборка.НомерГТД;
// нсерия.ОсновноеИзображение=Выборка.ОсновноеИзображение;
// нсерия.СерийныйНомер=Выборка.СерийныйНомер;
// нсерия.Сертификат=Выборка.Сертификат;
// нсерия.СрокГодности=Выборка.СрокГодности;
// нсерия.СтранаПроисхождения=Выборка.СтранаПроисхождения;
// нсерия.Записать();
// Сообщить("Для номенклатуры: "+Стр.НаЧтоЗаменять+ " была создана серия:"+нсерия);
// Серия=нсерия.Ссылка;
// конецесли;
//
// нстр=ЗаменяемыеЗначения.Добавить();
// нстр.ЧтоЗаменять=выборка.Ссылка;
// нстр.НаЧтоЗаменять=Серия;
// нстр.Пометка=Истина;
// Сообщить("В список замен добавлена серия: "+Выборка.Ссылка);
//
//конеццикла;
Выборка=Справочники.ЕдиницыИзмерения.Выбрать(,Стр.ЧтоЗаменять);
пока выборка.Следующий() цикл
Если ЗаменяемыеЗначения.Найти(Выборка.Ссылка,"ЧтоЗаменять")<>неопределено тогда
продолжить;
конецесли;
Ед= Справочники.ЕдиницыИзмерения.НайтиПоНаименованию(Выборка.Наименование,ложь,,стр.НаЧтоЗаменять);
Если не ЗначениеЗаполнено(Ед) тогда
Нед=Справочники.ЕдиницыИзмерения.СоздатьЭлемент();
Нед.Наименование=Выборка.Наименование;
Нед.Владелец=Стр.НаЧтоЗаменять;
Нед.Вес=Выборка.Вес;
нед.ЕдиницаПоКлассификатору=Выборка.ЕдиницаПоКлассификатору;
нед.Коэффициент=выборка.Коэффициент;
нед.Объем=выборка.Объем;
Нед.Записать();
Сообщить("Для номенклатуры: "+Стр.НаЧтоЗаменять+ " была создана единица измерения:"+Нед);
ед=Нед.Ссылка;
конецесли;
нстр=ЗаменяемыеЗначения.Добавить();
нстр.ЧтоЗаменять=выборка.Ссылка;
нстр.НаЧтоЗаменять=Ед;
нстр.Пометка=Истина;
Сообщить("В список замен добавлена единица измерения: "+Выборка.Ссылка);
конеццикла;
//Выборка=Справочники.ОригинальныеНомераНоменклатуры.Выбрать(,Стр.ЧтоЗаменять);
//пока выборка.Следующий() цикл
// Если ЗаменяемыеЗначения.Найти(Выборка.Ссылка,"ЧтоЗаменять")<>неопределено тогда
// продолжить;
// конецесли;
//
// ОН= Справочники.ОригинальныеНомераНоменклатуры.НайтиПоРеквизиту("ОригинальныйНомер",Выборка.ссылка,,стр.НаЧтоЗаменять);
//
// Если не ЗначениеЗаполнено(ОН) тогда
// НОН=Справочники.ОригинальныеНомераНоменклатуры.СоздатьЭлемент();
// НОН.Владелец=Стр.НаЧтоЗаменять;
// НОН.ОригинальныйНомер=Выборка.ОригинальныйНомер;
// НОН.Записать();
// Сообщить("Для номенклатуры: "+Стр.НаЧтоЗаменять+ " был создан оригинальный номер:"+НОН.ОригинальныйНомер);
// ОН=НОН.Ссылка;
// конецесли;
//
// нстр=ЗаменяемыеЗначения.Добавить();
// нстр.ЧтоЗаменять=выборка.Ссылка;
// нстр.НаЧтоЗаменять=ОН;
// нстр.Пометка=Истина;
// Сообщить("В список замен добавлен оригинальный номер: "+Выборка.Ссылка);
//
//конеццикла;
КонецЕсли;
конецесли;
КонецЦикла;
КонецПроцедуры
Процедура ЗаменяемыеЗначенияНаЧтоЗаменятьНачалоВыбора(Элемент, СтандартнаяОбработка)
КонецПроцедуры
Показать
еще обнаружил баг далиона. он присваивает ЕИзмерения восьмизначный номер (00000001) и обработка отказывается менять пока не убираешь пару символов
Обработку можно прицепить к посту, которую начали делать.
Просто недавно тут поднимал подобную тему, но в итоге под ЕРП написал сам обработку, по замене номенклатуры с характеристиками и номенклатуры на номенклатуру с характеристиками
Может чем и смогу помочь. Диалона к сожалению нет у меня, а было бы не плохо проверить как работает, я писал обработку на Управляемом приложении. Судя по картинке обработка , которая у вас есть она на обычных формах
(3)Было бы не плохо с вами списаться. да, далион на обычной Форме крутится, как с вами связаться, напишите в личку. могу поднять терменал с RDP что бы пощупали.