Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 16:20

Перебрать все значения в справочнике

Автор malvina_l, 12 мар 2014, 06:54

0 Пользователей и 1 гость просматривают эту тему.

malvina_l

Цитата: LordWizard от 12 мар 2014, 10:44
Не понимаю реально задачи.Если просто перебрать все наименования справочника, то ГДЕ не нужно, а нужен просто опрос справочника:

Запрос = Новый Запрос;
Запрос.Текст ="
|1.ссылка,
|1.Наименование КАК Наименование
|ИЗ
|Справочник.1 КАК 1
|";
Результат = Запрос.Выполнить().Выбрать();
Пока Результат.Следующий() Цикл
    Сообщить("Наименование:" + Результат.Наименование);
КонецЦикла;




Если нужно найти в справочнике с поиском по конкретному значению Наименования, то добавляем секцию


|Где
|   1.Наименование = &ПоискНаименования

Перед получением запроса передаем параметр


Запрос.УстановитьПараметр("ПоискНаименования",ПараметрПоиска);

"ПараметрПоиска" - можем задавать по своему усмотрению или получать ранее по алгоритмам (пустым быть не должно - выдаст ошибку).
Задача такая: в справочнике нужно в наименовании удалить пробелы вот я написала:
   
     Наименование=справочники.1.НайтиПоНаименованию(Наименование);

      
   Запрос= новый Запрос;
   ТекстЗапроса="ВЫБРАТЬ
   | 1.Наименование КАК Наименование
   |ИЗ
   |Справочник.1 КАК 1   
         |ГДЕ
   |1.Наименование=&Наименование";
      Запрос.Текст=ТекстЗапроса;
     запрос.УстановитьПараметр("Наименование",Наименование);
     РезультатЗапроса = Запрос.Выполнить();
     Выборка =результатзапроса.Выбрать();
     Пока Выборка.Следующий() Цикл
        Сообщить("Наименование:" + выборка.Наименование);    
                    вр=Сред(Наименование,6);
             Если  Лев(вр,1) = " " тогда
                 вр=СокрЛП(вр);
                Наименование=Лев(Наименование,5)+" "+вр;
            КонецЕсли;
            
                           конецЦикла;
Вот это работает:              вр=Сред(Наименование,6);
             Если  Лев(вр,1) = " " тогда
                 вр=СокрЛП(вр);
                Наименование=Лев(Наименование,5)+" "+вр;
            КонецЕсли;
а вот с запросом думаю проблемы, потому что запускаю обработку она не крутится(

LordWizard

Думаю, что можно следующее, цикл делает выборку по всему справочнику на простом доступном уровне, а вот внутри цикла


Пока Результат.Следующий() Цикл //есть хоть один элемент
    Если Найти(Резултат.Наименование,"  ") Тогда
        ЭлементСправочника = Результат.Ссылка;
        ЭлементСправочника.Наименование = СокрЛП(ЭлементСправочника.Наименование); //обрежем пустышки слева и справа
        ЭлементСправочника.Наименование = СтрЗаменить(ЭлементСправочника.Наименование,"  "," "); //заменим два пробела на один - вдруг составное имя типа "Болт железный" содержит два пробела вместо одного
        ЭлементСправочника.Записать();
    Иначе
        Продолжить;
    КонецЕсли;

КонецЦикла;

Правильно ведите учет или пишите программы и вам воздастся!...

(Кстати - кнопочку Сказать Спасибо - никто не отменял)

malvina_l

Цитата: LordWizard от 12 мар 2014, 11:07
Думаю, что можно следующее, цикл делает выборку по всему справочнику на простом доступном уровне, а вот внутри цикла


Пока Результат.Следующий() Цикл //есть хоть один элемент
    Если Найти(Резултат.Наименование,"  ") Тогда
        ЭлементСправочника = Результат.Ссылка;
        ЭлементСправочника.Наименование = СокрЛП(ЭлементСправочника.Наименование); //обрежем пустышки слева и справа
        ЭлементСправочника.Наименование = СтрЗаменить(ЭлементСправочника.Наименование,"  "," "); //заменим два пробела на один - вдруг составное имя типа "Болт железный" содержит два пробела вместо одного
        ЭлементСправочника.Записать();
    Иначе
        Продолжить;
    КонецЕсли;

КонецЦикла;

делаю во внешней обработке, результат.ссылка не работает

KrivosheevEV

Добавить в запрос получение ссылки на элемент справочника:
//...
| 1.Наименование КАК Наименование,
| 1.Ссылка КАК Ссылка
//...



Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск