Имя: Пароль:
1C
1С v8
Помогите написать обработку которая изменит текст в строке справочника
Ø (Волшебник 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) Работайте сами.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан