Групповая поиск и замена строковых значений регистра сведений из табличного документа

1. gesin 25.04.24 14:25 Сейчас в теме
Здравствуйте.
Есть готовый csv файл 500 строк "Старое значение" - "Новое значение"
Есть регистр сведений. В нём нужно заменить 500 строковых значений на новые.
Нужно пройтись по строкам файла и по каждой строке выполнить поиск по "Старое значение" в регистре сведений с последующей заменой на "Новое значение".

Хочу написать обработку. Но не знаю каким образом лучше. Есть более оптимальные способы чем код ниже?
НаборЗаписей = РегистрыСведений.ЦеныНоменклатуры.СоздатьНаборЗаписей(); 
НаборЗаписей.Отбор.Значение.Установить(СтароеЗначение); 
НаборЗаписей.Прочитать(); 

Для Каждого Запись Из НаборЗаписей Цикл 
    Запись.Значение = НовоеЗначение; 
КонецЦикла; 

НаборЗаписей.Записать(); 
Показать
По теме из базы знаний
Найденные решения
3. soft_wind 25.04.24 14:59 Сейчас в теме
лучше всего это в консоли запросов сделать
загружаете туда вашу таблицу из СSV к ней запросом цепляете ваш регистр по Подобно
в итоге получаете результат
СтрокаРегистра.ВсеПоля, НеправильнаяСтрока, ПравильнаяСтрока

а дальше в каждой консоли есть режим обработки произвольного кода над результатом запроса.
в нем в цикле пробегаетесь по результату, получаете строку регистра с неправильной строкой
используете менеджер записи (или набора) меняете значение и записываете.
6. gesin 26.04.24 11:19 Сейчас в теме
(3) спасибо огромное за наводку. Очень быстро получилось с помощью консоли запросов из инструментов разработчика.
ВЫБРАТЬ
	ТабЭксель.Новое,
	ТабЭксель.Старое
ПОМЕСТИТЬ ВТТаб
ИЗ
	&ТЗ КАК ТабЭксель
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ЗначенияСвойствОбъектов.Объект,
	ЗначенияСвойствОбъектов.Свойство,
	ЗначенияСвойствОбъектов.Значение,
	ВТТаб.Новое
ИЗ
	ВТТаб КАК ВТТаб
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
		ПО ВТТаб.Старое = ЗначенияСвойствОбъектов.Значение
Показать


// В результате запроса должны присутствовать все измерения регистра
МенеджерЗаписи = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьМенеджерЗаписи();
ЗаполнитьЗначенияСвойств(МенеджерЗаписи, СтрокаРезультата);
МенеджерЗаписи.Прочитать();

// Обработка менеджера записи
МенеджерЗаписи.Значение = СтрокаРезультата.Новое;

МенеджерЗаписи.Записать();
Показать


Там есть замечательная кнопка для параметра типа таблица значений "Получить -> из табличного документа".
Потом вкладка "Обработка строки результата" - установить текст - чтение и запись менеджера записи. Вставляется код из шаблона. Добавил только "СтрокаРезультата.Новое" и запустил. 5 сек и готово.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. nomad_irk 76 25.04.24 14:39 Сейчас в теме
(1)Значение - Измерение?

Придется еще и удалить "старые" значения, т.е. нужен НЗ по новому значению и по старому значению. По старому необходимо записать пустой НЗ.
4. gesin 25.04.24 15:23 Сейчас в теме
(2) Ресурс. ЗначенияСвойствОбъектов
5. nomad_irk 76 25.04.24 15:26 Сейчас в теме
(4)в таком случае вам необходимо запросом получить все измерения и все ресурсы "старых" записей и просто присвоить новое значение в нужный ресурс, воспользовшись МенеджерЗаписи вместо НаборЗаписей.
3. soft_wind 25.04.24 14:59 Сейчас в теме
лучше всего это в консоли запросов сделать
загружаете туда вашу таблицу из СSV к ней запросом цепляете ваш регистр по Подобно
в итоге получаете результат
СтрокаРегистра.ВсеПоля, НеправильнаяСтрока, ПравильнаяСтрока

а дальше в каждой консоли есть режим обработки произвольного кода над результатом запроса.
в нем в цикле пробегаетесь по результату, получаете строку регистра с неправильной строкой
используете менеджер записи (или набора) меняете значение и записываете.
6. gesin 26.04.24 11:19 Сейчас в теме
(3) спасибо огромное за наводку. Очень быстро получилось с помощью консоли запросов из инструментов разработчика.
ВЫБРАТЬ
	ТабЭксель.Новое,
	ТабЭксель.Старое
ПОМЕСТИТЬ ВТТаб
ИЗ
	&ТЗ КАК ТабЭксель
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ЗначенияСвойствОбъектов.Объект,
	ЗначенияСвойствОбъектов.Свойство,
	ЗначенияСвойствОбъектов.Значение,
	ВТТаб.Новое
ИЗ
	ВТТаб КАК ВТТаб
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
		ПО ВТТаб.Старое = ЗначенияСвойствОбъектов.Значение
Показать


// В результате запроса должны присутствовать все измерения регистра
МенеджерЗаписи = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьМенеджерЗаписи();
ЗаполнитьЗначенияСвойств(МенеджерЗаписи, СтрокаРезультата);
МенеджерЗаписи.Прочитать();

// Обработка менеджера записи
МенеджерЗаписи.Значение = СтрокаРезультата.Новое;

МенеджерЗаписи.Записать();
Показать


Там есть замечательная кнопка для параметра типа таблица значений "Получить -> из табличного документа".
Потом вкладка "Обработка строки результата" - установить текст - чтение и запись менеджера записи. Вставляется код из шаблона. Добавил только "СтрокаРезультата.Новое" и запустил. 5 сек и готово.
Оставьте свое сообщение

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