|
Помогите написать обработку которая изменит текст в строке справочника Ø (Волшебник 09.08.2017 16:45) |
☑ |
0
040985
09.08.17
✎
16:14
|
Помогите написать обработку которая изменит текст в строке справочника.
Я не специалист по 1С! Написал вот такую обработку:
______________
Выборка = Справочники.ХранилищеДополнительнойИнформации.Выбрать();
Пока Выборка.Следующий() Цикл
Поле = Выборка.ИмяФайла;
Если
Найти(Поле,"D:\Admin\Base\YTMain\images") = Истина Тогда
Переменная = СтрЗаменить (Поле, "D:\Admin\Base\YTMain\images", "E:\backup\clouds\onlinemarket\images");
Переменная1 = Выборка.ПолучитьОбъект();
Переменная1.ИмяФайла = Переменная;
Переменная1.Записать();
КонецЕсли;
КонецЦикла;
______________
Она вроде работает нормально, но ооочень долго.
Как написать более правильный и быстрый код?
|
|
1
aleks_default
09.08.17
✎
16:17
|
Выучить запросы
|
|
2
СамыйУмный
09.08.17
✎
16:19
|
Если кратко:
Зачем ты выбираешь весь справочник и потом его обходишь и ищешь нужный элемент. Ты сразу сделай запрос где поле содержит нужную тебе строку.
|
|
3
Гаврилин Игор
09.08.17
✎
16:23
|
Долго, потому что вы получаете все объекты справочника. Выше правильно указали что надо делать через запрос, получать ссылку (одну), а из нее получать уже объект.
|
|
4
Rusland
09.08.17
✎
16:25
|
Как то так: :) :) :) :)
ИмяФайла="D:\Admin\Base\YTMain\images";
Переменная="E:\backup\clouds\onlinemarket\images";
Запрос=Новый Запрос;
Запрос.Текст=
"ВЫБРАТЬ
| Тестовый.Ссылка КАК Ссылка
|ИЗ
| Справочник.Тестовый КАК Тестовый
|ГДЕ
| Тестовый.ИмяФайла ПОДОБНО &ИмяФайла"
;
Запрос.УстановитьПараметр("ИмяФайла","%"+ИмяФайла+"%");
РезультатЗапроса=Запрос.Выполнить().Выбрать();
Пока РезультатЗапроса.Следующий() Цикл
Выборка=РезультатЗапроса.Ссылка.ПолучитьОбъект();
Выборка.ИмяФайла=Переменная;
Выборка.Записать();
КонецЦикла;
|
|
5
Rusland
09.08.17
✎
16:25
|
Под себя адаптируешь?
|
|
6
Волшебник
модератор
09.08.17
✎
16:26
|
(4) запрос будет долгий
надо так Запрос.УстановитьПараметр("ИмяФайла",ИмяФайла);
|
|
7
Rusland
09.08.17
✎
16:30
|
(6) Все равно быстрее будет чем в топике. А так, я ХЗ что у него в том поле хранится. Может еще чего, кроме пути. Учитывая, что ТС с запросами никак, сделал через Подобно, что бы пронебойно. Причем не по началу или концу строки, а вообще по вхождению. :)):):)::)
|
|
8
Rusland
09.08.17
✎
16:37
|
(0) И вот тут:
Найти(Поле,"D:\Admin\Base\YTMain\images") = Истина Тогда
Найти не возвращает булево, Найти возвращает Число, Позицию первого знака найденной подстроки. Нумерация символов в строке начинается с 1. Если строка не содержит указанной подстроки, то возвращается 0.
|
|
9
040985
09.08.17
✎
16:42
|
(4) Спасибо!
Но не совсем понимаю что в примере значит "тестовый"
"ВЫБРАТЬ
| Тестовый.Ссылка КАК Ссылка
|ИЗ
| Справочник.Тестовый КАК Тестовый
|ГДЕ
| Тестовый.ИмяФайла ПОДОБНО &ИмяФайла"
;
|
|
10
040985
09.08.17
✎
16:44
|
(4) Если не трудно сделайте пож-та вариант чтоб я тупо скопипастил и чтоб все сработало
|
|
11
Волшебник
модератор
09.08.17
✎
16:45
|
(10) Работайте сами.
|
|